From 3070a3837beedcd54856a2d34fbe625596c71267 Mon Sep 17 00:00:00 2001 From: sergio-teruel Date: Tue, 5 Mar 2024 10:17:45 +0100 Subject: [PATCH] [IMP] delivery_package_number: Ask only once for the number of packages wizard. TT48170 --- delivery_package_number/README.rst | 4 +-- delivery_package_number/__manifest__.py | 2 -- .../models/stock_picking.py | 26 +++++++++++---- .../readme/CONTRIBUTORS.rst | 2 +- .../static/description/index.html | 2 +- .../tests/test_delivery_package_number.py | 4 ++- delivery_package_number/wizard/__init__.py | 1 - .../wizard/stock_backorder_confirmation.py | 18 ++--------- .../stock_backorder_confirmation_views.xml | 27 ---------------- .../wizard/stock_inmediate_transfer.py | 18 ++--------- .../wizard/stock_number_package_mixin.py | 32 ------------------- .../stock_number_package_validate_wiz.py | 12 ++++++- 12 files changed, 42 insertions(+), 106 deletions(-) delete mode 100644 delivery_package_number/wizard/stock_backorder_confirmation_views.xml delete mode 100644 delivery_package_number/wizard/stock_number_package_mixin.py diff --git a/delivery_package_number/README.rst b/delivery_package_number/README.rst index ed3b4eb802..883054b8c3 100644 --- a/delivery_package_number/README.rst +++ b/delivery_package_number/README.rst @@ -2,7 +2,7 @@ Stock Picking Package Number ============================ -.. +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! @@ -82,8 +82,8 @@ Contributors * Pedro M. Baeza * David Vidal - * Marçal Isern * Carlos Roca + * Sergio Teruel * `Sygel `_: diff --git a/delivery_package_number/__manifest__.py b/delivery_package_number/__manifest__.py index b9702474fb..5cbe0f284a 100644 --- a/delivery_package_number/__manifest__.py +++ b/delivery_package_number/__manifest__.py @@ -17,8 +17,6 @@ "reports/report_package_number.xml", "views/stock_picking_type_views.xml", "views/stock_picking_views.xml", - "wizard/stock_immediate_transfer_views.xml", - "wizard/stock_backorder_confirmation_views.xml", "wizard/stock_number_package_validate_wiz_view.xml", ], } diff --git a/delivery_package_number/models/stock_picking.py b/delivery_package_number/models/stock_picking.py index 376e0baca8..423274d8b3 100644 --- a/delivery_package_number/models/stock_picking.py +++ b/delivery_package_number/models/stock_picking.py @@ -2,6 +2,7 @@ # Copyright 2023 Tecnativa - Pedro M. Baeza # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo import _, api, fields, models +from odoo.tools import config class StockPicking(models.Model): @@ -15,6 +16,7 @@ class StockPicking(models.Model): default=0, copy=False, ) + ask_number_of_packages = fields.Boolean(compute="_compute_ask_number_of_packages") @api.depends("package_ids") def _compute_number_of_packages(self): @@ -37,24 +39,36 @@ def _action_generate_number_of_packages_wizard(self): ), } - def _check_set_number_of_packages(self): + def _compute_ask_number_of_packages(self): + """To Know if is needed raise wizard to ask user by package number""" + for picking in self: + picking.ask_number_of_packages = bool( + picking.carrier_id + and not picking.package_ids + or picking.picking_type_id.force_set_number_of_packages + ) + + def _get_pickings_to_set_number_of_packages(self): + """Get pickings that needed raise wizard to fill number of packages""" pickings_to_set_number_of_packages = self.browse() for picking in self: - if ( - picking.picking_type_id.force_set_number_of_packages - and not picking.number_of_packages - ): + if not picking.number_of_packages: pickings_to_set_number_of_packages |= picking return pickings_to_set_number_of_packages def _pre_action_done_hook(self): res = super()._pre_action_done_hook() + test_condition = not config["test_enable"] or self.env.context.get( + "test_delivery_package_number" + ) if ( res + and test_condition and isinstance(res, bool) + and any(picking.ask_number_of_packages for picking in self) and not self.env.context.get("bypass_set_number_of_packages") ): - pickings_to_set_nop = self._check_set_number_of_packages() + pickings_to_set_nop = self._get_pickings_to_set_number_of_packages() if pickings_to_set_nop: return pickings_to_set_nop._action_generate_number_of_packages_wizard() return res diff --git a/delivery_package_number/readme/CONTRIBUTORS.rst b/delivery_package_number/readme/CONTRIBUTORS.rst index 37bfd0dd9d..d4b0d2f0f9 100644 --- a/delivery_package_number/readme/CONTRIBUTORS.rst +++ b/delivery_package_number/readme/CONTRIBUTORS.rst @@ -2,8 +2,8 @@ * Pedro M. Baeza * David Vidal - * Marçal Isern * Carlos Roca + * Sergio Teruel * `Sygel `_: diff --git a/delivery_package_number/static/description/index.html b/delivery_package_number/static/description/index.html index fed59ec888..224f6325ee 100644 --- a/delivery_package_number/static/description/index.html +++ b/delivery_package_number/static/description/index.html @@ -425,8 +425,8 @@

