diff --git a/common.py b/common.py index 98eb94b1d1..91e783d83e 100644 --- a/common.py +++ b/common.py @@ -142,7 +142,7 @@ def order_mixin(prefix): components = [] for component in line.product.components_used: components.append(line.get_component(component)) - Component.set_price_ratio(components) + Component.set_price_ratio(components, line.quantity) line.components = components else: for component in line.product.components_used: @@ -284,7 +284,7 @@ def order_line_component_mixin(prefix): return self.line.product.type @classmethod - def set_price_ratio(cls, components): + def set_price_ratio(cls, components, quantity): "Set price ratio between components" pool = Pool() Uom = pool.get('product.uom') @@ -294,7 +294,11 @@ def order_line_component_mixin(prefix): product = component.product list_price = Uom.compute_price( product.default_uom, product.list_price, - component.unit) * Decimal(str(component.quantity)) + component.unit) + if component.fixed: + list_price *= Decimal(str(component.quantity / quantity)) + else: + list_price *= Decimal(str(component.quantity_ratio)) list_prices[component] = list_price sum_ += list_price @@ -303,6 +307,10 @@ def order_line_component_mixin(prefix): ratio = list_prices[component] / sum_ else: ratio = 1 / len(components) + if component.fixed: + ratio /= Decimal(str(component.quantity / quantity)) + else: + ratio /= Decimal(str(component.quantity_ratio)) component.price_ratio = ratio def get_move(self, type_): diff --git a/tests/scenario_product_kit_purchase.rst b/tests/scenario_product_kit_purchase.rst index 25eb3d483c..9b38643891 100644 --- a/tests/scenario_product_kit_purchase.rst +++ b/tests/scenario_product_kit_purchase.rst @@ -253,7 +253,7 @@ Check unit price of moves:: >>> shipment.reload() >>> invoice.reload() >>> sorted([m.unit_price for m in shipment.incoming_moves]) - [Decimal('5.0000'), Decimal('5.0000'), Decimal('7.0909'), Decimal('18.9091')] + [Decimal('5.0000'), Decimal('5.0000'), Decimal('9.4545'), Decimal('14.1818')] Check backorder moves:: diff --git a/tests/scenario_product_kit_sale.rst b/tests/scenario_product_kit_sale.rst index 1279ca7ca2..25459240bc 100644 --- a/tests/scenario_product_kit_sale.rst +++ b/tests/scenario_product_kit_sale.rst @@ -238,7 +238,7 @@ Check unit price of moves:: >>> shipment.reload() >>> invoice.reload() >>> sorted([m.unit_price for m in shipment.outgoing_moves]) - [Decimal('10.0000'), Decimal('10.0000'), Decimal('15.0000'), Decimal('25.0000')] + [Decimal('10.0000'), Decimal('10.0000'), Decimal('25.0000'), Decimal('37.5000')] Check backorder::