changeset 1b32de9c57ce in modules/sale:6.2
details: https://hg.tryton.org/modules/sale?cmd=changeset&node=1b32de9c57ce
description:
        Round actual quantity after the sum

        The sum of rounded quantity is not always a rounded value.

        issue11503
        review431141003
        (grafted from 4d7d93d2d54634a7419bc12719115e7573ff152e)
diffstat:

 sale.py |  15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)

diffs (32 lines):

diff -r 409519631313 -r 1b32de9c57ce sale.py
--- a/sale.py   Tue Mar 01 19:29:11 2022 +0100
+++ b/sale.py   Tue May 31 23:57:32 2022 +0200
@@ -1687,18 +1687,23 @@
             return
         moved_quantity = 0
         for move in self.moves:
-            if move.state != 'cancelled':
+            if move.state != 'cancelled' and self.unit:
                 moved_quantity += Uom.compute_qty(
-                    move.uom, move.quantity, self.unit)
+                    move.uom, move.quantity, self.unit, round=False)
         if self.quantity < 0:
             moved_quantity *= -1
         invoiced_quantity = 0
         for invoice_line in self.invoice_lines:
-            if (not invoice_line.invoice
-                    or invoice_line.invoice.state != 'cancelled'):
+            if (
+                    (not invoice_line.invoice
+                        or invoice_line.invoice.state != 'cancelled')
+                    and self.unit and invoice_line.unit):
                 invoiced_quantity += Uom.compute_qty(
-                    invoice_line.unit, invoice_line.quantity, self.unit)
+                    invoice_line.unit, invoice_line.quantity, self.unit,
+                    round=False)
         actual_quantity = max(moved_quantity, invoiced_quantity, key=abs)
+        if self.unit:
+            actual_quantity = self.unit.round(actual_quantity)
         if self.actual_quantity != actual_quantity:
             self.actual_quantity = actual_quantity
 

Reply via email to