From 2973911b3d0d935283231eaa266cd9a7bdd656c0 Mon Sep 17 00:00:00 2001 From: Quentin Groulard Date: Tue, 27 Oct 2020 14:59:11 +0100 Subject: [PATCH 1/3] [13.0][ADD] sale_stock_picking_validation_blocking --- .../README.rst | 92 ++++ .../__init__.py | 1 + .../__manifest__.py | 15 + ...sale_stock_picking_validation_blocking.pot | 55 +++ .../models/__init__.py | 2 + .../models/sale_order.py | 19 + .../models/stock_picking.py | 32 ++ .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 2 + .../readme/USAGE.rst | 11 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 438 ++++++++++++++++++ .../tests/__init__.py | 1 + .../tests/test_sale_stock.py | 41 ++ .../views/sale_order.xml | 33 ++ .../views/stock_picking.xml | 27 ++ 16 files changed, 770 insertions(+) create mode 100644 sale_stock_picking_validation_blocking/README.rst create mode 100644 sale_stock_picking_validation_blocking/__init__.py create mode 100644 sale_stock_picking_validation_blocking/__manifest__.py create mode 100644 sale_stock_picking_validation_blocking/i18n/sale_stock_picking_validation_blocking.pot create mode 100644 sale_stock_picking_validation_blocking/models/__init__.py create mode 100644 sale_stock_picking_validation_blocking/models/sale_order.py create mode 100644 sale_stock_picking_validation_blocking/models/stock_picking.py create mode 100644 sale_stock_picking_validation_blocking/readme/CONTRIBUTORS.rst create mode 100644 sale_stock_picking_validation_blocking/readme/DESCRIPTION.rst create mode 100644 sale_stock_picking_validation_blocking/readme/USAGE.rst create mode 100644 sale_stock_picking_validation_blocking/static/description/icon.png create mode 100644 sale_stock_picking_validation_blocking/static/description/index.html create mode 100644 sale_stock_picking_validation_blocking/tests/__init__.py create mode 100644 sale_stock_picking_validation_blocking/tests/test_sale_stock.py create mode 100644 sale_stock_picking_validation_blocking/views/sale_order.xml create mode 100644 sale_stock_picking_validation_blocking/views/stock_picking.xml diff --git a/sale_stock_picking_validation_blocking/README.rst b/sale_stock_picking_validation_blocking/README.rst new file mode 100644 index 00000000000..c5e1fa7e9b1 --- /dev/null +++ b/sale_stock_picking_validation_blocking/README.rst @@ -0,0 +1,92 @@ +====================================== +Sale Stock Picking Validation Blocking +====================================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:343c9cd796a930fc9ea44912fb913d685021f39974f0cb15f02bf6634edd9dff + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsale--workflow-lightgray.png?logo=github + :target: https://github.com/OCA/sale-workflow/tree/13.0/sale_stock_picking_validation_blocking + :alt: OCA/sale-workflow +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/sale-workflow-13-0/sale-workflow-13-0-sale_stock_picking_validation_blocking + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/sale-workflow&target_branch=13.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds the opportunity to prevent the validation of linked delivery orders from a sale order. +The delivery order is still created when the sale order is confirmed, therefore the stock is reserved but can not be send until approval. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To block validation of stock picking from sale orders, you need to: + +#. Open the form view of a sale order (in status Sale Order or Locked). +#. Click on the button Block Delivery Validation. +#. The delivery validation is now blocked, the Validate button will not appear on the related pickings. + +To unblock validation of stock picking from sale orders, you need to: + +#. Open the form view of a "delivery validation blocked" sale order (in status Sale Order or Locked). +#. Click on the button Unblock Delivery Validation. +#. The delivery validation is not blocked anymore, the Validate button will appear on the related pickings. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* ACSONE SA/NV + +Contributors +~~~~~~~~~~~~ + +* Quentin Groulard + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/sale-workflow `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_stock_picking_validation_blocking/__init__.py b/sale_stock_picking_validation_blocking/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/sale_stock_picking_validation_blocking/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/sale_stock_picking_validation_blocking/__manifest__.py b/sale_stock_picking_validation_blocking/__manifest__.py new file mode 100644 index 00000000000..54529b40060 --- /dev/null +++ b/sale_stock_picking_validation_blocking/__manifest__.py @@ -0,0 +1,15 @@ +# Copyright 2020 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Sale Stock Picking Validation Blocking", + "summary": """ + This module adds the opportunity to prevent + the validation of delivery order from the SO.""", + "version": "13.0.1.0.1", + "license": "AGPL-3", + "author": "ACSONE SA/NV,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/sale-workflow", + "depends": ["sale_stock"], + "data": ["views/sale_order.xml", "views/stock_picking.xml"], +} diff --git a/sale_stock_picking_validation_blocking/i18n/sale_stock_picking_validation_blocking.pot b/sale_stock_picking_validation_blocking/i18n/sale_stock_picking_validation_blocking.pot new file mode 100644 index 00000000000..472c97cd839 --- /dev/null +++ b/sale_stock_picking_validation_blocking/i18n/sale_stock_picking_validation_blocking.pot @@ -0,0 +1,55 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_stock_picking_validation_blocking +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: sale_stock_picking_validation_blocking +#: model_terms:ir.ui.view,arch_db:sale_stock_picking_validation_blocking.sale_order_form_view +msgid "Block Delivery Validation" +msgstr "" + +#. module: sale_stock_picking_validation_blocking +#: model:ir.model.fields,field_description:sale_stock_picking_validation_blocking.field_sale_order__picking_validation_blocked +msgid "Delivery Validation Blocked" +msgstr "" + +#. module: sale_stock_picking_validation_blocking +#: model:ir.model,name:sale_stock_picking_validation_blocking.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: sale_stock_picking_validation_blocking +#: model:ir.model,name:sale_stock_picking_validation_blocking.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: sale_stock_picking_validation_blocking +#: model_terms:ir.ui.view,arch_db:sale_stock_picking_validation_blocking.sale_order_form_view +msgid "Unblock Delivery Validation" +msgstr "" + +#. module: sale_stock_picking_validation_blocking +#: model:ir.model.fields,field_description:sale_stock_picking_validation_blocking.field_stock_picking__validation_blocked_by_so +msgid "Validation Blocked by SO" +msgstr "" + +#. module: sale_stock_picking_validation_blocking +#: code:addons/sale_stock_picking_validation_blocking/models/stock_picking.py:0 +#, python-format +msgid "Validation is blocked by SO for picking %s" +msgstr "" + +#. module: sale_stock_picking_validation_blocking +#: model_terms:ir.ui.view,arch_db:sale_stock_picking_validation_blocking.stock_picking_form_view +msgid "Warning: The validation of this picking is prevented by sale order" +msgstr "" diff --git a/sale_stock_picking_validation_blocking/models/__init__.py b/sale_stock_picking_validation_blocking/models/__init__.py new file mode 100644 index 00000000000..c0b4257cf63 --- /dev/null +++ b/sale_stock_picking_validation_blocking/models/__init__.py @@ -0,0 +1,2 @@ +from . import sale_order +from . import stock_picking diff --git a/sale_stock_picking_validation_blocking/models/sale_order.py b/sale_stock_picking_validation_blocking/models/sale_order.py new file mode 100644 index 00000000000..7f57e94b139 --- /dev/null +++ b/sale_stock_picking_validation_blocking/models/sale_order.py @@ -0,0 +1,19 @@ +# Copyright 2020 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class SaleOrder(models.Model): + + _inherit = "sale.order" + + picking_validation_blocked = fields.Boolean( + readonly=True, track_visibility="onchange", string="Delivery Validation Blocked" + ) + + def action_block_picking_validation(self): + self.write({"picking_validation_blocked": True}) + + def action_unblock_picking_validation(self): + self.write({"picking_validation_blocked": False}) diff --git a/sale_stock_picking_validation_blocking/models/stock_picking.py b/sale_stock_picking_validation_blocking/models/stock_picking.py new file mode 100644 index 00000000000..cb8ac8413dd --- /dev/null +++ b/sale_stock_picking_validation_blocking/models/stock_picking.py @@ -0,0 +1,32 @@ +# Copyright 2020 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class StockPicking(models.Model): + + _inherit = "stock.picking" + + validation_blocked_by_so = fields.Boolean( + related="sale_id.picking_validation_blocked", + store=True, + string="Validation Blocked by SO", + ) + + @api.depends("state", "is_locked", "validation_blocked_by_so") + def _compute_show_validate(self): + for picking in self: + if picking.validation_blocked_by_so: + picking.show_validate = False + else: + super(StockPicking, picking)._compute_show_validate() + + def button_validate(self): + for picking in self: + if picking.validation_blocked_by_so: + raise ValidationError( + _("Validation is blocked by SO for picking %s" % picking.name) + ) + return super(StockPicking, self).button_validate() diff --git a/sale_stock_picking_validation_blocking/readme/CONTRIBUTORS.rst b/sale_stock_picking_validation_blocking/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..5914f5529ef --- /dev/null +++ b/sale_stock_picking_validation_blocking/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Quentin Groulard diff --git a/sale_stock_picking_validation_blocking/readme/DESCRIPTION.rst b/sale_stock_picking_validation_blocking/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..06db660d52d --- /dev/null +++ b/sale_stock_picking_validation_blocking/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module adds the opportunity to prevent the validation of linked delivery orders from a sale order. +The delivery order is still created when the sale order is confirmed, therefore the stock is reserved but can not be send until approval. diff --git a/sale_stock_picking_validation_blocking/readme/USAGE.rst b/sale_stock_picking_validation_blocking/readme/USAGE.rst new file mode 100644 index 00000000000..926ce0d1c3b --- /dev/null +++ b/sale_stock_picking_validation_blocking/readme/USAGE.rst @@ -0,0 +1,11 @@ +To block validation of stock picking from sale orders, you need to: + +#. Open the form view of a sale order (in status Sale Order or Locked). +#. Click on the button Block Delivery Validation. +#. The delivery validation is now blocked, the Validate button will not appear on the related pickings. + +To unblock validation of stock picking from sale orders, you need to: + +#. Open the form view of a "delivery validation blocked" sale order (in status Sale Order or Locked). +#. Click on the button Unblock Delivery Validation. +#. The delivery validation is not blocked anymore, the Validate button will appear on the related pickings. diff --git a/sale_stock_picking_validation_blocking/static/description/icon.png b/sale_stock_picking_validation_blocking/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/sale_stock_picking_validation_blocking/static/description/index.html b/sale_stock_picking_validation_blocking/static/description/index.html new file mode 100644 index 00000000000..f4606776111 --- /dev/null +++ b/sale_stock_picking_validation_blocking/static/description/index.html @@ -0,0 +1,438 @@ + + + + + + +Sale Stock Picking Validation Blocking + + + +
+

