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