first commit

This commit is contained in:
root
2026-03-14 09:42:12 +00:00
commit 0adbd20c2c
10991 changed files with 1646955 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

View File

@@ -0,0 +1,199 @@
=======================
Account Budget Scenario
=======================
Imports::
>>> 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
Activate modules::
>>> config = activate_modules('account_budget', create_company, create_chart)
>>> Account = Model.get('account.account')
>>> Budget = Model.get('account.budget')
>>> BudgetLine = Model.get('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]
>>> renew_fiscalyear = Wizard('account.fiscalyear.renew')
>>> renew_fiscalyear.execute('create_')
>>> next_fiscalyear, = renew_fiscalyear.actions[0]
Get accounts::
>>> accounts = get_accounts()
Create the parties::
>>> customer = Party(name='Customer')
>>> customer.save()
>>> supplier = Party(name='Supplier')
>>> supplier.save()
Create a budget::
>>> budget = Budget()
>>> budget.name = 'Budget'
>>> budget.fiscalyear = fiscalyear
>>> budget.click('update_lines')
>>> bool(budget.lines)
True
>>> line_count = len(budget.lines)
>>> revenue_budget, = BudgetLine.find(
... [('account', '=', accounts['revenue'].id)])
>>> revenue_budget.amount = Decimal(150)
>>> revenue_budget.save()
>>> expense_budget, = BudgetLine.find(
... [('account', '=', accounts['expense'].id)])
>>> expense_budget.amount = Decimal(-50)
>>> expense_budget.save()
>>> budget.click('update_lines')
>>> assertEqual(len(budget.lines), line_count)
Create moves to test the budget::
>>> journal_revenue, = Journal.find([
... ('code', '=', 'REV'),
... ])
>>> journal_expense, = Journal.find([
... ('code', '=', 'EXP'),
... ])
>>> 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(130)
>>> line = move.lines.new()
>>> line.account = accounts['receivable']
>>> line.debit = Decimal(130)
>>> line.party = customer
>>> move.click('post')
>>> move = Move()
>>> move.period = period
>>> move.journal = journal_expense
>>> move.date = period.start_date
>>> line = move.lines.new()
>>> line.account = accounts['expense']
>>> line.debit = Decimal(60)
>>> line = move.lines.new()
>>> line.account = accounts['receivable']
>>> line.credit = Decimal(60)
>>> line.party = supplier
>>> move.click('post')
Check actual amount of the budget::
>>> pl_budget, = budget.root_lines
>>> pl_budget.total_amount
Decimal('100.00')
>>> pl_budget.actual_amount
Decimal('70.00')
>>> pl_budget.percentage
Decimal('0.7000')
>>> revenue_budget.total_amount
Decimal('150.00')
>>> revenue_budget.actual_amount
Decimal('130.00')
>>> revenue_budget.percentage
Decimal('0.8667')
>>> expense_budget.total_amount
Decimal('-50.00')
>>> expense_budget.actual_amount
Decimal('-60.00')
>>> expense_budget.percentage
Decimal('1.2000')
Create periods::
>>> create_periods = pl_budget.click('create_periods')
>>> create_periods.execute('create_periods')
>>> revenue_budget, expense_budget = pl_budget.children[:2]
>>> len(pl_budget.periods)
12
>>> {p.total_amount for p in pl_budget.periods}
{Decimal('8.33')}
>>> len(revenue_budget.periods)
12
>>> {p.total_amount for p in revenue_budget.periods}
{Decimal('12.50')}
>>> len(expense_budget.periods)
12
>>> {p.total_amount for p in expense_budget.periods}
{Decimal('-4.16')}
Check the budget's periods::
>>> pl_budget.periods[0].actual_amount
Decimal('70.00')
>>> pl_budget.periods[0].percentage
Decimal('8.4034')
>>> pl_budget.periods[1].actual_amount
Decimal('0.00')
>>> pl_budget.periods[1].percentage
Decimal('0.0000')
>>> revenue_budget.periods[0].actual_amount
Decimal('130.00')
>>> revenue_budget.periods[0].percentage
Decimal('10.4000')
>>> revenue_budget.periods[1].actual_amount
Decimal('0.00')
>>> revenue_budget.periods[1].percentage
Decimal('0.0000')
>>> expense_budget.periods[0].actual_amount
Decimal('-60.00')
>>> expense_budget.periods[0].percentage
Decimal('14.4231')
>>> expense_budget.periods[1].actual_amount
Decimal('0.00')
>>> expense_budget.periods[1].percentage
Decimal('0.0000')
Try to set invalid ratio::
>>> period = pl_budget.periods[0]
>>> period.ratio = Decimal('0.1')
>>> budget.save()
Traceback (most recent call last):
...
BudgetValidationError: ...
>>> budget.reload()
Copy the budget without amounts::
>>> copy_budget = Wizard('account.budget.copy', [budget])
>>> copy_budget.form.name
'Budget'
>>> copy_budget.form.name = 'New Budget'
>>> copy_budget.form.fiscalyear = next_fiscalyear
>>> copy_budget.form.factor = Decimal('1.25')
>>> copy_budget.execute('copy')
>>> new_budget, = copy_budget.actions[0]
>>> new_budget.name
'New Budget'
>>> new_pl_budget, = new_budget.root_lines
>>> new_pl_budget.total_amount
Decimal('125.00')
>>> new_pl_budget.actual_amount
Decimal('0.00')
>>> new_pl_budget.percentage
Decimal('0.0000')
>>> len(new_pl_budget.periods)
0

View File

@@ -0,0 +1,13 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.modules.company.tests import CompanyTestMixin
from trytond.tests.test_tryton import ModuleTestCase
class AccountBudgetTestCase(CompanyTestMixin, ModuleTestCase):
'Test Account Budget module'
module = 'account_budget'
del ModuleTestCase

View File

@@ -0,0 +1,8 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.tests.test_tryton import load_doc_tests
def load_tests(*args, **kwargs):
return load_doc_tests(__name__, __file__, *args, **kwargs)