From a58807ef98c5bd2b9c393462a53c318280faf416 Mon Sep 17 00:00:00 2001 From: Kevin Deldycke <kevin@nexedi.com> Date: Thu, 30 Mar 2006 23:52:53 +0000 Subject: [PATCH] * Use generic script Base_getPreferredPrecision and Base_getRoundValue to get the right amount of money. * Calculate and show the previous balance. * Remove suffix "transaction_" of query parameters to prepare the full migration of accouting stuff to getInventory API. * Clean up code (supress old-school 80-character limitation, regroup similar statement together for easy human-eye parsing). * Use section_portal_type_list to break acquisition of 'group' property from Person to Organisation. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@6386 20353a03-c40f-0410-a6d1-a30d3c3de9de --- .../Entity_getAccountingTransactionList.xml | 165 +++++++++++------- 1 file changed, 106 insertions(+), 59 deletions(-) diff --git a/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/Entity_getAccountingTransactionList.xml b/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/Entity_getAccountingTransactionList.xml index 8f6c007c1d..cbdb87decc 100644 --- a/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/Entity_getAccountingTransactionList.xml +++ b/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/Entity_getAccountingTransactionList.xml @@ -66,76 +66,116 @@ </item> <item> <key> <string>_body</string> </key> - <value> <string>kwd = {}\n -if kw.has_key(\'hide_grouping\'):\n - kwd[\'hide_grouping\'] = kw[\'hide_grouping\']\n -\n -LOG = lambda msg : context.log(\'Entity_getAccountingTransactionList\', msg)\n + <value> <string encoding="cdata"><![CDATA[ + +precision = context.Base_getPreferredPrecision()\n +r_ = lambda x: context.Base_getRoundValue(x, precision)\n \n # read settings from user preference\n -preference = context.getPortalObject().portal_preferences\n +preference = context.getPortalObject().portal_preferences\n +simulation_state = preference.getPreferredAccountingTransactionSimulationStateList()\n +section_category = preference.getPreferredAccountingTransactionSectionCategory()\n +from_date = preference.getPreferredAccountingTransactionFromDate()\n +at_date = preference.getPreferredAccountingTransactionAtDate()\n \n -if kw.get(\'no_from_date\', 0) :\n - from_date = None \n -else :\n - from_date = preference.getPreferredAccountingTransactionFromDate()\n -if from_date :\n - kwd[\'from_date\'] = from_date\n +# Build the common inventory dict\n +params = {}\n \n -at_date = preference.getPreferredAccountingTransactionAtDate()\n -if at_date :\n - kwd[\'at_date\'] = at_date\n +if kw.get(\'no_from_date\', 0): from_date = None\n \n -simulation_state = preference\\\n - .getPreferredAccountingTransactionSimulationStateList()\n -if simulation_state :\n - kwd[\'transaction_simulation_state\'] = simulation_state\n +if simulation_state: params[\'simulation_state\'] = simulation_state\n +if section_category: params[\'section_category\'] = section_category\n \n -section_category = preference\\\n - .getPreferredAccountingTransactionSectionCategory()\n -if section_category :\n - kwd[\'transaction_section_category\'] = section_category\n +if kw.has_key(\'node_uid\') : params[\'node_uid\'] = kw[\'node_uid\']\n +if kw.has_key(\'portal_type\'): params[\'portal_type\'] = kw[\'portal_type\']\n \n -if kw.has_key(\'node_uid\'):\n - kwd[\'node_uid\'] = transaction_selection[\'node_uid\']\n -if kw.has_key(\'transaction_portal_type\'):\n - kwd[\'transaction_portal_type\'] = kw[\'transaction_portal_type\']\n +# Create the related accouting line list\n +new_result = []\n +net_balance = 0.0\n \n +# Create a new parameter list to get the previous balance\n +get_inventory_kw = params.copy()\n +get_inventory_kw.update({ \'omit_simulation\' : 1\n + , \'to_date\' : from_date\n + , \'section_portal_type_list\': [\'Organisation\']\n + , \'stat\' : 1\n + })\n \n +# Get previous debit and credit\n +previous_total_debit = context.Entity_zGetAccountingTransactionList(omit_output=1, **get_inventory_kw)\n +previous_total_credit = context.Entity_zGetAccountingTransactionList(omit_input =1, **get_inventory_kw)\n +previous_total_debit = r_(previous_total_debit[0].total_price)\n +previous_total_credit = r_(previous_total_credit[0].total_price)\n +# Get Absolute value of debit and credit\n +if previous_total_debit < 0: previous_total_debit = - previous_total_debit\n +if previous_total_credit < 0: previous_total_credit = - previous_total_credit\n +\n +# Show the previous balance if not empty\n +if previous_total_credit != 0 or previous_total_debit != 0:\n + from Products.ERP5Type.Document import newTempAccountingTransaction\n +\n + net_balance = r_(previous_total_debit - previous_total_credit)\n + previous_balance = newTempAccountingTransaction( context.getPortalObject()\n + , "temp_%s" % context.getUid()\n + )\n + previous_balance.setUid(\'new_000\')\n +\n + previous_balance.edit( \\\n + parent_title = context.Base_translateString("Previous Balance")\n + , section_title = ""\n + , date = from_date - 1\n + , portal_type = ""\n + , account_uid = None\n + , parent_reference = None\n + , parent_specific_reference = None\n + , translated_simulation_state_title = None\n + , debit = previous_total_debit\n + , credit = previous_total_credit\n + , grouping_reference = None\n + , balance = net_balance\n + , net_balance = net_balance\n + , is_previous_balance = True\n + )\n + new_result.append(previous_balance)\n \n -# FIXME: same problem as in BankAccount_getAccountingTransactionList\n -# LOG("SQL used: %s" % context.Entity_zGetAccountingTransactionList(src__=1, **kwd))\n \n -new_result = []\n -result = context.Entity_zGetAccountingTransactionList(**kwd)\n +# Show / Hide grouping if needed\n +if kw.has_key(\'hide_grouping\'): params[\'hide_grouping\'] = kw[\'hide_grouping\']\n +\n +# FIXME: same problem as in BankAccount_getAccountingTransactionList\n +result = context.Entity_zGetAccountingTransactionList( from_date = from_date\n + , at_date = at_date\n + , src__ = src__\n + , **params\n + )\n if src__:\n return result\n -net_balance = 0.0\n +\n +# Add related accounting lines one by one in order to calculate intermediate balance\n for l in result:\n o = l.getObject()\n net_balance += l.balance or 0.0\n if o is not None:\n - c = o.asContext( net_balance = net_balance,\n - balance=l.balance,\n - credit=l.credit,\n - debit=l.debit,\n - date=l.date,\n - section_title=l.section_title,\n - parent_reference=l.parent_reference,\n - parent_specific_reference=l.parent_specific_reference,\n - translated_simulation_state_title =\n - o.getTranslatedSimulationStateTitle(),\n -\n -# FIXME: overriding \'portal_type\' in asContext is clearly a bad idea, as many methods are storred on the portal type \n -# (hence the translated_simulation_state_title hack) -j\xc3\xa9rome\n - portal_type=l.portal_type,\n -\n - account_uid=l.account_uid, )\n + c = o.asContext( net_balance = net_balance\n + , balance = l.balance\n + , credit = l.credit\n + , debit = l.debit\n + , date = l.date\n + , section_title = l.section_title\n + , parent_reference = l.parent_reference\n + , parent_specific_reference = l.parent_specific_reference\n + , translated_simulation_state_title = o.getTranslatedSimulationStateTitle()\n + # FIXME: overriding \'portal_type\' in asContext is clearly a bad idea, as many methods are storred on the portal type \n + # (hence the translated_simulation_state_title hack) -j\xc3\xa9rome\n + , portal_type = l.portal_type\n + , account_uid = l.account_uid\n + )\n new_result.append(c)\n \n return new_result\n -# vim: syntax=python\n -</string> </value> + + +]]></string> </value> </item> <item> <key> <string>_code</string> </key> @@ -184,23 +224,30 @@ return new_result\n <string>selection</string> <string>src__</string> <string>kw</string> - <string>kwd</string> <string>_getattr_</string> - <string>_getitem_</string> - <string>_write_</string> - <string>LOG</string> <string>context</string> + <string>precision</string> + <string>r_</string> <string>preference</string> - <string>None</string> - <string>from_date</string> - <string>at_date</string> <string>simulation_state</string> <string>section_category</string> - <string>transaction_selection</string> + <string>from_date</string> + <string>at_date</string> + <string>params</string> + <string>None</string> + <string>_write_</string> + <string>_getitem_</string> <string>new_result</string> + <string>net_balance</string> + <string>get_inventory_kw</string> <string>_apply_</string> + <string>previous_total_debit</string> + <string>previous_total_credit</string> + <string>Products.ERP5Type.Document</string> + <string>newTempAccountingTransaction</string> + <string>previous_balance</string> + <string>True</string> <string>result</string> - <string>net_balance</string> <string>_getiter_</string> <string>l</string> <string>o</string> -- 2.30.9