Files
tryton/modules/account_dunning/tests/scenario_account_dunning.rst
T

262 lines
8.1 KiB
ReStructuredText
Raw Normal View History

2013-09-18 22:52:41 +02:00
========================
Account Dunning Scenario
========================
Imports::
>>> import datetime
>>> from decimal import Decimal
2024-01-14 19:21:56 +01:00
>>> from dateutil.relativedelta import relativedelta
2016-08-26 09:58:08 +02:00
>>> from proteus import Model, Wizard
2024-01-14 19:21:56 +01:00
>>> from trytond.modules.account.tests.tools import (
... create_chart, create_fiscalyear, get_accounts)
>>> from trytond.modules.company.tests.tools import create_company, get_company
2023-12-29 19:02:08 +01:00
>>> from trytond.tests.tools import (
2024-01-14 19:21:56 +01:00
... activate_modules, assertEqual, assertTrue, set_user)
2013-09-18 22:52:41 +02:00
>>> today = datetime.date.today()
Activate modules::
2013-09-18 22:52:41 +02:00
>>> config = activate_modules('account_dunning')
2013-09-18 22:52:41 +02:00
Create company::
>>> _ = create_company()
>>> company = get_company()
2013-09-18 22:52:41 +02:00
2016-08-26 09:58:08 +02:00
Create account admin user::
2013-09-18 22:52:41 +02:00
>>> User = Model.get('res.user')
>>> Group = Model.get('res.group')
>>> account_admin_user = User()
>>> account_admin_user.name = 'Account Admin'
>>> account_admin_user.login = 'account_admin'
>>> account_admin_group, = Group.find([
... ('name', '=', 'Account Administration'),
... ])
>>> account_admin_user.groups.append(account_admin_group)
>>> account_admin_user.save()
Create account user::
>>> account_user = User()
>>> account_user.name = 'Account'
>>> account_user.login = 'account'
>>> account_group, = Group.find([
... ('name', '=', 'Account'),
... ])
>>> account_user.groups.append(account_group)
>>> account_user.save()
Create dunning user::
>>> dunning_user = User()
>>> dunning_user.name = 'Dunning'
>>> dunning_user.login = 'dunning'
>>> dunning_group, = Group.find([('name', '=', 'Dunning')])
>>> dunning_user.groups.append(dunning_group)
>>> dunning_user.save()
Create fiscal year::
>>> fiscalyear = create_fiscalyear(company)
>>> fiscalyear.click('create_period')
2013-09-18 22:52:41 +02:00
>>> period = fiscalyear.periods[0]
Create chart of accounts::
>>> _ = create_chart(company)
>>> accounts = get_accounts(company)
>>> receivable = accounts['receivable']
>>> revenue = accounts['revenue']
>>> cash = accounts['cash']
2013-09-18 22:52:41 +02:00
Create dunning procedure::
2017-08-02 19:38:13 +02:00
>>> set_user(account_admin_user)
2013-09-18 22:52:41 +02:00
>>> Procedure = Model.get('account.dunning.procedure')
>>> procedure = Procedure(name='Procedure')
>>> level = procedure.levels.new()
>>> level.sequence = 1
2016-09-02 10:56:01 +02:00
>>> level.overdue = datetime.timedelta(5)
2013-09-18 22:52:41 +02:00
>>> level = procedure.levels.new()
>>> level.sequence = 2
2016-09-02 10:56:01 +02:00
>>> level.overdue = datetime.timedelta(20)
2013-09-18 22:52:41 +02:00
>>> level = procedure.levels.new()
>>> level.sequence = 3
2016-09-02 10:56:01 +02:00
>>> level.overdue = datetime.timedelta(40)
2013-09-18 22:52:41 +02:00
>>> procedure.save()
Create parties::
>>> Party = Model.get('party.party')
>>> customer = Party(name='Customer')
>>> customer.dunning_procedure = procedure
>>> customer.save()
Create some moves::
2017-08-02 19:38:13 +02:00
>>> set_user(account_user)
2013-09-18 22:52:41 +02:00
>>> Journal = Model.get('account.journal')
>>> Move = Model.get('account.move')
>>> journal_revenue, = Journal.find([
... ('code', '=', 'REV'),
... ])
>>> journal_cash, = Journal.find([
... ('code', '=', 'CASH'),
... ])
>>> move = Move()
>>> move.period = period
>>> move.journal = journal_revenue
>>> move.date = period.start_date
>>> line = move.lines.new()
>>> line.account = revenue
>>> line.credit = Decimal(100)
>>> line = move.lines.new()
>>> line.account = receivable
>>> line.debit = Decimal(100)
>>> line.party = customer
>>> line.maturity_date = period.start_date
>>> move.save()
>>> reconcile1, = [l for l in move.lines if l.account == receivable]
>>> move = Move()
>>> move.period = period
>>> move.journal = journal_cash
>>> move.date = period.start_date
>>> line = move.lines.new()
>>> line.account = cash
>>> line.debit = Decimal(100)
>>> line = move.lines.new()
>>> line.account = receivable
>>> line.credit = Decimal(100)
>>> line.party = customer
>>> move.save()
>>> reconcile2, = [l for l in move.lines if l.account == receivable]
>>> reconcile_lines = Wizard('account.move.reconcile_lines',
... [reconcile1, reconcile2])
>>> move = Move()
>>> move.period = period
>>> move.journal = journal_revenue
>>> move.date = period.start_date
>>> line = move.lines.new()
>>> line.account = revenue
>>> line.credit = Decimal(100)
>>> line = move.lines.new()
>>> line.account = receivable
>>> line.debit = Decimal(100)
>>> line.party = customer
>>> line.maturity_date = period.start_date
>>> move.save()
>>> dunning_line, = [l for l in move.lines if l.account == receivable]
Create dunnings on 4 days::
2017-08-02 19:38:13 +02:00
>>> set_user(dunning_user)
2013-09-18 22:52:41 +02:00
>>> Dunning = Model.get('account.dunning')
>>> create_dunning = Wizard('account.dunning.create')
>>> create_dunning.form.date = period.start_date + relativedelta(days=4)
>>> create_dunning.execute('create_')
>>> Dunning.find([])
[]
Create dunnings on 5 days::
>>> create_dunning = Wizard('account.dunning.create')
>>> create_dunning.form.date = period.start_date + relativedelta(days=5)
>>> create_dunning.execute('create_')
>>> dunning, = Dunning.find([])
2023-12-29 19:02:08 +01:00
>>> assertEqual(dunning.procedure, procedure)
>>> assertEqual(dunning.level, procedure.levels[0])
2013-09-18 22:52:41 +02:00
>>> dunning.state
2018-06-26 19:11:41 +02:00
'draft'
2023-12-29 19:02:08 +01:00
>>> assertEqual(dunning.line, dunning_line)
2013-09-18 22:52:41 +02:00
Create dunnings on 30 days with draft dunning::
>>> create_dunning = Wizard('account.dunning.create')
>>> create_dunning.form.date = period.start_date + relativedelta(days=30)
>>> create_dunning.execute('create_')
>>> dunning, = Dunning.find([])
2023-12-29 19:02:08 +01:00
>>> assertEqual(dunning.procedure, procedure)
>>> assertEqual(dunning.level, procedure.levels[0])
2013-09-18 22:52:41 +02:00
>>> dunning.state
2018-06-26 19:11:41 +02:00
'draft'
2021-09-23 23:10:33 +02:00
>>> dunning.date
2023-12-29 19:02:08 +01:00
>>> assertEqual(dunning.line, dunning_line)
2013-09-18 22:52:41 +02:00
Process dunning::
>>> process_dunning = Wizard('account.dunning.process',
... [dunning])
>>> process_dunning.execute('process')
>>> dunning.reload()
>>> dunning.state
2018-08-31 14:48:27 +02:00
'waiting'
>>> bool(dunning.date)
2021-09-23 23:10:33 +02:00
True
2013-09-18 22:52:41 +02:00
Create dunnings on 30 days with blocked dunning::
>>> dunning.blocked = True
>>> dunning.save()
>>> create_dunning = Wizard('account.dunning.create')
>>> create_dunning.form.date = period.start_date + relativedelta(days=30)
>>> create_dunning.execute('create_')
>>> dunning, = Dunning.find([])
2023-12-29 19:02:08 +01:00
>>> assertEqual(dunning.procedure, procedure)
>>> assertEqual(dunning.level, procedure.levels[0])
2013-09-18 22:52:41 +02:00
>>> dunning.state
2018-08-31 14:48:27 +02:00
'waiting'
2023-12-29 19:02:08 +01:00
>>> assertEqual(dunning.line, dunning_line)
>>> assertTrue(dunning.blocked)
2013-09-18 22:52:41 +02:00
>>> dunning.blocked = False
>>> dunning.save()
Create dunnings on 30 days::
>>> create_dunning = Wizard('account.dunning.create')
>>> create_dunning.form.date = period.start_date + relativedelta(days=30)
>>> create_dunning.execute('create_')
>>> dunning, = Dunning.find([])
2023-12-29 19:02:08 +01:00
>>> assertEqual(dunning.procedure, procedure)
>>> assertEqual(dunning.level, procedure.levels[1])
2013-09-18 22:52:41 +02:00
>>> dunning.state
2018-06-26 19:11:41 +02:00
'draft'
2021-09-23 23:10:33 +02:00
>>> dunning.date
2023-12-29 19:02:08 +01:00
>>> assertEqual(dunning.line, dunning_line)
2013-09-18 22:52:41 +02:00
Pay dunning::
2017-08-02 19:38:13 +02:00
>>> set_user(account_user)
2014-03-16 15:38:33 +01:00
>>> MoveLine = Model.get('account.move.line')
2013-09-18 22:52:41 +02:00
>>> move = Move()
>>> move.period = period
>>> move.journal = journal_cash
>>> move.date = period.start_date
>>> line = move.lines.new()
>>> line.account = cash
>>> line.debit = Decimal(100)
>>> line = move.lines.new()
>>> line.account = receivable
>>> line.credit = Decimal(100)
>>> line.party = customer
>>> move.save()
>>> reconcile2, = [l for l in move.lines if l.account == receivable]
>>> reconcile_lines = Wizard('account.move.reconcile_lines',
2014-03-16 15:38:33 +01:00
... [MoveLine(dunning.line.id), reconcile2])
2018-11-12 17:20:07 +01:00
>>> set_user(dunning_user)
2013-09-18 22:52:41 +02:00
>>> Dunning.find([])
[]
Create dunnings on 50 days::
2017-08-02 19:38:13 +02:00
>>> set_user(dunning_user)
2013-09-18 22:52:41 +02:00
>>> create_dunning = Wizard('account.dunning.create')
>>> create_dunning.form.date = period.start_date + relativedelta(days=50)
>>> create_dunning.execute('create_')
>>> Dunning.find([])
[]