diff --git a/bt5/erp5_payroll_l10n_fr/PathTemplateItem/portal_categories/base_amount/salaire_net_imposable.xml b/bt5/erp5_payroll_l10n_fr/PathTemplateItem/portal_categories/base_amount/taxable_net_pay.xml similarity index 84% rename from bt5/erp5_payroll_l10n_fr/PathTemplateItem/portal_categories/base_amount/salaire_net_imposable.xml rename to bt5/erp5_payroll_l10n_fr/PathTemplateItem/portal_categories/base_amount/taxable_net_pay.xml index 391bc843eb0f75942fc989206d318a151a45fcda..28bfaa5f044f714f9185fb872582417273b05b45 100644 --- a/bt5/erp5_payroll_l10n_fr/PathTemplateItem/portal_categories/base_amount/salaire_net_imposable.xml +++ b/bt5/erp5_payroll_l10n_fr/PathTemplateItem/portal_categories/base_amount/taxable_net_pay.xml @@ -13,7 +13,8 @@ <key> <string>categories</string> </key> <value> <tuple> - <string>base_amount/salaire_net_imposable</string> + <string>base_amount/taxable_net_pay</string> + <string>base_amount/taxable_net_pay</string> </tuple> </value> </item> @@ -31,7 +32,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>salaire_net_imposable</string> </value> + <value> <string>taxable_net_pay</string> </value> </item> <item> <key> <string>int_index</string> </key> @@ -49,7 +50,7 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Salaire net imposable</string> </value> + <value> <string>Taxable Net Pay</string> </value> </item> </dictionary> </pickle> diff --git a/bt5/erp5_payroll_l10n_fr/SkinTemplateItem/portal_skins/erp5_payroll_l10n_fr/PaySheetTransaction_getOtherInformationsDataDict.xml b/bt5/erp5_payroll_l10n_fr/SkinTemplateItem/portal_skins/erp5_payroll_l10n_fr/PaySheetTransaction_getOtherInformationsDataDict.xml new file mode 100644 index 0000000000000000000000000000000000000000..8dcb7001036c7ac10095912e58eb2c2a6118ac9d --- /dev/null +++ b/bt5/erp5_payroll_l10n_fr/SkinTemplateItem/portal_skins/erp5_payroll_l10n_fr/PaySheetTransaction_getOtherInformationsDataDict.xml @@ -0,0 +1,372 @@ +<?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> diff --git a/bt5/erp5_payroll_l10n_fr/SkinTemplateItem/portal_skins/erp5_payroll_l10n_fr/PaySheetTransaction_getYearToDateSlice.xml b/bt5/erp5_payroll_l10n_fr/SkinTemplateItem/portal_skins/erp5_payroll_l10n_fr/PaySheetTransaction_getYearToDateSlice.xml index cae6aa6759c730c44bf19526975550f806635e2b..0e9b28628e30424cb405b7f8d669c29df87f3374 100644 --- a/bt5/erp5_payroll_l10n_fr/SkinTemplateItem/portal_skins/erp5_payroll_l10n_fr/PaySheetTransaction_getYearToDateSlice.xml +++ b/bt5/erp5_payroll_l10n_fr/SkinTemplateItem/portal_skins/erp5_payroll_l10n_fr/PaySheetTransaction_getYearToDateSlice.xml @@ -83,7 +83,7 @@ model = context.getSpecialiseValue()\n slice = model.getCell(slice_path)\n \n if not slice:\n - return None\n + return 0.0\n \n plafond = slice.getQuantityRangeMax()\n \n @@ -165,13 +165,13 @@ return yearly_slice_amount\n <string>yearly_slice_amount</string> <string>model</string> <string>slice</string> - <string>None</string> <string>plafond</string> <string>gross_salary</string> <string>slice_amount</string> <string>_inplacevar_</string> <string>_getiter_</string> <string>paysheet</string> + <string>None</string> </tuple> </value> </item> diff --git a/bt5/erp5_payroll_l10n_fr/SkinTemplateItem/portal_skins/erp5_payroll_l10n_fr/payroll_odt_macro.xml b/bt5/erp5_payroll_l10n_fr/SkinTemplateItem/portal_skins/erp5_payroll_l10n_fr/payroll_odt_macro.xml new file mode 100644 index 0000000000000000000000000000000000000000..e78be2816e1dd66ebeee4e5954f499afee307aae --- /dev/null +++ b/bt5/erp5_payroll_l10n_fr/SkinTemplateItem/portal_skins/erp5_payroll_l10n_fr/payroll_odt_macro.xml @@ -0,0 +1,402 @@ +<?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> diff --git a/bt5/erp5_payroll_l10n_fr/bt/change_log b/bt5/erp5_payroll_l10n_fr/bt/change_log index 6cf5bb86360b8ec26d9ae9a7e129acef5de50e56..6e43abbc5e7469eda924db88220faa324b1ed4de 100644 --- a/bt5/erp5_payroll_l10n_fr/bt/change_log +++ b/bt5/erp5_payroll_l10n_fr/bt/change_log @@ -1,3 +1,8 @@ +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 * add salaire_net_imposable base_amount category diff --git a/bt5/erp5_payroll_l10n_fr/bt/revision b/bt5/erp5_payroll_l10n_fr/bt/revision index eb13855b7d70b04d6f04877df2cafe05de51a051..3ca9062a11783e80eeffeb9613eb9e38b528bfab 100644 --- a/bt5/erp5_payroll_l10n_fr/bt/revision +++ b/bt5/erp5_payroll_l10n_fr/bt/revision @@ -1 +1 @@ -79 \ No newline at end of file +84 \ No newline at end of file diff --git a/bt5/erp5_payroll_l10n_fr/bt/template_path_list b/bt5/erp5_payroll_l10n_fr/bt/template_path_list index 86d5cb2a359fa4ecc33b597912fca5a4a4c4c0e2..31b7efd0f955117d1590f39b1cd38f9c0ac0bf32 100644 --- a/bt5/erp5_payroll_l10n_fr/bt/template_path_list +++ b/bt5/erp5_payroll_l10n_fr/bt/template_path_list @@ -1,5 +1,5 @@ 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/tranche_1 portal_categories/salary_range/france/tranche_2 diff --git a/bt5/erp5_payroll_l10n_fr/bt/version b/bt5/erp5_payroll_l10n_fr/bt/version index ceab6e11ece0bcec917c12e11d350946f085d549..2f4536184bcac31936bd15a5f9cf931dd526c022 100644 --- a/bt5/erp5_payroll_l10n_fr/bt/version +++ b/bt5/erp5_payroll_l10n_fr/bt/version @@ -1 +1 @@ -0.1 \ No newline at end of file +0.2 \ No newline at end of file