Contributors

  • Tecnativa:
    • Pedro M. Baeza
    • David Vidal
    • -
    • Marçal Isern
    • Carlos Roca
    • +
    • Sergio Teruel
  • diff --git a/delivery_package_number/tests/test_delivery_package_number.py b/delivery_package_number/tests/test_delivery_package_number.py index a7f84557e4..e2de1a07b7 100644 --- a/delivery_package_number/tests/test_delivery_package_number.py +++ b/delivery_package_number/tests/test_delivery_package_number.py @@ -66,7 +66,9 @@ def test_backorder(self): picking = order.picking_ids picking.move_ids.quantity_done = 2 picking.number_of_packages = 2 - action = picking.button_validate() + action = picking.with_context( + test_delivery_package_number=True + ).button_validate() backorder_wizard = Form( self.env[action["res_model"]].with_context(**action["context"]) ).save() diff --git a/delivery_package_number/wizard/__init__.py b/delivery_package_number/wizard/__init__.py index 0387cc1654..0c0e9106ee 100644 --- a/delivery_package_number/wizard/__init__.py +++ b/delivery_package_number/wizard/__init__.py @@ -1,4 +1,3 @@ -from . import stock_number_package_mixin from . import stock_inmediate_transfer from . import stock_backorder_confirmation from . import stock_number_package_validate_wiz diff --git a/delivery_package_number/wizard/stock_backorder_confirmation.py b/delivery_package_number/wizard/stock_backorder_confirmation.py index 8d1219bc02..07c10eaba3 100644 --- a/delivery_package_number/wizard/stock_backorder_confirmation.py +++ b/delivery_package_number/wizard/stock_backorder_confirmation.py @@ -5,24 +5,10 @@ class StockBackorderConfirmation(models.TransientModel): - _inherit = ["stock.backorder.confirmation", "stock.number.package.mixin"] - _name = "stock.backorder.confirmation" + _inherit = "stock.backorder.confirmation" def process(self): - if self.number_of_packages: - self.pick_ids.write({"number_of_packages": self.number_of_packages}) # put context key for avoiding `base_delivery_carrier_label` auto-packaging feature - res = super( + return super( StockBackorderConfirmation, self.with_context(set_default_package=False) ).process() - if self.print_package_label: - report = ( - self.pick_ids.picking_type_id.report_number_of_packages - or self.env.ref( - "delivery_package_number.action_delivery_package_number_report" - ) - ) - report_action = report.report_action(self.pick_ids) - report_action.update({"close_on_report_download": True}) - return report_action - return res diff --git a/delivery_package_number/wizard/stock_backorder_confirmation_views.xml b/delivery_package_number/wizard/stock_backorder_confirmation_views.xml deleted file mode 100644 index c91240fd2b..0000000000 --- a/delivery_package_number/wizard/stock_backorder_confirmation_views.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - delivery.package.number.view.backorder.confirmation - stock.backorder.confirmation - - - - - - - - - - - - - - diff --git a/delivery_package_number/wizard/stock_inmediate_transfer.py b/delivery_package_number/wizard/stock_inmediate_transfer.py index 0e04f8b24c..13e3b7196e 100644 --- a/delivery_package_number/wizard/stock_inmediate_transfer.py +++ b/delivery_package_number/wizard/stock_inmediate_transfer.py @@ -4,24 +4,10 @@ class StockImmediateTransfer(models.TransientModel): - _inherit = ["stock.immediate.transfer", "stock.number.package.mixin"] - _name = "stock.immediate.transfer" + _inherit = "stock.immediate.transfer" def process(self): - if self.number_of_packages: - self.pick_ids.write({"number_of_packages": self.number_of_packages}) # put context key for avoiding `base_delivery_carrier_label` auto-packaging feature - res = super( + return super( StockImmediateTransfer, self.with_context(set_default_package=False) ).process() - if self.print_package_label: - report = ( - self.pick_ids.picking_type_id.report_number_of_packages - or self.env.ref( - "delivery_package_number.action_delivery_package_number_report" - ) - ) - report_action = report.report_action(self.pick_ids) - report_action.update({"close_on_report_download": True}) - return report_action - return res diff --git a/delivery_package_number/wizard/stock_number_package_mixin.py b/delivery_package_number/wizard/stock_number_package_mixin.py deleted file mode 100644 index 4d9e154dbf..0000000000 --- a/delivery_package_number/wizard/stock_number_package_mixin.py +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2023 Tecnativa - Carlos Roca -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import api, fields, models - - -class StockNumberPackageMixin(models.AbstractModel): - _name = "stock.number.package.mixin" - _description = "Mixin to set number of packages" - - number_of_packages = fields.Integer( - help="Set the number of packages for this picking(s)", - ) - ask_number_of_packages = fields.Boolean(compute="_compute_ask_number_of_packages") - print_package_label = fields.Boolean( - compute="_compute_print_package_label", readonly=False, store=True - ) - - @api.depends("pick_ids") - def _compute_ask_number_of_packages(self): - for item in self: - # we use ._origin because if not, a NewId is used for the checks and the returned - # value of package_ids is wrong. - item.ask_number_of_packages = bool( - item.pick_ids.carrier_id - and not item.pick_ids._origin.package_ids - or item.pick_ids.picking_type_id.force_set_number_of_packages - ) - - @api.depends("pick_ids") - def _compute_print_package_label(self): - for item in self: - item.print_package_label = item.pick_ids.picking_type_id.print_label diff --git a/delivery_package_number/wizard/stock_number_package_validate_wiz.py b/delivery_package_number/wizard/stock_number_package_validate_wiz.py index affdc1c8c2..8a8f8d84df 100644 --- a/delivery_package_number/wizard/stock_number_package_validate_wiz.py +++ b/delivery_package_number/wizard/stock_number_package_validate_wiz.py @@ -4,11 +4,13 @@ class StockNumberPackageValidateWiz(models.TransientModel): - _inherit = "stock.number.package.mixin" _name = "stock.number.package.validate.wizard" _description = "Wizard to force set number of pickings when validate" pick_ids = fields.Many2many("stock.picking", "stock_picking_number_package_rel") + number_of_packages = fields.Integer( + help="Set the number of packages for this picking(s)", + ) stock_number_package_validation_line_ids = fields.One2many( comodel_name="stock.number.package.validate.line.wizard", inverse_name="wiz_id", @@ -16,6 +18,14 @@ class StockNumberPackageValidateWiz(models.TransientModel): readonly=False, store=True, ) + print_package_label = fields.Boolean( + compute="_compute_print_package_label", readonly=False, store=True + ) + + @api.depends("pick_ids") + def _compute_print_package_label(self): + for item in self: + item.print_package_label = item.pick_ids.picking_type_id.print_label @api.depends("pick_ids") def _compute_stock_number_package_validation_line_ids(self):