[Erp5-report] r21509 - in /erp5/trunk/bt5/erp5_payroll: SkinTemplateItem/portal_skins/erp5_...

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Jun 11 17:40:08 CEST 2008


Author: jerome
Date: Wed Jun 11 17:40:05 2008
New Revision: 21509

URL: http://svn.erp5.org?rev=21509&view=rev
Log:
Improve Payroll Taxes Reports to support salary range correctly

Modified:
    erp5/trunk/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/AccountingTransactionModule_getPaySheetLineReportSectionLineList.xml
    erp5/trunk/bt5/erp5_payroll/bt/revision

Modified: erp5/trunk/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/AccountingTransactionModule_getPaySheetLineReportSectionLineList.xml
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/AccountingTransactionModule_getPaySheetLineReportSectionLineList.xml?rev=21509&r1=21508&r2=21509&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/AccountingTransactionModule_getPaySheetLineReportSectionLineList.xml (original)
+++ erp5/trunk/bt5/erp5_payroll/SkinTemplateItem/portal_skins/erp5_payroll/AccountingTransactionModule_getPaySheetLineReportSectionLineList.xml Wed Jun 11 17:40:05 2008
@@ -70,6 +70,7 @@
 \n
 request = context.REQUEST\n
 portal = context.getPortalObject()\n
