changeset b79478a78f7a in modules/account_payment_clearing:default
details: 
https://hg.tryton.org/modules/account_payment_clearing?cmd=changeset&node=b79478a78f7a
description:
        Use reference field for statement line relation

        issue6854
        review367971002
diffstat:

 CHANGELOG                                            |   1 +
 statement.py                                         |  89 +++++++------------
 statement.xml                                        |  25 -----
 tests/scenario_account_negative_payment_clearing.rst |   7 +-
 tests/scenario_account_payment_clearing.rst          |  14 +-
 tryton.cfg                                           |   1 -
 view/statement_line_form.xml                         |  12 --
 view/statement_line_tree.xml                         |   9 --
 8 files changed, 42 insertions(+), 116 deletions(-)

diffs (281 lines):

diff -r b3741c85f5dd -r b79478a78f7a CHANGELOG
--- a/CHANGELOG Sun Feb 13 23:52:20 2022 +0100
+++ b/CHANGELOG Wed Feb 23 00:01:17 2022 +0100
@@ -1,3 +1,4 @@
+* Use reference field for statement line relation
 * Add support for Python 3.10
 * Remove support for Python 3.6
 
diff -r b3741c85f5dd -r b79478a78f7a statement.py
--- a/statement.py      Sun Feb 13 23:52:20 2022 +0100
+++ b/statement.py      Wed Feb 23 00:01:17 2022 +0100
@@ -4,7 +4,7 @@
 
 from trytond.model import fields
 from trytond.pool import Pool, PoolMeta
-from trytond.pyson import Bool, Eval, If
+from trytond.pyson import Eval
 from trytond.transaction import Transaction
 
 
@@ -70,83 +70,58 @@
 
 class StatementLine(metaclass=PoolMeta):
     __name__ = 'account.statement.line'
-    payment = fields.Many2One('account.payment', 'Payment',
-        domain=[
-            ('company', '=', Eval('company', -1)),
-            If(Bool(Eval('party')), [('party', '=', Eval('party'))], []),
-            ('state', 'in', ['processing', 'succeeded', 'failed']),
-            ('currency', '=', Eval('currency', -1)),
-            ('kind', '=',
-                If(Eval('amount', 0) > 0, 'receivable',
-                    If(Eval('amount', 0) < 0, 'payable', ''))),
-            ],
-        states={
-            'invisible': Bool(Eval('payment_group')) | Bool(Eval('invoice')),
-            'readonly': Eval('statement_state') != 'draft',
-            },
-        search_order=[('amount', 'ASC'), ('state', 'ASC')],
-        search_context={
-            'amount_order': Eval('amount', 0),
-            },
-        depends=['company', 'party', 'currency', 'amount', 'statement_state'])
-    payment_group = fields.Many2One(
-        'account.payment.group', "Payment Group",
-        domain=[
-            ('company', '=', Eval('company', -1)),
-            ('currency', '=', Eval('currency', -1)),
-            ],
-        states={
-            'invisible': Bool(Eval('payment')) | Bool(Eval('invoice')),
-            'readonly': Eval('statement_state') != 'draft',
-            },
-        depends=['company', 'currency', 'statement_state'])
 
     @classmethod
     def __setup__(cls):
         super(StatementLine, cls).__setup__()
-        invoice_invisible = Bool(Eval('payment')) | Bool(Eval('payment_group'))
-        if 'invisible' in cls.invoice.states:
-            cls.invoice.states['invisible'] |= invoice_invisible
-        else:
-            cls.invoice.states['invisible'] = invoice_invisible
+        cls.related_to.domain['account.payment.group'] = [
+            ('company', '=', Eval('company', -1)),
+            ('currency', '=', Eval('currency', -1))
+            ]
+        for fname in ['company', 'currency']:
+            if fname not in cls.related_to.depends:
+                cls.related_to.depends.append(fname)
 
     @classmethod
-    def copy(cls, lines, default=None):
-        if default is None:
-            default = {}
-        else:
-            default = default.copy()
-        default.setdefault('payment', None)
-        default.setdefault('payment_group', None)
-        return super(StatementLine, cls).copy(lines, default=default)
+    def _get_relations(cls):
+        return super()._get_relations() + ['account.payment.group']
+
+    @property
+    @fields.depends('related_to')
+    def payment_group(self):
+        pool = Pool()
+        PaymentGroup = pool.get('account.payment.group')
+        related_to = getattr(self, 'related_to', None)
+        if isinstance(related_to, PaymentGroup) and related_to.id >= 0:
+            return related_to
 
-    @fields.depends('payment', 'party', 'account',
-        'statement', '_parent_statement.journal')
-    def on_change_payment(self):
+    @payment_group.setter
+    def payment_group(self, value):
+        self.related_to = value
+
+    @fields.depends(methods=['payment', 'payment_group'])
+    def on_change_related_to(self):
+        super().on_change_related_to()
         if self.payment:
-            if not self.party:
-                self.party = self.payment.party
             clearing_account = self.payment.journal.clearing_account
-            if clearing_account and self.account != clearing_account:
+            if clearing_account:
                 self.account = clearing_account
-
-    @fields.depends('payment_group', 'account')
-    def on_change_payment_group(self):
         if self.payment_group:
             self.party = None
             clearing_account = self.payment_group.journal.clearing_account
-            if clearing_account and self.account != clearing_account:
+            if clearing_account:
                 self.account = clearing_account
 
-    @fields.depends('party', 'payment')
+    @fields.depends('party', methods=['payment'])
     def on_change_party(self):
         super(StatementLine, self).on_change_party()
         if self.payment:
             if self.payment.party != self.party:
                 self.payment = None
