Commit 0c9323c3 authored by Fabien Morin's avatar Fabien Morin

2009-03-10 fabien

* rename salaire_net_imposabe base_amount into taxable_net_pay
* add a macro used to display localised information in a part of the payslip
* increment version number because of the new style of the payslip

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@25934 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 1d3f80e1
...@@ -13,7 +13,8 @@ ...@@ -13,7 +13,8 @@
<key> <string>categories</string> </key> <key> <string>categories</string> </key>
<value> <value>
<tuple> <tuple>
<string>base_amount/salaire_net_imposable</string> <string>base_amount/taxable_net_pay</string>
<string>base_amount/taxable_net_pay</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -31,7 +32,7 @@ ...@@ -31,7 +32,7 @@
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>salaire_net_imposable</string> </value> <value> <string>taxable_net_pay</string> </value>
</item> </item>
<item> <item>
<key> <string>int_index</string> </key> <key> <string>int_index</string> </key>
...@@ -49,7 +50,7 @@ ...@@ -49,7 +50,7 @@
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Salaire net imposable</string> </value> <value> <string>Taxable Net Pay</string> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
<?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>translateString = context.Base_translateString\n
request = context.REQUEST\n
quantity_renderer = context.Base_viewFieldLibrary.my_money_quantity.render_pdf\n
\n
model = context.getSpecialiseValue()\n
def getPropertyFromModel(model, property_name):\n
"""Get a property from the paysheet model, or from a specialised model.\n
"""\n
v = model.getProperty(property_name)\n
if v:\n
return v\n
for specialised_model in model.getSpecialiseValueList():\n
v = getPropertyFromModel(specialised_model, property_name)\n
if v:\n
return v\n
\n
def getFieldAsString(field):\n
return \', \'.join(getFieldAsLineList(field))\n
\n
def getFieldAsLineList(field):\n
"""Returns the text as a list of lines."""\n
field = field or \'\'\n
text = field.replace(\'\\r\', \'\')\n
text_list = text.split(\'\\n\')\n
return [x for x in text_list if x]\n
\n
def getSocialCodeId(social_code_id):\n
s = \'\'\n
if social_code_id:\n
s += \'%s: %s\' % (translateString(\'Social Code\'), social_code_id)\n
return s\n
\n
def getCareerId(career_title):\n
s = \'\'\n
if career_title and career_title != \'default_career\':\n
s += \'%s: %s\' % (translateString(\'Career Title\'), career_title)\n
return s\n
\n
def getCollectiveAgreementId(collective_agreement):\n
s = \'\'\n
if collective_agreement:\n
s += \'%s: %s\' % (translateString(\'Collective Agreement\'), collective_agreement)\n
return s\n
\n
def getSalaryLevelId(salary_level):\n
s = \'\'\n
if salary_level:\n
s += \'%s: %s\' % (translateString(\'Salary Level\'), salary_level)\n
return s\n
\n
def getCareerCoefficientId(career_coefficient):\n
s = \'\'\n
if career_coefficient:\n
s += \'%s: %s\' % (translateString(\'Salary Coefficient\'), career_coefficient)\n
return s\n
\n
def getHiringDateId(date):\n
s = \'\'\n
if date:\n
s += \'%s: %s\' % (translateString(\'Hiring Date\'), date)\n
return s\n
\n
def getPriceCurrencyId(currency):\n
s = \'\'\n
if currency:\n
s += \'%s: %s\' % (translateString(\'Price Currency\'), currency)\n
return s\n
\n
taxable_net_pay = context.PaySheetTransaction_getMovementTotalPriceFromCategory(\\\n
base_contribution=\'base_contribution/base_amount/taxable_net_pay\',\n
tax_category=\'tax_category/employee_share\')\n
def getTaxableNetPayId(taxable_net_pay):\n
s = \'\'\n
if taxable_net_pay:\n
s += \'%s: %s\' % (translateString(\'Taxable Net Pay\'), taxable_net_pay)\n
return s\n
\n
total_employee_tax = context.PaySheetTransaction_getMovementTotalPriceFromCategory(\\\n
base_contribution=\'base_contribution/base_amount/total_deductions\',\n
tax_category=\'tax_category/employee_share\')\n
def getTotalEmployeeTaxId(total_employee_tax):\n
s = \'\'\n
if total_employee_tax:\n
s += \'%s: %s\' % (translateString(\'Total Employee Tax\'),\n
quantity_renderer(total_employee_tax))\n
return s\n
\n
total_employer_tax = context.PaySheetTransaction_getMovementTotalPriceFromCategory(\\\n
base_contribution=\'base_contribution/base_amount/total_deductions\',\n
tax_category=\'tax_category/employer_share\')\n
def getTotalEmployerTaxId(total_employer_tax):\n
s = \'\'\n
if total_employer_tax:\n
s += \'%s: %s\' % (translateString(\'Total Employer Tax\'),\n
quantity_renderer(total_employer_tax))\n
return s\n
\n
\n
preferred_date_order = context.getPortalObject().portal_preferences\\\n
.getPreferredDateOrder() or \'ymd\'\n
separator = \'/\'\n
def getOrderedDate(date):\n
if date is None:\n
return \'\'\n
pattern = separator.join([\'%%%s\' % s for s in list(preferred_date_order)])\n
pattern = pattern.replace(\'y\', \'Y\')\n
return date.strftime(pattern)\n
\n
def getPaymentConditionText(paysheet):\n
date = \'\'\n
if paysheet.getProperty(\'default_payment_condition_payment_date\'):\n
date = getOrderedDate(paysheet.getProperty(\'default_payment_condition_payment_date\'))\n
if paysheet.getPaymentConditionPaymentEndOfMonth():\n
date = translateString("End of Month")\n
days = paysheet.getPaymentConditionPaymentTerm()\n
if days:\n
date = \'%s %s\' % (days, translateString(\'Days\'))\n
\n
if date:\n
if paysheet.getProperty(\'default_payment_condition_payment_mode_title\'):\n
return \'%s: %s\' % (translateString(\'Payment\'),\n
translateString(\'${payment_mode} at ${payment_date}\', \n
mapping = {\'payment_mode\': paysheet.getProperty(\'default_payment_condition_payment_mode_title\'),\n
\'payment_date\':date}))\n
else:\n
return \'%s: %s %s\' % (translateString(\'Payment\'),\n
translateString(\'at\'),\n
date)\n
return \'\'\n
\n
gross_salary = context.PaySheetTransaction_getMovementTotalPriceFromCategory(\\\n
base_contribution=\'base_contribution/base_amount/gross_salary\',\n
tax_category=\'tax_category/employee_share\')\n
year_to_date_gross_salary = context.PaySheetTransaction_getYearToDateBaseContributionTotalPrice(\\\n
paysheet=context, base_contribution_list=\'gross_salary\') + gross_salary\n
\n
year_to_date_slice_a = context.PaySheetTransaction_getYearToDateSlice(\'salary_range/france/tranche_a\')\n
\n
worked_hour_count = context.getWorkTimeAnnotationLineQuantity() and\\\n
context.getWorkTimeAnnotationLineQuantity(0)\n
year_to_date_worked_hour_count = worked_hour_count + \\\n
context.PaySheetTransaction_getYearToDateWorkTimeSalary() or 0\n
\n
\n
over_time_small_rate = context.getAnnotationLineFromReference(reference=\'overtime_small_rate\')\n
over_time_big_rate = context.getAnnotationLineFromReference(reference=\'overtime_big_rate\')\n
bonus_worked_hour_count = over_time_small_rate is not None and \\\n
over_time_big_rate is not None and \\\n
over_time_small_rate.getQuantity() + over_time_big_rate.getQuantity() or 0\n
year_to_date_bonus_worked_hour_count = bonus_worked_hour_count + \\\n
context.PaySheetTransaction_getYearToDateOvertimeHours() or 0\n
\n
year_to_date_bonus_worked_hour_amount = context.PaySheetTransaction_getYearToDateBaseContributionTotalPrice(\\\n
paysheet=context, base_contribution_list=\'overtime\') + \\\n
context.PaySheetTransaction_getMovementTotalPriceFromCategory(\\\n
base_contribution=\'base_contribution/base_amount/overtime\', \\\n
tax_category=\'tax_category/employee_share\') or 0\n
\n
taxable_net_pay = context.PaySheetTransaction_getMovementTotalPriceFromCategory(\\\n
base_contribution=\'base_contribution/base_amount/taxable_net_pay\',\n
tax_category=\'tax_category/employee_share\')\n
year_to_date_taxable_net_salary = context.PaySheetTransaction_getYearToDateBaseContributionTotalPrice(\\\n
paysheet=context, base_contribution_list=\'taxable_net_pay\') + taxable_net_pay\n
\n
def unicodeDict(d):\n
for k, v in d.items():\n
if isinstance(v, str):\n
d.update({k:unicode(v, \'utf8\')})\n
return d\n
\n
source_section = context.getSourceSectionValue()\n
\n
data_dict = {\n
\'source_section_title\': source_section.getProperty(\'corporate_name\') or\\\n
source_section.getTitle(),\n
\'source_section_career_title\': getCareerId(context.getSourceSectionValue() is not None\\\n
and source_section.getProperty(\'default_career_title\') or \'\'),\n
\'source_section_default_career_start_date\': getHiringDateId(context.getSourceSectionValue() is not None\\\n
and getOrderedDate(source_section.getProperty(\'default_career_start_date\')) or \'\'),\n
\'source_section_default_career_stop_date\': context.getSourceSectionValue() is not None\\\n
and getOrderedDate(source_section.getProperty(\'default_career_stop_date\')) or \'\',\n
\'source_section_default_career_coefficient\' : getCareerCoefficientId(context.getSourceSectionValue() is not None\\\n
and source_section.getProperty(\'career_salary_coefficient\') or \'\'),\n
\'source_section_default_career_salary_level\' : getSalaryLevelId(context.getSourceSectionValue() is not None\\\n
and source_section.getProperty(\'default_career_salary_level\') or \'\'),\n
\'source_section_default_career_social_code\' : getSocialCodeId(context.getSourceSection() and\n
context.getSourceSectionValue().getProperty(\'social_code\') or \'\'),\n
\'source_section_default_career_collective_agreement_title\' : getCollectiveAgreementId(context.getSourceSectionValue() is not None\\\n
and source_section.getProperty(\'default_career_collective_agreement_title\') or \'\'),\n
\'default_payment_condition_payment_text\' : context.getDefaultPaymentConditionValue() is not None\\\n
and getPaymentConditionText(context) or \'\',\n
\'price_currency\': getPriceCurrencyId(context.getPriceCurrencyReference() or \'\'),\n
\'year\': str(context.getStartDate() is not None and context.getStartDate().year() or \'\'),\n
\'description\': getFieldAsLineList(context.getDescription() or\n
getPropertyFromModel(model, \'description\') or \'\'),\n
\'year_to_date_gross_salary\': year_to_date_gross_salary,\n
\'year_to_date_slice_a\': year_to_date_slice_a,\n
\'year_to_date_worked_hour_count\': year_to_date_worked_hour_count,\n
\'year_to_date_bonus_worked_hour_count\': year_to_date_bonus_worked_hour_count,\n
\'year_to_date_bonus_worked_hour_amount\': year_to_date_bonus_worked_hour_amount,\n
\'year_to_date_taxable_net_salary\': year_to_date_taxable_net_salary,\n
\'worked_hour_count\': worked_hour_count,\n
\'bonus_worked_hour_count\': bonus_worked_hour_count,\n
\'absence_hour_count\': 0, #XXX currently absence hour are not take into \n
# account in payroll\n
\'taxable_net_pay\': getTaxableNetPayId(taxable_net_pay),\n
\'total_employee_tax\': getTotalEmployeeTaxId(total_employee_tax),\n
\'total_employer_tax\': getTotalEmployerTaxId(total_employer_tax),\n
}\n
\n
return unicodeDict(data_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>_getattr_</string>
<string>context</string>
<string>translateString</string>
<string>request</string>
<string>quantity_renderer</string>
<string>model</string>
<string>getPropertyFromModel</string>
<string>getFieldAsLineList</string>
<string>getFieldAsString</string>
<string>getSocialCodeId</string>
<string>getCareerId</string>
<string>getCollectiveAgreementId</string>
<string>getSalaryLevelId</string>
<string>getCareerCoefficientId</string>
<string>getHiringDateId</string>
<string>getPriceCurrencyId</string>
<string>taxable_net_pay</string>
<string>getTaxableNetPayId</string>
<string>total_employee_tax</string>
<string>getTotalEmployeeTaxId</string>
<string>total_employer_tax</string>
<string>getTotalEmployerTaxId</string>
<string>preferred_date_order</string>
<string>separator</string>
<string>getOrderedDate</string>
<string>getPaymentConditionText</string>
<string>gross_salary</string>
<string>year_to_date_gross_salary</string>
<string>year_to_date_slice_a</string>
<string>worked_hour_count</string>
<string>year_to_date_worked_hour_count</string>
<string>over_time_small_rate</string>
<string>over_time_big_rate</string>
<string>None</string>
<string>bonus_worked_hour_count</string>
<string>year_to_date_bonus_worked_hour_count</string>
<string>year_to_date_bonus_worked_hour_amount</string>
<string>year_to_date_taxable_net_salary</string>
<string>unicodeDict</string>
<string>source_section</string>
<string>str</string>
<string>data_dict</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>PaySheetTransaction_getOtherInformationsDataDict</string> </value>
</item>
<item>
<key> <string>warnings</string> </key>
<value>
<tuple/>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -83,7 +83,7 @@ model = context.getSpecialiseValue()\n ...@@ -83,7 +83,7 @@ model = context.getSpecialiseValue()\n
slice = model.getCell(slice_path)\n slice = model.getCell(slice_path)\n
\n \n
if not slice:\n if not slice:\n
return None\n return 0.0\n
\n \n
plafond = slice.getQuantityRangeMax()\n plafond = slice.getQuantityRangeMax()\n
\n \n
...@@ -165,13 +165,13 @@ return yearly_slice_amount\n ...@@ -165,13 +165,13 @@ return yearly_slice_amount\n
<string>yearly_slice_amount</string> <string>yearly_slice_amount</string>
<string>model</string> <string>model</string>
<string>slice</string> <string>slice</string>
<string>None</string>
<string>plafond</string> <string>plafond</string>
<string>gross_salary</string> <string>gross_salary</string>
<string>slice_amount</string> <string>slice_amount</string>
<string>_inplacevar_</string> <string>_inplacevar_</string>
<string>_getiter_</string> <string>_getiter_</string>
<string>paysheet</string> <string>paysheet</string>
<string>None</string>
</tuple> </tuple>
</value> </value>
</item> </item>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
<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>
<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>_text</string> </key>
<value> <string encoding="cdata"><![CDATA[
<tal:block\n
xmlns:draw=\'urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\'\n
xmlns:office=\'urn:oasis:names:tc:opendocument:xmlns:office:1.0\' \n
xmlns:text=\'urn:oasis:names:tc:opendocument:xmlns:text:1.0\'\n
xmlns:ooo=\'http://openoffice.org/2004/office\'\n
xmlns:number=\'urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\'\n
xmlns:dc=\'http://purl.org/dc/elements/1.1/\'\n
xmlns:meta=\'urn:oasis:names:tc:opendocument:xmlns:meta:1.0\'\n
xmlns:table=\'urn:oasis:names:tc:opendocument:xmlns:table:1.0\'\n
xmlns:dr3d=\'urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\'\n
xmlns:fo=\'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\' \n
xmlns:style=\'urn:oasis:names:tc:opendocument:xmlns:style:1.0\'\n
xmlns:xforms=\'http://www.w3.org/2002/xforms\'\n
xmlns:form=\'urn:oasis:names:tc:opendocument:xmlns:form:1.0\'\n
xmlns:script=\'urn:oasis:names:tc:opendocument:xmlns:script:1.0\' \n
xmlns:ooow=\'http://openoffice.org/2004/writer\'\n
xmlns:svg=\'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\'\n
xmlns:chart=\'urn:oasis:names:tc:opendocument:xmlns:chart:1.0\'\n
xmlns:dom=\'http://www.w3.org/2001/xml-events\'\n
xmlns:xlink=\'http://www.w3.org/1999/xlink\'\n
xmlns:xsd=\'http://www.w3.org/2001/XMLSchema\'\n
xmlns:xsi=\'http://www.w3.org/2001/XMLSchema-instance\'\n
xmlns:oooc=\'http://openoffice.org/2004/calc\'\n
xmlns:math=\'http://www.w3.org/1998/Math/MathML\'\n
xmlns:tal=\'http://xml.zope.org/namespaces/tal\'\n
xmlns:i18n=\'http://xml.zope.org/namespaces/i18n\'\n
xmlns:metal=\'http://xml.zope.org/namespaces/metal\'>\n
<tal:block metal:define-macro="other_informations" \n
tal:define="data_dict here/PaySheetTransaction_getOtherInformationsDataDict;\n
hour_renderer nocall:here/AnnotationLine_viewFieldLibrary/my_work_time_annotation_line_quantity/render_pdf;">\n
<table:table-row table:style-name=\'Tableau3.8\'>\n
<table:table-cell table:style-name=\'Tableau3.A8\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Table_20_Contents\' />\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau3.B6\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau3.B6\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau3.B6\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau3.E6\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
</table:table-row>\n
<table:table-row table:style-name=\'Tableau3.3\'>\n
<table:table-cell table:style-name=\'Tableau3.A7\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Table_20_Contents_20_Left\'\n
tal:condition=\'data_dict/source_section_career_title\'\n
tal:content=\'python:data_dict["source_section_career_title"]\'>Réceptionniste</text:p>\n
<text:p text:style-name=\'Table_20_Contents_20_Left\'\n
tal:condition=\'data_dict/source_section_default_career_start_date\'\n
tal:content=\'python:data_dict["source_section_default_career_start_date"]\'>12/09/2005</text:p>\n
<text:p text:style-name=\'Table_20_Contents_20_Left\'\n
tal:condition=\'data_dict/source_section_default_career_coefficient\'\n
tal:content=\'python:data_dict["source_section_default_career_coefficient"]\'>100</text:p>\n
<text:p text:style-name=\'Table_20_Contents_20_Left\'\n
tal:condition=\'data_dict/source_section_default_career_salary_level\'\n
tal:content=\'python:data_dict["source_section_default_career_salary_level"]\'>1.2</text:p>\n
<text:p text:style-name=\'Table_20_Contents_20_Left\'\n
tal:condition=\'data_dict/source_section_default_career_social_code\'\n
tal:content=\'python:data_dict["source_section_default_career_social_code"]\'>185897778270987</text:p>\n
<text:p text:style-name=\'Table_20_Contents_20_Left\'\n
tal:condition=\'data_dict/source_section_default_career_collective_agreement_title\'\n
tal:content=\'python:data_dict["source_section_default_career_collective_agreement_title"]\'>Syntec</text:p>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau3.A7\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Item_20_Table_20_Title_20_Left\'\n
tal:content="python: here.Base_translateString(\'Attendance\')"></text:p>\n
<text:p text:style-name=\'Table_20_Contents_20_Left\'\n
tal:content="python: \'%s: %s\' % (here.Base_translateString(\'Normal working hours\'), hour_renderer(data_dict[\'worked_hour_count\']) or \'0\')"></text:p>\n
<text:p text:style-name=\'Table_20_Contents_20_Left\'\n
tal:content="python: \'%s: %s\' % (here.Base_translateString(\'Overtime\'), hour_renderer(data_dict[\'bonus_worked_hour_count\']) or \'0\')"></text:p>\n
<text:p text:style-name=\'Table_20_Contents_20_Left\'\n
tal:content="python: \'%s: %s\' % (here.Base_translateString(\'Absence hours\'), hour_renderer(data_dict[\'absence_hour_count\']) or \'0\')"></text:p>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau3.A7\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Item_20_Table_20_Title_20_Left\'\n
tal:content="python: here.Base_translateString(\'Paid vacation (in days)\')"></text:p>\n
<text:p text:style-name=\'Table_20_Contents_20_Left\'\n
tal:content="python: \'%s: %s\' % (here.Base_translateString(\'Earned on this period\'), \'\')"></text:p>\n
<text:p text:style-name=\'Table_20_Contents_20_Left\'\n
tal:content="python: \'%s: %s\' % (here.Base_translateString(\'Taken on this period\'), \'\')"></text:p>\n
<text:p text:style-name=\'Table_20_Contents_20_Left\'\n
tal:content="python: \'%s: %s\' % (here.Base_translateString(\'Remaining\'), \'\')"></text:p>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau3.A7\' \n
office:value-type=\'string\' table:number-columns-spanned=\'2\'> \n
<text:p text:style-name=\'Table_20_Contents_20_Left\'\n
tal:condition=\'data_dict/price_currency\'\n
tal:content=\'python:data_dict["price_currency"]\'>FCFA</text:p>\n
<text:p text:style-name=\'Table_20_Contents_20_Left\'\n
tal:condition=\'data_dict/default_payment_condition_payment_text\'\n
tal:content=\'python:data_dict["default_payment_condition_payment_text"]\'>Payement: Chèque le 01/12/2009</text:p>\n
<text:p text:style-name=\'Table_20_Contents_20_Left\'\n
tal:condition=\'data_dict/taxable_net_pay\'\n
tal:content=\'python:data_dict["taxable_net_pay"]\'>Salaire net imposable: 200 000</text:p>\n
<text:p text:style-name=\'Table_20_Contents_20_Left\'\n
tal:condition=\'data_dict/total_employee_tax\'\n
tal:content=\'python:data_dict["total_employee_tax"]\'>Total cotisation employé: 200 000</text:p>\n
<text:p text:style-name=\'Table_20_Contents_20_Left\'\n
tal:condition=\'data_dict/total_employer_tax\'\n
tal:content=\'python:data_dict["total_employer_tax"]\'>Total cotisation employeur: 200 000</text:p>\n
</table:table-cell>\n
<table:covered-table-cell/>\n
</table:table-row>\n
<table:table-row table:style-name=\'Tableau1.4\'>\n
<table:table-cell table:style-name=\'Tableau1.A4\' \n
office:value-type=\'string\' table:number-columns-spanned=\'5\'>\n
<text:p text:style-name=\'Item_20_Table_20_Title\'></text:p>\n
</table:table-cell>\n
<table:covered-table-cell/>\n
<table:covered-table-cell/>\n
<table:covered-table-cell/>\n
<table:covered-table-cell/>\n
</table:table-row>\n
<table:table-row table:style-name=\'Tableau1.4\'>\n
<table:table-cell table:style-name=\'Tableau1.A7\' \n
office:value-type=\'string\' table:number-columns-spanned=\'5\'>\n
<text:p text:style-name=\'Item_20_Table_20_Title\'></text:p>\n
</table:table-cell>\n
<table:covered-table-cell/>\n
<table:covered-table-cell/>\n
<table:covered-table-cell/>\n
<table:covered-table-cell/>\n
</table:table-row>\n
\n
\n
\n
\n
<table:table-row table:style-name=\'Tableau1.5\'>\n
<table:table-cell table:style-name=\'Tableau1.A5\'\n
table:number-columns-spanned=\'5\' office:value-type=\'string\'>\n
<table:table table:style-name=\'Tableau4\' table:name=\'Tableau4\'>\n
<table:table-column table:style-name=\'Tableau4.A\'/>\n
<table:table-column table:style-name=\'Tableau4.B\'/>\n
<table:table-column table:style-name=\'Tableau4.C\'/>\n
<table:table-column table:style-name=\'Tableau4.D\'/>\n
<table:table-column table:style-name=\'Tableau4.E\'/>\n
<table:table-column table:style-name=\'Tableau4.F\'/>\n
<table:table-row>\n
<table:table-cell table:style-name=\'Tableau1.A2\' office:value-type=\'string\' table:number-columns-spanned=\'6\'>\n
<text:p text:style-name=\'Item_20_Table_20_Title\'>\n
<tal:block i18n:translate="">Cumuls Annuels </tal:block>\n
<tal:block tal:condition="python: data_dict[\'year\']" tal:content="python: \'(%s)\' % data_dict[\'year\']"/>\n
</text:p>\n
</table:table-cell>\n
<table:covered-table-cell/>\n
<table:covered-table-cell/>\n
<table:covered-table-cell/>\n
<table:covered-table-cell/>\n
</table:table-row>\n
<table:table-row>\n
<table:table-cell table:style-name=\'Tableau1.A6\' office:value-type=\'string\' tal:define=\'orig_string string:Gross Salary; orig_message python:unicode(here.Base_translateString(orig_string, lang=default_language),"utf-8"); translated_message python:unicode(here.Base_translateString(orig_string),"utf-8")\'>\n
<text:p text:style-name=\'Item_20_Table_20_Title\'><span tal:replace=\'orig_message\'/></text:p>\n
<text:p text:style-name=\'Item_20_Table_20_Title\' tal:condition=\'python:translated_message != orig_message\'><span tal:replace=\'translated_message\'/></text:p>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau1.A6\' office:value-type=\'string\' tal:define=\'orig_string string:Tranche A; orig_message python:unicode(here.Base_translateString(orig_string, lang=default_language),"utf-8"); translated_message python:unicode(here.Base_translateString(orig_string),"utf-8")\'>\n
<text:p text:style-name=\'Item_20_Table_20_Title\'><span tal:replace=\'orig_message\'/></text:p>\n
<text:p text:style-name=\'Item_20_Table_20_Title\' tal:condition=\'python:translated_message != orig_message\'><span tal:replace=\'translated_message\'/></text:p>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau1.A6\' office:value-type=\'string\' tal:define=\'orig_string string:Heures Normales; orig_message python:unicode(here.Base_translateString(orig_string, lang=default_language),"utf-8"); translated_message python:unicode(here.Base_translateString(orig_string),"utf-8")\'>\n
<text:p text:style-name=\'Item_20_Table_20_Title\'><span tal:replace=\'orig_message\'/></text:p>\n
<text:p text:style-name=\'Item_20_Table_20_Title\' tal:condition=\'python:translated_message != orig_message\'><span tal:replace=\'translated_message\'/></text:p>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau1.A6\' office:value-type=\'string\' tal:define=\'orig_string string:Heures supp.; orig_message python:unicode(here.Base_translateString(orig_string, lang=default_language),"utf-8"); translated_message python:unicode(here.Base_translateString(orig_string),"utf-8")\'>\n
<text:p text:style-name=\'Item_20_Table_20_Title\'><span tal:replace=\'orig_message\'/></text:p>\n
<text:p text:style-name=\'Item_20_Table_20_Title\' tal:condition=\'python:translated_message != orig_message\'><span tal:replace=\'translated_message\'/></text:p>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau1.A6\' office:value-type=\'string\' tal:define=\'orig_string string:Rémunération Heures supp.; orig_message python:unicode(here.Base_translateString(orig_string, lang=default_language),"utf-8"); translated_message python:unicode(here.Base_translateString(orig_string),"utf-8")\'>\n
<text:p text:style-name=\'Item_20_Table_20_Title\'><span tal:replace=\'orig_message\'/></text:p>\n
<text:p text:style-name=\'Item_20_Table_20_Title\' tal:condition=\'python:translated_message != orig_message\'><span tal:replace=\'translated_message\'/></text:p>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau1.A6\' office:value-type=\'string\' tal:define=\'orig_string string:Net Imposable.; orig_message python:unicode(here.Base_translateString(orig_string, lang=default_language),"utf-8"); translated_message python:unicode(here.Base_translateString(orig_string),"utf-8")\'>\n
<text:p text:style-name=\'Item_20_Table_20_Title\'><span tal:replace=\'orig_message\'/></text:p>\n
<text:p text:style-name=\'Item_20_Table_20_Title\' tal:condition=\'python:translated_message != orig_message\'><span tal:replace=\'translated_message\'/></text:p>\n
</table:table-cell>\n
</table:table-row>\n
\n
<table:table-row table:style-name=\'Tableau1.3\' \n
tal:define="style_name python:\'Item_20_Table_20_Title\';\n
left_style_name python:\'Table_20_Contents_20_Left\';\n
right_style_name python:\'Table_20_Contents_20_Right\'">\n
<table:table-cell table:style-name=\'Tableau1.A3\'\n
office:value-type=\'float\'\n
tal:condition="python: data_dict[\'year_to_date_gross_salary\']"\n
tal:attributes=\'office:value data_dict/year_to_date_gross_salary\'> \n
<text:p text:style-name=\'Table_20_Contents\'\n
tal:content="python: quantity_renderer(data_dict[\'year_to_date_gross_salary\'])"\n
tal:attributes=\'text:style-name right_style_name\'>300000</text:p>\n
</table:table-cell> \n
<table:table-cell table:style-name=\'Tableau1.A3\'\n
office:value-type=\'string\'\n
tal:condition="python: not data_dict[\'year_to_date_gross_salary\']"> \n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
\n
<table:table-cell table:style-name=\'Tableau1.A3\'\n
office:value-type=\'float\'\n
tal:condition="python: data_dict[\'year_to_date_slice_a\']"\n
tal:attributes=\'office:value data_dict/year_to_date_slice_a\'> \n
<text:p text:style-name=\'Table_20_Contents\'\n
tal:content="python: quantity_renderer(data_dict[\'year_to_date_slice_a\'])"\n
tal:attributes=\'text:style-name right_style_name\'>300000</text:p>\n
</table:table-cell> \n
<table:table-cell table:style-name=\'Tableau1.A3\'\n
office:value-type=\'string\'\n
tal:condition="python: not data_dict[\'year_to_date_slice_a\']"> \n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
\n
<table:table-cell table:style-name=\'Tableau1.A3\'\n
office:value-type=\'float\'\n
tal:condition="python: data_dict[\'year_to_date_worked_hour_count\']"\n
tal:attributes=\'office:value data_dict/year_to_date_worked_hour_count\'> \n
<text:p text:style-name=\'Table_20_Contents\'\n
tal:content="python: hour_renderer(data_dict[\'year_to_date_worked_hour_count\'])"\n
tal:attributes=\'text:style-name right_style_name\'>300000</text:p>\n
</table:table-cell> \n
<table:table-cell table:style-name=\'Tableau1.A3\'\n
office:value-type=\'string\'\n
tal:condition="python: not data_dict[\'year_to_date_worked_hour_count\']"> \n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
\n
<table:table-cell table:style-name=\'Tableau1.A3\'\n
office:value-type=\'float\'\n
tal:condition="python: data_dict[\'year_to_date_bonus_worked_hour_count\']"\n
tal:attributes=\'office:value data_dict/year_to_date_bonus_worked_hour_count\'> \n
<text:p text:style-name=\'Table_20_Contents\'\n
tal:content="python: hour_renderer(data_dict[\'year_to_date_bonus_worked_hour_count\'])"\n
tal:attributes=\'text:style-name right_style_name\'>300000</text:p>\n
</table:table-cell> \n
<table:table-cell table:style-name=\'Tableau1.A3\'\n
office:value-type=\'string\'\n
tal:condition="python: not data_dict[\'year_to_date_bonus_worked_hour_count\']"> \n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
\n
<table:table-cell table:style-name=\'Tableau1.A3\'\n
office:value-type=\'float\'\n
tal:condition="python: data_dict[\'year_to_date_bonus_worked_hour_amount\']"\n
tal:attributes=\'office:value data_dict/year_to_date_bonus_worked_hour_amount\'> \n
<text:p text:style-name=\'Table_20_Contents\'\n
tal:content="python: quantity_renderer(data_dict[\'year_to_date_bonus_worked_hour_amount\'])"\n
tal:attributes=\'text:style-name right_style_name\'>300000</text:p>\n
</table:table-cell> \n
<table:table-cell table:style-name=\'Tableau1.A3\'\n
office:value-type=\'string\'\n
tal:condition="python: not data_dict[\'year_to_date_bonus_worked_hour_amount\']"> \n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
\n
<table:table-cell table:style-name=\'Tableau1.A3\'\n
office:value-type=\'float\'\n
tal:condition="python: data_dict[\'year_to_date_taxable_net_salary\']"\n
tal:attributes=\'office:value data_dict/year_to_date_taxable_net_salary\'> \n
<text:p text:style-name=\'Table_20_Contents\'\n
tal:content="python: quantity_renderer(data_dict[\'year_to_date_taxable_net_salary\'])"\n
tal:attributes=\'text:style-name right_style_name\'>300000</text:p>\n
</table:table-cell> \n
<table:table-cell table:style-name=\'Tableau1.A3\'\n
office:value-type=\'string\'\n
tal:condition="python: not data_dict[\'year_to_date_taxable_net_salary\']"> \n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
\n
</table:table-row>\n
<table:table-row table:style-name=\'Tableau1.4\' >\n
<table:table-cell table:style-name=\'Tableau1.A4\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau1.A4\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau1.A4\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau1.A4\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau1.A4\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau1.A4\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
</table:table-row>\n
</table:table>\n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
<table:covered-table-cell/>\n
<table:covered-table-cell/>\n
<table:covered-table-cell/>\n
<table:covered-table-cell/>\n
</table:table-row>\n
<table:table-row table:style-name=\'Tableau3.6\' tal:condition="data_dict/description">\n
<table:table-cell table:style-name=\'Tableau3.A6\' office:value-type=\'string\' tal:define=\'orig_string string:Notes; orig_message python:unicode(here.Base_translateString(orig_string, lang=default_language),"utf-8"); translated_message python:unicode(here.Base_translateString(orig_string),"utf-8")\'>\n
<text:p text:style-name=\'P2\'><span tal:replace=\'orig_message\'/>\n
<span tal:omit-tag=\'\' tal:condition=\'python:translated_message != orig_message\'> / <span tal:replace=\'translated_message\'/></span>:</text:p>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau3.B6\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau3.B6\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau3.B6\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
<table:table-cell table:style-name=\'Tableau3.E6\' office:value-type=\'string\'>\n
<text:p text:style-name=\'Table_20_Contents\'/>\n
</table:table-cell>\n
</table:table-row>\n
<table:table-row table:style-name=\'Tableau3.7\' tal:condition="data_dict/description">\n
<table:table-cell table:style-name=\'Tableau3.A7\' table:number-columns-spanned=\'5\' office:value-type=\'string\'>\n
<text:p text:style-name=\'P3\'><tal:block tal:repeat="line data_dict/description"><tal:block\n
tal:replace="line"/><text:line-break tal:condition="not:repeat/line/end"/></tal:block>\n
</text:p>\n
</table:table-cell>\n
<table:covered-table-cell/>\n
<table:covered-table-cell/>\n
<table:covered-table-cell/>\n
<table:covered-table-cell/>\n
<table:covered-table-cell/>\n
</table:table-row>\n
\n
</tal:block>\n
\n
\n
\n
<tal:block metal:define-macro="footer">\n
<text:p text:style-name="Footer">Dans votre intérêt et pour vous aider à faire valoir vos droits, conservez ce bulletin de paie sans limitation de durée.</text:p>\n
</tal:block>\n
</tal:block>\n
]]></string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/vnd.oasis.opendocument.text</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>payroll_odt_macro</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
2009-03-10 fabien
* rename salaire_net_imposabe base_amount into taxable_net_pay
* add a macro used to display localised information in a part of the payslip
* increment version number because of the new style of the payslip
2009-01-28 fabien 2009-01-28 fabien
* add salaire_net_imposable base_amount category * add salaire_net_imposable base_amount category
......
79 84
\ No newline at end of file \ No newline at end of file
portal_categories/base_amount/base_csg portal_categories/base_amount/base_csg
portal_categories/base_amount/salaire_net_imposable portal_categories/base_amount/taxable_net_pay
portal_categories/salary_range/france portal_categories/salary_range/france
portal_categories/salary_range/france/tranche_1 portal_categories/salary_range/france/tranche_1
portal_categories/salary_range/france/tranche_2 portal_categories/salary_range/france/tranche_2
......
0.1 0.2
\ No newline at end of file \ No newline at end of file
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