changeset d2c8efc42ea4 in modules/account_invoice:5.6
details:
https://hg.tryton.org/modules/account_invoice?cmd=changeset;node=d2c8efc42ea4
description:
Update status of invoices linked to delegated reconciliations on
deletion
issue9947
review319031003
(grafted from eaeae8354d527083865c6ed8e57c44053ad6c0a7)
diffstat:
account.py | 49 ++++++++++++++++++----------------
tests/scenario_invoice_group_line.rst | 13 +++++++++
2 files changed, 39 insertions(+), 23 deletions(-)
diffs (93 lines):
diff -r 2fbe44afeb6b -r d2c8efc42ea4 account.py
--- a/account.py Fri Jan 01 16:55:34 2021 +0100
+++ b/account.py Tue Jan 05 12:16:02 2021 +0100
@@ -257,6 +257,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'
@@ -264,36 +287,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 2fbe44afeb6b -r d2c8efc42ea4 tests/scenario_invoice_group_line.rst
--- a/tests/scenario_invoice_group_line.rst Fri Jan 01 16:55:34 2021 +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'