From 3c788d4764c50b4f02c63d3e2cc440dd3b1ef24b Mon Sep 17 00:00:00 2001 From: laurentbarontini Date: Thu, 14 May 2026 12:24:16 +0200 Subject: [PATCH] bug check qt --- modules/purchase_trade/lot.py | 4 +++- modules/purchase_trade/purchase.py | 21 ++++++++++++++++++--- modules/purchase_trade/sale.py | 21 ++++++++++++++++++--- 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/modules/purchase_trade/lot.py b/modules/purchase_trade/lot.py index 730774a..57ea718 100755 --- a/modules/purchase_trade/lot.py +++ b/modules/purchase_trade/lot.py @@ -912,7 +912,9 @@ class Lot(metaclass=PoolMeta): fl.lot = lot.id FeeLots.save([fl]) - cls.assert_lots_quantity_consistency(virtual_lots_to_check) + if not Transaction().context.get( + '_purchase_trade_skip_quantity_consistency'): + cls.assert_lots_quantity_consistency(virtual_lots_to_check) def createVirtualPart(self,qt=0,sh=None,lot_s=None,mode='both'): lqt = LotQt() diff --git a/modules/purchase_trade/purchase.py b/modules/purchase_trade/purchase.py index 07ba2da..cf15200 100755 --- a/modules/purchase_trade/purchase.py +++ b/modules/purchase_trade/purchase.py @@ -1729,6 +1729,15 @@ class Line(metaclass=PoolMeta): allocated_quantity = sum( Decimal(lqt.lot_quantity or 0) for lqt in allocated_lqts) free_quantity = round(target_quantity - allocated_quantity, 5) + logger.info( + "PURCHASE_QTY_SYNC line=%s vlot=%s target=%s allocated=%s " + "free=%s free_lqts=%s", + getattr(line, 'id', None), + getattr(vlot, 'id', None), + target_quantity, + allocated_quantity, + free_quantity, + [getattr(lqt, 'id', None) for lqt in free_lqts]) if free_quantity < 0: raise UserError("Please unlink or unmatch lot") @@ -1736,20 +1745,26 @@ class Line(metaclass=PoolMeta): Decimal(vlot.get_current_quantity_converted() or 0), 5) if current_quantity != target_quantity: vlot.set_current_quantity(target_quantity, target_quantity, 1) - Lot.save([vlot]) + with Transaction().set_context( + _purchase_trade_skip_quantity_consistency=True): + Lot.save([vlot]) if free_lqts: lqt = free_lqts[0] if Decimal(lqt.lot_quantity or 0) != free_quantity: lqt.lot_quantity = free_quantity - LotQt.save([lqt]) + with Transaction().set_context( + _purchase_trade_skip_quantity_consistency=True): + LotQt.save([lqt]) elif free_quantity > 0: lqt = LotQt() lqt.lot_p = vlot.id lqt.lot_s = None lqt.lot_quantity = free_quantity lqt.lot_unit = line.unit - LotQt.save([lqt]) + with Transaction().set_context( + _purchase_trade_skip_quantity_consistency=True): + LotQt.save([lqt]) @classmethod def copy(cls, lines, default=None): diff --git a/modules/purchase_trade/sale.py b/modules/purchase_trade/sale.py index 5217c66..d127ec6 100755 --- a/modules/purchase_trade/sale.py +++ b/modules/purchase_trade/sale.py @@ -1843,6 +1843,15 @@ class SaleLine(metaclass=PoolMeta): allocated_quantity = sum( Decimal(lqt.lot_quantity or 0) for lqt in allocated_lqts) free_quantity = round(target_quantity - allocated_quantity, 5) + logger.info( + "SALE_QTY_SYNC line=%s vlot=%s target=%s allocated=%s " + "free=%s free_lqts=%s", + getattr(line, 'id', None), + getattr(vlot, 'id', None), + target_quantity, + allocated_quantity, + free_quantity, + [getattr(lqt, 'id', None) for lqt in free_lqts]) if free_quantity < 0: raise UserError("Please unlink or unmatch lot") @@ -1850,20 +1859,26 @@ class SaleLine(metaclass=PoolMeta): Decimal(vlot.get_current_quantity_converted() or 0), 5) if current_quantity != target_quantity: vlot.set_current_quantity(target_quantity, target_quantity, 1) - Lot.save([vlot]) + with Transaction().set_context( + _purchase_trade_skip_quantity_consistency=True): + Lot.save([vlot]) if free_lqts: lqt = free_lqts[0] if Decimal(lqt.lot_quantity or 0) != free_quantity: lqt.lot_quantity = free_quantity - LotQt.save([lqt]) + with Transaction().set_context( + _purchase_trade_skip_quantity_consistency=True): + LotQt.save([lqt]) elif free_quantity > 0: lqt = LotQt() lqt.lot_p = None lqt.lot_s = vlot.id lqt.lot_quantity = free_quantity lqt.lot_unit = line.unit - LotQt.save([lqt]) + with Transaction().set_context( + _purchase_trade_skip_quantity_consistency=True): + LotQt.save([lqt]) @classmethod def delete(cls, lines):