From 4f59bcbcf384302a2769ebe99f07cff6091b632a Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Wed, 24 Jul 2024 15:44:51 +0200 Subject: [PATCH] [IMP] stock_move_location: Improve UI and add hooks The sql query is replaced by the read_group method from the orm. This allows the use of odoo domain and the definition of a new method that can be overriden to get the domain to retrieve the quants. Extract the initialization logic for the stock_move_location_line_ids field into a dedicated method to allow to be called wy others addons. Improve the wizard form: * Toggle fields are now properly displayed * Add a placeholder group to be used by specialized addon to add additional filters --- stock_move_location/README.rst | 6 +- stock_move_location/readme/CONTRIBUTORS.md | 1 + .../static/description/index.html | 16 +++-- .../wizard/stock_move_location.py | 70 +++++++++++-------- .../wizard/stock_move_location.xml | 21 +++--- 5 files changed, 67 insertions(+), 47 deletions(-) diff --git a/stock_move_location/README.rst b/stock_move_location/README.rst index f456ac86e..0e26bd5f8 100644 --- a/stock_move_location/README.rst +++ b/stock_move_location/README.rst @@ -62,8 +62,8 @@ If you want to transfer a full quant: - Select the quantities which you want move to another location If you go to the Inventory Dashboard you can see the button "Move from -location" in each of the picking types (only applicable to internal -transfers). Press it and you will be directed to the wizard. +location" in each of the picking types (only applicable to internal and +outgoing transfers). Press it and you will be directed to the wizard. |image1| @@ -143,6 +143,8 @@ Contributors - Aung Ko Ko Lin +- Laurent Mignon + Maintainers ----------- diff --git a/stock_move_location/readme/CONTRIBUTORS.md b/stock_move_location/readme/CONTRIBUTORS.md index fece6339c..7bb7732a3 100644 --- a/stock_move_location/readme/CONTRIBUTORS.md +++ b/stock_move_location/readme/CONTRIBUTORS.md @@ -13,3 +13,4 @@ - Abraham Anes \<\> - Quartile \<\> - Aung Ko Ko Lin +- Laurent Mignon \<\> diff --git a/stock_move_location/static/description/index.html b/stock_move_location/static/description/index.html index 4fdef9fa6..74a9b578a 100644 --- a/stock_move_location/static/description/index.html +++ b/stock_move_location/static/description/index.html @@ -8,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. @@ -274,7 +275,7 @@ pre.literal-block, pre.doctest-block, pre.math, pre.code { 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 } @@ -300,7 +301,7 @@ span.option { span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -411,8 +412,8 @@ opened.
  • Select the quantities which you want move to another location
  • If you go to the Inventory Dashboard you can see the button “Move from -location” in each of the picking types (only applicable to internal -transfers). Press it and you will be directed to the wizard.

    +location” in each of the picking types (only applicable to internal and +outgoing transfers). Press it and you will be directed to the wizard.

    image1

    To enable this option, check “Show Move On Hand Stock” in the Picking Type configuration.

    @@ -482,12 +483,15 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
  • Aung Ko Ko Lin
  • +
  • Laurent Mignon <laurent.mignon@acsone.eu>
  • 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.

    diff --git a/stock_move_location/wizard/stock_move_location.py b/stock_move_location/wizard/stock_move_location.py index 23a18a419..517fcd080 100644 --- a/stock_move_location/wizard/stock_move_location.py +++ b/stock_move_location/wizard/stock_move_location.py @@ -303,25 +303,32 @@ class StockMoveLocationWizard(models.TransientModel): ) return action + def _get_quants_domain(self): + return [("location_id", "=", self.origin_location_id.id)] + def _get_group_quants(self): - location_id = self.origin_location_id - # Using sql as search_group doesn't support aggregation functions - # leading to overhead in queries to DB - query = """ - SELECT product_id, lot_id, package_id, owner_id, SUM(quantity) AS quantity, - SUM(reserved_quantity) AS reserved_quantity - FROM stock_quant - WHERE location_id = %s - GROUP BY product_id, lot_id, package_id, owner_id - """ - self.env.cr.execute(query, (location_id.id,)) - return self.env.cr.dictfetchall() + domain = self._get_quants_domain() + result = self.env["stock.quant"].read_group( + domain=domain, + fields=[ + "product_id", + "lot_id", + "package_id", + "owner_id", + "quantity:sum", + "reserved_quantity:sum", + ], + groupby=["product_id", "lot_id", "package_id", "owner_id"], + orderby="id", + lazy=False, + ) + return result def _get_stock_move_location_lines_values(self): product_obj = self.env["product.product"] product_data = [] for group in self._get_group_quants(): - product = product_obj.browse(group.get("product_id")).exists() + product = product_obj.browse(group["product_id"][0]).exists() # Apply the putaway strategy location_dest_id = ( self.apply_putaway_strategy @@ -337,15 +344,33 @@ class StockMoveLocationWizard(models.TransientModel): "origin_location_id": self.origin_location_id.id, "destination_location_id": location_dest_id, # cursor returns None instead of False - "lot_id": group.get("lot_id") or False, - "package_id": group.get("package_id") or False, - "owner_id": group.get("owner_id") or False, + "lot_id": group["lot_id"][0] if group.get("lot_id") else False, + "package_id": group["package_id"][0] + if group.get("package_id") + else False, + "owner_id": group["owner_id"][0] + if group.get("owner_id") + else False, "product_uom_id": product.uom_id.id, "custom": False, } ) return product_data + def _reset_stock_move_location_lines(self): + lines = [] + line_model = self.env["wiz.stock.move.location.line"] + for line_val in self._get_stock_move_location_lines_values(): + if line_val.get("max_quantity") <= 0: + continue + line = line_model.create(line_val) + line.max_quantity = line.get_max_quantity() + line.reserved_quantity = line.reserved_quantity + lines.append(line) + self.update( + {"stock_move_location_line_ids": [(6, 0, [line.id for line in lines])]} + ) + @api.onchange("origin_location_id") def onchange_origin_location(self): # Get origin_location_disable context key to prevent load all origin @@ -355,18 +380,7 @@ class StockMoveLocationWizard(models.TransientModel): not self.env.context.get("origin_location_disable") and self.origin_location_id ): - lines = [] - line_model = self.env["wiz.stock.move.location.line"] - for line_val in self._get_stock_move_location_lines_values(): - if line_val.get("max_quantity") <= 0: - continue - line = line_model.create(line_val) - line.max_quantity = line.get_max_quantity() - line.reserved_quantity = line.reserved_quantity - lines.append(line) - self.update( - {"stock_move_location_line_ids": [(6, 0, [line.id for line in lines])]} - ) + self._reset_stock_move_location_lines() def clear_lines(self): self._clear_lines() diff --git a/stock_move_location/wizard/stock_move_location.xml b/stock_move_location/wizard/stock_move_location.xml index 060504d38..30101eceb 100644 --- a/stock_move_location/wizard/stock_move_location.xml +++ b/stock_move_location/wizard/stock_move_location.xml @@ -10,18 +10,15 @@
    -
    - + -
    -
    - - -
    + + @@ -37,6 +34,8 @@ attrs="{'readonly': [('destination_location_disable', '=', True)]}" /> + +