Sale Stock Picking Validation Blocking

+ + +

Beta License: AGPL-3 OCA/sale-workflow Translate me on Weblate Try me on Runboat

+

This module adds the opportunity to prevent the validation of linked delivery orders from a sale order. +The delivery order is still created when the sale order is confirmed, therefore the stock is reserved but can not be send until approval.

+

Table of contents

+ +
+

Usage

+

To block validation of stock picking from sale orders, you need to:

+
    +
  1. Open the form view of a sale order (in status Sale Order or Locked).
  2. +
  3. Click on the button Block Delivery Validation.
  4. +
  5. The delivery validation is now blocked, the Validate button will not appear on the related pickings.
  6. +
+

To unblock validation of stock picking from sale orders, you need to:

+
    +
  1. Open the form view of a “delivery validation blocked” sale order (in status Sale Order or Locked).
  2. +
  3. Click on the button Unblock Delivery Validation.
  4. +
  5. The delivery validation is not blocked anymore, the Validate button will appear on the related pickings.
  6. +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • ACSONE SA/NV
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/sale-workflow project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/sale_stock_picking_validation_blocking/tests/__init__.py b/sale_stock_picking_validation_blocking/tests/__init__.py new file mode 100644 index 00000000000..a64b0d449d2 --- /dev/null +++ b/sale_stock_picking_validation_blocking/tests/__init__.py @@ -0,0 +1 @@ +from . import test_sale_stock diff --git a/sale_stock_picking_validation_blocking/tests/test_sale_stock.py b/sale_stock_picking_validation_blocking/tests/test_sale_stock.py new file mode 100644 index 00000000000..ec4bbfe108c --- /dev/null +++ b/sale_stock_picking_validation_blocking/tests/test_sale_stock.py @@ -0,0 +1,41 @@ +# Copyright 2020 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.exceptions import ValidationError +from odoo.tests.common import TransactionCase + + +class TestSaleStock(TransactionCase): + def setUp(self): + super(TestSaleStock, self).setUp() + partner = self.env.ref("base.res_partner_1") + product = self.env.ref("product.product_delivery_01") + self.sale_order = self.env["sale.order"].create( + { + "partner_id": partner.id, + "order_line": [ + ( + 0, + 0, + { + "name": product.name, + "product_id": product.id, + "product_uom_qty": 10.0, + "product_uom": product.uom_id.id, + }, + ) + ], + } + ) + + def test_sale_stock_picking_validation_blocked(self): + self.sale_order.action_confirm() + picking = self.sale_order.picking_ids + picking.move_lines.write({"quantity_done": 1}) + self.sale_order.action_block_picking_validation() + self.assertFalse(picking.show_validate) + with self.assertRaises(ValidationError): + picking.button_validate() + self.sale_order.action_unblock_picking_validation() + self.assertTrue(picking.show_validate) + picking.button_validate() diff --git a/sale_stock_picking_validation_blocking/views/sale_order.xml b/sale_stock_picking_validation_blocking/views/sale_order.xml new file mode 100644 index 00000000000..3beb89a75ba --- /dev/null +++ b/sale_stock_picking_validation_blocking/views/sale_order.xml @@ -0,0 +1,33 @@ + + + + + sale.order.form (in sale_stock_picking_validation_blocking) + sale.order + + + + + + + + + diff --git a/sale_stock_picking_validation_blocking/views/stock_picking.xml b/sale_stock_picking_validation_blocking/views/stock_picking.xml new file mode 100644 index 00000000000..a8312e7280b --- /dev/null +++ b/sale_stock_picking_validation_blocking/views/stock_picking.xml @@ -0,0 +1,27 @@ + + + + + stock.picking.form (in sale_stock_picking_validation_blocking) + stock.picking + + + + + + + + + From c005ba79c43d5de615ecdbf43dd45c46bf34e4e0 Mon Sep 17 00:00:00 2001 From: Kevin Khao Date: Mon, 21 Oct 2024 13:00:48 +0300 Subject: [PATCH 2/3] [IMP] sale_stock_picking_validation_blocking: pre-commit auto fixes --- sale_order_general_discount/README.rst | 40 ++++++++++--------- .../readme/CONTRIBUTORS.md | 5 +++ .../readme/CONTRIBUTORS.rst | 7 ---- .../readme/DESCRIPTION.md | 7 ++++ .../readme/DESCRIPTION.rst | 6 --- .../readme/{INSTALL.rst => INSTALL.md} | 3 +- sale_order_general_discount/readme/USAGE.md | 7 ++++ sale_order_general_discount/readme/USAGE.rst | 8 ---- .../static/description/index.html | 24 +++++------ .../README.rst | 39 ++++++++++-------- .../models/sale_order.py | 1 - .../models/stock_picking.py | 1 - .../pyproject.toml | 3 ++ .../readme/CONTRIBUTORS.md | 1 + .../readme/CONTRIBUTORS.rst | 1 - .../readme/DESCRIPTION.md | 4 ++ .../readme/DESCRIPTION.rst | 2 - .../readme/USAGE.md | 14 +++++++ .../readme/USAGE.rst | 11 ----- .../static/description/index.html | 33 +++++++++------ 20 files changed, 117 insertions(+), 100 deletions(-) create mode 100644 sale_order_general_discount/readme/CONTRIBUTORS.md delete mode 100644 sale_order_general_discount/readme/CONTRIBUTORS.rst create mode 100644 sale_order_general_discount/readme/DESCRIPTION.md delete mode 100644 sale_order_general_discount/readme/DESCRIPTION.rst rename sale_order_general_discount/readme/{INSTALL.rst => INSTALL.md} (85%) create mode 100644 sale_order_general_discount/readme/USAGE.md delete mode 100644 sale_order_general_discount/readme/USAGE.rst create mode 100644 sale_stock_picking_validation_blocking/pyproject.toml create mode 100644 sale_stock_picking_validation_blocking/readme/CONTRIBUTORS.md delete mode 100644 sale_stock_picking_validation_blocking/readme/CONTRIBUTORS.rst create mode 100644 sale_stock_picking_validation_blocking/readme/DESCRIPTION.md delete mode 100644 sale_stock_picking_validation_blocking/readme/DESCRIPTION.rst create mode 100644 sale_stock_picking_validation_blocking/readme/USAGE.md delete mode 100644 sale_stock_picking_validation_blocking/readme/USAGE.rst diff --git a/sale_order_general_discount/README.rst b/sale_order_general_discount/README.rst index 2456cf24345..d631786161e 100644 --- a/sale_order_general_discount/README.rst +++ b/sale_order_general_discount/README.rst @@ -28,12 +28,14 @@ Sale Order General Discount |badge1| |badge2| |badge3| |badge4| |badge5| -This module allows to set a general discount in a sales order. This general -discount is set to each line order in the standard `discount` field. +This module allows to set a general discount in a sales order. This +general discount is set to each line order in the standard discount +field. You can configure: - * a default general discount on customers - * On each product define if general discount is applied + +- a default general discount on customers +- On each product define if general discount is applied **Table of contents** @@ -43,19 +45,19 @@ You can configure: Installation ============ -You need to install sale_management module for accessing the needed menus. +You need to install sale_management module for accessing the needed +menus. Usage ===== To use this module, you need to: -#. Create a sale order and set a discount, - this discount will be set in all lines. -#. You can set a discount in a partner. -#. On product you can define if you - apply general discount on sale order line - linked to that product +1. Create a sale order and set a discount, this discount will be set in + all lines. +2. You can set a discount in a partner. +3. On product you can define if you apply general discount on sale order + line linked to that product Bug Tracker =========== @@ -71,23 +73,23 @@ Credits ======= Authors -~~~~~~~ +------- * Tecnativa Contributors -~~~~~~~~~~~~ +------------ -* `Tecnativa `_: +- `Tecnativa `__: - * Sergio Teruel - * Stefan Ungureanu + - Sergio Teruel + - Stefan Ungureanu -* Raf Ven -* Sudhir Arya +- Raf Ven +- Sudhir Arya Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. diff --git a/sale_order_general_discount/readme/CONTRIBUTORS.md b/sale_order_general_discount/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..88f7cbcfcb5 --- /dev/null +++ b/sale_order_general_discount/readme/CONTRIBUTORS.md @@ -0,0 +1,5 @@ +- [Tecnativa](https://www.tecnativa.com): + - Sergio Teruel \<\> + - Stefan Ungureanu \<\> +- Raf Ven \<\> +- Sudhir Arya \<\> diff --git a/sale_order_general_discount/readme/CONTRIBUTORS.rst b/sale_order_general_discount/readme/CONTRIBUTORS.rst deleted file mode 100644 index ef09abf24b9..00000000000 --- a/sale_order_general_discount/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,7 +0,0 @@ -* `Tecnativa `_: - - * Sergio Teruel - * Stefan Ungureanu - -* Raf Ven -* Sudhir Arya diff --git a/sale_order_general_discount/readme/DESCRIPTION.md b/sale_order_general_discount/readme/DESCRIPTION.md new file mode 100644 index 00000000000..f9539cbb76b --- /dev/null +++ b/sale_order_general_discount/readme/DESCRIPTION.md @@ -0,0 +1,7 @@ +This module allows to set a general discount in a sales order. This +general discount is set to each line order in the standard discount +field. + +You can configure: +- a default general discount on customers +- On each product define if general discount is applied diff --git a/sale_order_general_discount/readme/DESCRIPTION.rst b/sale_order_general_discount/readme/DESCRIPTION.rst deleted file mode 100644 index 88bd66fae3e..00000000000 --- a/sale_order_general_discount/readme/DESCRIPTION.rst +++ /dev/null @@ -1,6 +0,0 @@ -This module allows to set a general discount in a sales order. This general -discount is set to each line order in the standard `discount` field. - -You can configure: - * a default general discount on customers - * On each product define if general discount is applied diff --git a/sale_order_general_discount/readme/INSTALL.rst b/sale_order_general_discount/readme/INSTALL.md similarity index 85% rename from sale_order_general_discount/readme/INSTALL.rst rename to sale_order_general_discount/readme/INSTALL.md index 4da360f7c83..5e1d649b89c 100644 --- a/sale_order_general_discount/readme/INSTALL.rst +++ b/sale_order_general_discount/readme/INSTALL.md @@ -1 +1,2 @@ -You need to install sale_management module for accessing the needed menus. +You need to install sale_management module for accessing the needed +menus. diff --git a/sale_order_general_discount/readme/USAGE.md b/sale_order_general_discount/readme/USAGE.md new file mode 100644 index 00000000000..db909f04a1d --- /dev/null +++ b/sale_order_general_discount/readme/USAGE.md @@ -0,0 +1,7 @@ +To use this module, you need to: + +1. Create a sale order and set a discount, this discount will be set in + all lines. +2. You can set a discount in a partner. +3. On product you can define if you apply general discount on sale + order line linked to that product diff --git a/sale_order_general_discount/readme/USAGE.rst b/sale_order_general_discount/readme/USAGE.rst deleted file mode 100644 index 2c58d327897..00000000000 --- a/sale_order_general_discount/readme/USAGE.rst +++ /dev/null @@ -1,8 +0,0 @@ -To use this module, you need to: - -#. Create a sale order and set a discount, - this discount will be set in all lines. -#. You can set a discount in a partner. -#. On product you can define if you - apply general discount on sale order line - linked to that product diff --git a/sale_order_general_discount/static/description/index.html b/sale_order_general_discount/static/description/index.html index baa03fd4432..735a4787302 100644 --- a/sale_order_general_discount/static/description/index.html +++ b/sale_order_general_discount/static/description/index.html @@ -370,16 +370,14 @@

