diff --git a/stock_reception_usability/models/__init__.py b/stock_reception_usability/models/__init__.py index ede7a8e..127b9da 100644 --- a/stock_reception_usability/models/__init__.py +++ b/stock_reception_usability/models/__init__.py @@ -1,2 +1,3 @@ from . import stock_move - +from . import stock_picking +from . import stock_picking_type diff --git a/stock_reception_usability/models/stock_move.py b/stock_reception_usability/models/stock_move.py index bba5408..7cdc307 100644 --- a/stock_reception_usability/models/stock_move.py +++ b/stock_reception_usability/models/stock_move.py @@ -2,6 +2,7 @@ # @author Kévin Roche # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from collections import defaultdict from odoo import api, fields, models @@ -9,28 +10,35 @@ class StockMove(models.Model): _inherit = "stock.move" location_dest_list = fields.Text( - string="Locations", compute="_compute_locations_dest_list" + string="Dest. Locations", compute="_compute_locations_list" + ) + + location_src_list = fields.Text( + string="Src. Locations", compute="_compute_locations_list" ) @api.depends( - "move_line_ids", "move_line_ids.location_dest_id", "move_line_ids.qty_done" + "move_line_ids.location_dest_id", + "move_line_ids.location_id", + "move_line_ids.qty_done", ) - def _compute_locations_dest_list(self): + def _compute_locations_list(self): + def format_loc(data): + return "\n ".join([ + f"{int(qty) if qty.is_integer() else qty}: {location.name}" + for location, qty in data.items() + ]) for move in self: - data = [] - separator = ", " - dest_list = move.move_line_ids.location_dest_id - for dest in dest_list: - lines_qty = move.move_line_ids.search( - [("move_id", "=", move.id), ("location_dest_id", "=", dest.id)] - ).mapped("qty_done") - quantity = int(sum(lines_qty)) - location = dest.name - data.append("{}: {}".format(quantity, location)) - move.location_dest_list = separator.join(data) + dest = defaultdict(int) + src = defaultdict(int) + for line in move.move_line_ids: + dest[line.location_dest_id] += line.qty_done + src[line.location_id] += line.qty_done + move.location_src_list = format_loc(src) + move.location_dest_list = format_loc(dest) def _compute_is_quantity_done_editable(self): super()._compute_is_quantity_done_editable() for move in self: - if len(move.move_line_ids) == 1 and move.show_details_visible: + if len(move.move_line_ids) <= 1: move.is_quantity_done_editable = True diff --git a/stock_reception_usability/models/stock_picking.py b/stock_reception_usability/models/stock_picking.py new file mode 100644 index 0000000..d811e18 --- /dev/null +++ b/stock_reception_usability/models/stock_picking.py @@ -0,0 +1,26 @@ +# Copyright 2024 Akretion (https://www.akretion.com). +# @author Sébastien BEAU +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + + +from odoo import _, api, fields, models + + + +class StockPicking(models.Model): + _inherit = 'stock.picking' + + show_src_location = fields.Boolean(compute="_compute_show_location") + show_dest_location = fields.Boolean(compute="_compute_show_location") + + @api.depends("picking_type_id.code", "location_id", "location_dest_id") + def _compute_show_location(self): + for picking in self: + picking.show_src_location = ( + picking.picking_type_id.code != "incoming" + and picking.location_id.child_ids + ) + picking.show_dest_location = ( + picking.picking_type_id.code != "outgoing" + and picking.location_dest_id.child_ids + ) diff --git a/stock_reception_usability/models/stock_picking_type.py b/stock_reception_usability/models/stock_picking_type.py new file mode 100644 index 0000000..a04fc47 --- /dev/null +++ b/stock_reception_usability/models/stock_picking_type.py @@ -0,0 +1,17 @@ +# Copyright 2024 Akretion (https://www.akretion.com). +# @author Sébastien BEAU +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + + +from odoo import _, api, fields, models + + +class StockPickingType(models.Model): + _inherit = 'stock.picking.type' + + def _default_show_operations(self): + # super is not called as we want to always force the value to False + # super()._default_show_operations() + return False + + show_operations = fields.Boolean(default=lambda s: s._default_show_operations()) diff --git a/stock_reception_usability/views/stock_picking.xml b/stock_reception_usability/views/stock_picking.xml index a15d02d..d8cf6e3 100644 --- a/stock_reception_usability/views/stock_picking.xml +++ b/stock_reception_usability/views/stock_picking.xml @@ -4,8 +4,13 @@ stock.picking + + + + - + +