Commit 6efd6a00 authored by Kevin Deldycke's avatar Kevin Deldycke

Support multiline gross salary on printing

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@10893 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 9a6eab84
......@@ -195,7 +195,6 @@ num = 0\n
INT_LEN = 3\n
for (preview_line_id, preview_line_item) in pre_calculation.items():\n
num += 1\n
context.log("Kev dfsdfsdfsdff", repr((preview_line_id, preview_line_item)))\n
service = preview_line_item[\'service\']\n
salary_range = preview_line_item[\'salary_range\']\n
service_id = service.getId()\n
......@@ -316,7 +315,6 @@ return preview_line_list\n
<string>INT_LEN</string>
<string>preview_line_id</string>
<string>preview_line_item</string>
<string>repr</string>
<string>service_id</string>
<string>o</string>
</tuple>
......
......@@ -50,12 +50,10 @@
<?xml version="1.0" encoding="iso-8859-1" ?>\n
\n
<tal:block tal:define="employee python: here.getDestinationSectionValue();\n
employer python: here.getSourceSectionValue();\n
paysheet_details python: here.PaySheetTransaction_getDetails();\n
paysheet_categories python: paysheet_details[\'paysheet_categories\'];\n
urssaf python: employer.getDestinationSectionValue();\n
start_date python: here.getStartDate()">\n
<tal:block tal:define="employee python: here.getDestinationSectionValue();\n
employer python: here.getSourceSectionValue();\n
urssaf python: employer.getDestinationSectionValue();\n
start_date python: here.getStartDate()">\n
\n
<template bottommargin=\'0.665cm\'\n
showboundary=\'0\'\n
......@@ -66,8 +64,8 @@
allowsplitting=\'1\'\n
landscape=\'0\'\n
leftmargin=\'0.635cm\'\n
tal:define=\'portal python:here.portal_url.getPortalObject()\'>\n
\n
tal:define=\'portal python: here.portal_url.getPortalObject()\'>\n
\n
<stylesheet>\n
<tablestyle name="decompte">\n
<stylecmd expr="(\'FONTSIZE\', (0,0), (-1,-1), 7)"/>\n
......@@ -110,7 +108,7 @@
<stylecmd expr="(\'BOTTOMPADDING\', (0,0), (0,0), 0)"/>\n
<stylecmd expr="(\'ALIGNMENT\', (0,0), (0,0), \'CENTER\')"/>\n
<stylecmd expr="(\'VALIGN\', (0,0), (0,0), \'MIDDLE\')"/>\n
\n
\n
<!-- Premiere ligne de droite\n
<stylecmd expr="(\'LINEABOVE\', (-1,0), (-1,0), 0.1, (0.4,0.4,0.4))"/>\n
<stylecmd expr="(\'LINEBEFORE\', (-1,0), (-1,0), 0.1, (0.4,0.4,0.4))"/>\n
......@@ -132,7 +130,7 @@
<stylecmd expr="(\'LINEBEFORE\', (-1,0), (-1,0), 0.1, (0.4,0.4,0.4))"/>\n
<stylecmd expr="(\'LINEAFTER\', (-1,0), (-1,0), 0.1, (0.4,0.4,0.4))"/>\n
-->\n
<stylecmd expr="(\'OUTLINE\', (-1,0), (-1,0), 0.1, (0.4,0.4,0.4))"/> \n
<stylecmd expr="(\'OUTLINE\', (-1,0), (-1,0), 0.1, (0.4,0.4,0.4))"/>\n
</tablestyle>\n
\n
</stylesheet>\n
......
......@@ -250,13 +250,13 @@ createPaySheetItem( title = \'Salary\' # labour_service.getTitleOrId()\n
, dest_org = context.getDestinationSection()\n
, cells = [{ "x" : labour_employee_share_category\n
, "y" : labour_salary_range\n
, "base" : 1.0\n
, "rate" : r_(total_employee_share - gross_salary)\n
, "base" : -1.0\n
, "rate" : r_(gross_salary - total_employee_share)\n
},\n
{ "x" : labour_employer_share_category\n
, "y" : labour_salary_range\n
, "base" : 1.0\n
, "rate" : -gross_salary\n
, "base" : -1.0\n
, "rate" : gross_salary\n
}]\n
)\n
\n
......
......@@ -487,27 +487,27 @@ kw[\'reduction_fillon_forfait/forfait\'] = \\\n
# Add blank lines for services which is a variable part od the gross salary.\n
# Thanks to this, the accountant has the freedom to add the missing amount of money\n
# that this script can\'t guess.\n
kw[\'retenue_maladie/base\'] = \\\n
kw[\'retenue_maladie/gross\'] = \\\n
{ \'employer_share\': None\n
, \'employee_share\': None\n
, \'base\' : 1.0\n
}\n
kw[\'primes/base\'] = \\\n
kw[\'primes/gross\'] = \\\n
{ \'employer_share\': None\n
, \'employee_share\': None\n
, \'base\' : 1.0\n
}\n
kw[\'absences/base\'] = \\\n
kw[\'absences/gross\'] = \\\n
{ \'employer_share\': None\n
, \'employee_share\': None\n
, \'base\' : 1.0\n
}\n
kw[\'iccp/base\'] = \\\n
kw[\'iccp/gross\'] = \\\n
{ \'employer_share\': None\n
, \'employee_share\': None\n
, \'base\' : 1.0\n
}\n
kw[\'precarite/base\'] = \\\n
kw[\'precarite/gross\'] = \\\n
{ \'employer_share\': None\n
, \'employee_share\': None\n
, \'base\' : 1.0\n
......
......@@ -51,156 +51,178 @@
<?xml version="1.0" encoding="iso-8859-1" ?>\n
\n
<document filename="report01.pdf"\n
xmlns:tal="http://xml.zope.org/namespaces/tal"\n
tal:define="employee python: here.getDestinationSectionValue();\n
employer python: here.getSourceSectionValue();\n
paysheet_details python: here.PaySheetTransaction_getDetails();\n
paysheet_categories python: paysheet_details[\'paysheet_categories\'];\n
urssaf python: employer.getDestinationSectionValue();\n
start_date python: here.getStartDate();\n
boldstyle python: \'(\\\'FONT\\\', \\\'Helvetica-Bold\\\', 7)\'">\n
xmlns:tal="http://xml.zope.org/namespaces/tal"\n
tal:define="details python: here.PaySheetTransaction_getDetails();\n
start_date python: here.getStartDate();\n
boldstyle python: \'(\\\'FONT\\\', \\\'Helvetica-Bold\\\', 7)\';\n
GROSS_SALARY_GROUP_ID python: \'gross\'">\n
\n
<title>Pay Sheet</title>\n
<author>Nexedi ERP5</author>\n
<subject>Pay Sheet</subject>\n
<content>\n
<table splitbyrow="1" rowheight=\'0.4cm\' repeatrows="1" repeatcols="0" style="decompte">\n
<tr>\n
<td colwidth="4.318cm">Nature</td>\n
<td colwidth="3.81cm">Base</td>\n
<td colwidth="1.524cm">Assiette</td>\n
<td colwidth="2.77cm">Taux part patronale</td>\n
<td colwidth="2.288cm">Part patronale</td>\n
<td colwidth="2.397cm">Taux part salariale</td>\n
<td colwidth="1.959cm">Part salariale</td>\n
</tr>\n
<title>Pay Sheet</title>\n
<author>Nexedi ERP5</author>\n
<subject>Pay Sheet</subject>\n
<content>\n
<table splitbyrow="1" rowheight=\'0.4cm\' repeatrows="1" repeatcols="0" style="decompte">\n
<tr>\n
<td colwidth="4.318cm">Nature</td>\n
<td colwidth="3.81cm">Base</td>\n
<td colwidth="1.524cm">Assiette</td>\n
<td colwidth="2.77cm">Taux part patronale</td>\n
<td colwidth="2.288cm">Part patronale</td>\n
<td colwidth="2.397cm">Taux part salariale</td>\n
<td colwidth="1.959cm">Part salariale</td>\n
</tr>\n
\n
<tr tal:attributes="stylecmd boldstyle"> <!--stylecmd="(\'FONT\', \'Helvetica-Bold\', 7)"> -->\n
<td>Salaire brut</td>\n
<tal:block repeat="group python: details[\'groups\']">\n
<tal:block condition="python: group[\'id\'] == GROSS_SALARY_GROUP_ID">\n
<tr tal:attributes="stylecmd boldstyle">\n
<td tal:content="python: group[\'title\']"> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td tal:content="python: \'%.2f\' % paysheet_details[\'gross_salary\']" tal:condition="python: paysheet_details[\'gross_salary\'] not in (None, \'\')">???</td>\n
</tr>\n
\n
<tal:block tal:condition="python: paysheet_categories.has_key(\'no_cat\')">\n
<tal:block define="no_cat_lines python: paysheet_categories[\'no_cat\'][\'lines\']">\n
<tr tal:repeat="line no_cat_lines">\n
<td><tal:block content="python: line[\'title\']"/> </td>\n
<td content="python: line[\'base_name\']"> </td>\n
<td content="python: \'%.2f\' % line[\'base\']" tal:condition="python: line[\'base\'] not in (None, \'\')"> </td>\n
<td content="python: \'%.3f %%\' % line[\'employer_share_rate\']" tal:condition="python: line[\'employer_share_rate\'] not in (None, \'\')"> </td>\n
<td content="python: \'%.2f\' % line[\'employer_share\']" tal:condition="python: line[\'employer_share\'] not in (None, \'\')"> </td>\n
<td content="python: \'%.3f %%\' % line[\'employee_share_rate\']" tal:condition="python: line[\'employee_share_rate\'] not in (None, \'\')"> </td>\n
<td content="python: \'%.2f\' % line[\'employee_share\']" tal:condition="python: line[\'employee_share\'] not in (None, \'\')"> </td>\n
</tr>\n
</tal:block>\n
</tal:block>\n
\n
<tal:block repeat="category paysheet_categories">\n
<tr tal:attributes="stylecmd boldstyle">\n
<td tal:content="python: paysheet_categories[category][\'title\']"> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
</tr>\n
<tal:block define="paysheet_lines python: paysheet_categories[category][\'lines\']">\n
<tr tal:repeat="line paysheet_lines" stylecmd="(\'LEFTPADDING\',8)">\n
<td><tal:block tal:content="python: \' \' + line[\'title\']"/> </td>\n
<td><tal:block tal:content="python: line[\'base_name\']"/> </td>\n
<td> <tal:block content="python: \'%.2f\' % line[\'base\']" tal:condition="python: line[\'base\'] not in (None, \'\')"></tal:block></td>\n
<td> <tal:block content="python: \'%.3f %%\' % line[\'employer_share_rate\']" tal:condition="python: line[\'employer_share_rate\'] not in (None, \'\')"></tal:block></td>\n
<td> <tal:block content="python: \'%.2f\' % line[\'employer_share\']" tal:condition="python: line[\'employer_share\'] not in (None, \'\')"></tal:block></td>\n
<td> <tal:block content="python: \'%.3f %%\' % line[\'employee_share_rate\']" tal:condition="python: line[\'employee_share_rate\'] not in (None, \'\')"></tal:block></td>\n
<td> <tal:block content="python: \'%.2f\' % line[\'employee_share\']" tal:condition="python: line[\'employee_share\'] not in (None, \'\')"></tal:block></td>\n
</tr>\n
</tal:block>\n
</tal:block>\n
\n
<tr tal:attributes="stylecmd boldstyle">\n
<td>Total des cotisations</td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> <tal:block replace="python: \'%.2f\' % paysheet_details[\'total_employer_share\']" tal:condition="python: paysheet_details[\'total_employer_share\'] not in (\'\', None)"> </tal:block></td>\n
<td> </td>\n
<td> <tal:block replace="python: \'%.2f\' % paysheet_details[\'total_employee_share\']" tal:condition="python: paysheet_details[\'total_employee_share\'] not in (\'\', None)"> </tal:block></td>\n
</tr>\n
<td> </td>\n
</tr>\n
<tr tal:repeat="line python: group[\'sublines\']" stylecmd="(\'LEFTPADDING\',8)">\n
<td><tal:block content="python: \' \' + line[\'service_title\']"/> </td>\n
<td><tal:block content="python: line[\'salary_range_title\']"/> </td>\n
<td><tal:block content="python: line[\'base\']"\n
condition="python: line[\'base\'] != None"/> </td>\n
<td><tal:block content="python: line[\'employer_rate\']"\n
condition="python: line[\'employer_rate\'] != None"/> </td>\n
<td><tal:block content="python: line[\'employer_share\']"\n
condition="python: line[\'employer_share\'] != None"/> </td>\n
<td><tal:block content="python: line[\'employee_rate\']"\n
condition="python: line[\'employee_rate\'] != None"/> </td>\n
<td><tal:block content="python: line[\'employee_share\']"\n
condition="python: line[\'employee_share\'] != None"/> </td>\n
</tr>\n
</tal:block>\n
</tal:block>\n
\n
<tr tal:attributes="stylecmd boldstyle">\n
<td>Salaire Net Imposable</td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> <tal:block replace="python: \'%.2f\' % paysheet_details[\'taxable_net_salary\']" tal:condition="python: paysheet_details[\'taxable_net_salary\'] not in (\'\', None)"> </tal:block></td>\n
</tr>\n
<tal:block repeat="category paysheet_categories">\n
<tal:block define="paysheet_lines python: paysheet_categories[category][\'lines\']">\n
<tal:block repeat="line paysheet_lines">\n
<tr tal:condition="python: line.has_key(\'taxable\') and line[\'taxable\']==\'yes\'">\n
<td> <tal:block content="python: line[\'title\']"/></td>\n
<td> <tal:block content="python: line[\'base_name\']"/></td>\n
<td> <tal:block replace="python: \'%.2f\' % line[\'base\']" tal:condition="python: line[\'base\'] not in (\'\', None)"></tal:block></td>\n
<td> </td>\n
<td> </td>\n
<td> <tal:block replace="python: \'%.3f %%\' % line[\'employee_share_rate\']" tal:condition="python: line[\'employee_share_rate\'] not in (\'\', None)"></tal:block></td>\n
<td> <tal:block replace="python: \'%.2f\' % abs(float(line[\'employee_share\']))" tal:condition="python: line[\'employee_share\'] not in (\'\', None)"></tal:block></td>\n
</tr>\n
</tal:block>\n
</tal:block>\n
</tal:block>\n
<tr tal:attributes="stylecmd boldstyle">\n
<td>Salaire Net</td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> <tal:block replace="python: \'%.2f\' % paysheet_details[\'net_salary\']" tal:condition="python: paysheet_details[\'net_salary\'] not in (\'\', None)"> </tal:block></td>\n
</tr>\n
</table>\n
<tr tal:attributes="stylecmd boldstyle">\n
<td>Salaire Brut</td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td tal:content="python: details[\'totals\'][\'gross_salary\']"\n
tal:condition="python: details[\'totals\'].has_key(\'gross_salary\')"> </td>\n
</tr>\n
\n
<table rowheight="0.6cm"><tr><td> </td></tr></table>\n
<tal:block repeat="group python: details[\'groups\']">\n
<tal:block condition="python: group[\'id\'] != GROSS_SALARY_GROUP_ID">\n
<tr tal:attributes="stylecmd boldstyle">\n
<td tal:content="python: group[\'title\']"> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
</tr>\n
<tr tal:repeat="line python: group[\'sublines\']" stylecmd="(\'LEFTPADDING\',8)">\n
<td><tal:block content="python: \' \' + line[\'service_title\']"/> </td>\n
<td><tal:block content="python: line[\'salary_range_title\']"/> </td>\n
<td><tal:block content="python: line[\'base\']"\n
condition="python: line[\'base\'] != None"/> </td>\n
<td><tal:block content="python: line[\'employer_rate\']"\n
condition="python: line[\'employer_rate\'] != None"/> </td>\n
<td><tal:block content="python: line[\'employer_share\']"\n
condition="python: line[\'employer_share\'] != None"/> </td>\n
<td><tal:block content="python: line[\'employee_rate\']"\n
condition="python: line[\'employee_rate\'] != None"/> </td>\n
<td><tal:block content="python: line[\'employee_share\']"\n
condition="python: line[\'employee_share\'] != None"/> </td>\n
</tr>\n
</tal:block>\n
</tal:block>\n
\n
<table style="cumul_conges">\n
<tr>\n
<td colwidth="11cm"> <tal:block tal:replace="python: \'Cumuls annuels (%s)\' % start_date.year()" tal:condition="python: start_date not in (\'\', None)"/></td>\n
<td colwidth="3cm"> </td>\n
<td colwidth="5cm"> <!-- <tal:block tal:replace="python: \'Dur\xc3\xa9e des cong\xc3\xa9s pay\xc3\xa9s : ???\'"/> --> </td>\n
</tr>\n
</table>\n
<tr tal:attributes="stylecmd boldstyle">\n
<td>Total des Cotisations</td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td><tal:block replace="python: details[\'totals\'][\'total_employer_share\']"\n
condition="python: details[\'totals\'].has_key(\'total_employer_share\')"/> </td>\n
<td> </td>\n
<td><tal:block replace="python: details[\'totals\'][\'total_employee_share\']"\n
condition="python: details[\'totals\'].has_key(\'total_employee_share\')"/> </td>\n
</tr>\n
\n
<tr tal:attributes="stylecmd boldstyle">\n
<td>Salaire Net Imposable</td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td><tal:block replace="python: details[\'totals\'][\'taxable_net_salary\']"\n
condition="python: details[\'totals\'].has_key(\'taxable_net_salary\')"/> </td>\n
</tr>\n
\n
<table style="cumul_conges_corps">\n
<tr>\n
<td colwidth="2cm">Salaire brut</td>\n
<td colwidth="3cm">Cotisations salariales</td>\n
<td colwidth="2cm">Salaire net</td>\n
<td colwidth="2cm">Net imposable</td>\n
<td colwidth="2cm">Part patronale</td>\n
<td colwidth="3cm"> </td>\n
<td colwidth="5cm"> <tal:block tal:replace="python: \'Dur\xc3\xa9e des d\xc3\xa9lais de pr\xc3\xa9avis : \' + context.PaySheetTransaction_getResignmentLegalDelay()"/></td>\n
</tr>\n
<tr>\n
<td> <tal:block replace="python: \'%.2f\' % paysheet_details[\'yearly_gross_salary\']" tal:condition="python: paysheet_details[\'yearly_gross_salary\'] not in (\'\', None)"></tal:block></td>\n
<td> <tal:block replace="python: \'%.2f\' % paysheet_details[\'yearly_employee_share\']" tal:condition="python: paysheet_details[\'yearly_employee_share\'] not in (\'\', None)"></tal:block></td>\n
<td> <tal:block replace="python: \'%.2f\' % paysheet_details[\'yearly_net_salary\']" tal:condition="python: paysheet_details[\'yearly_net_salary\'] not in (\'\', None)"></tal:block></td>\n
<td> <tal:block replace="python: \'%.2f\' % paysheet_details[\'yearly_taxable_net_salary\']" tal:condition="python: paysheet_details[\'yearly_taxable_net_salary\'] not in (\'\', None)"></tal:block></td>\n
<td> <tal:block replace="python: \'%.2f\' % paysheet_details[\'yearly_employer_share\']" tal:condition="python: paysheet_details[\'yearly_employer_share\'] not in (\'\', None)"></tal:block></td>\n
<td> </td>\n
<td> </td>\n
</tr>\n
</table>\n
<!--\n
<tal:block repeat="category paysheet_categories">\n
<tal:block define="paysheet_lines python: paysheet_categories[category][\'lines\']">\n
<tal:block repeat="line paysheet_lines">\n
<tr tal:condition="python: line.has_key(\'taxable\') and line[\'taxable\']==\'yes\'">\n
<td> <tal:block content="python: line[\'title\']"/></td>\n
<td> <tal:block content="python: line[\'base_name\']"/></td>\n
<td> <tal:block replace="python: \'%.2f\' % line[\'base\']" tal:condition="python: line[\'base\'] not in (\'\', None)"></tal:block></td>\n
<td> </td>\n
<td> </td>\n
<td> <tal:block replace="python: \'%.3f %%\' % line[\'employee_share_rate\']" tal:condition="python: line[\'employee_share_rate\'] not in (\'\', None)"></tal:block></td>\n
<td> <tal:block replace="python: \'%.2f\' % abs(float(line[\'employee_share\']))" tal:condition="python: line[\'employee_share\'] not in (\'\', None)"></tal:block></td>\n
</tr>\n
</tal:block>\n
</tal:block>\n
</tal:block>\n
-->\n
<tr tal:attributes="stylecmd boldstyle">\n
<td>Salaire Net</td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td> </td>\n
<td><tal:block replace="python: details[\'totals\'][\'net_salary\']"\n
condition="python: details[\'totals\'].has_key(\'net_salary\')"/> </td>\n
</tr>\n
</table>\n
\n
</content>\n
<table rowheight="0.6cm"><tr><td> </td></tr></table>\n
\n
<table style="cumul_conges">\n
<tr>\n
<td colwidth="11cm"> <tal:block tal:replace="python: \'Cumuls annuels (%s)\' % start_date.year()" tal:condition="python: start_date not in (\'\', None)"/></td>\n
<td colwidth="3cm"> </td>\n
<td colwidth="5cm"> <!-- <tal:block tal:replace="python: \'Dur\xc3\xa9e des cong\xc3\xa9s pay\xc3\xa9s : ???\'"/> --> </td>\n
</tr>\n
</table>\n
<!--\n
<table style="cumul_conges_corps">\n
<tr>\n
<td colwidth="2cm">Salaire brut</td>\n
<td colwidth="3cm">Cotisations salariales</td>\n
<td colwidth="2cm">Salaire net</td>\n
<td colwidth="2cm">Net imposable</td>\n
<td colwidth="2cm">Part patronale</td>\n
<td colwidth="3cm"> </td>\n
<td colwidth="5cm"> <tal:block tal:replace="python: \'Dur\xc3\xa9e des d\xc3\xa9lais de pr\xc3\xa9avis : \' + context.PaySheetTransaction_getResignmentLegalDelay()"/></td>\n
</tr>\n
<tr>\n
<td> <tal:block replace="python: \'%.2f\' % paysheet_details[\'yearly_gross_salary\']" tal:condition="python: paysheet_details[\'yearly_gross_salary\'] not in (\'\', None)"></tal:block></td>\n
<td> <tal:block replace="python: \'%.2f\' % paysheet_details[\'yearly_employee_share\']" tal:condition="python: paysheet_details[\'yearly_employee_share\'] not in (\'\', None)"></tal:block></td>\n
<td> <tal:block replace="python: \'%.2f\' % paysheet_details[\'yearly_net_salary\']" tal:condition="python: paysheet_details[\'yearly_net_salary\'] not in (\'\', None)"></tal:block></td>\n
<td> <tal:block replace="python: \'%.2f\' % paysheet_details[\'yearly_taxable_net_salary\']" tal:condition="python: paysheet_details[\'yearly_taxable_net_salary\'] not in (\'\', None)"></tal:block></td>\n
<td> <tal:block replace="python: \'%.2f\' % paysheet_details[\'yearly_employer_share\']" tal:condition="python: paysheet_details[\'yearly_employer_share\'] not in (\'\', None)"></tal:block></td>\n
<td> </td>\n
<td> </td>\n
</tr>\n
</table>\n
-->\n
</content>\n
</document>
]]></string> </value>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment