Matching
This commit is contained in:
@@ -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']
|
||||
|
||||
Reference in New Issue
Block a user