From 7fe0d4f8407418b00a1f527438c706ea2bf3d955 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Wed, 4 Sep 2013 17:01:37 +0200 Subject: [PATCH] [FIX] purchase: workflow of PO wasn't correctly updated bzr revid: qdp-launchpad@openerp.com-20130904150137-og2bu4ineae2o2ax --- addons/purchase/purchase.py | 33 ++++++++++++--------------- addons/purchase/purchase_workflow.xml | 4 ++-- addons/purchase/stock.py | 6 +++-- addons/stock/stock.py | 5 ++-- 4 files changed, 22 insertions(+), 26 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index aa14c8f26c1..4d42b22c65b 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -745,30 +745,26 @@ class purchase_order(osv.osv): return [picking_id] def test_moves_done(self, cr, uid, ids, context=None): - done = True + '''PO is done at the delivery side if all the incoming shipments are done''' for purchase in self.browse(cr, uid, ids, context=context): - for line in purchase.order_line: - for move in line.move_ids: - if move.state != 'done': - done = False - return done - + for picking in purchase.picking_ids: + if picking.state != 'done': + return False + return True def test_moves_except(self, cr, uid, ids, context=None): + ''' PO is in exception at the delivery side if one of the picking is canceled + and the other pickings are completed (done or canceled) ''' - If one of the pickings is cancel and the other pickings are done: except - ''' - cancel = False + at_least_one_canceled = False alldoneorcancel = True for purchase in self.browse(cr, uid, ids, context=context): - for line in purchase.order_line: - for move in line.move_ids: - if move.state == 'cancel': - cancel = True - if move.state not in ['done', 'cancel']: - alldoneorcancel = False - return cancel and alldoneorcancel - + for picking in purchase.picking_ids: + if picking.state == 'cancel': + at_least_one_canceled = True + if picking.state not in ['done', 'cancel']: + alldoneorcancel = False + return at_least_one_canceled and alldoneorcancel def move_lines_get(self, cr, uid, ids, *args): res = [] @@ -777,7 +773,6 @@ class purchase_order(osv.osv): res += [x.id for x in line.move_ids] return res - def action_picking_create(self, cr, uid, ids, context=None): picking_ids = [] for order in self.browse(cr, uid, ids): diff --git a/addons/purchase/purchase_workflow.xml b/addons/purchase/purchase_workflow.xml index 294dad28d92..176c133bcc6 100644 --- a/addons/purchase/purchase_workflow.xml +++ b/addons/purchase/purchase_workflow.xml @@ -186,13 +186,13 @@ purchase_cancel - + diff --git a/addons/purchase/stock.py b/addons/purchase/stock.py index 2da42f8f5d3..ef1d5107093 100644 --- a/addons/purchase/stock.py +++ b/addons/purchase/stock.py @@ -29,8 +29,10 @@ class stock_move(osv.osv): readonly=True), } - def action_done(self, cr ,uid, ids, context=None): - res = super(stock_move, self).action_done(cr, uid, ids, context) + def write(self, cr, uid, ids, vals, context=None): + if isinstance(ids, (int, long)): + ids = [ids] + res = super(stock_move, self).write(cr, uid, ids, vals, context=context) wf_service = netsvc.LocalService('workflow') for id in ids: wf_service.trg_trigger(uid, 'stock.move', id, cr) diff --git a/addons/stock/stock.py b/addons/stock/stock.py index de28462f03e..21ad4f93f11 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -2397,11 +2397,10 @@ class stock_picking_type(osv.osv): res = [] if not ids: return res - reads = self.browse(cr, uid, ids, context=context) - for record in reads: + for record in self.browse(cr, uid, ids, context=context): name = record.name if record.warehouse_id: - name = record.warehouse_id.name+': '+name + name = record.warehouse_id.name + ': ' +name res.append((record.id, name)) return res