Sale Order General Discount

!! source digest: sha256:a4eeadfa3e2fc4ad9f54244dc002a32d12938c91207c4f729001730ca727a156 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Production/Stable License: AGPL-3 OCA/sale-workflow Translate me on Weblate Try me on Runboat

-

This module allows to set a general discount in a sales order. This general -discount is set to each line order in the standard discount field.

-
-
You can configure:
-
    +

    This module allows to set a general discount in a sales order. This +general discount is set to each line order in the standard discount +field.

    +

    You can configure:

    +
    • a default general discount on customers
    • On each product define if general discount is applied
    -
-

Table of contents

    @@ -396,18 +394,18 @@

    Sale Order General Discount

Installation

-

You need to install sale_management module for accessing the needed menus.

+

You need to install sale_management module for accessing the needed +menus.

Usage

To use this module, you need to:

    -
  1. Create a sale order and set a discount, -this discount will be set in all lines.
  2. +
  3. Create a sale order and set a discount, this discount will be set in +all lines.
  4. You can set a discount in a partner.
  5. -
  6. On product you can define if you -apply general discount on sale order line -linked to that product
  7. +
  8. On product you can define if you apply general discount on sale order +line linked to that product
diff --git a/sale_stock_picking_validation_blocking/README.rst b/sale_stock_picking_validation_blocking/README.rst index c5e1fa7e9b1..7ee0535e4d5 100644 --- a/sale_stock_picking_validation_blocking/README.rst +++ b/sale_stock_picking_validation_blocking/README.rst @@ -17,19 +17,21 @@ Sale Stock Picking Validation Blocking :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsale--workflow-lightgray.png?logo=github - :target: https://github.com/OCA/sale-workflow/tree/13.0/sale_stock_picking_validation_blocking + :target: https://github.com/OCA/sale-workflow/tree/17.0/sale_stock_picking_validation_blocking :alt: OCA/sale-workflow .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/sale-workflow-13-0/sale-workflow-13-0-sale_stock_picking_validation_blocking + :target: https://translation.odoo-community.org/projects/sale-workflow-17-0/sale-workflow-17-0-sale_stock_picking_validation_blocking :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/sale-workflow&target_branch=13.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/sale-workflow&target_branch=17.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| -This module adds the opportunity to prevent the validation of linked delivery orders from a sale order. -The delivery order is still created when the sale order is confirmed, therefore the stock is reserved but can not be send until approval. +This module adds the opportunity to prevent the validation of linked +delivery orders from a sale order. The delivery order is still created +when the sale order is confirmed, therefore the stock is reserved but +can not be send until approval. **Table of contents** @@ -41,15 +43,18 @@ Usage To block validation of stock picking from sale orders, you need to: -#. Open the form view of a sale order (in status Sale Order or Locked). -#. Click on the button Block Delivery Validation. -#. The delivery validation is now blocked, the Validate button will not appear on the related pickings. +1. Open the form view of a sale order (in status Sale Order or Locked). +2. Click on the button Block Delivery Validation. +3. The delivery validation is now blocked, the Validate button will not + appear on the related pickings. To unblock validation of stock picking from sale orders, you need to: -#. Open the form view of a "delivery validation blocked" sale order (in status Sale Order or Locked). -#. Click on the button Unblock Delivery Validation. -#. The delivery validation is not blocked anymore, the Validate button will appear on the related pickings. +1. Open the form view of a "delivery validation blocked" sale order (in + status Sale Order or Locked). +2. Click on the button Unblock Delivery Validation. +3. The delivery validation is not blocked anymore, the Validate button + will appear on the related pickings. Bug Tracker =========== @@ -57,7 +62,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -65,17 +70,17 @@ Credits ======= Authors -~~~~~~~ +------- * ACSONE SA/NV Contributors -~~~~~~~~~~~~ +------------ -* Quentin Groulard +- Quentin Groulard Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -87,6 +92,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/sale-workflow `_ project on GitHub. +This module is part of the `OCA/sale-workflow `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_stock_picking_validation_blocking/models/sale_order.py b/sale_stock_picking_validation_blocking/models/sale_order.py index 7f57e94b139..dfc420cb5cd 100644 --- a/sale_stock_picking_validation_blocking/models/sale_order.py +++ b/sale_stock_picking_validation_blocking/models/sale_order.py @@ -5,7 +5,6 @@ class SaleOrder(models.Model): - _inherit = "sale.order" picking_validation_blocked = fields.Boolean( diff --git a/sale_stock_picking_validation_blocking/models/stock_picking.py b/sale_stock_picking_validation_blocking/models/stock_picking.py index cb8ac8413dd..70e8f37737c 100644 --- a/sale_stock_picking_validation_blocking/models/stock_picking.py +++ b/sale_stock_picking_validation_blocking/models/stock_picking.py @@ -6,7 +6,6 @@ class StockPicking(models.Model): - _inherit = "stock.picking" validation_blocked_by_so = fields.Boolean( diff --git a/sale_stock_picking_validation_blocking/pyproject.toml b/sale_stock_picking_validation_blocking/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/sale_stock_picking_validation_blocking/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/sale_stock_picking_validation_blocking/readme/CONTRIBUTORS.md b/sale_stock_picking_validation_blocking/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..01f3219a114 --- /dev/null +++ b/sale_stock_picking_validation_blocking/readme/CONTRIBUTORS.md @@ -0,0 +1 @@ +- Quentin Groulard \<\> diff --git a/sale_stock_picking_validation_blocking/readme/CONTRIBUTORS.rst b/sale_stock_picking_validation_blocking/readme/CONTRIBUTORS.rst deleted file mode 100644 index 5914f5529ef..00000000000 --- a/sale_stock_picking_validation_blocking/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1 +0,0 @@ -* Quentin Groulard diff --git a/sale_stock_picking_validation_blocking/readme/DESCRIPTION.md b/sale_stock_picking_validation_blocking/readme/DESCRIPTION.md new file mode 100644 index 00000000000..7ca85d56596 --- /dev/null +++ b/sale_stock_picking_validation_blocking/readme/DESCRIPTION.md @@ -0,0 +1,4 @@ +This module adds the opportunity to prevent the validation of linked +delivery orders from a sale order. The delivery order is still created +when the sale order is confirmed, therefore the stock is reserved but +can not be send until approval. diff --git a/sale_stock_picking_validation_blocking/readme/DESCRIPTION.rst b/sale_stock_picking_validation_blocking/readme/DESCRIPTION.rst deleted file mode 100644 index 06db660d52d..00000000000 --- a/sale_stock_picking_validation_blocking/readme/DESCRIPTION.rst +++ /dev/null @@ -1,2 +0,0 @@ -This module adds the opportunity to prevent the validation of linked delivery orders from a sale order. -The delivery order is still created when the sale order is confirmed, therefore the stock is reserved but can not be send until approval. diff --git a/sale_stock_picking_validation_blocking/readme/USAGE.md b/sale_stock_picking_validation_blocking/readme/USAGE.md new file mode 100644 index 00000000000..85bf3715e80 --- /dev/null +++ b/sale_stock_picking_validation_blocking/readme/USAGE.md @@ -0,0 +1,14 @@ +To block validation of stock picking from sale orders, you need to: + +1. Open the form view of a sale order (in status Sale Order or Locked). +2. Click on the button Block Delivery Validation. +3. The delivery validation is now blocked, the Validate button will not + appear on the related pickings. + +To unblock validation of stock picking from sale orders, you need to: + +1. Open the form view of a "delivery validation blocked" sale order (in + status Sale Order or Locked). +2. Click on the button Unblock Delivery Validation. +3. The delivery validation is not blocked anymore, the Validate button + will appear on the related pickings. diff --git a/sale_stock_picking_validation_blocking/readme/USAGE.rst b/sale_stock_picking_validation_blocking/readme/USAGE.rst deleted file mode 100644 index 926ce0d1c3b..00000000000 --- a/sale_stock_picking_validation_blocking/readme/USAGE.rst +++ /dev/null @@ -1,11 +0,0 @@ -To block validation of stock picking from sale orders, you need to: - -#. Open the form view of a sale order (in status Sale Order or Locked). -#. Click on the button Block Delivery Validation. -#. The delivery validation is now blocked, the Validate button will not appear on the related pickings. - -To unblock validation of stock picking from sale orders, you need to: - -#. Open the form view of a "delivery validation blocked" sale order (in status Sale Order or Locked). -#. Click on the button Unblock Delivery Validation. -#. The delivery validation is not blocked anymore, the Validate button will appear on the related pickings. diff --git a/sale_stock_picking_validation_blocking/static/description/index.html b/sale_stock_picking_validation_blocking/static/description/index.html index f4606776111..8b81106f1b0 100644 --- a/sale_stock_picking_validation_blocking/static/description/index.html +++ b/sale_stock_picking_validation_blocking/static/description/index.html @@ -1,4 +1,3 @@ - @@ -9,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -275,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -301,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -369,9 +369,11 @@

