[Erp5-report] r42221 jerome - in /erp5/trunk/bt5/erp5_accounting: SkinTemplateItem/portal_s...

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Jan 11 17:14:15 CET 2011


Author: jerome
Date: Tue Jan 11 17:14:14 2011
New Revision: 42221

URL: http://svn.erp5.org?rev=42221&view=rev
Log:
Don't create balance transaction for sub sections if they also have accounting periods. 
If an organisation contains accounting period, it must be treated as independant from accounting point of view.

Modified:
    erp5/trunk/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountingPeriod_createBalanceTransaction.xml
    erp5/trunk/bt5/erp5_accounting/bt/revision

Modified: erp5/trunk/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountingPeriod_createBalanceTransaction.xml
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountingPeriod_createBalanceTransaction.xml?rev=42221&r1=42220&r2=42221&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountingPeriod_createBalanceTransaction.xml [utf8] (original)
+++ erp5/trunk/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/AccountingPeriod_createBalanceTransaction.xml [utf8] Tue Jan 11 17:14:14 2011
@@ -76,16 +76,47 @@ assert at_date\n
 section = context.getParentValue()\n
 section_currency = section.getPriceCurrency()\n
 section_currency_precision = section.getPriceCurrencyValue().getQuantityPrecision()\n
-section_category = section.getGroup(base=True)\n
 \n
-# we use Base_getSectionUidListForSectionCategory as the only API to get the\n
-# organisation member of that "accounting entity"\n
-for section_uid in \\\n
-    portal.Base_getSectionUidListForSectionCategory(section_category):\n
-  \n
-  section = portal.portal_catalog.getObject(uid=section_uid)\n
 \n
-  balance_transaction = portal.accounting_module.newContent(\n
+# we have two distinct cases:\n
+#  * child organisations does not have accounting periods, we create balance\n
+#    transactions for each of those sections.\n
+#  * child organisations have valid accounting periods, we will create balance\n
+#    transactions for the sections when we close their respective periods\n
+\n
+def isIndenpendantSection(section):\n
+  for ap in section.contentValues(\n
+              portal_type=\'Accounting Period\',\n
+              checked_permission=\'View\'):\n
+    if ap.getSimulationState() in (\'started\', \'stopped\', \'delivered\'):\n
+      return True\n
+  return False\n
+\n
+def getDependantSectionList(group, main_section):\n
+  section_list = []\n
+  recurse = True\n
+  for section in group.getGroupRelatedValueList(\n
+                            portal_type=\'Organisation\',\n
+                            strict_membership=True,\n
+                            checked_permission=\'View\'):\n
+    if section != main_section:\n
+      if isIndenpendantSection(section):\n
+        recurse = False\n
+      else:\n
+        section_list.append(section)\n
+  if recurse:\n
+    for subgroup in group.contentValues():\n
+      section_list.extend(getDependantSectionList(subgroup, main_section))\n
+\n
+  return section_list\n
+      \n
+group_value = section.getGroupValue()\n
+section_list = [section]\n
+if group_value is not None:\n
+  section_list.extend(getDependantSectionList(group_value, section))\n
+\n
+def createBalanceTransaction(section):\n
+  return portal.accounting_module.newContent(\n
                           activate_kw=activate_kw,\n
                           portal_type=\'Balance Transaction\',\n
                           start_date=(at_date + 1).earliestTime(),\n
@@ -94,6 +125,10 @@ for section_uid in \\\n
                           resource=section_currency,\n
                           causality_value=context)\n
 \n
+for section in section_list:\n
+  section_uid = section.getUid()\n
+  balance_transaction = None\n
+\n
   group_by_node_node_category_list = []\n
   group_by_mirror_section_node_category_list = []\n
   group_by_payment_node_category_list = []\n
@@ -148,6 +183,8 @@ for section_uid in \\\n
         raise ValueError(\'Using multiple currencies on profit and loss account \'\n
                          \'is not supported\')\n
       profit_and_loss_quantity += total_price\n
+      if balance_transaction is None:\n
+        balance_transaction = createBalanceTransaction(section)\n
       balance_transaction.newContent(\n
           id=\'%03d\' % line_count,\n
           portal_type=\'Balance Transaction Line\',\n
@@ -165,6 +202,8 @@ for section_uid in \\\n
       \n
       if inventory.node_relative_url != profit_and_loss_account:\n
         profit_and_loss_quantity += total_price\n
+        if balance_transaction is None:\n
+          balance_transaction = createBalanceTransaction(section)\n
         balance_transaction.newContent(\n
           id=\'%03d\' % line_count,\n
           portal_type=\'Balance Transaction Line\',\n
@@ -190,6 +229,8 @@ for section_uid in \\\n
     line_count += 1\n
 \n
     if inventory.resource_uid != section_currency_uid:\n
+      if balance_transaction is None:\n
+        balance_transaction = createBalanceTransaction(section)\n
       balance_transaction.newContent(\n
         id=\'%03d\' % line_count,\n
         portal_type=\'Balance Transaction Line\',\n
@@ -203,6 +244,8 @@ for section_uid in \\\n
       if total_price != quantity:\n
         raise ValueError(\'Different price: %s != %s \' % (\n
                           total_price, quantity))\n
+      if balance_transaction is None:\n
+        balance_transaction = createBalanceTransaction(section)\n
       balance_transaction.newContent(\n
         id=\'%03d\' % line_count,\n
         portal_type=\'Balance Transaction Line\',\n
@@ -230,6 +273,8 @@ for section_uid in \\\n
     line_count += 1\n
 \n
     if inventory.resource_uid != section_currency_uid:\n
+      if balance_transaction is None:\n
+        balance_transaction = createBalanceTransaction(section)\n
       balance_transaction.newContent(\n
         id=\'%03d\' % line_count,\n
         portal_type=\'Balance Transaction Line\',\n
@@ -243,6 +288,8 @@ for section_uid in \\\n
       if total_price != quantity:\n
         raise ValueError(\'Different price: %s != %s \' % (\n
                           total_price, quantity))\n
+      if balance_transaction is None:\n
+        balance_transaction = createBalanceTransaction(section)\n
       balance_transaction.newContent(\n
         id=\'%03d\' % line_count,\n
         portal_type=\'Balance Transaction Line\',\n
@@ -251,6 +298,10 @@ for section_uid in \\\n
         destination_payment_uid=inventory.payment_uid,\n
         quantity=total_price)\n
 \n
+  if balance_transaction is None:\n
+    # we did not have any transaction for this section\n
+    continue\n
+\n
   # add a final line for p&l\n
   balance_transaction.newContent(\n
             id=\'%03d\' % (line_count + 1),\n

Modified: erp5/trunk/bt5/erp5_accounting/bt/revision
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_accounting/bt/revision?rev=42221&r1=42220&r2=42221&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_accounting/bt/revision [utf8] (original)
+++ erp5/trunk/bt5/erp5_accounting/bt/revision [utf8] Tue Jan 11 17:14:14 2011
@@ -1 +1 @@
-1418
\ No newline at end of file
+1426
\ No newline at end of file



More information about the Erp5-report mailing list