changeset 2aba0ec6c294 in modules/purchase_requisition:default
details: 
https://hg.tryton.org/modules/purchase_requisition?cmd=changeset&node=2aba0ec6c294
description:
        Use requisition unit price for puchase line

        issue10127
        review337651002
diffstat:

 purchase.py                             |  21 ++++++++++++++++++++-
 tests/scenario_purchase_requisition.rst |   3 +++
 2 files changed, 23 insertions(+), 1 deletions(-)

diffs (51 lines):

diff -r dbf76b656536 -r 2aba0ec6c294 purchase.py
--- a/purchase.py       Thu Mar 18 23:04:17 2021 +0100
+++ b/purchase.py       Sat Mar 27 21:16:08 2021 +0100
@@ -16,7 +16,7 @@
 
 from trytond.modules.company.model import (
     employee_field, set_employee, reset_employee)
-from trytond.modules.product import price_digits
+from trytond.modules.product import price_digits, round_price
 
 
 class Configuration(metaclass=PoolMeta):
@@ -684,6 +684,25 @@
                 key += (('unit_price', request.origin.unit_price),)
         return key
 
+    @classmethod
+    def compute_purchase_line(cls, key, requests, purchase):
+        pool = Pool()
+        RequisitionLine = pool.get('purchase.requisition.line')
+        Uom = pool.get('product.uom')
+
+        line = super().compute_purchase_line(key, requests, purchase)
+
+        key_values = dict(key)
+        if (key_values.get('unit_price') is not None
+                and any(
+                    isinstance(r.origin, RequisitionLine) for r in requests)):
+            line.unit_price = round_price(
+                Uom.compute_price(
+                    key_values.get('unit', line.unit),
+                    key_values['unit_price'],
+                    line.unit))
+        return line
+
 
 class Purchase(metaclass=PoolMeta):
     __name__ = 'purchase.purchase'
diff -r dbf76b656536 -r 2aba0ec6c294 tests/scenario_purchase_requisition.rst
--- a/tests/scenario_purchase_requisition.rst   Thu Mar 18 23:04:17 2021 +0100
+++ b/tests/scenario_purchase_requisition.rst   Sat Mar 27 21:16:08 2021 +0100
@@ -253,6 +253,9 @@
 Confirm the purchase order::
 
     >>> purchase, = Purchase.find([('state', '=', 'draft')])
+    >>> purchase_line, = purchase.lines
+    >>> purchase_line.unit_price
+    Decimal('10.0000')
     >>> purchase.click('quote')
     >>> requisition.reload()
     >>> requisition.state

Reply via email to