Sale Stock Picking Validation Blocking

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:343c9cd796a930fc9ea44912fb913d685021f39974f0cb15f02bf6634edd9dff !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/sale-workflow Translate me on Weblate Try me on Runboat

-

This module adds the opportunity to prevent the validation of linked delivery orders from a sale order. -The delivery order is still created when the sale order is confirmed, therefore the stock is reserved but can not be send until approval.

+

Beta License: AGPL-3 OCA/sale-workflow Translate me on Weblate Try me on Runboat

+

This module adds the opportunity to prevent the validation of linked +delivery orders from a sale order. The delivery order is still created +when the sale order is confirmed, therefore the stock is reserved but +can not be send until approval.

Table of contents

    @@ -391,13 +393,16 @@

    Usage

    1. Open the form view of a sale order (in status Sale Order or Locked).
    2. Click on the button Block Delivery Validation.
    3. -
    4. The delivery validation is now blocked, the Validate button will not appear on the related pickings.
    5. +
    6. The delivery validation is now blocked, the Validate button will not +appear on the related pickings.

    To unblock validation of stock picking from sale orders, you need to:

      -
    1. Open the form view of a “delivery validation blocked” sale order (in status Sale Order or Locked).
    2. +
    3. Open the form view of a “delivery validation blocked” sale order (in +status Sale Order or Locked).
    4. Click on the button Unblock Delivery Validation.
    5. -
    6. The delivery validation is not blocked anymore, the Validate button will appear on the related pickings.
    7. +
    8. The delivery validation is not blocked anymore, the Validate button +will appear on the related pickings.
