changeset 90cc8fdb0fd2 in modules/account_statement:default
details: 
https://hg.tryton.org/modules/account_statement?cmd=changeset;node=90cc8fdb0fd2
description:
        Warn user when posting a statement with canceled or paid lines

        issue9729
        review329371002
diffstat:

 CHANGELOG    |   1 +
 message.xml  |   3 +++
 statement.py |  17 ++++++++++++++++-
 3 files changed, 20 insertions(+), 1 deletions(-)

diffs (56 lines):

diff -r 8d7e2b001590 -r 90cc8fdb0fd2 CHANGELOG
--- a/CHANGELOG Tue Feb 09 00:32:17 2021 +0100
+++ b/CHANGELOG Fri Feb 12 20:20:09 2021 +0100
@@ -1,3 +1,4 @@
+* Warn user when posting a statement with cancelled or paid invoices
 * Fill move line's origin with statement line
 
 Version 5.8.0 - 2020-11-02
diff -r 8d7e2b001590 -r 90cc8fdb0fd2 message.xml
--- a/message.xml       Tue Feb 09 00:32:17 2021 +0100
+++ b/message.xml       Fri Feb 12 20:20:09 2021 +0100
@@ -27,6 +27,9 @@
         <record model="ir.message" id="msg_statement_delete_cancel">
             <field name="text">To delete statement "%(statement)s" you must 
cancel it.</field>
         </record>
+        <record model="ir.message" id="msg_statement_invoice_paid_cancelled">
+            <field name="text">The validation of the statements will remove 
already paid or cancelled invoices from the statements' lines.</field>
+        </record>
         <record model="ir.message" id="msg_statement_paid_invoice_draft">
             <field name="text">The validation of the statements will remove 
paid invoices from other statements.</field>
         </record>
diff -r 8d7e2b001590 -r 90cc8fdb0fd2 statement.py
--- a/statement.py      Tue Feb 09 00:32:17 2021 +0100
+++ b/statement.py      Fri Feb 12 20:20:09 2021 +0100
@@ -1,5 +1,6 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import hashlib
 from decimal import Decimal
 from collections import namedtuple, defaultdict
 from itertools import groupby
@@ -499,9 +500,23 @@
         pool = Pool()
         Line = pool.get('account.statement.line')
         Warning = pool.get('res.user.warning')
-
+        paid_cancelled_invoice_lines = []
         for statement in statements:
             getattr(statement, 'validate_%s' % statement.validation)()
+            paid_cancelled_invoice_lines.extend(l for l in statement.lines
+                if l.invoice and l.invoice.state in {'cancelled', 'paid'})
+
+        if paid_cancelled_invoice_lines:
+            warning_key = ('%s.statement_paid_cancelled_invoice_lines' %
+                    hashlib.md5(str(paid_cancelled_invoice_lines).encode(
+                        'utf-8')).hexdigest())
+            if Warning.check(warning_key):
+                raise StatementValidateWarning(warning_key,
+                    gettext('account_statement'
+                        '.msg_statement_invoice_paid_cancelled'))
+            Line.write(paid_cancelled_invoice_lines, {
+                    'invoice': None,
+                    })
 
         cls.create_move(statements)
 

Reply via email to