Use the date of the statement as date for the clearing move

issue9030
review253031002
This commit is contained in:
Sebastien Marie
2020-03-20 19:10:30 +01:00
parent 9f87db83ff
commit e57f1677e8
3 changed files with 17 additions and 7 deletions
+2
View File
@@ -1,3 +1,5 @@
* Use the date of the statement line as date for the clearing move
Version 5.4.0 - 2019-11-04
* Bug fixes (see mercurial logs for details)
* Relax Account domain on Payment
+12 -6
View File
@@ -1,5 +1,7 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from collections import defaultdict
from trytond.pool import PoolMeta, Pool
from trytond.model import fields
from trytond.pyson import Eval, If, Bool
@@ -17,8 +19,8 @@ class Statement(metaclass=PoolMeta):
moves = super(Statement, cls).create_move(statements)
to_success = set()
to_fail = set()
to_success = defaultdict(set)
to_fail = defaultdict(set)
for move, statement, lines in moves:
for line in lines:
if line.payment:
@@ -30,15 +32,19 @@ class Statement(metaclass=PoolMeta):
else:
continue
if (kind == 'receivable') == (line.amount >= 0):
to_success.update(payments)
to_success[line.date].update(payments)
else:
to_fail.update(payments)
to_fail[line.date].update(payments)
# The failing should be done last because success is usually not a
# definitive state
if to_success:
Payment.succeed(Payment.browse(to_success))
for date, payments in to_success.items():
with Transaction().set_context(clearing_date=date):
Payment.succeed(Payment.browse(payments))
if to_fail:
Payment.fail(Payment.browse(to_fail))
for date, payments in to_fail.items():
with Transaction().set_context(clearing_date=date):
Payment.fail(Payment.browse(payments))
for move, statement, lines in moves:
assert len({l.payment for l in lines}) == 1
+3 -1
View File
@@ -445,7 +445,7 @@ Create statement for the payment::
... journal=statement_journal,
... start_balance=Decimal('0.00'),
... end_balance=Decimal('-50.00'))
>>> line = statement.lines.new(date=today)
>>> line = statement.lines.new(date=yesterday)
>>> line.payment = payment
>>> line.party == supplier
True
@@ -471,3 +471,5 @@ Validate statement and check the payment is confirmed::
>>> debit_line, = [l for l in payment.clearing_move.lines if l.debit > 0]
>>> debit_line.debit
Decimal('50.00')
>>> debit_line.date == yesterday
True