Files
tradon/modules/account_payment/tests/scenario_account_payment_dunning.rst
2026-03-14 09:42:12 +00:00

129 lines
3.3 KiB
ReStructuredText

================================
Account Payment Dunning Scenario
================================
Imports::
>>> import datetime as dt
>>> from decimal import Decimal
>>> from proteus import Model, Wizard
>>> from trytond.modules.account.tests.tools import (
... create_chart, create_fiscalyear, get_accounts)
>>> from trytond.modules.company.tests.tools import create_company
>>> from trytond.tests.tools import activate_modules, assertEqual
>>> today = dt.date.today()
Activate modules::
>>> config = activate_modules(
... ['account_payment', 'account_dunning'], create_company, create_chart)
>>> Dunning = Model.get('account.dunning')
>>> Journal = Model.get('account.journal')
>>> Move = Model.get('account.move')
>>> Party = Model.get('party.party')
>>> PaymentJournal = Model.get('account.payment.journal')
>>> Procedure = Model.get('account.dunning.procedure')
Get accounts::
>>> accounts = get_accounts()
>>> expense_journal, = Journal.find([('code', '=', 'EXP')])
Create fiscal year::
>>> fiscalyear = create_fiscalyear(today=today)
>>> fiscalyear.click('create_period')
Create dunning procedure::
>>> procedure = Procedure(name='Procedure')
>>> level = procedure.levels.new(overdue=dt.timedelta(0))
>>> procedure.save()
Create payment journal::
>>> payment_journal = PaymentJournal(
... name='Manual',
... process_method='manual')
>>> payment_journal.save()
Create parties::
>>> customer = Party(name='Customer')
>>> customer.dunning_procedure = procedure
>>> customer.save()
Create payable move::
>>> move = Move()
>>> move.journal = expense_journal
>>> line = move.lines.new()
>>> line.party = customer
>>> line.account = accounts['receivable']
>>> line.debit = Decimal('50.00')
>>> line.maturity_date = today
>>> line = move.lines.new()
>>> line.account = accounts['revenue']
>>> line.credit = Decimal('50.00')
>>> move.click('post')
Make a payment::
>>> line, = [l for l in move.lines if l.account == accounts['receivable']]
>>> line.payment_amount
Decimal('50.00')
>>> pay_line = Wizard('account.move.line.pay', [line])
>>> pay_line.execute('next_')
>>> pay_line.execute('next_')
>>> payment, = line.payments
>>> line.payment_amount
Decimal('0.00')
Create no dunning::
>>> create_dunning = Wizard('account.dunning.create')
>>> create_dunning.execute('create_')
>>> Dunning.find([])
[]
Fail the payment::
>>> payment.click('submit')
>>> process_payment = payment.click('process_wizard')
>>> group, = process_payment.actions[0]
>>> assertEqual(group.payments, [payment])
>>> payment.click('fail')
>>> payment.state
'failed'
>>> line.reload()
>>> line.payment_amount
Decimal('50.00')
Create dunning::
>>> create_dunning = Wizard('account.dunning.create')
>>> create_dunning.execute('create_')
>>> dunning, = Dunning.find([])
>>> assertEqual(dunning.line, line)
Recreate a payment::
>>> pay_line = Wizard('account.move.line.pay', [line])
>>> pay_line.execute('next_')
>>> pay_line.execute('next_')
>>> _, payment = line.payments
>>> payment.state
'draft'
Dunning is inactive::
>>> dunning.reload()
>>> dunning.active
False
>>> Dunning.find([])
[]