Files
tryton/modules/account/tests/scenario_move_template.rst
T
Cédric Krier 544ce5494b Set default value from account move using line field name
Some Function fields has the move as prefix which is removed when applied to
the move. But when setting default value for the line, the move prefix must
not be removed.

Closes #12967
(grafted from bce77308e529f2e96c46da2296546f047af48161)

--HG--
branch : 7.0
2024-04-27 18:36:49 +02:00

152 lines
4.8 KiB
ReStructuredText

======================
Move Template Scenario
======================
Imports::
>>> import datetime
>>> from decimal import Decimal
>>> from proteus import Model, Wizard
>>> from trytond.tests.tools import activate_modules
>>> from trytond.modules.company.tests.tools import create_company, \
... get_company
>>> from trytond.modules.account.tests.tools import create_fiscalyear, \
... create_chart, get_accounts, create_tax, create_tax_code
>>> today = datetime.date.today()
Activate modules::
>>> config = activate_modules('account')
Create company::
>>> _ = create_company()
>>> company = get_company()
Create fiscal year::
>>> fiscalyear = create_fiscalyear(company)
>>> fiscalyear.click('create_period')
>>> period_ids = [p.id for p in fiscalyear.periods]
Create chart of accounts::
>>> _ = create_chart(company)
>>> accounts = get_accounts(company)
>>> payable = accounts['payable']
>>> expense = accounts['expense']
>>> tax = accounts['tax']
Create tax code::
>>> TaxCode = Model.get('account.tax.code')
>>> tax = create_tax(Decimal('0.1'))
>>> tax.save()
>>> base_code = create_tax_code(tax, amount='base')
>>> base_code.save()
>>> tax_code = create_tax_code(tax)
>>> tax_code.save()
Create parties::
>>> Party = Model.get('party.party')
>>> supplier = Party(name='Supplier')
>>> supplier.save()
Create Template::
>>> MoveTemplate = Model.get('account.move.template')
>>> Journal = Model.get('account.journal')
>>> template = MoveTemplate()
>>> template.name = 'Test'
>>> template.journal, = Journal.find([
... ('code', '=', 'CASH'),
... ])
>>> _ = template.keywords.new(name='party', string='Party',
... type_='party')
>>> _ = template.keywords.new(name='description', string='Description',
... type_='char')
>>> _ = template.keywords.new(name='amount', string='Amount',
... type_='numeric', digits=2)
>>> template.description = '{party} - {description}'
>>> line = template.lines.new()
>>> line.operation = 'credit'
>>> line.account = payable
>>> line.party = 'party'
>>> line.amount = 'amount'
>>> line.description = "{description} 1"
>>> line = template.lines.new()
>>> line.operation = 'debit'
>>> line.account = expense
>>> line.amount = 'amount / 1.1'
>>> ttax = line.taxes.new()
>>> ttax.amount = line.amount
>>> ttax.tax = tax
>>> ttax.type = 'base'
>>> line.description = "{description} 2"
>>> line = template.lines.new()
>>> line.operation = 'debit'
>>> line.account = tax.invoice_account
>>> line.amount = 'amount * (1 - 1/1.1)'
>>> line.description = "{description} 3"
>>> ttax = line.taxes.new()
>>> ttax.amount = line.amount
>>> ttax.tax = tax
>>> ttax.type = 'tax'
>>> template.save()
Create Move::
>>> create_move = Wizard('account.move.template.create')
>>> create_move.form.date == today
True
>>> period = create_move.form.period
>>> period.start_date <= today <= period.end_date
True
>>> index = fiscalyear.periods.index(create_move.form.period)
>>> next_period = fiscalyear.periods[index + 1]
>>> create_move.form.date = next_period.start_date
>>> create_move.form.period == next_period
True
>>> prev_period = fiscalyear.periods[index - 1]
>>> create_move.form.period = prev_period
>>> create_move.form.date == prev_period.end_date
True
>>> create_move.form.period = next_period
>>> create_move.form.date == next_period.start_date
True
>>> create_move.form.template = template
>>> create_move.execute('keywords')
>>> data = {}
>>> keywords = data['keywords'] = {}
>>> keywords['party'] = supplier.id
>>> keywords['description'] = 'Test'
>>> keywords['amount'] = Decimal('12.24')
>>> context = create_move._context.copy()
>>> context.update(create_move._config.context)
>>> _ = create_move._proxy.execute(create_move.session_id, data, 'create_',
... context)
.. note:: using custom call because proteus doesn't support fake model
Check the Move::
>>> Move = Model.get('account.move')
>>> move, = Move.find([])
>>> len(move.lines)
3
>>> sorted((l.debit, l.credit) for l in move.lines)
[(Decimal('0'), Decimal('12.24')), (Decimal('1.11'), Decimal('0')), (Decimal('11.13'), Decimal('0'))]
>>> sorted([l.description for l in move.lines])
['Test 1', 'Test 2', 'Test 3']
>>> move.description
'Supplier - Test'
>>> with config.set_context(periods=period_ids):
... base_code = TaxCode(base_code.id)
... base_code.amount
Decimal('11.13')
>>> with config.set_context(periods=period_ids):
... tax_code = TaxCode(tax_code.id)
... tax_code.amount
Decimal('1.11')