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>