changeset eaeae8354d52 in modules/account_invoice:default
details: 
https://hg.tryton.org/modules/account_invoice?cmd=changeset;node=eaeae8354d52
description:
        Update status of invoices linked to delegated reconciliations on 
deletion

        issue9947
        review319031003
diffstat:

 account.py                            |  49 ++++++++++++++++++----------------
 tests/scenario_invoice_group_line.rst |  13 +++++++++
 2 files changed, 39 insertions(+), 23 deletions(-)

diffs (93 lines):

diff -r 5cbde9e252db -r eaeae8354d52 account.py
--- a/account.py        Sun Dec 27 00:19:30 2020 +0100
+++ b/account.py        Tue Jan 05 12:16:02 2021 +0100
@@ -282,6 +282,29 @@
         return product
 
 
+def _invoices_to_process(reconciliations):
+    pool = Pool()
+    Reconciliation = pool.get('account.move.reconciliation')
+    Invoice = pool.get('account.invoice')
+
+    move_ids = set()
+    others = set()
+    for reconciliation in reconciliations:
+        for line in reconciliation.lines:
+            move_ids.add(line.move.id)
+            others.update(line.reconciliations_delegated)
+
+    invoices = set()
+    for sub_ids in grouped_slice(move_ids):
+        invoices.update(Invoice.search([
+                    ('move', 'in', list(sub_ids)),
+                    ]))
+    if others:
+        invoices.update(_invoices_to_process(Reconciliation.browse(others)))
+
+    return invoices
+
+
 class Reconciliation(metaclass=PoolMeta):
     __name__ = 'account.move.reconciliation'
 
@@ -289,36 +312,16 @@
     def create(cls, vlist):
         Invoice = Pool().get('account.invoice')
         reconciliations = super(Reconciliation, cls).create(vlist)
-
-        def process(reconciliations):
-            move_ids = set()
-            others = set()
-            for reconciliation in reconciliations:
-                for line in reconciliation.lines:
-                    move_ids.add(line.move.id)
-                    others.update(line.reconciliations_delegated)
-            if others:
-                move_ids.update(process(cls.browse(others)))
-            return move_ids
-        move_ids = process(reconciliations)
-        invoices = set()
-        for sub_ids in grouped_slice(move_ids):
-            invoices.update(Invoice.search([
-                        ('move', 'in', list(sub_ids)),
-                        ]))
-        Invoice.process(Invoice.browse(invoices))
+        Invoice.process(list(_invoices_to_process(reconciliations)))
         return reconciliations
 
     @classmethod
     def delete(cls, reconciliations):
         Invoice = Pool().get('account.invoice')
 
-        move_ids = set(l.move.id for r in reconciliations for l in r.lines)
-        invoices = Invoice.search([
-                ('move', 'in', list(move_ids)),
-                ])
+        invoices_to_process = _invoices_to_process(reconciliations)
         super(Reconciliation, cls).delete(reconciliations)
-        Invoice.process(invoices)
+        Invoice.process(list(invoices_to_process))
 
 
 class RenewFiscalYear(metaclass=PoolMeta):
diff -r 5cbde9e252db -r eaeae8354d52 tests/scenario_invoice_group_line.rst
--- a/tests/scenario_invoice_group_line.rst     Sun Dec 27 00:19:30 2020 +0100
+++ b/tests/scenario_invoice_group_line.rst     Tue Jan 05 12:16:02 2021 +0100
@@ -124,3 +124,16 @@
     >>> supplier_invoice.reload()
     >>> supplier_invoice.state
     'paid'
+
+Remove the created reconciliation::
+
+    >>> Reconciliation = Model.get('account.move.reconciliation')
+    >>> reconciliation, = Reconciliation.find([('lines', '=', lines[0].id)])
+    >>> Reconciliation.delete([reconciliation])
+
+    >>> invoice.reload()
+    >>> invoice.state
+    'posted'
+    >>> supplier_invoice.reload()
+    >>> supplier_invoice.state
+    'posted'

Reply via email to