@@ -405,7 +410,7 @@

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -425,11 +430,13 @@

Contributors

Maintainers

This module is maintained by the OCA.

-Odoo Community Association + +Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

-

This module is part of the OCA/sale-workflow project on GitHub.

+

This module is part of the OCA/sale-workflow project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

From 6bd79152b2a2c48c022119a33599c3e386b5fb54 Mon Sep 17 00:00:00 2001 From: Kevin Khao Date: Mon, 21 Oct 2024 13:22:57 +0300 Subject: [PATCH 3/3] [17.0][MIG] sale_stock_picking_validation_blocking: Migration to 17.0 --- .../README.rst | 1 + .../__manifest__.py | 2 +- .../models/sale_order.py | 20 +++++++++++++++++-- .../models/stock_picking.py | 12 ++--------- .../readme/CONTRIBUTORS.md | 1 + .../static/description/index.html | 1 + .../tests/test_sale_stock.py | 19 ++++++++++-------- .../views/sale_order.xml | 13 +++++++----- .../views/stock_picking.xml | 3 ++- 9 files changed, 45 insertions(+), 27 deletions(-) diff --git a/sale_stock_picking_validation_blocking/README.rst b/sale_stock_picking_validation_blocking/README.rst index 7ee0535e4d5..967974682e9 100644 --- a/sale_stock_picking_validation_blocking/README.rst +++ b/sale_stock_picking_validation_blocking/README.rst @@ -78,6 +78,7 @@ Contributors ------------ - Quentin Groulard +- Kevin Khao kevin.khao@gmail.com Maintainers ----------- diff --git a/sale_stock_picking_validation_blocking/__manifest__.py b/sale_stock_picking_validation_blocking/__manifest__.py index 54529b40060..45a4b182df9 100644 --- a/sale_stock_picking_validation_blocking/__manifest__.py +++ b/sale_stock_picking_validation_blocking/__manifest__.py @@ -6,7 +6,7 @@ "summary": """ This module adds the opportunity to prevent the validation of delivery order from the SO.""", - "version": "13.0.1.0.1", + "version": "17.0.1.0.0", "license": "AGPL-3", "author": "ACSONE SA/NV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/sale-workflow", diff --git a/sale_stock_picking_validation_blocking/models/sale_order.py b/sale_stock_picking_validation_blocking/models/sale_order.py index dfc420cb5cd..9417839dd6f 100644 --- a/sale_stock_picking_validation_blocking/models/sale_order.py +++ b/sale_stock_picking_validation_blocking/models/sale_order.py @@ -1,15 +1,31 @@ # Copyright 2020 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models +from odoo import api, fields, models class SaleOrder(models.Model): _inherit = "sale.order" picking_validation_blocked = fields.Boolean( - readonly=True, track_visibility="onchange", string="Delivery Validation Blocked" + readonly=True, tracking=True, string="Delivery Validation Blocked" ) + hide_button_picking_validation_blocked = fields.Boolean( + "Display the picking validation buttons", + help="Technical field to determine whether the " + "picking validation buttons should be displayed", + compute="_compute_hide_picking_validation_blocked", + compute_sudo=True, + ) + + @api.depends("picking_validation_blocked", "state", "delivery_count") + def _compute_hide_picking_validation_blocked(self): + for rec in self: + rec.hide_button_picking_validation_blocked = ( + rec.state != "sale" + or not self.env.user.has_group("sales_team.group_sale_manager") + or rec.delivery_count == 0 + ) def action_block_picking_validation(self): self.write({"picking_validation_blocked": True}) diff --git a/sale_stock_picking_validation_blocking/models/stock_picking.py b/sale_stock_picking_validation_blocking/models/stock_picking.py index 70e8f37737c..c82f3cc21d3 100644 --- a/sale_stock_picking_validation_blocking/models/stock_picking.py +++ b/sale_stock_picking_validation_blocking/models/stock_picking.py @@ -1,7 +1,7 @@ # Copyright 2020 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import _, api, fields, models +from odoo import _, fields, models from odoo.exceptions import ValidationError @@ -14,18 +14,10 @@ class StockPicking(models.Model): string="Validation Blocked by SO", ) - @api.depends("state", "is_locked", "validation_blocked_by_so") - def _compute_show_validate(self): - for picking in self: - if picking.validation_blocked_by_so: - picking.show_validate = False - else: - super(StockPicking, picking)._compute_show_validate() - def button_validate(self): for picking in self: if picking.validation_blocked_by_so: raise ValidationError( _("Validation is blocked by SO for picking %s" % picking.name) ) - return super(StockPicking, self).button_validate() + return super().button_validate() diff --git a/sale_stock_picking_validation_blocking/readme/CONTRIBUTORS.md b/sale_stock_picking_validation_blocking/readme/CONTRIBUTORS.md index 01f3219a114..c7e5ddeffbb 100644 --- a/sale_stock_picking_validation_blocking/readme/CONTRIBUTORS.md +++ b/sale_stock_picking_validation_blocking/readme/CONTRIBUTORS.md @@ -1 +1,2 @@ - Quentin Groulard \<\> +- Kevin Khao diff --git a/sale_stock_picking_validation_blocking/static/description/index.html b/sale_stock_picking_validation_blocking/static/description/index.html index 8b81106f1b0..968fa91b1ad 100644 --- a/sale_stock_picking_validation_blocking/static/description/index.html +++ b/sale_stock_picking_validation_blocking/static/description/index.html @@ -425,6 +425,7 @@

