[Erp5-report] r37966 jerome - in /erp5/trunk/products/ERP5: Document/ tests/

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Aug 24 10:11:41 CEST 2010


Author: jerome
Date: Tue Aug 24 10:11:39 2010
New Revision: 37966

URL: http://svn.erp5.org?rev=37966&view=rev
Log:
fix a bug with consomption when a dimension was no selected

Modified:
    erp5/trunk/products/ERP5/Document/BudgetVariation.py
    erp5/trunk/products/ERP5/Document/CategoryBudgetVariation.py
    erp5/trunk/products/ERP5/Document/NodeBudgetVariation.py
    erp5/trunk/products/ERP5/tests/testBudget.py

Modified: erp5/trunk/products/ERP5/Document/BudgetVariation.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/BudgetVariation.py?rev=37966&r1=37965&r2=37966&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/BudgetVariation.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/BudgetVariation.py [utf8] Tue Aug 24 10:11:39 2010
@@ -113,6 +113,10 @@ class BudgetVariation(Predicate):
     if not base_category:
       return None
     
+    if not budget_line.getVariationCategoryList(
+                          base_category_list=(base_category,)):
+      return None
+
     getObject = self.getPortalObject().portal_catalog.getObject
     def getUrlFromUidNoCache(uid):
       relative_url = getObject(uid).getRelativeUrl()

Modified: erp5/trunk/products/ERP5/Document/CategoryBudgetVariation.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/CategoryBudgetVariation.py?rev=37966&r1=37965&r2=37966&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/CategoryBudgetVariation.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/CategoryBudgetVariation.py [utf8] Tue Aug 24 10:11:39 2010
@@ -132,14 +132,17 @@ class CategoryBudgetVariation(BudgetVari
                   'mirror_section', 'mirror_node' ):
         axis = '%s_uid' % axis
 
+    found = False
     for category in context.getVariationCategoryList(
                                base_category_list=(base_category,)):
       if axis.endswith('_uid'):
         category = self.getPortalObject().portal_categories\
                                 .getCategoryUid(category)
       query_dict.setdefault(axis, []).append(category)
