changeset cbca58c85330 in modules/account_payment:default
details:
https://hg.tryton.org/modules/account_payment?cmd=changeset&node=cbca58c85330
description:
Use reference field for statement line relation
issue6854
review367971002
diffstat:
CHANGELOG | 1 +
__init__.py | 3 +++
account.py | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
tryton.cfg | 1 +
4 files changed, 63 insertions(+), 1 deletions(-)
diffs (108 lines):
diff -r e8595979f961 -r cbca58c85330 CHANGELOG
--- a/CHANGELOG Tue Feb 15 00:08:47 2022 +0100
+++ b/CHANGELOG Wed Feb 23 00:01:17 2022 +0100
@@ -1,3 +1,4 @@
+* Use reference field for statement line relation
* Do not create dunning for line with pending payment
* Add support for Python 3.10
* Remove support for Python 3.6
diff -r e8595979f961 -r cbca58c85330 __init__.py
--- a/__init__.py Tue Feb 15 00:08:47 2022 +0100
+++ b/__init__.py Wed Feb 23 00:01:17 2022 +0100
@@ -25,6 +25,9 @@
account.Invoice,
module='account_payment', type_='model', depends=['account_invoice'])
Pool.register(
+ account.StatementLine,
+ module='account_payment', type_='model', depends=['account_statement'])
+ Pool.register(
account.Dunning,
module='account_payment', type_='model', depends=['account_dunning'])
Pool.register(
diff -r e8595979f961 -r cbca58c85330 account.py
--- a/account.py Tue Feb 15 00:08:47 2022 +0100
+++ b/account.py Wed Feb 23 00:01:17 2022 +0100
@@ -14,7 +14,7 @@
from trytond.modules.company.model import CompanyValueMixin
from trytond.modules.currency.fields import Monetary
from trytond.pool import Pool, PoolMeta
-from trytond.pyson import Eval, Id
+from trytond.pyson import Bool, Eval, Id, If
from trytond.tools.multivalue import migrate_property
from trytond.transaction import Transaction
from trytond.wizard import (
@@ -569,6 +569,63 @@
return amounts
+class StatementLine(metaclass=PoolMeta):
+ __name__ = 'account.statement.line'
+
+ @classmethod
+ def __setup__(cls):
+ super().__setup__()
+ cls.related_to.domain['account.payment'] = [
+ ('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', ''))),
+ ]
+ cls.related_to.search_order['account.payment'] = [
+ ('amount', 'ASC'),
+ ('state', 'ASC'),
+ ]
+ cls.related_to.search_context.update({
+ 'amount_order': Eval('amount', 0),
+ })
+ for field in ['company', 'party', 'currency', 'amount']:
+ if field not in cls.related_to.depends:
+ cls.related_to.depends.append(field)
+
+ @classmethod
+ def _get_relations(cls):
+ return super()._get_relations() + ['account.payment']
+
+ @property
+ @fields.depends('related_to')
+ def payment(self):
+ pool = Pool()
+ Payment = pool.get('account.payment')
+ related_to = getattr(self, 'related_to', None)
+ if isinstance(related_to, Payment) and related_to.id >= 0:
+ return related_to
+
+ @payment.setter
+ def payment(self, value):
+ self.related_to = value
+
+ @fields.depends(
+ 'party', 'statement', '_parent_statement.journal',
+ methods=['payment'])
+ def on_change_related_to(self):
+ super().on_change_related_to()
+ if self.payment:
+ if not self.party:
+ self.party = self.payment.party
+ if self.payment.line:
+ self.account = self.payment.line.account
+
+
class Dunning(metaclass=PoolMeta):
__name__ = 'account.dunning'
diff -r e8595979f961 -r cbca58c85330 tryton.cfg
--- a/tryton.cfg Tue Feb 15 00:08:47 2022 +0100
+++ b/tryton.cfg Wed Feb 23 00:01:17 2022 +0100
@@ -10,6 +10,7 @@
extras_depend:
account_dunning
account_invoice
+ account_statement
xml:
payment.xml
account.xml