Authors

Contributors

diff --git a/sale_stock_picking_validation_blocking/tests/test_sale_stock.py b/sale_stock_picking_validation_blocking/tests/test_sale_stock.py index ec4bbfe108c..80cf07433df 100644 --- a/sale_stock_picking_validation_blocking/tests/test_sale_stock.py +++ b/sale_stock_picking_validation_blocking/tests/test_sale_stock.py @@ -6,11 +6,12 @@ class TestSaleStock(TransactionCase): - def setUp(self): - super(TestSaleStock, self).setUp() - partner = self.env.ref("base.res_partner_1") - product = self.env.ref("product.product_delivery_01") - self.sale_order = self.env["sale.order"].create( + @classmethod + def setUpClass(cls): + super().setUpClass() + partner = cls.env.ref("base.res_partner_1") + product = cls.env.ref("product.product_delivery_01") + cls.sale_order = cls.env["sale.order"].create( { "partner_id": partner.id, "order_line": [ @@ -29,13 +30,15 @@ def setUp(self): ) def test_sale_stock_picking_validation_blocked(self): + self.assertTrue(self.sale_order.hide_button_picking_validation_blocked) self.sale_order.action_confirm() + self.assertFalse(self.sale_order.hide_button_picking_validation_blocked) picking = self.sale_order.picking_ids - picking.move_lines.write({"quantity_done": 1}) + picking.move_ids.write({"quantity": 1}) + self.assertFalse(self.sale_order.picking_validation_blocked) self.sale_order.action_block_picking_validation() - self.assertFalse(picking.show_validate) + self.assertTrue(self.sale_order.picking_validation_blocked) with self.assertRaises(ValidationError): picking.button_validate() self.sale_order.action_unblock_picking_validation() - self.assertTrue(picking.show_validate) picking.button_validate() diff --git a/sale_stock_picking_validation_blocking/views/sale_order.xml b/sale_stock_picking_validation_blocking/views/sale_order.xml index 3beb89a75ba..a9a5cee60f5 100644 --- a/sale_stock_picking_validation_blocking/views/sale_order.xml +++ b/sale_stock_picking_validation_blocking/views/sale_order.xml @@ -2,6 +2,7 @@ + sale.order + + + + - - - + diff --git a/sale_stock_picking_validation_blocking/views/stock_picking.xml b/sale_stock_picking_validation_blocking/views/stock_picking.xml index a8312e7280b..8add62993b8 100644 --- a/sale_stock_picking_validation_blocking/views/stock_picking.xml +++ b/sale_stock_picking_validation_blocking/views/stock_picking.xml @@ -14,7 +14,8 @@