diff --git a/modules/purchase_trade/lot.py b/modules/purchase_trade/lot.py index b59fee9..41a9330 100755 --- a/modules/purchase_trade/lot.py +++ b/modules/purchase_trade/lot.py @@ -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']