This commit is contained in:
2026-05-09 18:06:47 +02:00
parent 28d3400651
commit a684c7b9c1

View File

@@ -1019,28 +1019,36 @@ class LotQt(
return (l.lot_type == 'virtual')
return False
@classmethod
def match_lots(cls,lot_p,lot_s):
logger.info("MATCH_LOTS:%s",lot_p)
logger.info("MATCH_LOTS:%s",lot_s)
LotQt = Pool().get('lot.qt')
Lot = Pool().get('lot.lot')
for lp in lot_p:
qt_p = lp.lot_matched_qt
if qt_p == 0:
continue
for ls in lot_s:
l = Lot(lp.lot_id)
qt = Decimal(0)
if qt_p >= ls.lot_matched_qt:
qt = ls.lot_matched_qt
left_qt = qt_p - qt
else:
qt = qt_p
left_qt = 0
lqt=LotQt(lp.lot_r_id)
lqt2 =LotQt(ls.lot_r_id)
if l.lot_type == 'physic':
@classmethod
def match_lots(cls,lot_p,lot_s):
logger.info("MATCH_LOTS:%s",lot_p)
logger.info("MATCH_LOTS:%s",lot_s)
LotQt = Pool().get('lot.qt')
Lot = Pool().get('lot.lot')
for lp in lot_p:
qt_p = lp.lot_matched_qt
if qt_p == 0:
continue
lqt = LotQt(lp.lot_r_id)
if not lqt.lot_p or lqt.lot_s:
raise UserError(
"Please select only unmatched purchase quantities.")
for ls in lot_s:
if not ls.lot_matched_qt:
continue
l = Lot(lp.lot_id)
qt = Decimal(0)
if qt_p >= ls.lot_matched_qt:
qt = ls.lot_matched_qt
left_qt = qt_p - qt
else:
qt = qt_p
left_qt = 0
lqt2 =LotQt(ls.lot_r_id)
if lqt2.lot_p or not lqt2.lot_s:
raise UserError(
"Please select only unmatched sale quantities.")
if l.lot_type == 'physic':
Sale = Pool().get('sale.sale')
s = Sale(ls.lot_sale)
ll = s.lines[0].lots[0]
@@ -1070,9 +1078,9 @@ class LotQt(
#Decrease forecasted virtual part non matched
l.updateVirtualPart(-qt,lqt.lot_shipment_origin,None)
l.updateVirtualPart(-qt,None,lqt2.lot_s,'only sale')
if left_qt == 0:
break
qt_p = left_qt
if left_qt == 0:
break
qt_p = left_qt
@classmethod
def add_physical_lots(cls,lqt,vlots):
@@ -2306,11 +2314,11 @@ class LotShipping(Wizard):
class LotShippingStart(ModelView):
"Link lot to transport"
__name__ = "lot.shipping.start"
shipment = fields.Selection([
('in', 'Shipment In'),
('out', 'Shipment Out'),
('int', 'Internal Shipment'),
], 'Shipment type')
shipment = fields.Selection([
('in', 'Shipment In'),
('out', 'Shipment Out'),
('int', 'Internal Shipment'),
], 'Shipment type', readonly=True)
shipment_in = fields.Many2One('stock.shipment.in',"Shipment In", states={'invisible': (Eval('shipment') != 'in')})
shipment_out = fields.Many2One('stock.shipment.out',"Shipment Out", states={'invisible': (Eval('shipment') != 'out')})
shipment_internal = fields.Many2One('stock.shipment.internal',"Shipment Internal", states={'invisible': (Eval('shipment') != 'int')})
@@ -2425,16 +2433,16 @@ class LotMatchingStart(ModelView):
return sum([e.lot_matched_qt for e in self.lot_s])
@fields.depends('product_s','qt_type','sale','cp_s')
def on_change_with_lot_s(self, name=None):
lp = []
LotQt = Pool().get('lot.qt')
cursor = Transaction().connection.cursor()
query = LotQt.getQuery(None,self.sale.id if self.sale else None,None,'not matched','all',self.qt_type,None,self.cp_s.id if self.cp_s else None,'S',None,None,self.product_s,None,'open')
cursor.execute(*query)
for r in cursor_dict(cursor):
val = {}
val['lot_id'] = r['r_lot_s']
def on_change_with_lot_s(self, name=None):
lp = []
LotQt = Pool().get('lot.qt')
cursor = Transaction().connection.cursor()
query = LotQt.getQuery(None,self.sale.id if self.sale else None,None,'not matched','all',self.qt_type,None,self.cp_s.id if self.cp_s else None,'S',None,None,self.product_s,None,'open')
cursor.execute(*query)
for r in cursor_dict(cursor):
val = {}
val['lot_id'] = r['r_lot_s']
val['lot_r_id'] = r['id'] - 10000000
val['lot_sale'] = r['r_sale']
val['lot_purchase'] = r['r_purchase']
@@ -2452,16 +2460,16 @@ class LotMatchingStart(ModelView):
return lp
@fields.depends('cp_p','qt_type','purchase','product_p')
def on_change_with_lot_p(self, name=None):
lp = []
LotQt = Pool().get('lot.qt')
cursor = Transaction().connection.cursor()
query = LotQt.getQuery(self.purchase.id if self.purchase else None,None,None,'not matched','all',self.qt_type,self.cp_p.id if self.cp_p else None,None,'P',None,None,self.product_p)
cursor.execute(*query)
for r in cursor_dict(cursor):
val = {}
val['lot_id'] = r['r_lot_p']
def on_change_with_lot_p(self, name=None):
lp = []
LotQt = Pool().get('lot.qt')
cursor = Transaction().connection.cursor()
query = LotQt.getQuery(self.purchase.id if self.purchase else None,None,None,'not matched','all',self.qt_type,self.cp_p.id if self.cp_p else None,None,'P',None,None,self.product_p)
cursor.execute(*query)
for r in cursor_dict(cursor):
val = {}
val['lot_id'] = r['r_lot_p']
val['lot_r_id'] = r['id'] - 10000000
val['lot_purchase'] = r['r_purchase']
val['lot_sale'] = r['r_sale']