[Erp5-report] r39068 jerome - in /erp5/trunk/products/ERP5: Document/ tests/
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Oct 12 18:09:06 CEST 2010
Author: jerome
Date: Tue Oct 12 18:09:05 2010
New Revision: 39068
URL: http://svn.erp5.org?rev=39068&view=rev
Log:
amendments to r39010: this feature was not working when only "none" was
selected, and when none and actual values where selected on the same axis.
Modified:
erp5/trunk/products/ERP5/Document/NodeBudgetVariation.py
erp5/trunk/products/ERP5/tests/testBudget.py
Modified: erp5/trunk/products/ERP5/Document/NodeBudgetVariation.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/NodeBudgetVariation.py?rev=39068&r1=39067&r2=39068&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/NodeBudgetVariation.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/NodeBudgetVariation.py [utf8] Tue Oct 12 18:09:05 2010
@@ -31,7 +31,6 @@ from AccessControl.ZopeGuards import gua
from Products.ERP5Type import Permissions, PropertySheet
from Products.ERP5.Document.BudgetVariation import BudgetVariation
from Products.ZSQLCatalog.SQLCatalog import Query, NegatedQuery, ComplexQuery
-from Products.ERP5Type.Message import translateString
class NodeBudgetVariation(BudgetVariation):
@@ -131,6 +130,7 @@ class NodeBudgetVariation(BudgetVariatio
# parameters such as section_category_uid
axis = '%s_uid' % axis
+ query = None
portal_categories = self.getPortalObject().portal_categories
for criterion_category in context.getMembershipCriterionCategoryList():
if '/' not in criterion_category: # safe ...
@@ -139,8 +139,8 @@ class NodeBudgetVariation(BudgetVariatio
if criterion_base_category == base_category:
if node_url == 'budget_special_node/none':
# This is the "Nothing" virtual node
- query_dict.setdefault(axis, []).append(Query(**{axis: None}))
- if node_url == 'budget_special_node/all_other':
+ query = Query(**{axis: None})
+ elif node_url == 'budget_special_node/all_other':
# This is the "All Other" virtual node
other_uid_list = []
none_node_selected = False
@@ -153,19 +153,28 @@ class NodeBudgetVariation(BudgetVariatio
other_uid_list.append(node.getUid())
if none_node_selected:
# in this case we don't want to include NULL in All others
- query_dict.setdefault(axis, []).append(
- NegatedQuery(Query(**{axis: other_uid_list})))
+ query = NegatedQuery(Query(**{axis: other_uid_list}))
else:
- query_dict.setdefault(axis, []).append(
- ComplexQuery(
+ query = ComplexQuery(
NegatedQuery(Query(**{axis: other_uid_list})),
Query(**{axis: None}),
- operator="OR"))
+ operator="OR")
- query_dict.setdefault(axis, []).append(
+ else:
+ query_dict.setdefault(axis, []).append(
portal_categories.getCategoryValue(node_url,
base_category=criterion_base_category).getUid())
+ if query:
+ if axis in query_dict:
+ query_dict[axis] = ComplexQuery(
+ query,
+ Query(**{axis: query_dict[axis]}),
+ operator='OR')
+ else:
+ query_dict[axis] = query
+
+
return query_dict
def getInventoryListQueryDict(self, budget_line):
@@ -210,10 +219,13 @@ class NodeBudgetVariation(BudgetVariatio
found = True
if found:
if self.getProperty('include_virtual_none_node'):
- query_dict[axis] = ComplexQuery(
- Query(**{axis: None}),
- Query(**{axis: query_dict[axis]}),
- operator="OR")
+ if axis in query_dict:
+ query_dict[axis] = ComplexQuery(
+ Query(**{axis: None}),
+ Query(**{axis: query_dict[axis]}),
+ operator="OR")
+ else:
+ query_dict[axis] = Query(**{axis: None})
return query_dict
return dict()
Modified: erp5/trunk/products/ERP5/tests/testBudget.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testBudget.py?rev=39068&r1=39067&r2=39068&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testBudget.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testBudget.py [utf8] Tue Oct 12 18:09:05 2010
@@ -31,7 +31,7 @@ import transaction
from DateTime import DateTime
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
-from Products.ZSQLCatalog.SQLCatalog import ComplexQuery
+from Products.ZSQLCatalog.SQLCatalog import ComplexQuery, Query
from AccessControl import getSecurityManager
class TestBudget(ERP5TypeTestCase):
@@ -657,7 +657,115 @@ class TestBudget(ERP5TypeTestCase):
{('source_project/organisation_module/my_organisation',): 200.0,
('source_project/budget_special_node/none',): -300.0
}, budget_line.getEngagedBudgetDict())
+
+ def test_only_none_virtual_node(self):
+ # tests consumptions, by using only "none" virtual node on a node budget
+ # variation
+ budget_model = self.portal.budget_model_module.newContent(
+ portal_type='Budget Model')
+ budget_model.newContent(
+ portal_type='Node Budget Variation',
+ int_index=1,
+ budget_variation='budget_cell',
+ # this does not work for movement, node and section
+ # categories ...
+ inventory_axis='project',
+ variation_base_category='source_project',
+ aggregate_value_list=(
+ self.portal.organisation_module.my_organisation,),
+ include_virtual_none_node=True)
+ budget_model.newContent(
+ portal_type='Category Budget Variation',
+ int_index=2,
+ budget_variation='budget_line',
+ inventory_axis='node_category_strict_membership',
+ variation_base_category='account_type',)
+
+ budget = self.portal.budget_module.newContent(
+ portal_type='Budget',
+ start_date_range_min=DateTime(2000, 1, 1),
+ start_date_range_max=DateTime(2000, 12, 31),
+ specialise_value=budget_model)
+
+ budget_line = budget.newContent(portal_type='Budget Line')
+
+ budget_line.edit(
+ variation_category_list=(
+ 'source_project/budget_special_node/none', # this is 'none'
+ 'account_type/expense',))
+
+ 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="200",
+ field_matrixbox_membership_criterion_category_list_cell_0_0_0=[
+ 'source_project/budget_special_node/none',],
+ ))
+ budget_line.Base_edit(form_id=form.getId())
+
+ self.assertEquals(1, len(budget_line.contentValues()))
+
+ class ReferenceQuery:
+ """Helper class to compare queries
+ """
+ def __eq__(me, query):
+ self.assertTrue(isinstance(query, Query))
+ self.assertEquals(query.kw, {'project_uid': None})
+ return True
+
+ self.assertEquals(
+ dict(from_date=DateTime(2000, 1, 1),
+ at_date=DateTime(2000, 12, 31).latestTime(),
+ node_category_strict_membership=['account_type/expense',],
+ project_uid=ReferenceQuery(),
+ group_by_node_category_strict_membership=True,
+ group_by_project=True,
+ ),
+ budget_model.getInventoryListQueryDict(budget_line))
+
+ budget_cell = budget_line.contentValues()[0]
+ self.assertEquals(
+ dict(from_date=DateTime(2000, 1, 1),
+ at_date=DateTime(2000, 12, 31).latestTime(),
+ node_category_strict_membership=['account_type/expense',],
+ project_uid=ReferenceQuery(),
+ ),
+ budget_model.getInventoryQueryDict(budget_cell))
+
+ atransaction = self.portal.accounting_module.newContent(
+ portal_type='Accounting Transaction',
+ source_section_value=self.portal.organisation_module.my_organisation,
+ resource_value=self.portal.currency_module.euro,
+ start_date=DateTime(2000, 1, 2))
+ atransaction.newContent(
+ portal_type='Accounting Transaction Line',
+ source_value=self.portal.account_module.goods_purchase,
+ source_project_value=self.portal.organisation_module.my_organisation,
+ source_debit=200)
+ atransaction.newContent(
+ portal_type='Accounting Transaction Line',
+ source_value=self.portal.account_module.goods_purchase,
+ source_credit=300)
+ atransaction.stop()
+
+ transaction.commit()
+ self.tic()
+
+ self.assertEquals(
+ {('source_project/budget_special_node/none',): -300.0
+ }, budget_line.getConsumedBudgetDict())
+
+ self.assertEquals(
+ {('source_project/budget_special_node/none',): -300.0
+ }, budget_line.getEngagedBudgetDict())
+ self.assertEquals(-300, budget_cell.getConsumedBudget())
def test_none_and_all_others_virtual_nodes_together(self):
# tests consumptions, by using "none" and "all other" virtual nodes
More information about the Erp5-report
mailing list