From db2ba660c4b8e23324dfc228c5aaff77a8220ad6 Mon Sep 17 00:00:00 2001 From: Sergi Almacellas Abellana Date: Wed, 18 Jan 2017 10:18:29 +0100 Subject: [PATCH] Reprocess sale when deleting invoice lines issue6131 review31821002 --- invoice.py | 13 +++++++++++++ tests/scenario_sale.rst | 22 ++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/invoice.py b/invoice.py index 09f351c61f..d58a62d434 100644 --- a/invoice.py +++ b/invoice.py @@ -156,3 +156,16 @@ class InvoiceLine: models = super(InvoiceLine, cls)._get_origin() models.append('sale.line') return models + + @classmethod + def delete(cls, lines): + pool = Pool() + Sale = pool.get('sale.sale') + with Transaction().set_context(_check_access=False): + lines = cls.browse(lines) + invoices = (l.invoice for l in lines + if l.type == 'line' and l.invoice) + sales = [s for i in invoices for s in i.sales] + super(InvoiceLine, cls).delete(lines) + with Transaction().set_context(_check_access=False): + Sale.process(sales) diff --git a/tests/scenario_sale.rst b/tests/scenario_sale.rst index b24ee78920..1eefd9ab19 100644 --- a/tests/scenario_sale.rst +++ b/tests/scenario_sale.rst @@ -697,3 +697,25 @@ invoices:: 5.0 >>> stock_move.state u'draft' + +Deleting a line from a invoice should recreate it:: + + >>> sale = Sale() + >>> sale.party = customer + >>> line = sale.lines.new() + >>> line.product = product + >>> line.quantity = 10.0 + >>> sale.click('quote') + >>> sale.click('confirm') + >>> sale.click('process') + >>> invoice, = sale.invoices + >>> config.user = account_user.id + >>> invoice_line, = invoice.lines + >>> invoice.lines.remove(invoice_line) + >>> invoice.click('post') + >>> config.user = sale_user.id + >>> sale.reload() + >>> new_invoice, = sale.invoices + >>> new_invoice.number + >>> len(new_invoice.lines) + 1