From 316be12a3c3b4bcacd4ddf3d7a977497c79207fd Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Thu, 23 Apr 2015 17:36:07 +0200 Subject: [PATCH] [FIX] purchase: mark order as invoiced when fully invoiced only Make sure the purchase order is marked as invoiced only when fully invoiced. If the invoices are generated on delivery order (invoice_method picking), make sure all products are delivered before setting it as invoiced. opw 614256 --- addons/purchase/purchase.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 8059e2d7788..7c327139a2d 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -1328,10 +1328,16 @@ class account_invoice(osv.Model): for order in purchase_order_obj.browse(cr, uid, po_ids, context=context): # Signal purchase order workflow that an invoice has been validated. invoiced = [] + shipped = True + # for invoice method manual or order, don't care about shipping state + # for invoices based on incoming shippment, beware of partial deliveries + if (order.invoice_method == 'picking' and + not all(picking.invoice_state in ['invoiced'] for picking in order.picking_ids)): + shipped = False for po_line in order.order_line: - if any(line.invoice_id.state not in ['draft', 'cancel'] for line in po_line.invoice_lines): + if all(line.invoice_id.state not in ['draft', 'cancel'] for line in po_line.invoice_lines): invoiced.append(po_line.id) - if invoiced: + if invoiced and shipped: self.pool['purchase.order.line'].write(cr, uid, invoiced, {'invoiced': True}) wf_service.trg_write(uid, 'purchase.order', order.id, cr) return res