stock_reception_usability: support internal and outgoing type
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
# @author Kévin Roche <kevin.roche@akretion.com>
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user