diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index f3304c8020d..4fe26020b39 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -302,10 +302,10 @@ class purchase_order(osv.osv):
order_line_ids = [order_line.id for order_line in order.order_line]
lines += order_line_ids
line.write(cr, uid, order_line_ids, {'state': status}, context=context)
- if lines:
+ if lines and status == 'cancel':
procs = proc_obj.search(cr, uid, [('purchase_line_id', 'in', lines)], context=context)
if procs:
- proc_obj.write(cr, uid, procs, {'state': 'cancel'}, context=context)
+ proc_obj.write(cr, uid, procs, {'state': 'exception'}, context=context)
return True
def button_dummy(self, cr, uid, ids, context=None):
@@ -620,10 +620,6 @@ class purchase_order(osv.osv):
return True
return False
- def wkf_action_cancel(self, cr, uid, ids, context=None):
- self.write(cr, uid, ids, {'state': 'cancel'})
- self.set_order_line_status(cr, uid, ids, 'cancel', context=context)
-
def action_cancel(self, cr, uid, ids, context=None):
for purchase in self.browse(cr, uid, ids, context=context):
@@ -638,11 +634,12 @@ class purchase_order(osv.osv):
if inv and inv.state not in ('cancel', 'draft'):
raise osv.except_osv(
_('Unable to cancel this purchase order.'),
- _('You must first cancel all receptions related to this purchase order.'))
+ _('You must first cancel all invoices related to this purchase order.'))
self.pool.get('account.invoice') \
.signal_invoice_cancel(cr, uid, map(attrgetter('id'), purchase.invoice_ids))
self.write(cr, uid, ids, {'state': 'cancel'})
self.set_order_line_status(cr, uid, ids, 'cancel', context=context)
+
self.signal_purchase_cancel(cr, uid, ids)
return True
diff --git a/addons/purchase/purchase_workflow.xml b/addons/purchase/purchase_workflow.xml
index fe6b5a3f045..810c0a74064 100644
--- a/addons/purchase/purchase_workflow.xml
+++ b/addons/purchase/purchase_workflow.xml
@@ -37,7 +37,7 @@
cancel
function
True
- wkf_action_cancel()
+ action_cancel()