+translateString = portal.Base_translateString\n
 \n
 section_category = request[\'section_category\']\n
 section_uid_list = portal.Base_getSectionUidListForSectionCategory(section_category)\n
@@ -90,6 +91,7 @@
 \n
 employee_params = {\n
     \'group_by_node\' : 1,\n
+    \'group_by_variation\': 1,\n
     \'section_uid\' : section_uid_list,\n
     \'tax_category_uid\' : context.portal_categories.tax_category.employee_share.getUid(),\n
     \'at_date\' : at_date,\n
@@ -101,6 +103,7 @@
 \n
 employer_params = {\n
     \'group_by_node\' : 1,\n
+    \'group_by_variation\': 1,\n
     \'section_uid\' : section_uid_list,\n
     \'tax_category_uid\' : context.portal_categories.tax_category.employer_share.getUid(),\n
     \'at_date\' : at_date,\n
@@ -127,33 +130,48 @@
 i = 0\n
 for inventory in employee_inventory_list:\n
   price = inventory.total_price or 0\n
-  employee = inventory.getDestinationValue()\n
+  movement = inventory.getObject()\n
+  employee = movement.getDestinationValue()\n
+  salary_range = movement.getSalaryRange()\n
+  salary_range_title = movement.getSalaryRange() and\\\n
+                          movement.getSalaryRangeValue().getTranslatedTitle()\n
+\n
   i = i + 1\n
-  inventory_list[employee.getUid()] = Object(id=i,\n
+  inventory_list[(employee.getUid(), salary_range)] = Object(id=i,\n
                employee_career_reference=employee.getCareerReference(),\n
                employee_title=employee.getTitle(),\n
                employee_career_function=employee.getCareerFunctionTitle(),\n
+               salary_range=salary_range,\n
+               salary_range_title=salary_range_title,\n
                employee_share=price,\n
                base=inventory.quantity, )\n
   employee_total += price\n
   base_total += inventory.quantity\n
 \n
 for inventory in employer_inventory_list:\n
-  if employee.getUid() not in inventory_list:\n
-    inventory_list[employee.getUid()] = Object(id=i,\n
+  price = inventory.total_price or 0\n
+  movement = inventory.getObject()\n
+  employee = movement.getDestinationValue()\n
+  salary_range = movement.getSalaryRange()\n
+  salary_range_title = movement.getSalaryRange() and\\\n
+                          movement.getSalaryRangeValue().getTranslatedTitle()\n
+\n
+  key = (employee.getUid(), salary_range)\n
+  if key not in inventory_list:\n
+    inventory_list[key] = Object(id=i,\n
                employee_career_reference=employee.getCareerReference(),\n
                employee_title=employee.getTitle(),\n
                employee_career_function=employee.getCareerFunctionTitle(),\n
                employee_share=0,\n
+               salary_range=salary_range,\n
+               salary_range_title=salary_range_title,\n
                base=inventory.quantity, )\n
     base_total += inventory.quantity\n
     i = i + 1\n
 \n
-  price = inventory.total_price or 0\n
   employee = inventory.getDestinationValue()\n
-  inventory_list[employee.getUid()].employer_share = price\n
-  inventory_list[employee.getUid()].total = \\\n
-       inventory_list[employee.getUid()].employee_share + price\n
+  inventory_list[key].employer_share = price\n
+  inventory_list[key].total = inventory_list[key].employee_share + price\n
   employer_total += price\n
 \n
 total = employee_total + employer_total\n
@@ -163,11 +181,72 @@
 request.set(\'base_total\', base_total)\n
 request.set(\'total\', total)\n
 \n
-invent_list = []\n
-invent_list = inventory_list.values()\n
-invent_list.sort(lambda x, y: cmp(x.id, y.id))\n
-\n
-return invent_list\n
+\n
+sorted_inventory_list = []\n
+sorted_inventory_list = inventory_list.values()\n
+\n
+# sort by salary range, and add intermediate sums if needed\n
+def sort_method(a, b):\n
+  salary_range_diff = cmp(a.salary_range, b.salary_range)\n
+  if salary_range_diff:\n
+    return salary_range_diff\n
+  employee_career_reference_diff = cmp(a.employee_career_reference,\n
+                                       b.employee_career_reference)\n
+  if employee_career_reference_diff:\n
+    return employee_career_reference_diff\n
+  return cmp(a.employee_title, b.employee_title)\n
+\n
+sorted_inventory_list.sort(sort_method)\n
+\n
+i = 0\n
+intermediate_base_total = 0\n
+intermediate_employee_total = 0\n
+intermediate_employer_total = 0\n
+\n
+multiple_salary_range = 0\n
+if sorted_inventory_list:\n
+  new_inventory_list = []\n
+\n
+  current_salary_range = sorted_inventory_list[0][\'salary_range\']\n
+  current_salary_range_title = sorted_inventory_list[0][\'salary_range_title\']\n
+\n
+  for inventory in sorted_inventory_list:\n
+    i = i+1\n
+    inventory[\'id\'] = i\n
+\n
+    if inventory[\'salary_range\'] != current_salary_range:\n
+      multiple_salary_range = 1\n
+      new_inventory_list.append(Object(\n
+               employee_title=translateString(\'Total ${salary_range_title}\',\n
+                     mapping=dict(salary_range_title=current_salary_range_title)),\n
+               base=intermediate_base_total,\n
+               employee_share=intermediate_employee_total,\n
+               employer_share=intermediate_employer_total))\n
+\n
+      intermediate_base_total = 0\n
+      intermediate_employee_total = 0\n
+      intermediate_employer_total = 0\n
+\n
+      current_salary_range = inventory[\'salary_range\']\n
+      current_salary_range_title = inventory[\'salary_range_title\']\n
+\n
+    intermediate_base_total += inventory[\'base\']\n
+    intermediate_employee_total += inventory.get(\'employee_share\', 0)\n
+    intermediate_employer_total += inventory.get(\'employer_share\', 0)\n
+    new_inventory_list.append(inventory)\n
+\n
+  if multiple_salary_range:\n
+    new_inventory_list.append(Object(\n
+           employee_title=translateString(\'Total ${salary_range_title}\',\n
+                 mapping=dict(salary_range_title=current_salary_range_title)),\n
+           base=intermediate_base_total,\n
+           employee_share=intermediate_employee_total,\n
+           employer_share=intermediate_employer_total))\n
+     \n
+  return new_inventory_list\n
+\n
+\n
+return []\n
 </string> </value>
         </item>
         <item>
@@ -224,6 +303,7 @@
                             <string>context</string>
                             <string>request</string>
                             <string>portal</string>
+                            <string>translateString</string>
                             <string>_getitem_</string>
                             <string>section_category</string>
                             <string>section_uid_list</string>
@@ -250,11 +330,24 @@
                             <string>_getiter_</string>
                             <string>inventory</string>
                             <string>price</string>
+                            <string>movement</string>
                             <string>employee</string>
+                            <string>salary_range</string>
+                            <string>salary_range_title</string>
                             <string>_inplacevar_</string>
+                            <string>key</string>
                             <string>employer_share</string>
                             <string>total</string>
-                            <string>invent_list</string>
+                            <string>sorted_inventory_list</string>
+                            <string>sort_method</string>
+                            <string>intermediate_base_total</string>
+                            <string>intermediate_employee_total</string>
+                            <string>intermediate_employer_total</string>
+                            <string>multiple_salary_range</string>
+                            <string>new_inventory_list</string>
+                            <string>current_salary_range</string>
+                            <string>current_salary_range_title</string>
+                            <string>dict</string>
                           </tuple>
                         </value>
                     </item>

Modified: erp5/trunk/bt5/erp5_payroll/bt/revision
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_payroll/bt/revision?rev=21509&r1=21508&r2=21509&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_payroll/bt/revision (original)
+++ erp5/trunk/bt5/erp5_payroll/bt/revision Wed Jun 11 17:40:05 2008
@@ -1,1 +1,1 @@
-274
+275




More information about the Erp5-report mailing list