======================== 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')