-
-    return query_dict
+      found = True
+    if found:
+      return query_dict
+    return dict()
   
   def getBudgetVariationRangeCategoryList(self, context):
     """Returns the Variation Range Category List that can be applied to this

Modified: erp5/trunk/products/ERP5/Document/NodeBudgetVariation.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/NodeBudgetVariation.py?rev=37966&r1=37965&r2=37966&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/NodeBudgetVariation.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/NodeBudgetVariation.py [utf8] Tue Aug 24 10:11:39 2010
@@ -200,13 +200,16 @@ class NodeBudgetVariation(BudgetVariatio
     # if we have a virtual "all others" node, we don't set a criterion here.
     if self.getProperty('include_virtual_other_node'):
       return query_dict
-
+    found = False
     for node_url in context.getVariationCategoryList(
                           base_category_list=(base_category,)):
       query_dict.setdefault(axis, []).append(
                 portal_categories.getCategoryValue(node_url,
                       base_category=base_category).getUid())
-    return query_dict
+      found = True
+    if found:
+      return query_dict
+    return dict()
   
   def _getCellKeyFromInventoryListBrain(self, brain, budget_line,
                                          cell_key_cache=None):

Modified: erp5/trunk/products/ERP5/tests/testBudget.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testBudget.py?rev=37966&r1=37965&r2=37966&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testBudget.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testBudget.py [utf8] Tue Aug 24 10:11:39 2010
@@ -62,6 +62,7 @@ class TestBudget(ERP5TypeTestCase):
             'erp5_invoicing', 'erp5_simplified_invoicing',
             'erp5_accounting_ui_test', 'erp5_budget')
 
+  # creation and basic functionalities
   def test_simple_create_budget_model(self):
     budget_model = self.portal.budget_model_module.newContent(
                             portal_type='Budget Model')
@@ -284,6 +285,7 @@ class TestBudget(ERP5TypeTestCase):
     self.assertEquals('demo_group', budget.getGroup())
     self.assertEquals('Demo Group', budget.getGroupTitle())
 
+  # consumptions
   def test_simple_consumption(self):
     budget_model = self.portal.budget_model_module.newContent(
                             portal_type='Budget Model')
@@ -788,7 +790,182 @@ class TestBudget(ERP5TypeTestCase):
        ('group/demo_group', 'source/account_module/goods_purchase'): 100.0,},
        budget_line.getEngagedBudgetDict())
 
+  def test_consumption_node_budget_variation_not_set(self):
+    # test consumption calculation when a node budget variation is used, but
+    # this variation category is not set
+    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_cell',
+                    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 = 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',)
+
+    # we don't set 
+    budget_line.edit(
+        variation_category_list=(
+          'group/demo_group/sub1',
+          ))
+    
+    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="500",
+             field_matrixbox_membership_criterion_category_list_cell_0_0_0=[
+               'group/demo_group/sub1', ],
+        ))
+    budget_line.Base_edit(form_id=form.getId())
+
+    self.assertEquals(1, len(budget_line.contentValues()))
+
+    self.assertEquals(
+        dict(from_date=DateTime(2000, 1, 1),
+             at_date=DateTime(2000, 12, 31).latestTime(),
+             section_category=['group/demo_group/sub1',],
+             group_by_section_category=True,
+             ),
+        budget_model.getInventoryListQueryDict(budget_line))
+
+
+    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_debit=100)
+    atransaction.newContent(
+                  portal_type='Accounting Transaction Line',
+                  source_value=self.portal.account_module.fixed_assets,
+                  source_credit=100)
+    atransaction.stop()
+
+    transaction.commit()
+    self.tic()
+
+    self.assertEquals(
+      {('group/demo_group/sub1', ): 0.0, },
+       budget_line.getConsumedBudgetDict())
+
+    self.assertEquals(
+      {('group/demo_group/sub1', ): 0.0, },
+       budget_line.getEngagedBudgetDict())
 
+  def test_consumption_category_budget_variation_not_set(self):
+    # test consumption calculation when a category budget variation is used, but
+    # this variation category is not set
+    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_cell',
+                    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 = 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',)
+
+    # we don't set 
+    budget_line.edit(
+        variation_category_list=(
+          'source/account_module/goods_purchase',
+          ))
+    
+    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="500",
+             field_matrixbox_membership_criterion_category_list_cell_0_0_0=[
+               'source/account_module/goods_purchase', ],
+        ))
+    budget_line.Base_edit(form_id=form.getId())
+
+    self.assertEquals(1, len(budget_line.contentValues()))
+
+    self.assertEquals(
+        dict(from_date=DateTime(2000, 1, 1),
+             at_date=DateTime(2000, 12, 31).latestTime(),
+             node_uid=[self.portal.account_module.goods_purchase.getUid(),],
+             group_by_node=True,
+             ),
+        budget_model.getInventoryListQueryDict(budget_line))
+
+
+    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_debit=100)
+    atransaction.newContent(
+                  portal_type='Accounting Transaction Line',
+                  source_value=self.portal.account_module.fixed_assets,
+                  source_credit=100)
+    atransaction.stop()
+
+    transaction.commit()
+    self.tic()
+
+    self.assertEquals(
+      {('source/account_module/goods_purchase', ): 100.0, },
+       budget_line.getConsumedBudgetDict())
+
+    self.assertEquals(
+      {('source/account_module/goods_purchase', ): 100.0, },
+       budget_line.getEngagedBudgetDict())
+
+
+  # Report
   def test_budget_consumption_report(self):
     budget_model = self.portal.budget_model_module.newContent(
                             portal_type='Budget Model')
@@ -934,7 +1111,7 @@ class TestBudget(ERP5TypeTestCase):
     if err_list:
       self.fail(''.join(err_list))
 
-    
+  # "update summary cells" feature
   def test_update_summary_cell_simple(self):
     # test the action to create or update quantity on summary cells
     budget_model = self.portal.budget_model_module.newContent(




More information about the Erp5-report mailing list