diff options
| author | qdp-launchpad@tinyerp.com <> | 2011-01-12 17:44:40 +0100 |
|---|---|---|
| committer | qdp-launchpad@tinyerp.com <> | 2011-01-12 17:44:40 +0100 |
| commit | f5aff3a7cf84eaad8bd8c65fca381440406e59b7 (patch) | |
| tree | c56f3eea95d0b3c0a9b3399731670ea959f532a4 | |
| parent | e6b1d532fd1864758389e463c91403ba8cc0063b (diff) | |
[FIX] mrp, stock: Production orders ignored chained location
lp bug: https://launchpad.net/bugs/535401 fixed
bzr revid: qdp-launchpad@tinyerp.com-20110112164440-17aob5yuhxihnnlm
| -rw-r--r-- | addons/mrp/mrp.py | 4 | ||||
| -rw-r--r-- | addons/mrp/stock.py | 5 | ||||
| -rw-r--r-- | addons/stock/stock.py | 88 |
3 files changed, 55 insertions, 42 deletions
diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index 1f06815078e..a260efc8e36 100644 --- a/addons/mrp/mrp.py +++ b/addons/mrp/mrp.py @@ -714,9 +714,9 @@ class mrp_production(osv.osv): if production_mode == 'consume_produce': # To produce remaining qty of final product vals = {'state':'confirmed'} - final_product_todo = [x.id for x in production.move_created_ids] + #final_product_todo = [x.id for x in production.move_created_ids] #stock_mov_obj.write(cr, uid, final_product_todo, vals) - stock_mov_obj.action_confirm(cr, uid, final_product_todo, context) + #stock_mov_obj.action_confirm(cr, uid, final_product_todo, context) produced_products = {} for produced_product in production.move_created_ids2: if produced_product.scrapped: diff --git a/addons/mrp/stock.py b/addons/mrp/stock.py index 8758bc09cd5..5ccb7c8ba7a 100644 --- a/addons/mrp/stock.py +++ b/addons/mrp/stock.py @@ -30,6 +30,11 @@ class StockMove(osv.osv): _columns = { 'production_id': fields.many2one('mrp.production', 'Production', select=True), } + + def create_chained_picking(self, cr, uid, moves, context=None): + new_moves = super(StockMove, self).create_chained_picking(cr, uid, moves, context=context) + self.write(cr, uid, [x.id for x in new_moves], {'production_id': False}, context=context) + return new_moves def _action_explode(self, cr, uid, move, context=None): """ Explodes pickings. diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 0c2a739761a..68b6edb5f8d 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -1791,6 +1791,51 @@ class stock_move(osv.osv): 'date': picking.date, }) return pick_id + def create_chained_picking(self, cr, uid, moves, context=None): + res_obj = self.pool.get('res.company') + location_obj = self.pool.get('stock.location') + move_obj = self.pool.get('stock.move') + wf_service = netsvc.LocalService("workflow") + new_moves = [] + if context is None: + context = {} + seq_obj = self.pool.get('ir.sequence') + for picking, todo in self._chain_compute(cr, uid, moves, context=context).items(): + ptype = todo[0][1][5] and todo[0][1][5] or location_obj.picking_type_get(cr, uid, todo[0][0].location_dest_id, todo[0][1][0]) + if picking: + # name of new picking according to its type + new_pick_name = seq_obj.get(cr, uid, 'stock.picking.' + ptype) + pickid = self._create_chained_picking(cr, uid, new_pick_name, picking, ptype, todo, context=context) + # Need to check name of old picking because it always considers picking as "OUT" when created from Sale Order + old_ptype = location_obj.picking_type_get(cr, uid, picking.move_lines[0].location_id, picking.move_lines[0].location_dest_id) + if old_ptype != picking.type: + old_pick_name = seq_obj.get(cr, uid, 'stock.picking.' + old_ptype) + self.pool.get('stock.picking').write(cr, uid, picking.id, {'name': old_pick_name}, context=context) + else: + pickid = False + for move, (loc, dummy, delay, dummy, company_id, ptype) in todo: + new_id = move_obj.copy(cr, uid, move.id, { + 'location_id': move.location_dest_id.id, + 'location_dest_id': loc.id, + 'date_moved': time.strftime('%Y-%m-%d'), + 'picking_id': pickid, + 'state': 'waiting', + 'company_id': company_id or res_obj._company_default_get(cr, uid, 'stock.company', context=context) , + 'move_history_ids': [], + 'date': (datetime.strptime(move.date, '%Y-%m-%d %H:%M:%S') + relativedelta(days=delay or 0)).strftime('%Y-%m-%d'), + 'move_history_ids2': []} + ) + move_obj.write(cr, uid, [move.id], { + 'move_dest_id': new_id, + 'move_history_ids': [(4, new_id)] + }) + new_moves.append(self.browse(cr, uid, [new_id])[0]) + if pickid: + wf_service.trg_validate(uid, 'stock.picking', pickid, 'button_confirm', cr) + if new_moves: + new_moves += self.create_chained_picking(cr, uid, new_moves, context) + return new_moves + def action_confirm(self, cr, uid, ids, context=None): """ Confirms stock move. @return: List of ids. @@ -1802,46 +1847,7 @@ class stock_move(osv.osv): move_obj = self.pool.get('stock.move') wf_service = netsvc.LocalService("workflow") - def create_chained_picking(self, cr, uid, moves, context=None): - new_moves = [] - if context is None: - context = {} - seq_obj = self.pool.get('ir.sequence') - for picking, todo in self._chain_compute(cr, uid, moves, context=context).items(): - ptype = todo[0][1][5] and todo[0][1][5] or location_obj.picking_type_get(cr, uid, todo[0][0].location_dest_id, todo[0][1][0]) - if picking: - # name of new picking according to its type - new_pick_name = seq_obj.get(cr, uid, 'stock.picking.' + ptype) - pickid = self._create_chained_picking(cr, uid, new_pick_name, picking, ptype, todo, context=context) - # Need to check name of old picking because it always considers picking as "OUT" when created from Sale Order - old_ptype = location_obj.picking_type_get(cr, uid, picking.move_lines[0].location_id, picking.move_lines[0].location_dest_id) - if old_ptype != picking.type: - old_pick_name = seq_obj.get(cr, uid, 'stock.picking.' + old_ptype) - self.pool.get('stock.picking').write(cr, uid, picking.id, {'name': old_pick_name}, context=context) - else: - pickid = False - for move, (loc, dummy, delay, dummy, company_id, ptype) in todo: - new_id = move_obj.copy(cr, uid, move.id, { - 'location_id': move.location_dest_id.id, - 'location_dest_id': loc.id, - 'date_moved': time.strftime('%Y-%m-%d'), - 'picking_id': pickid, - 'state': 'waiting', - 'company_id': company_id or res_obj._company_default_get(cr, uid, 'stock.company', context=context) , - 'move_history_ids': [], - 'date': (datetime.strptime(move.date, '%Y-%m-%d %H:%M:%S') + relativedelta(days=delay or 0)).strftime('%Y-%m-%d'), - 'move_history_ids2': []} - ) - move_obj.write(cr, uid, [move.id], { - 'move_dest_id': new_id, - 'move_history_ids': [(4, new_id)] - }) - new_moves.append(self.browse(cr, uid, [new_id])[0]) - if pickid: - wf_service.trg_validate(uid, 'stock.picking', pickid, 'button_confirm', cr) - if new_moves: - create_chained_picking(self, cr, uid, new_moves, context) - create_chained_picking(self, cr, uid, moves, context) + self.create_chained_picking(cr, uid, moves, context) return [] def action_assign(self, cr, uid, ids, *args): @@ -2109,6 +2115,8 @@ class stock_move(osv.osv): prodlot_id = partial_datas and partial_datas.get('move%s_prodlot_id' % (move.id), False) if prodlot_id: self.write(cr, uid, [move.id], {'prodlot_id': prodlot_id}, context=context) + if move.state not in ('confirmed','done'): + self.action_confirm(cr, uid, move_ids, context=context) self.write(cr, uid, move_ids, {'state': 'done', 'date_planned': time.strftime('%Y-%m-%d %H:%M:%S')}, context=context) for id in move_ids: |
