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

135 lines
4.2 KiB
ReStructuredText

========================
Analytic Budget Scenario
========================
Imports::
>>> from decimal import Decimal
>>> from proteus import Model
>>> 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
Activate the analytic_budget module::
>>> config = activate_modules('analytic_budget', create_company, create_chart)
>>> AnalyticAccount = Model.get('analytic_account.account')
>>> Budget = Model.get('analytic_account.budget')
>>> BudgetLine = Model.get('analytic_account.budget.line')
>>> Journal = Model.get('account.journal')
>>> Move = Model.get('account.move')
>>> Party = Model.get('party.party')
Create a fiscal year::
>>> fiscalyear = create_fiscalyear()
>>> fiscalyear.click('create_period')
>>> period = fiscalyear.periods[0]
>>> next_period = fiscalyear.periods[1]
Get accounts::
>>> accounts = get_accounts()
Create the analytic accounts::
>>> root = AnalyticAccount(type='root', name="Root")
>>> root.save()
>>> analytic_account = AnalyticAccount(
... root=root, parent=root, name="Analytic")
>>> analytic_account.save()
>>> other_analytic_account = AnalyticAccount(
... root=root, parent=root, name="Other Analytic")
>>> other_analytic_account.save()
Create the parties::
>>> customer = Party(name='Customer')
>>> customer.save()
Create a budget::
>>> budget = Budget()
>>> budget.name = 'Budget'
>>> budget.root = root
>>> budget.start_date = period.start_date
>>> budget.end_date = period.end_date
>>> budget.click('update_lines')
>>> len(budget.lines)
2
>>> analytic_budget, = BudgetLine.find(
... [('account', '=', analytic_account.id)])
>>> analytic_budget.sequence = 1
>>> analytic_budget.amount = Decimal(70)
>>> analytic_budget.save()
>>> other_analytic_budget, = BudgetLine.find(
... [('account', '=', other_analytic_account.id)])
>>> other_analytic_budget.sequence = 2
>>> other_analytic_budget.amount = Decimal(50)
>>> other_analytic_budget.save()
>>> budget.click('update_lines')
>>> len(budget.lines)
2
Create moves to test the budget::
>>> journal_revenue, = Journal.find([
... ('code', '=', 'REV'),
... ])
>>> move = Move()
>>> move.period = period
>>> move.journal = journal_revenue
>>> move.date = period.start_date
>>> line = move.lines.new()
>>> line.account = accounts['revenue']
>>> line.credit = Decimal(100)
>>> analytic_line = line.analytic_lines.new()
>>> analytic_line.credit = Decimal(60)
>>> analytic_line.account = analytic_account
>>> analytic_line = line.analytic_lines.new()
>>> analytic_line.credit = Decimal(40)
>>> analytic_line.account = other_analytic_account
>>> line = move.lines.new()
>>> line.account = accounts['receivable']
>>> line.debit = Decimal(100)
>>> line.party = customer
>>> move.click('post')
Check actual amount the budget::
>>> analytic_budget.total_amount
Decimal('70.00')
>>> analytic_budget.actual_amount
Decimal('60.00')
>>> analytic_budget.percentage
Decimal('0.8571')
>>> other_analytic_budget.total_amount
Decimal('50.00')
>>> other_analytic_budget.actual_amount
Decimal('40.00')
>>> other_analytic_budget.percentage
Decimal('0.8000')
Copy the budget without amounts::
>>> copy_budget = budget.click('copy_button')
>>> copy_budget.form.start_date = next_period.start_date
>>> copy_budget.form.end_date = next_period.end_date
>>> copy_budget.form.factor = Decimal('1.2')
>>> copy_budget.execute('copy')
>>> new_budget, = copy_budget.actions[0]
>>> assertEqual(new_budget.start_date, next_period.start_date)
>>> assertEqual(new_budget.end_date, next_period.end_date)
>>> analytic_budget, other_analytic_budget = new_budget.lines
>>> analytic_budget.total_amount
Decimal('84.00')
>>> analytic_budget.actual_amount
Decimal('0.00')
>>> analytic_budget.percentage
Decimal('0.0000')