-        self.payment_group = None
+        if self.party:
+            self.payment_group = None
 
-    @fields.depends('account', 'payment', 'payment_group')
+    @fields.depends('account', methods=['payment', 'payment_group'])
     def on_change_account(self):
         super(StatementLine, self).on_change_account()
         if self.payment:
diff -r b3741c85f5dd -r b79478a78f7a statement.xml
--- a/statement.xml     Sun Feb 13 23:52:20 2022 +0100
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
-this repository contains the full copyright notices and license terms. -->
-<tryton>
-    <data depends="account_statement">
-        <record model="ir.ui.view" id="statement_line_view_form">
-            <field name="model">account.statement.line</field>
-            <field name="inherit"
-                ref="account_statement.statement_line_view_form"/>
-            <field name="name">statement_line_form</field>
-        </record>
-        <record model="ir.ui.view" id="statement_line_view_tree">
-            <field name="model">account.statement.line</field>
-            <field name="inherit"
-                ref="account_statement.statement_line_view_tree"/>
-            <field name="name">statement_line_tree</field>
-        </record>
-        <record model="ir.ui.view" id="statement_line_view_tree_editable">
-            <field name="model">account.statement.line</field>
-            <field name="inherit"
-                ref="account_statement.statement_line_view_tree_editable"/>
-            <field name="name">statement_line_tree</field>
-        </record>
-    </data>
-</tryton>
diff -r b3741c85f5dd -r b79478a78f7a 
tests/scenario_account_negative_payment_clearing.rst
--- a/tests/scenario_account_negative_payment_clearing.rst      Sun Feb 13 
23:52:20 2022 +0100
+++ b/tests/scenario_account_negative_payment_clearing.rst      Wed Feb 23 
00:01:17 2022 +0100
@@ -12,13 +12,11 @@
     ...     get_company
     >>> from trytond.modules.account.tests.tools import create_fiscalyear, \
     ...     create_chart, get_accounts
-    >>> from trytond.modules.account_invoice.tests.tools import \
-    ...     set_fiscalyear_invoice_sequences
     >>> today = datetime.date.today()
 
 Activate modules::
 
-    >>> config = activate_modules(['account_payment_clearing', 
'account_statement'])
+    >>> config = activate_modules(['account_payment_clearing'])
 
 Create company::
 
@@ -27,8 +25,7 @@
 
 Create fiscal year::
 
-    >>> fiscalyear = set_fiscalyear_invoice_sequences(
-    ...     create_fiscalyear(company))
+    >>> fiscalyear = create_fiscalyear(company)
     >>> fiscalyear.click('create_period')
 
 Create chart of accounts::
diff -r b3741c85f5dd -r b79478a78f7a tests/scenario_account_payment_clearing.rst
--- a/tests/scenario_account_payment_clearing.rst       Sun Feb 13 23:52:20 
2022 +0100
+++ b/tests/scenario_account_payment_clearing.rst       Wed Feb 23 00:01:17 
2022 +0100
@@ -248,7 +248,7 @@
 
     >>> line = statement.lines.new(date=today)
     >>> line.amount = Decimal('-50.00')
-    >>> line.payment = payment
+    >>> line.related_to = payment
     >>> line.party == supplier
     True
     >>> line.account == bank_clearing
@@ -257,17 +257,17 @@
 Remove the party must remove payment::
 
     >>> line.party = None
-    >>> line.payment
+    >>> line.related_to
 
-    >>> line.payment = payment
+    >>> line.related_to = payment
 
 Change account must remove payment::
 
     >>> line.account = receivable
-    >>> line.payment
+    >>> line.related_to
 
     >>> line.account = None
-    >>> line.payment = payment
+    >>> line.related_to = payment
 
 Validate statement::
 
@@ -291,7 +291,7 @@
     ...     end_balance=Decimal('0.00'),
     ...     )
     >>> line = statement.lines.new(date=today)
-    >>> line.payment_group = payment.group
+    >>> line.related_to = payment.group
     >>> line.account == bank_clearing
     True
     >>> line.amount = Decimal('50.00')
@@ -436,7 +436,7 @@
     ...     end_balance=Decimal('-50.00'))
     >>> line = statement.lines.new(date=yesterday)
     >>> line.amount = Decimal('-50.00')
-    >>> line.payment = payment
+    >>> line.related_to = payment
     >>> line.party == supplier
     True
     >>> line.account == bank_clearing
diff -r b3741c85f5dd -r b79478a78f7a tryton.cfg
--- a/tryton.cfg        Sun Feb 13 23:52:20 2022 +0100
+++ b/tryton.cfg        Wed Feb 23 00:01:17 2022 +0100
@@ -8,4 +8,3 @@
     account_statement_rule
 xml:
     payment.xml
-    statement.xml
diff -r b3741c85f5dd -r b79478a78f7a view/statement_line_form.xml
--- a/view/statement_line_form.xml      Sun Feb 13 23:52:20 2022 +0100
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
-this repository contains the full copyright notices and license terms. -->
-<data>
-    <xpath expr="/form/field[@name='invoice']" position="after">
-        <newline/>
-        <label name="payment"/>
-        <field name="payment"/>
-        <label name="payment_group"/>
-        <field name="payment_group"/>
-    </xpath>
-</data>
diff -r b3741c85f5dd -r b79478a78f7a view/statement_line_tree.xml
--- a/view/statement_line_tree.xml      Sun Feb 13 23:52:20 2022 +0100
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
-this repository contains the full copyright notices and license terms. -->
-<data>
-    <xpath expr="/tree/field[@name='invoice']" position="after">
-        <field name="payment"/>
-        <field name="payment_group"/>
-    </xpath>
-</data>

Reply via email to