Commit 7e61e5e0 authored by Jérome Perrin's avatar Jérome Perrin

test budget consumptions report


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@37236 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent cf29decb
......@@ -637,10 +637,159 @@ class TestBudget(ERP5TypeTestCase):
budget_line.getAvailableBudgetDict())
# Other TODOs:
def test_budget_consumption_report(self):
budget_model = self.portal.budget_model_module.newContent(
portal_type='Budget Model')
budget_model.newContent(
portal_type='Category Budget Variation',
int_index=1,
budget_variation='budget',
inventory_axis='section_category',
variation_base_category='group',)
budget_model.newContent(
portal_type='Node Budget Variation',
int_index=2,
budget_variation='budget_cell',
inventory_axis='node',
variation_base_category='source',
aggregate_value_list=(
self.portal.account_module.goods_purchase,
self.portal.account_module.fixed_assets,
))
budget_model.newContent(
portal_type='Category Budget Variation',
int_index=3,
budget_variation='budget_cell',
inventory_axis='node_category',
variation_base_category='account_type',)
budget = self.portal.budget_module.newContent(
portal_type='Budget',
title='Budget Title',
start_date_range_min=DateTime(2000, 1, 1),
start_date_range_max=DateTime(2000, 12, 31),
specialise_value=budget_model)
budget.edit(variation_category_list=['group/demo_group'])
budget_line = budget.newContent(portal_type='Budget Line',
title='Budget Line Title',)
# set the range, this will adjust the matrix
budget_line.edit(
variation_category_list=(
'source/account_module/goods_purchase',
'source/account_module/fixed_assets',
'account_type/asset', ))
# simuate a request and call Base_edit, which does all the work of creating
# cell and setting cell properties.
form = budget_line.BudgetLine_view
self.portal.REQUEST.other.update(
dict(AUTHENTICATED_USER=getSecurityManager().getUser(),
field_membership_criterion_base_category_list=
form.membership_criterion_base_category_list.get_value('default'),
field_mapped_value_property_list=
form.mapped_value_property_list.get_value('default'),
field_matrixbox_quantity_cell_0_0_0="",
field_matrixbox_membership_criterion_category_list_cell_0_0_0=[],
field_matrixbox_quantity_cell_1_0_0="200",
field_matrixbox_membership_criterion_category_list_cell_1_0_0=[
'source/account_module/fixed_assets',
'account_type/asset'],
))
budget_line.Base_edit(form_id=form.getId())
atransaction = self.portal.accounting_module.newContent(
portal_type='Accounting Transaction',
resource_value=self.portal.currency_module.euro,
source_section_value=self.portal.organisation_module.my_organisation,
start_date=DateTime(2000, 1, 2))
atransaction.newContent(
portal_type='Accounting Transaction Line',
source_value=self.portal.account_module.goods_purchase,
source_credit=100)
atransaction.newContent(
portal_type='Accounting Transaction Line',
source_value=self.portal.account_module.fixed_assets,
source_debit=100)
atransaction.stop()
transaction.commit()
self.tic()
# Budget_getBudgetConsumptionReportData returns all the data for the report
line_list, line_count = budget.Budget_getBudgetConsumptionReportData()
# the number of lines, which will be used in the report to set the print
# range
self.assertEquals(6, line_count)
# number of line can be different from the length of the line list, because
# line list is a recursive structure.
self.assertEquals(4, len(line_list))
# first line is for the title of the budget
self.assertEquals('Budget Title', line_list[0]['title'])
self.assertTrue(line_list[0]['is_budget'])
# then we have a first level for budget lines
self.assertEquals('Budget Line Title', line_list[1]['title'])
self.assertTrue(line_list[1]['is_level_1'])
# we can see global consumptions for the budget
self.assertEquals(200, line_list[2]['initial_budget'])
self.assertEquals(200, line_list[2]['current_budget'])
self.assertEquals(100, line_list[2]['consumed_budget'])
self.assertEquals(100, line_list[2]['engaged_budget'])
self.assertEquals(.5, line_list[2]['consumed_ratio'])
# the dimensions are reversed in the budget report, so on level 2 we have
# the last dimension from cell range, here "account type"
self.assertEquals('Asset', line_list[2]['title'])
# we can see global consumptions for that summary line
self.assertEquals(200, line_list[2]['initial_budget'])
self.assertEquals(200, line_list[2]['current_budget'])
self.assertEquals(100, line_list[2]['consumed_budget'])
self.assertEquals(100, line_list[2]['engaged_budget'])
self.assertEquals(.5, line_list[2]['consumed_ratio'])
# no we have a recursive list, for the next dimension: node.
self.assertTrue(isinstance(line_list[3], list))
self.assertEquals(3, len(line_list[3]))
# first is again a title XXX why ??
self.assertEquals('Asset', line_list[3][0]['title'])
# then we have two level 3 cells
self.assertTrue(line_list[3][1]['is_level_3'])
self.assertEquals('Goods Purchase', line_list[3][1]['title'])
self.assertEquals(0, line_list[3][1]['initial_budget'])
self.assertEquals(0, line_list[3][1]['current_budget'])
self.assertEquals(0, line_list[3][1]['consumed_budget'])
self.assertEquals(0, line_list[3][1]['engaged_budget'])
self.assertEquals(0, line_list[3][1]['consumed_ratio'])
self.assertEquals('Fixed Assets', line_list[3][2]['title'])
self.assertEquals(200, line_list[3][2]['initial_budget'])
self.assertEquals(200, line_list[3][2]['current_budget'])
self.assertEquals(100, line_list[3][2]['consumed_budget'])
self.assertEquals(100, line_list[3][2]['engaged_budget'])
self.assertEquals(.5, line_list[3][2]['consumed_ratio'])
# validate report ODF
from Products.ERP5OOo.tests.utils import Validator
odf_validator = Validator()
odf = budget.Budget_viewBudgetConsumptionReport()
err_list = odf_validator.validate(odf)
if err_list:
self.fail(''.join(err_list))
# Other TODOs:
# section_category & summary
# budget level variation and budget cell level variation for same inventory
# axis
# resource/price currency on budget ?
# test virtual all others when cloning an existing budget
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment