From 6057e645d6724692dbfc287fd650480f007d2028 Mon Sep 17 00:00:00 2001 From: Goffin Simon Date: Thu, 14 Apr 2016 09:50:10 +0200 Subject: [PATCH] =?UTF-8?q?[FIX]=C2=A0purchase:=20Shipping=20=20exception?= =?UTF-8?q?=20when=20cancelling=20a=20PO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When canceling and clicking on "reset to draft" button a PO with invoicing method = Based on generated draft invoice, the purchase workflow led to a shipping exception. To be in state done the PO must have: All its PO lines invoiced with _set_po_lines_invoiced All its incoming shipments done with test_moves_done opw:673561 --- addons/purchase/purchase.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 63131ec104d..cbeb2325124 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -653,6 +653,14 @@ class purchase_order(osv.osv): return False self.write(cr, uid, ids, {'state':'draft','shipped':0}) self.set_order_line_status(cr, uid, ids, 'draft', context=context) + for po in self.browse(cr, SUPERUSER_ID, ids, context=context): + for picking in po.picking_ids: + picking.move_lines.write({'purchase_line_id': False}) + for invoice in po.invoice_ids: + po.write({'invoice_ids': [(3, invoice.id, _)]}) + for po_line in po.order_line: + for invoice_line in po_line.invoice_lines: + po_line.write({'invoice_lines': [(3, invoice_line.id, _)]}) for p_id in ids: # Deleting the existing instance of workflow for PO self.delete_workflow(cr, uid, [p_id]) # TODO is it necessary to interleave the calls?