diff --git a/addons/stock_delivery/models/delivery_carrier.py b/addons/stock_delivery/models/delivery_carrier.py index 3d0a9212f11..cfebcac0183 100644 --- a/addons/stock_delivery/models/delivery_carrier.py +++ b/addons/stock_delivery/models/delivery_carrier.py @@ -4,6 +4,7 @@ from odoo import _, fields, models from odoo.exceptions import UserError, ValidationError from odoo.tools.float_utils import float_round +from odoo.tools.misc import groupby from .delivery_request_objects import DeliveryCommodity, DeliveryPackage @@ -199,18 +200,19 @@ class DeliveryCarrier(models.Model): def _get_commodities_from_stock_move_lines(self, move_lines): commodities = [] - for line in move_lines.filtered(lambda line: line.product_id.type in ['product', 'consu']): - qty = line.qty_done if line.state == 'done' else line.reserved_uom_qty - unit_quantity = line.product_uom_id._compute_quantity(qty, line.product_id.uom_id) + + product_lines = move_lines.filtered(lambda line: line.product_id.type in ['product', 'consu']) + for product, lines in groupby(product_lines, lambda x: x.product_id): + unit_quantity = sum( + line.product_uom_id._compute_quantity( + line.qty_done if line.state == 'done' else line.reserved_uom_qty, + product.uom_id) + for line in lines) rounded_qty = max(1, float_round(unit_quantity, precision_digits=0)) - country_of_origin = line.product_id.country_of_origin.code or \ - line.picking_id.picking_type_id.warehouse_id.partner_id.country_id.code - commodities.append(DeliveryCommodity( - line.product_id, - amount=rounded_qty, - monetary_value=line.sale_price, - country_of_origin=country_of_origin - )) + country_of_origin = product.country_of_origin.code or lines[0].picking_id.picking_type_id.warehouse_id.partner_id.country_id.code + sale_price = sum(line.sale_price for line in lines) + commodities.append(DeliveryCommodity(product, amount=rounded_qty, monetary_value=sale_price, country_of_origin=country_of_origin)) + return commodities def _product_price_to_company_currency(self, quantity, product, company):