[Erp5-report] r37280 jerome - in /erp5/trunk/bt5/erp5_budget: ActionTemplateItem/portal_typ...
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Jul 27 14:31:36 CEST 2010
Author: jerome
Date: Tue Jul 27 14:31:34 2010
New Revision: 37280
URL: http://svn.erp5.org?rev=37280&view=rev
Log:
Add an actiont to update summary budget cells on a budget line, and an helper script to get the summary categories
Added:
erp5/trunk/bt5/erp5_budget/ActionTemplateItem/portal_types/Budget%20Line/update_summary_budget_cell.xml
erp5/trunk/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_getSummaryDimensionKeyDict.xml
erp5/trunk/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_setQuantityOnSummaryCellList.xml
erp5/trunk/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_viewSetQuantityOnSummaryCellListDialog.xml
Modified:
erp5/trunk/bt5/erp5_budget/bt/revision
erp5/trunk/bt5/erp5_budget/bt/template_action_path_list
Added: erp5/trunk/bt5/erp5_budget/ActionTemplateItem/portal_types/Budget%20Line/update_summary_budget_cell.xml
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_budget/ActionTemplateItem/portal_types/Budget%2520Line/update_summary_budget_cell.xml?rev=37280&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_budget/ActionTemplateItem/portal_types/Budget%20Line/update_summary_budget_cell.xml (added)
+++ erp5/trunk/bt5/erp5_budget/ActionTemplateItem/portal_types/Budget%20Line/update_summary_budget_cell.xml [utf8] Tue Jul 27 14:31:34 2010
@@ -0,0 +1,91 @@
+<?xml version="1.0"?>
+<ZopeData>
+ <record id="1" aka="AAAAAAAAAAE=">
+ <pickle>
+ <tuple>
+ <global name="ActionInformation" module="Products.CMFCore.ActionInformation"/>
+ <tuple/>
+ </tuple>
+ </pickle>
+ <pickle>
+ <dictionary>
+ <item>
+ <key> <string>action</string> </key>
+ <value>
+ <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+ </value>
+ </item>
+ <item>
+ <key> <string>categories</string> </key>
+ <value>
+ <tuple>
+ <string>action_type/object_action</string>
+ </tuple>
+ </value>
+ </item>
+ <item>
+ <key> <string>category</string> </key>
+ <value> <string>object_action</string> </value>
+ </item>
+ <item>
+ <key> <string>condition</string> </key>
+ <value> <string></string> </value>
+ </item>
+ <item>
+ <key> <string>description</string> </key>
+ <value>
+ <none/>
+ </value>
+ </item>
+ <item>
+ <key> <string>icon</string> </key>
+ <value> <string></string> </value>
+ </item>
+ <item>
+ <key> <string>id</string> </key>
+ <value> <string>update_summary_budget_cell</string> </value>
+ </item>
+ <item>
+ <key> <string>permissions</string> </key>
+ <value>
+ <tuple>
+ <string>Modify portal content</string>
+ </tuple>
+ </value>
+ </item>
+ <item>
+ <key> <string>portal_type</string> </key>
+ <value> <string>Action Information</string> </value>
+ </item>
+ <item>
+ <key> <string>priority</string> </key>
+ <value> <float>1.0</float> </value>
+ </item>
+ <item>
+ <key> <string>title</string> </key>
+ <value> <string>Update Summary Budget Cells</string> </value>
+ </item>
+ <item>
+ <key> <string>visible</string> </key>
+ <value> <int>1</int> </value>
+ </item>
+ </dictionary>
+ </pickle>
+ </record>
+ <record id="2" aka="AAAAAAAAAAI=">
+ <pickle>
+ <tuple>
+ <global name="Expression" module="Products.CMFCore.Expression"/>
+ <tuple/>
+ </tuple>
+ </pickle>
+ <pickle>
+ <dictionary>
+ <item>
+ <key> <string>text</string> </key>
+ <value> <string>string:${object_url}/BudgetLine_viewSetQuantityOnSummaryCellListDialog</string> </value>
+ </item>
+ </dictionary>
+ </pickle>
+ </record>
+</ZopeData>
Added: erp5/trunk/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_getSummaryDimensionKeyDict.xml
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_getSummaryDimensionKeyDict.xml?rev=37280&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_getSummaryDimensionKeyDict.xml (added)
+++ erp5/trunk/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_getSummaryDimensionKeyDict.xml [utf8] Tue Jul 27 14:31:34 2010
@@ -0,0 +1,200 @@
+<?xml version="1.0"?>
+<ZopeData>
+ <record id="1" aka="AAAAAAAAAAE=">
+ <pickle>
+ <tuple>
+ <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
+ <tuple/>
+ </tuple>
+ </pickle>
+ <pickle>
+ <dictionary>
+ <item>
+ <key> <string>Script_magic</string> </key>
+ <value> <int>3</int> </value>
+ </item>
+ <item>
+ <key> <string>_bind_names</string> </key>
+ <value>
+ <object>
+ <klass>
+ <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+ </klass>
+ <tuple/>
+ <state>
+ <dictionary>
+ <item>
+ <key> <string>_asgns</string> </key>
+ <value>
+ <dictionary>
+ <item>
+ <key> <string>name_container</string> </key>
+ <value> <string>container</string> </value>
+ </item>
+ <item>
+ <key> <string>name_context</string> </key>
+ <value> <string>context</string> </value>
+ </item>
+ <item>
+ <key> <string>name_m_self</string> </key>
+ <value> <string>script</string> </value>
+ </item>
+ <item>
+ <key> <string>name_subpath</string> </key>
+ <value> <string>traverse_subpath</string> </value>
+ </item>
+ </dictionary>
+ </value>
+ </item>
+ </dictionary>
+ </state>
+ </object>
+ </value>
+ </item>
+ <item>
+ <key> <string>_body</string> </key>
+ <value> <string>"""Returns a dictionnary of dependant variation categories for this budget\n
+line.\n
+This can be used to know if a budget cell aggregates the values from other\n
+budget cells.\n
+For example, the returned dictionnary can be:\n
+ { \'function/f\': [\'function/f/f1\', \'function/f/f2\'],\n
+ \'source/account_type/asset\': [\'source/account_type/asset/cash\'], }\n
+As we can see on the example, only individual categories are returned, not cell\n
+coordinates.\n
+"""\n
+# look on the budget model to see which base categories are used for non strict\n
+# membership. We will only update summaries for thoses axis\n
+non_strict_base_category_set = dict()\n
+budget_model = context.getParentValue().getSpecialiseValue()\n
+if budget_model is not None:\n
+ for budget_variation in budget_model.contentValues(\n
+ portal_type=context.getPortalBudgetVariationTypeList()):\n
+ if budget_variation.isMemberOf(\'budget_variation/budget_cell\') \\\n
+ and budget_variation.getInventoryAxis() in (\n
+ \'movement\',\n
+ \'node_category\',\n
+ \'mirror_node_category\',\n
+ \'section_category\',\n
+ \'mirror_section_category\',\n
+ \'function_category\',\n
+ \'project_category\',\n
+ \'payment_category\',):\n
+\n
+ non_strict_base_category_set[\n
+ budget_variation.getProperty(\'variation_base_category\')] = True\n
+ \n
+def reversed(seq):\n
+ seq = seq[::]\n
+ seq.sort(reverse=True)\n
+ return seq\n
+\n
+# build a dict of dependant dimensions\n
+dependant_dimensions_dict = dict()\n
+for bc in non_strict_base_category_set.keys():\n
+ vcl = reversed(context.getVariationCategoryList(base_category_list=(bc,)))\n
+ for vc in vcl:\n
+ dependant_vc_list = [other_vc for other_vc in vcl\n
+ if other_vc.startswith(\'%s/\' % vc)\n
+ and other_vc not in dependant_dimensions_dict]\n
+ if dependant_vc_list:\n
+ dependant_dimensions_dict[vc] = dependant_vc_list\n
+\n
+\n
+from Products.ERP5Type.Utils import cartesianProduct\n
+# also add all cell coordinates in the dictionnary\n
+for cell_key in cartesianProduct(context.getCellRange()):\n
+ for key in cell_key:\n
+ if key in dependant_dimensions_dict:\n
+ dependant_dimensions_dict[tuple(cell_key)] = [] # TODO ?\n
+ break\n
+\n
+return dependant_dimensions_dict\n
+</string> </value>
+ </item>
+ <item>
+ <key> <string>_code</string> </key>
+ <value>
+ <none/>
+ </value>
+ </item>
+ <item>
+ <key> <string>_params</string> </key>
+ <value> <string></string> </value>
+ </item>
+ <item>
+ <key> <string>errors</string> </key>
+ <value>
+ <tuple/>
+ </value>
+ </item>
+ <item>
+ <key> <string>func_code</string> </key>
+ <value>
+ <object>
+ <klass>
+ <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+ </klass>
+ <tuple/>
+ <state>
+ <dictionary>
+ <item>
+ <key> <string>co_argcount</string> </key>
+ <value> <int>0</int> </value>
+ </item>
+ <item>
+ <key> <string>co_varnames</string> </key>
+ <value>
+ <tuple>
+ <string>dict</string>
+ <string>non_strict_base_category_set</string>
+ <string>_getattr_</string>
+ <string>context</string>
+ <string>budget_model</string>
+ <string>None</string>
+ <string>_getiter_</string>
+ <string>budget_variation</string>
+ <string>True</string>
+ <string>_write_</string>
+ <string>reversed</string>
+ <string>dependant_dimensions_dict</string>
+ <string>bc</string>
+ <string>vcl</string>
+ <string>vc</string>
+ <string>append</string>
+ <string>$append0</string>
+ <string>other_vc</string>
+ <string>dependant_vc_list</string>
+ <string>Products.ERP5Type.Utils</string>
+ <string>cartesianProduct</string>
+ <string>cell_key</string>
+ <string>key</string>
+ <string>tuple</string>
+ </tuple>
+ </value>
+ </item>
+ </dictionary>
+ </state>
+ </object>
+ </value>
+ </item>
+ <item>
+ <key> <string>func_defaults</string> </key>
+ <value>
+ <none/>
+ </value>
+ </item>
+ <item>
+ <key> <string>id</string> </key>
+ <value> <string>BudgetLine_getSummaryDimensionKeyDict</string> </value>
+ </item>
+ <item>
+ <key> <string>warnings</string> </key>
+ <value>
+ <tuple/>
+ </value>
+ </item>
+ </dictionary>
+ </pickle>
+ </record>
+</ZopeData>
Added: erp5/trunk/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_setQuantityOnSummaryCellList.xml
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_setQuantityOnSummaryCellList.xml?rev=37280&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_setQuantityOnSummaryCellList.xml (added)
+++ erp5/trunk/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_setQuantityOnSummaryCellList.xml [utf8] Tue Jul 27 14:31:34 2010
@@ -0,0 +1,201 @@
+<?xml version="1.0"?>
+<ZopeData>
+ <record id="1" aka="AAAAAAAAAAE=">
+ <pickle>
+ <tuple>
+ <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
+ <tuple/>
+ </tuple>
+ </pickle>
+ <pickle>
+ <dictionary>
+ <item>
+ <key> <string>Script_magic</string> </key>
+ <value> <int>3</int> </value>
+ </item>
+ <item>
+ <key> <string>_bind_names</string> </key>
+ <value>
+ <object>
+ <klass>
+ <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+ </klass>
+ <tuple/>
+ <state>
+ <dictionary>
+ <item>
+ <key> <string>_asgns</string> </key>
+ <value>
+ <dictionary>
+ <item>
+ <key> <string>name_container</string> </key>
+ <value> <string>container</string> </value>
+ </item>
+ <item>
+ <key> <string>name_context</string> </key>
+ <value> <string>context</string> </value>
+ </item>
+ <item>
+ <key> <string>name_m_self</string> </key>
+ <value> <string>script</string> </value>
+ </item>
+ <item>
+ <key> <string>name_subpath</string> </key>
+ <value> <string>traverse_subpath</string> </value>
+ </item>
+ </dictionary>
+ </value>
+ </item>
+ </dictionary>
+ </state>
+ </object>
+ </value>
+ </item>
+ <item>
+ <key> <string>_body</string> </key>
+ <value> <string>from Products.ERP5Type.Utils import cartesianProduct\n
+from Products.ERP5Type.Message import translateString\n
+\n
+updated_cell_count = 0\n
+\n
+dependant_dimensions_dict = context.BudgetLine_getSummaryDimensionKeyDict()\n
+cell_key_list = context.getCellKeyList()\n
+\n
+def reversed(seq):\n
+ seq = seq[::]\n
+ seq.sort(reverse=True)\n
+ return seq\n
+\n
+# we iterate in reversed order to update the deepest cells first\n
+for cell_key in reversed(cartesianProduct(context.getCellRange())):\n
+ for idx, dimension in enumerate(cell_key):\n
+ if dimension in dependant_dimensions_dict:\n
+ dependant_cell_list = []\n
+ matching_cell_key = list(cell_key)\n
+ for key in dependant_dimensions_dict[dimension]:\n
+ matching_cell_key[idx] = key\n
+ for other_cell_key in cell_key_list:\n
+ if matching_cell_key == other_cell_key:\n
+ cell = context.getCell(*other_cell_key)\n
+ if cell is not None:\n
+ dependant_cell_list.append(cell)\n
+\n
+ if dependant_cell_list:\n
+ cell = context.getCell(*cell_key)\n
+ if cell is None:\n
+ # if summary cell does not exist, we create it.\n
+ cell = context.newCell(*cell_key)\n
+ cell.edit(\n
+ membership_criterion_base_category_list\n
+ =[bc for bc in context.getVariationBaseCategoryList() if bc not\n
+ in context.getMembershipCriterionBaseCategoryList()],\n
+ membership_criterion_category_list=cell_key,\n
+ mapped_value_property_list=(\'quantity\', ))\n
+ cell.setQuantity(sum([dependant_cell.getQuantity() for dependant_cell\n
+ in dependant_cell_list]))\n
+ updated_cell_count += 1\n
+ break\n
+\n
+return context.Base_redirect(form_id,\n
+ keep_items=dict(portal_status_message=translateString(\n
+ "${updated_cell_count} budget cells updated.",\n
+ mapping=dict(updated_cell_count=updated_cell_count))))\n
+</string> </value>
+ </item>
+ <item>
+ <key> <string>_code</string> </key>
+ <value>
+ <none/>
+ </value>
+ </item>
+ <item>
+ <key> <string>_params</string> </key>
+ <value> <string>form_id=\'view\'</string> </value>
+ </item>
+ <item>
+ <key> <string>errors</string> </key>
+ <value>
+ <tuple/>
+ </value>
+ </item>
+ <item>
+ <key> <string>func_code</string> </key>
+ <value>
+ <object>
+ <klass>
+ <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+ </klass>
+ <tuple/>
+ <state>
+ <dictionary>
+ <item>
+ <key> <string>co_argcount</string> </key>
+ <value> <int>1</int> </value>
+ </item>
+ <item>
+ <key> <string>co_varnames</string> </key>
+ <value>
+ <tuple>
+ <string>form_id</string>
+ <string>Products.ERP5Type.Utils</string>
+ <string>cartesianProduct</string>
+ <string>Products.ERP5Type.Message</string>
+ <string>translateString</string>
+ <string>updated_cell_count</string>
+ <string>_getattr_</string>
+ <string>context</string>
+ <string>dependant_dimensions_dict</string>
+ <string>cell_key_list</string>
+ <string>reversed</string>
+ <string>_getiter_</string>
+ <string>cell_key</string>
+ <string>enumerate</string>
+ <string>idx</string>
+ <string>dimension</string>
+ <string>dependant_cell_list</string>
+ <string>list</string>
+ <string>matching_cell_key</string>
+ <string>_getitem_</string>
+ <string>key</string>
+ <string>_write_</string>
+ <string>other_cell_key</string>
+ <string>_apply_</string>
+ <string>cell</string>
+ <string>None</string>
+ <string>append</string>
+ <string>$append0</string>
+ <string>bc</string>
+ <string>sum</string>
+ <string>dependant_cell</string>
+ <string>_inplacevar_</string>
+ <string>dict</string>
+ </tuple>
+ </value>
+ </item>
+ </dictionary>
+ </state>
+ </object>
+ </value>
+ </item>
+ <item>
+ <key> <string>func_defaults</string> </key>
+ <value>
+ <tuple>
+ <string>view</string>
+ </tuple>
+ </value>
+ </item>
+ <item>
+ <key> <string>id</string> </key>
+ <value> <string>BudgetLine_setQuantityOnSummaryCellList</string> </value>
+ </item>
+ <item>
+ <key> <string>warnings</string> </key>
+ <value>
+ <tuple/>
+ </value>
+ </item>
+ </dictionary>
+ </pickle>
+ </record>
+</ZopeData>
Added: erp5/trunk/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_viewSetQuantityOnSummaryCellListDialog.xml
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_viewSetQuantityOnSummaryCellListDialog.xml?rev=37280&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_viewSetQuantityOnSummaryCellListDialog.xml (added)
+++ erp5/trunk/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_viewSetQuantityOnSummaryCellListDialog.xml [utf8] Tue Jul 27 14:31:34 2010
@@ -0,0 +1,153 @@
+<?xml version="1.0"?>
+<ZopeData>
+ <record id="1" aka="AAAAAAAAAAE=">
+ <pickle>
+ <tuple>
+ <global name="ERP5Form" module="Products.ERP5Form.Form"/>
+ <tuple/>
+ </tuple>
+ </pickle>
+ <pickle>
+ <dictionary>
+ <item>
+ <key> <string>_bind_names</string> </key>
+ <value>
+ <object>
+ <klass>
+ <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+ </klass>
+ <tuple/>
+ <state>
+ <dictionary>
+ <item>
+ <key> <string>_asgns</string> </key>
+ <value>
+ <dictionary/>
+ </value>
+ </item>
+ </dictionary>
+ </state>
+ </object>
+ </value>
+ </item>
+ <item>
+ <key> <string>_objects</string> </key>
+ <value>
+ <tuple/>
+ </value>
+ </item>
+ <item>
+ <key> <string>action</string> </key>
+ <value> <string>BudgetLine_setQuantityOnSummaryCellList</string> </value>
+ </item>
+ <item>
+ <key> <string>description</string> </key>
+ <value> <string></string> </value>
+ </item>
+ <item>
+ <key> <string>edit_order</string> </key>
+ <value>
+ <list/>
+ </value>
+ </item>
+ <item>
+ <key> <string>encoding</string> </key>
+ <value> <string>UTF-8</string> </value>
+ </item>
+ <item>
+ <key> <string>enctype</string> </key>
+ <value> <string></string> </value>
+ </item>
+ <item>
+ <key> <string>group_list</string> </key>
+ <value>
+ <list>
+ <string>left</string>
+ <string>right</string>
+ <string>center</string>
+ <string>bottom</string>
+ <string>hidden</string>
+ </list>
+ </value>
+ </item>
+ <item>
+ <key> <string>groups</string> </key>
+ <value>
+ <dictionary>
+ <item>
+ <key> <string>bottom</string> </key>
+ <value>
+ <list/>
+ </value>
+ </item>
+ <item>
+ <key> <string>center</string> </key>
+ <value>
+ <list/>
+ </value>
+ </item>
+ <item>
+ <key> <string>hidden</string> </key>
+ <value>
+ <list/>
+ </value>
+ </item>
+ <item>
+ <key> <string>left</string> </key>
+ <value>
+ <list/>
+ </value>
+ </item>
+ <item>
+ <key> <string>right</string> </key>
+ <value>
+ <list/>
+ </value>
+ </item>
+ </dictionary>
+ </value>
+ </item>
+ <item>
+ <key> <string>id</string> </key>
+ <value> <string>BudgetLine_viewSetQuantityOnSummaryCellListDialog</string> </value>
+ </item>
+ <item>
+ <key> <string>method</string> </key>
+ <value> <string>POST</string> </value>
+ </item>
+ <item>
+ <key> <string>name</string> </key>
+ <value> <string>BudgetLine_viewSetQuantityOnSummaryCellListDialog</string> </value>
+ </item>
+ <item>
+ <key> <string>pt</string> </key>
+ <value> <string>form_dialog</string> </value>
+ </item>
+ <item>
+ <key> <string>row_length</string> </key>
+ <value> <int>4</int> </value>
+ </item>
+ <item>
+ <key> <string>stored_encoding</string> </key>
+ <value> <string>UTF-8</string> </value>
+ </item>
+ <item>
+ <key> <string>title</string> </key>
+ <value> <string>Update Summary Budget Cells</string> </value>
+ </item>
+ <item>
+ <key> <string>unicode_mode</string> </key>
+ <value> <int>0</int> </value>
+ </item>
+ <item>
+ <key> <string>update_action</string> </key>
+ <value> <string></string> </value>
+ </item>
+ <item>
+ <key> <string>update_action_title</string> </key>
+ <value> <string></string> </value>
+ </item>
+ </dictionary>
+ </pickle>
+ </record>
+</ZopeData>
Modified: erp5/trunk/bt5/erp5_budget/bt/revision
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_budget/bt/revision?rev=37280&r1=37279&r2=37280&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_budget/bt/revision [utf8] (original)
+++ erp5/trunk/bt5/erp5_budget/bt/revision [utf8] Tue Jul 27 14:31:34 2010
@@ -1 +1 @@
-301
\ No newline at end of file
+314
\ No newline at end of file
Modified: erp5/trunk/bt5/erp5_budget/bt/template_action_path_list
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_budget/bt/template_action_path_list?rev=37280&r1=37279&r2=37280&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_budget/bt/template_action_path_list [utf8] (original)
+++ erp5/trunk/bt5/erp5_budget/bt/template_action_path_list [utf8] Tue Jul 27 14:31:34 2010
@@ -4,6 +4,7 @@ Budget Line | consumed_view
Budget Line | current_view
Budget Line | engaged_view
Budget Line | initial_view
+Budget Line | update_summary_budget_cell
Budget Model Module | view
Budget Model | view
Budget Module | budget_group_consumption_export
More information about the Erp5-report
mailing list