From b2bc1d392c49e92fd12ff92ccce2623308184ea2 Mon Sep 17 00:00:00 2001 From: Lingnan Wu <wulingnan@gmail.com> Date: Mon, 15 Oct 2012 14:13:01 +0200 Subject: [PATCH] change the invoice ODT template to separate the tax and the products. --- .../erp5_base/Delivery_getODTDataDict.xml | 70 +- ...BusinessConfiguration_setupPreferences.xml | 3 +- .../testStandardConfigurationWorkflow.py | 1 + .../erp5_invoicing/Invoice_viewAsODT.xml | 1266 +++++++++++------ .../erp5_trade/Base_viewTradeFieldLibrary.xml | 1 + .../my_view_mode_preferred_tax_use_list.xml | 122 ++ .../erp5_trade/SystemPreference_viewTrade.xml | 1 + .../my_preferred_tax_use_list.xml | 90 ++ .../preferred_tax_use_property.xml | 44 + product/ERP5/tests/testInvoice.py | 97 +- 10 files changed, 1250 insertions(+), 445 deletions(-) mode change 100644 => 100755 bt5/erp5_base/SkinTemplateItem/portal_skins/erp5_base/Delivery_getODTDataDict.xml mode change 100644 => 100755 bt5/erp5_configurator_standard/SkinTemplateItem/portal_skins/erp5_configurator_standard/BusinessConfiguration_setupPreferences.xml mode change 100644 => 100755 bt5/erp5_configurator_standard/TestTemplateItem/testStandardConfigurationWorkflow.py mode change 100644 => 100755 bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/Invoice_viewAsODT.xml mode change 100644 => 100755 bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/Base_viewTradeFieldLibrary.xml create mode 100644 bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/Base_viewTradeFieldLibrary/my_view_mode_preferred_tax_use_list.xml create mode 100644 bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SystemPreference_viewTrade/my_preferred_tax_use_list.xml create mode 100644 product/ERP5/bootstrap/erp5_property_sheets/PropertySheetTemplateItem/portal_property_sheets/TradePreference/preferred_tax_use_property.xml diff --git a/bt5/erp5_base/SkinTemplateItem/portal_skins/erp5_base/Delivery_getODTDataDict.xml b/bt5/erp5_base/SkinTemplateItem/portal_skins/erp5_base/Delivery_getODTDataDict.xml old mode 100644 new mode 100755 index 52dcb48cdb..12c9b162df --- a/bt5/erp5_base/SkinTemplateItem/portal_skins/erp5_base/Delivery_getODTDataDict.xml +++ b/bt5/erp5_base/SkinTemplateItem/portal_skins/erp5_base/Delivery_getODTDataDict.xml @@ -132,9 +132,20 @@ def getTaxLineList(order):\n return tax_line_list\n \n \n +\n +line_base_contribution_list = []\n +number = 0\n +line_novat_totalprice = 0\n line_list = []\n +line_not_vat = []\n +line_vat = []\n +line_not_vat_has_no_vat = {}\n total_price = 0.0\n total_vat = 0.0\n +total_vat_price = 0.0\n +vat_total_list = []\n +taxnumber = 0\n +taxname = \'\'\n \n def unicodeDict(d):\n for k, v in d.items():\n @@ -176,8 +187,23 @@ for line in getSubLineList(context):\n display_id = \'translated_title\'\n if request.get(\'international_form\'):\n display_id = \'title\'\n - desc = (\', \'.join([x[0] for x in\n - line.getVariationCategoryItemList(display_id=display_id)]),)\n + desc = (\', \'.join([x[0] for x in line.getVariationCategoryItemList(display_id=display_id)]),)\n + is_vat=0\n + portal_preferences = context.getPortalObject().portal_preferences\n + if portal_preferences.getPreferredTaxUseList()==[] :\n + vat="use/trade/tax"\n + is_vat=line.isMemberOf(vat) \n + else:\n + vatlist=portal_preferences.getPreferredTaxUseList() \n + for vat in vatlist:\n + is_vat = is_vat or line.isMemberOf(vat)\n + if not is_vat:\n + if line.getBaseContribution() not in line_base_contribution_list:\n + line_base_contribution_list.append(line.getBaseContribution())\n + taxnumber=line_base_contribution_list.index(line.getBaseContribution())+1\n + else:\n + taxname=line.getBaseContribution()\n + \n line_dict = {\n \'style_name\': \'Table_20_Contents\',\n \'left_style_name\': \'Table_20_Contents_20_Left\',\n @@ -187,16 +213,44 @@ for line in getSubLineList(context):\n \'reference\': line.getResource() is not None\\\n and line.getResourceValue().getReference() or \'\',\n \'description\': desc,\n + \'base_contribution\':line.getBaseContribution() or None,\n + \'use_type\':line.getResourceValue().getUse() or \'\',\n + \'use_type_tax\':is_vat,\n \'total_quantity\': line.getTotalQuantity() or \'\',\n + \'tax_name\':taxname or \'\',\n + \'tax_number\':taxnumber or \'\',\n \'quantity_unit\': line.getQuantityUnitTranslatedTitle() or (\n line.getResource() and line.getResourceValue().getQuantityUnitTranslatedTitle()) or \'\',\n \'stop_date\': getOrderedDate(line.getStopDate()) or \'\',\n \'base_price\': line.getPrice() or \'\',\n - \'total_price\': line.getTotalPrice() or \'\',\n + \'total_price\': line.getTotalPrice() or 0,\n \'specialise_title\' : line.getProperty(\'specialise_title\', \'\'),\n }\n - total_price += line.getTotalPrice() or 0.0\n +\n + if line_dict[\'use_type_tax\']:\n + total_vat_price+=line.getTotalPrice() or 0.0\n + line_vat.append(unicodeDict(line_dict.copy()))\n + else:\n + total_price += line.getTotalPrice() or 0.0\n + line_not_vat.append(unicodeDict(line_dict.copy()))\n + if line_dict[\'base_contribution\'] is None:\n + line_novat_totalprice = line_novat_totalprice + line_dict[\'total_price\']\n + line_not_vat_has_no_vat = {\n + \'tax_name\': None ,\n + \'total_quantity\': line_novat_totalprice,\n + \'base_price\': 0.00 ,\n + \'total_price\': 0.00 ,\n + }\n line_list.append(unicodeDict(line_dict.copy()))\n +if line_not_vat_has_no_vat != {} :\n + line_vat.append(unicodeDict(line_not_vat_has_no_vat.copy()))\n +for line_each in line_vat:\n + if line_each[\'tax_name\'] in line_base_contribution_list :\n + vatNumber=line_base_contribution_list.index(line_each[\'tax_name\'])+1\n + else:\n + vatNumber=0\n + line_each.update({\'vat_number\': vatNumber})\n +line_vat.sort(key=lambda obj:obj.get(\'vat_number\'))\n \n inch_cm_ratio = 2.54 / 100.0\n \n @@ -397,11 +451,15 @@ data_dict = {\n \'delivery_mode\': context.getDeliveryModeTranslatedTitle() or \'\',\n \'incoterm\': context.getIncoterm() and context.getIncotermValue().getCodification() or \'\',\n \n + \'vat_name_list\':line_base_contribution_list,\n + \'total_price\':total_price+total_vat_price,\n \'total_price_novat\': total_price,\n - \'vat_list\': getTaxLineList(context),\n + \'vat_list\': total_vat,\n + \'vat_total_price\':total_vat_price,\n \'description\': getFieldAsLineList(context.getDescription()),\n \'specialise_title\': context.getProperty(\'specialise_title\',\'\'),\n -\n + \'line_vat\':line_vat,\n + \'line_not_vat\':line_not_vat,\n \'line_list\': line_list,\n }\n \n diff --git a/bt5/erp5_configurator_standard/SkinTemplateItem/portal_skins/erp5_configurator_standard/BusinessConfiguration_setupPreferences.xml b/bt5/erp5_configurator_standard/SkinTemplateItem/portal_skins/erp5_configurator_standard/BusinessConfiguration_setupPreferences.xml old mode 100644 new mode 100755 index cbaf7804d6..a6056343e9 --- a/bt5/erp5_configurator_standard/SkinTemplateItem/portal_skins/erp5_configurator_standard/BusinessConfiguration_setupPreferences.xml +++ b/bt5/erp5_configurator_standard/SkinTemplateItem/portal_skins/erp5_configurator_standard/BusinessConfiguration_setupPreferences.xml @@ -211,7 +211,8 @@ system_prefs = dict(\n preferred_client_role_list = [\'client\'],\n preferred_sale_use_list = [\'trade/sale\'],\n preferred_purchase_use_list = [\'trade/purchase\'],\n - preferred_packing_use_list = [\'trade/container\'])\n + preferred_packing_use_list = [\'trade/container\'],\n + preferred_tax_use_list=[\'trade/tax\'])\n \n configuration_save.addConfigurationItem(\n \'System Preference Configurator Item\',\n diff --git a/bt5/erp5_configurator_standard/TestTemplateItem/testStandardConfigurationWorkflow.py b/bt5/erp5_configurator_standard/TestTemplateItem/testStandardConfigurationWorkflow.py old mode 100644 new mode 100755 index 48ab052f89..f352f765a4 --- a/bt5/erp5_configurator_standard/TestTemplateItem/testStandardConfigurationWorkflow.py +++ b/bt5/erp5_configurator_standard/TestTemplateItem/testStandardConfigurationWorkflow.py @@ -367,6 +367,7 @@ class StandardConfigurationMixin(TestLiveConfiguratorWorkflowMixin): self.assertEquals(['trade/sale'], preference_tool.getPreferredSaleUseList()) self.assertEquals(['trade/purchase'], preference_tool.getPreferredPurchaseUseList()) self.assertEquals(['trade/container'], preference_tool.getPreferredPackingUseList()) + self.assertEquals(['trade/tax']), preference_tool.getPreferredTaxUseList()) def stepCheckModulesBusinessApplication(self, sequence=None, sequence_list=None, **kw): """ diff --git a/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/Invoice_viewAsODT.xml b/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/Invoice_viewAsODT.xml old mode 100644 new mode 100755 index aefc659217..aa7b968db3 --- a/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/Invoice_viewAsODT.xml +++ b/bt5/erp5_invoicing/SkinTemplateItem/portal_skins/erp5_invoicing/Invoice_viewAsODT.xml @@ -8,15 +8,238 @@ <dictionary> <item> <key> <string>OLE_documents_zipstring</string> </key> - <value> <string encoding="base64">UEsDBBQAAAAIAKKDdTg1Ytc5PgEAAEoHAAAVAAAATUVUQS1JTkYvbWFuaWZlc3QueG1stZVLasMw -EED3PYXR3lbbVTFxAi30BOkBJvLYEeiHZhSS21cO5NM2lKZYOwmk90YjzWix2ltT7TCS9q4TT82j -qNAp32s3duJj/V6/iNXyYWHB6QGJ29OgyvscnaedSNG1HkhT68AitaxaH9D1XiWLjtuv69vJtHyo -LuBBG6zzwnioLjLsNdR8CNgJCMFoBZzjlDvXN0dXc61oGPcsLruHZEwdgLedkELeJbtNefNu0GOK -xyDoWRIDJ9pALIMHpdBgnvooVYpxOmLOYnFXEcFgPDAWggcfUshPIBXCRz9GpHI3PYVeDM7em2Jw -bWFEkq+aLQQq6riT/b1fUHJT9TRJN+pa8LcY7pRPnUhOtXoTnv38v2L+nUt8MEizYy0yzNZ41ttk -Nw60IcmnYRPcODd83sQic/4Qz6ldyB//4fITUEsBAhQAFAAAAAgAooN1ODVi1zk+AQAASgcAABUA -AAAAAAAAAAAAAAAAAAAAAE1FVEEtSU5GL21hbmlmZXN0LnhtbFBLBQYAAAAAAQABAEMAAABxAQAA -AAA=</string> </value> + <value> <string encoding="base64">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 +89KagozokCRghC2lqQvytnxJH8lsOphobmQFHvO9kcQ84w9uQYIzueVe+txwDT5HkdsGTGlF0GAw +/x6f70gHr1NARqaD5MirpII05rvtMVpDKXmK2wYKwptGScExZrO1KemuBNolU4QNnmMdl6ugVNpw +XBWEEdarBql5Dawx9Wm5VykwOPBsNOx8WTb+NO7H89unxcPdYk5biX7o9mwstvY0WQNy2u5eU9QD +YpwOf3VhYQ2299Vf948LWK6CfjdcKs9wb17Q6+6oubK6Od/2rzUao3oyTgs+W1PJOrgd22eMCwEK +omsdE8G5y7r289fxwbQqNEgqusD/1XTdGcOtgsOETdiv52f6AVBLAQIUAxQAAAAIANBzSEGnf414 +KDEAAF6DAgAtAAAAAAAAAAAAAACAAQAAAABQaWN0dXJlcy8xMDAwMDAwMDAwMDAwMjI0MDAwMDAw +NjRBM0JENzVEQS5wbmdQSwECFAMUAAAACADQc0hBAzqxBUMBAAC5BAAAFQAAAAAAAAAAAAAAgAFz +MQAATUVUQS1JTkYvbWFuaWZlc3QueG1sUEsFBgAAAAACAAIAngAAAOkyAAAAAA==</string> </value> </item> <item> <key> <string>_bind_names</string> </key> @@ -48,259 +271,321 @@ AAA=</string> </value> <key> <string>_text</string> </key> <value> <unicode encoding="cdata"><![CDATA[ +<?xml version=\'1.0\' encoding=\'utf-8\'?>\n <office:document-content xmlns:office=\'urn:oasis:names:tc:opendocument:xmlns:office:1.0\' xmlns:text=\'urn:oasis:names:tc:opendocument:xmlns:text:1.0\' xmlns:number=\'urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\' xmlns:meta=\'urn:oasis:names:tc:opendocument:xmlns:meta:1.0\' xmlns:tal=\'http://xml.zope.org/namespaces/tal\' xmlns:table=\'urn:oasis:names:tc:opendocument:xmlns:table:1.0\' xmlns:style=\'urn:oasis:names:tc:opendocument:xmlns:style:1.0\' xmlns:script=\'urn:oasis:names:tc:opendocument:xmlns:script:1.0\' xmlns:xlink=\'http://www.w3.org/1999/xlink\' xmlns:math=\'http://www.w3.org/1998/Math/MathML\' xmlns:draw=\'urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\' xmlns:form=\'urn:oasis:names:tc:opendocument:xmlns:form:1.0\' xmlns:ooo=\'http://openoffice.org/2004/office\' xmlns:dc=\'http://purl.org/dc/elements/1.1/\' xmlns:chart=\'urn:oasis:names:tc:opendocument:xmlns:chart:1.0\' xmlns:i18n=\'http://xml.zope.org/namespaces/i18n\' xmlns:dr3d=\'urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\' xmlns:fo=\'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\' xmlns:xforms=\'http://www.w3.org/2002/xforms\' xmlns:dom=\'http://www.w3.org/2001/xml-events\' xmlns:ooow=\'http://openoffice.org/2004/writer\' xmlns:svg=\'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\' xmlns:metal=\'http://xml.zope.org/namespaces/metal\' xmlns:xsd=\'http://www.w3.org/2001/XMLSchema\' xmlns:xsi=\'http://www.w3.org/2001/XMLSchema-instance\' xmlns:oooc=\'http://openoffice.org/2004/calc\' tal:attributes=\'dummy python:request.RESPONSE.setHeader("Content-Type", "text/html;; charset=utf-8")\' office:version=\'1.0\'\n tal:define="data_dict here/Invoice_getODTDataDict;\n set_precision python: request.set(\'precision\', here.getQuantityPrecisionFromResource(here.getPriceCurrency()));\n quantity_renderer nocall:here/Base_viewTradeFieldLibrary/my_view_mode_quantity/render_pdf;\n price_renderer nocall:here/Base_viewTradeFieldLibrary/my_view_mode_total_price/render_pdf;\n - default_language python:test(request.get(\'international_form\'), \'en\', here.Localizer.get_selected_language())">\n - <office:scripts/>\n + default_language python:test(request.get(\'international_form\'), \'en\', here.Localizer.get_selected_language())"> <office:scripts/>\n <office:font-face-decls>\n - <style:font-face svg:font-family=\'StarSymbol\' style:name=\'StarSymbol\' style:font-charset=\'x-symbol\'/>\n - <style:font-face svg:font-family="\'DejaVu Sans\'" style:name=\'DejaVu Sans1\' style:font-pitch=\'variable\'/>\n - <style:font-face svg:font-family="\'Times New Roman\'" style:font-family-generic=\'roman\' style:name=\'Times New Roman\' style:font-pitch=\'variable\'/>\n - <style:font-face svg:font-family=\'Arial\' style:font-family-generic=\'swiss\' style:name=\'Arial1\' style:font-pitch=\'variable\'/>\n - <style:font-face svg:font-family=\'Arial\' style:font-family-generic=\'swiss\' style:name=\'Arial\' style:font-pitch=\'variable\' style:font-adornments=\'Normalny\'/>\n - <style:font-face svg:font-family="\'DejaVu Sans\'" style:font-family-generic=\'swiss\' style:name=\'DejaVu Sans\' style:font-pitch=\'variable\'/>\n - <style:font-face svg:font-family="\'DejaVu Sans\'" style:font-family-generic=\'system\' style:name=\'DejaVu Sans2\' style:font-pitch=\'variable\'/>\n + <style:font-face style:name="StarSymbol" svg:font-family="StarSymbol" style:font-charset="x-symbol"/>\n + <style:font-face style:name="DejaVu Sans1" svg:font-family="\'DejaVu Sans\'" style:font-pitch="variable"/>\n + <style:font-face style:name="Times New Roman" svg:font-family="\'Times New Roman\'" style:font-family-generic="roman" style:font-pitch="variable"/>\n + <style:font-face style:name="Arial1" svg:font-family="Arial" style:font-family-generic="swiss" style:font-pitch="variable"/>\n + <style:font-face style:name="Arial" svg:font-family="Arial" style:font-adornments="Normalny" style:font-family-generic="swiss" style:font-pitch="variable"/>\n + <style:font-face style:name="DejaVu Sans" svg:font-family="\'DejaVu Sans\'" style:font-family-generic="swiss" style:font-pitch="variable"/>\n + <style:font-face style:name="DejaVu Sans2" svg:font-family="\'DejaVu Sans\'" style:font-family-generic="system" style:font-pitch="variable"/>\n </office:font-face-decls>\n <office:automatic-styles>\n - <style:style style:family=\'table\' style:name=\'Tableau1\'>\n - <style:table-properties fo:margin-left=\'0.021cm\' fo:margin-right=\'-0.014cm\' fo:break-before=\'page\' table:align=\'margins\' style:width=\'18.994cm\'/>\n + <style:style style:name="Table1" style:family="table">\n + <style:table-properties style:width="18.994cm" fo:margin-left="0.021cm" fo:margin-right="-0.014cm" fo:break-before="page" table:align="margins"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau1.A\'>\n - <style:table-column-properties style:rel-column-width=\'3690*\' style:column-width=\'1.58cm\'/>\n + <style:style style:name="Table1.A" style:family="table-column">\n + <style:table-column-properties style:column-width="1.152cm" style:rel-column-width="3974*"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau1.B\'>\n - <style:table-column-properties style:rel-column-width=\'7254*\' style:column-width=\'2.103cm\'/>\n + <style:style style:name="Table1.B" style:family="table-column">\n + <style:table-column-properties style:column-width="2.267cm" style:rel-column-width="7820*"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau1.C\'>\n - <style:table-column-properties style:rel-column-width=\'7151*\' style:column-width=\'2.073cm\'/>\n + <style:style style:name="Table1.C" style:family="table-column">\n + <style:table-column-properties style:column-width="2.235cm" style:rel-column-width="7711*"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau1.D\'>\n - <style:table-column-properties style:rel-column-width=\'24052*\' style:column-width=\'6.971cm\'/>\n + <style:style style:name="Table1.D" style:family="table-column">\n + <style:table-column-properties style:column-width="6.094cm" style:rel-column-width="21027*"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau1.E\'>\n - <style:table-column-properties style:rel-column-width=\'4546*\' style:column-width=\'1.318cm\'/>\n + <style:style style:name="Table1.E" style:family="table-column">\n + <style:table-column-properties style:column-width="1.535cm" style:rel-column-width="5294*"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau1.F\'>\n - <style:table-column-properties style:rel-column-width=\'3493*\' style:column-width=\'1.012cm\'/>\n + <style:style style:name="Table1.F" style:family="table-column">\n + <style:table-column-properties style:column-width="1.032cm" style:rel-column-width="3560*"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau1.G\'>\n - <style:table-column-properties style:rel-column-width=\'5757*\' style:column-width=\'1.669cm\'/>\n + <style:style style:name="Table1.G" style:family="table-column">\n + <style:table-column-properties style:column-width="1.455cm" style:rel-column-width="5021*"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau1.H\'>\n - <style:table-column-properties style:rel-column-width=\'4722*\' style:column-width=\'1.369cm\'/>\n + <style:style style:name="Table1.H" style:family="table-column">\n + <style:table-column-properties style:column-width="1.388cm" style:rel-column-width="4789*"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau1.I\'>\n - <style:table-column-properties style:rel-column-width=\'5870*\' style:column-width=\'1.7cm\'/>\n + <style:style style:name="Table1.I" style:family="table-column">\n + <style:table-column-properties style:column-width="1.838cm" style:rel-column-width="6339*"/>\n </style:style>\n - <style:style style:family=\'table-row\' style:name=\'Tableau1.1\'>\n - <style:table-row-properties style:min-row-height=\'5.0cm\'/>\n + <style:style style:name="Table1.1" style:family="table-row">\n + <style:table-row-properties style:min-row-height="5.001cm"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau1.A1\'>\n - <style:table-cell-properties fo:padding=\'0cm\' fo:background-color=\'transparent\' fo:border=\'none\'>\n + <style:style style:name="Table1.A1" style:family="table-cell">\n + <style:table-cell-properties fo:background-color="transparent" fo:padding="0cm" fo:border="none">\n <style:background-image/>\n </style:table-cell-properties>\n </style:style>\n - <style:style style:family=\'table\' style:name=\'Tableau2\'>\n - <style:table-properties fo:margin-left=\'0cm\' fo:margin-right=\'0.019cm\' table:align=\'margins\' style:width=\'18.974cm\'/>\n + <style:style style:name="Table1.A2" style:family="table-cell">\n + <style:table-cell-properties fo:background-color="#e6e6e6" fo:padding="0.049cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.5pt solid #000000">\n + <style:background-image/>\n + </style:table-cell-properties>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau2.A\'>\n - <style:table-column-properties style:rel-column-width=\'5326*\' style:column-width=\'1.542cm\'/>\n + <style:style style:name="Table1.3" style:family="table-row">\n + <style:table-row-properties style:min-row-height="0.75cm"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau2.B\'>\n - <style:table-column-properties style:rel-column-width=\'18000*\' style:column-width=\'5.000cm\'/>\n + <style:style style:name="Table1.A3" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:background-color="transparent" fo:padding="0cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.5pt solid #000000">\n + <style:background-image/>\n + </style:table-cell-properties>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau2.C\'>\n - <style:table-column-properties style:rel-column-width=\'5326*\' style:column-width=\'1.542cm\'/>\n + <style:style style:name="Table2" style:family="table">\n + <style:table-properties style:width="18.974cm" fo:margin-left="0cm" fo:margin-right="0.019cm" table:align="margins"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau2.D\'>\n - <style:table-column-properties style:rel-column-width=\'18000*\' style:column-width=\'5.000cm\'/>\n + <style:style style:name="Table2.A" style:family="table-column">\n + <style:table-column-properties style:column-width="1.628cm" style:rel-column-width="5626*"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau2.E\'>\n - <style:table-column-properties style:rel-column-width=\'15381*\' style:column-width=\'4.454cm\'/>\n + <style:style style:name="Table2.B" style:family="table-column">\n + <style:table-column-properties style:column-width="5.505cm" style:rel-column-width="19016*"/>\n </style:style>\n - <style:style style:family=\'table-row\' style:name=\'Tableau2.1\'>\n - <style:table-row-properties style:row-height=\'2.251cm\'/>\n + <style:style style:name="Table2.E" style:family="table-column">\n + <style:table-column-properties style:column-width="4.704cm" style:rel-column-width="16251*"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau2.A1\'>\n - <style:table-cell-properties fo:padding=\'0.097cm\' fo:border-right=\'none\' fo:border-top=\'0.018cm solid #000000\' fo:border-left=\'0.018cm solid #000000\' fo:border-bottom=\'0.018cm solid #000000\' style:vertical-align=\'middle\'/>\n + <style:style style:name="Table2.1" style:family="table-row">\n + <style:table-row-properties style:row-height="2.251cm"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau2.E1.1\'>\n - <style:table-column-properties style:rel-column-width=\'6760*\' style:column-width=\'1.958cm\'/>\n + <style:style style:name="Table2.A1" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="none" fo:border-top="0.5pt solid #000000" fo:border-bottom="0.5pt solid #000000"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau2.E1.2\'>\n - <style:table-column-properties style:rel-column-width=\'8621*\' style:column-width=\'2.496cm\'/>\n + <style:style style:name="Table2.E1.1" style:family="table-column">\n + <style:table-column-properties style:column-width="2.067cm" style:rel-column-width="7142*"/>\n </style:style>\n - <style:style style:family=\'table-row\' style:name=\'Tableau2.E1.1\'>\n - <style:table-row-properties style:row-height=\'0.75cm\'/>\n + <style:style style:name="Table2.E1.2" style:family="table-column">\n + <style:table-column-properties style:column-width="2.637cm" style:rel-column-width="9109*"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau2.E1.2.1\'>\n - <style:table-cell-properties style:vertical-align=\'middle\' fo:padding=\'0.097cm\' fo:border=\'0.018cm solid #000000\'/>\n + <style:style style:name="Table2.E1.1" style:family="table-row">\n + <style:table-row-properties style:row-height="0.75cm"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau2.E1.1.2\'>\n - <style:table-cell-properties fo:padding=\'0.097cm\' fo:border-right=\'none\' fo:border-top=\'none\' fo:border-left=\'0.018cm solid #000000\' fo:border-bottom=\'0.018cm solid #000000\' style:vertical-align=\'middle\'/>\n + <style:style style:name="Table2.E1.2.1" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border="0.5pt solid #000000"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau2.E1.2.2\'>\n - <style:table-cell-properties fo:padding=\'0.097cm\' fo:border-right=\'0.018cm solid #000000\' fo:border-top=\'none\' fo:border-left=\'0.018cm solid #000000\' fo:border-bottom=\'0.018cm solid #000000\' style:vertical-align=\'middle\'/>\n + <style:style style:name="Table2.E1.1.2" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.5pt solid #000000"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau1.A2\'>\n - <style:table-cell-properties fo:padding=\'0.049cm\' fo:border-right=\'none\' fo:border-top=\'none\' fo:background-color=\'#e6e6e6\' fo:border-left=\'none\' fo:border-bottom=\'0.018cm solid #000000\'>\n - <style:background-image/>\n - </style:table-cell-properties>\n + <style:style style:name="Table2.E1.2.2" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="0.5pt solid #000000" fo:border-top="none" fo:border-bottom="0.5pt solid #000000"/>\n </style:style>\n - <style:style style:family=\'table-row\' style:name=\'Tableau1.3\'>\n - <style:table-row-properties style:min-row-height=\'0.75cm\'/>\n + <style:style style:name="Table3" style:family="table">\n + <style:table-properties style:width="18.994cm" table:align="margins" style:may-break-between-rows="false"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau1.A3\'>\n - <style:table-cell-properties fo:padding=\'0cm\' fo:border-right=\'none\' fo:border-top=\'none\' fo:background-color=\'transparent\' fo:border-left=\'none\' fo:border-bottom=\'0.018cm solid #000000\' style:vertical-align=\'middle\'>\n - <style:background-image/>\n - </style:table-cell-properties>\n + <style:style style:name="Table3.A" style:family="table-column">\n + <style:table-column-properties style:column-width="1.632cm" style:rel-column-width="5629*"/>\n + </style:style>\n + <style:style style:name="Table3.B" style:family="table-column">\n + <style:table-column-properties style:column-width="7.655cm" style:rel-column-width="26413*"/>\n + </style:style>\n + <style:style style:name="Table3.C" style:family="table-column">\n + <style:table-column-properties style:column-width="2.752cm" style:rel-column-width="9494*"/>\n + </style:style>\n + <style:style style:name="Table3.D" style:family="table-column">\n + <style:table-column-properties style:column-width="1.621cm" style:rel-column-width="5593*"/>\n + </style:style>\n + <style:style style:name="Table3.E" style:family="table-column">\n + <style:table-column-properties style:column-width="1.792cm" style:rel-column-width="6183*"/>\n + </style:style>\n + <style:style style:name="Table3.F" style:family="table-column">\n + <style:table-column-properties style:column-width="1.833cm" style:rel-column-width="6323*"/>\n + </style:style>\n + <style:style style:name="Table3.G" style:family="table-column">\n + <style:table-column-properties style:column-width="1.709cm" style:rel-column-width="5900*"/>\n </style:style>\n - <style:style style:family=\'table-row\' style:name=\'Tableau1.4\'>\n - <style:table-row-properties style:row-height=\'4.83cm\'/>\n + <style:style style:name="Table3.1" style:family="table-row">\n + <style:table-row-properties style:row-height="0.499cm"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau1.A4\'>\n - <style:table-cell-properties style:vertical-align=\'middle\' fo:padding=\'0cm\' fo:background-color=\'transparent\' fo:border=\'none\'>\n + <style:style style:name="Table3.A1" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border="none"/>\n + </style:style>\n + <style:style style:name="Table3.2" style:family="table-row">\n + <style:table-row-properties style:row-height="0.75cm"/>\n + </style:style>\n + <style:style style:name="Table3.A2" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0cm" fo:border="none"/>\n + </style:style>\n + <style:style style:name="Table3.D2" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="none" fo:border-top="0.5pt solid #000000" fo:border-bottom="0.5pt solid #000000"/>\n + </style:style>\n + <style:style style:name="Table3.G2" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border="0.5pt solid #000000"/>\n + </style:style>\n + <style:style style:name="Table3.3" style:family="table-row">\n + <style:table-row-properties style:row-height="0.365cm"/>\n + </style:style>\n + <style:style style:name="Table3.4" style:family="table-row">\n + <style:table-row-properties style:min-row-height="0.025cm"/>\n + </style:style>\n + <style:style style:name="Table3.D4" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:background-color="#e6e6e6" fo:padding="0.097cm" fo:border="none">\n <style:background-image/>\n </style:table-cell-properties>\n </style:style>\n - <style:style style:family=\'table\' style:name=\'Tableau3\'>\n - <style:table-properties style:may-break-between-rows=\'false\' table:align=\'margins\' style:width=\'18.994cm\'/>\n + <style:style style:name="Table3.5" style:family="table-row">\n + <style:table-row-properties style:row-height="0.741cm"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau3.A\'>\n - <style:table-column-properties style:column-width="1.633cm" style:rel-column-width="926*"/>\n + <style:style style:name="Table3.D5" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau3.B\'>\n - <style:table-column-properties style:column-width="5.495cm" style:rel-column-width="3115*"/>\n + <style:style style:name="Table3.E5" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau3.C\'>\n - <style:table-column-properties style:column-width="7.502cm" style:rel-column-width="4253*"/>\n + <style:style style:name="Table3.F5" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau3.D\'>\n - <style:table-column-properties style:column-width="2.656cm" style:rel-column-width="1506*"/>\n + <style:style style:name="Table3.G5" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000"/>\n </style:style>\n - <style:style style:family=\'table-column\' style:name=\'Tableau3.E\'>\n - <style:table-column-properties style:column-width="1.707cm" style:rel-column-width="968*"/>\n + <style:style style:name="Table3.D6" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000"/>\n </style:style>\n - <style:style style:family=\'table-row\' style:name=\'Tableau3.1\'>\n - <style:table-row-properties style:row-height=\'0.50cm\'/>\n + <style:style style:name="Table3.E6" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau3.A1\'>\n - <style:table-cell-properties style:vertical-align=\'middle\' fo:padding=\'0.097cm\' fo:border=\'none\'/>\n + <style:style style:name="Table3.F6" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000"/>\n </style:style>\n - <style:style style:family=\'table-row\' style:name=\'Tableau3.2\'>\n - <style:table-row-properties style:row-height=\'0.75cm\'/>\n + <style:style style:name="Table3.G6" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000"/>\n </style:style>\n - <style:style style:family=\'table-row\' style:name=\'Tableau3.3\'>\n - <style:table-row-properties style:row-height=\'2cm\'/>\n + <style:style style:name="Table3.D7" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau3.A2\'>\n - <style:table-cell-properties style:vertical-align=\'middle\' fo:padding=\'0cm\' fo:border=\'none\'/>\n + <style:style style:name="Table3.E7" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau3.D2\'>\n - <style:table-cell-properties fo:padding=\'0.097cm\' fo:border-right=\'none\' fo:border-top=\'0.018cm solid #000000\' fo:border-left=\'0.018cm solid #000000\' fo:border-bottom=\'0.018cm solid #000000\' style:vertical-align=\'middle\'/>\n + <style:style style:name="Table3.F7" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau3.E2\'>\n - <style:table-cell-properties style:vertical-align=\'middle\' fo:padding=\'0.097cm\' fo:border=\'0.018cm solid #000000\'/>\n + <style:style style:name="Table3.G7" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau3.D3\'>\n - <style:table-cell-properties fo:padding=\'0.097cm\' fo:border-right=\'none\' fo:border-top=\'none\' fo:border-left=\'0.018cm solid #000000\' fo:border-bottom=\'0.018cm solid #000000\' style:vertical-align=\'middle\'/>\n + <style:style style:name="Table3.E8" style:family="table-cell" style:data-style-name="N0">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border="none"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau3.E3\'>\n - <style:table-cell-properties fo:padding=\'0.097cm\' fo:border-right=\'0.018cm solid #000000\' fo:border-top=\'none\' fo:border-left=\'0.018cm solid #000000\' fo:border-bottom=\'0.018cm solid #000000\' style:vertical-align=\'middle\'/>\n + <style:style style:name="Table3.G8" style:family="table-cell" style:data-style-name="N0">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border="none"/>\n </style:style>\n - <style:style style:name="Tableau3.5" style:family="table-row">\n - <style:table-row-properties style:row-height="2.251cm"/>\n + <style:style style:name="Table3.11" style:family="table-row">\n + <style:table-row-properties style:row-height="0.45cm"/>\n </style:style>\n - <style:style style:name="Tableau3.A5" style:family="table-cell">\n - <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border="0.018cm solid #000000"/>\n + <style:style style:name="Table3.A11" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="none" fo:border-top="0.5pt solid #000000" fo:border-bottom="none"/>\n </style:style>\n - <style:style style:name="Tableau3.B5" style:family="table-cell">\n - <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border="0.018cm solid #000000"/>\n + <style:style style:name="Table3.B11" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.5pt solid #000000" fo:border-bottom="none"/>\n </style:style>\n - <style:style style:name="Tableau3.7" style:family="table-row">\n - <style:table-row-properties style:row-height=\'0.45cm\'/>\n + <style:style style:name="Table3.C11" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.5pt solid #000000" fo:border-bottom="none"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau3.A7\'>\n - <style:table-cell-properties fo:padding=\'0.097cm\' fo:border-right=\'none\' fo:border-top=\'0.018cm solid #000000\' fo:border-left=\'0.018cm solid #000000\' fo:border-bottom=\'none\' style:vertical-align=\'middle\'/>\n + <style:style style:name="Table3.D11" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.5pt solid #000000" fo:border-bottom="none"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau3.B7\'>\n - <style:table-cell-properties fo:padding=\'0.097cm\' fo:border-right=\'none\' fo:border-top=\'0.018cm solid #000000\' fo:border-left=\'none\' fo:border-bottom=\'none\' style:vertical-align=\'middle\'/>\n + <style:style style:name="Table3.G11" style:family="table-cell">\n + <style:table-cell-properties style:vertical-align="middle" fo:padding="0.097cm" fo:border-left="none" fo:border-right="0.5pt solid #000000" fo:border-top="0.5pt solid #000000" fo:border-bottom="none"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau3.E7\'>\n - <style:table-cell-properties fo:padding=\'0.097cm\' fo:border-right=\'0.018cm solid #000000\' fo:border-top=\'0.018cm solid #000000\' fo:border-left=\'none\' fo:border-bottom=\'none\' style:vertical-align=\'middle\'/>\n + <style:style style:name="Table3.A12" style:family="table-cell">\n + <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="0.5pt solid #000000" fo:border-top="none" fo:border-bottom="0.5pt solid #000000"/>\n </style:style>\n - <style:style style:family=\'table-row\' style:name=\'EmptyTableau3.8\'>\n - <style:table-row-properties style:row-height=\'1.499cm\'/> \n + <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Table_20_Contents">\n + <style:text-properties style:font-name-asian="DejaVu Sans1" style:font-size-asian="14pt" style:font-name-complex="DejaVu Sans1" style:font-size-complex="14pt"/>\n </style:style>\n - <style:style style:family=\'table-row\' style:name=\'DynamicTableau3.8\'/>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau3.A7\'>\n - <style:table-cell-properties fo:border-left=\'0.018cm solid #000000\' fo:border-right=\'0.018cm solid #000000\' fo:border-bottom=\'0.018cm solid #000000\' fo:padding=\'0.097cm\' fo:border-top=\'none\'/>\n + <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Table_20_Contents">\n + <style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/>\n </style:style>\n - <style:style style:family=\'table-cell\' style:name=\'Tableau3.A8\'>\n - <style:table-cell-properties fo:border-left=\'0.018cm solid #000000\' fo:border-right=\'0.018cm solid #000000\' fo:border-bottom=\'0.018cm solid #000000\' fo:padding=\'0.097cm\' fo:border-top=\'none\'/>\n + <style:style style:name="P3" style:family="paragraph" style:parent-style-name="Text_20_body">\n + <style:text-properties fo:font-size="6pt" fo:font-weight="normal" style:font-size-asian="6pt" style:font-weight-asian="normal" style:font-size-complex="6pt" style:font-weight-complex="normal"/>\n </style:style>\n - <style:style style:parent-style-name=\'Table_20_Heading\' style:family=\'paragraph\' style:name=\'P1\'>\n - <style:text-properties fo:font-style=\'normal\' style:font-style-asian=\'normal\' style:font-size-complex=\'7pt\' style:font-size-asian=\'7pt\' style:font-style-complex=\'normal\' style:font-weight-complex=\'normal\' style:font-weight-asian=\'normal\' fo:font-size=\'7pt\' fo:font-weight=\'normal\'/>\n + <style:style style:name="P4" style:family="paragraph" style:parent-style-name="Table_20_Heading">\n + <style:text-properties fo:font-size="7pt" fo:font-style="normal" fo:font-weight="normal" style:font-size-asian="7pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-size-complex="7pt" style:font-style-complex="normal" style:font-weight-complex="normal"/>\n </style:style>\n - <style:style style:parent-style-name=\'Table_20_Heading\' style:family=\'paragraph\' style:name=\'P2\'>\n - <style:paragraph-properties fo:text-align=\'start\' style:justify-single-word=\'false\'/>\n + <style:style style:name="P5" style:family="paragraph" style:parent-style-name="Table_20_Heading">\n + <style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/>\n + </style:style>\n + <style:style style:name="P6" style:family="paragraph" style:parent-style-name="Table_20_Heading">\n + <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>\n + </style:style>\n + <style:style style:name="P7" style:family="paragraph" style:parent-style-name="Table_20_Contents_20_Right">\n + <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>\n + </style:style>\n + <style:style style:name="P8" style:family="paragraph" style:parent-style-name="Item_20_Table_20_Title_20_Left">\n + <style:paragraph-properties fo:text-align="end" style:justify-single-word="false"/>\n + </style:style>\n + <style:style style:name="P9" style:family="paragraph" style:parent-style-name="Item_20_Table_20_Title_20_Left">\n + <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>\n + </style:style>\n + <style:style style:name="P10" style:family="paragraph" style:parent-style-name="Item_20_Table_20_Title_20_Left">\n + <style:paragraph-properties fo:background-color="transparent">\n + <style:background-image/>\n + </style:paragraph-properties>\n </style:style>\n - <style:style style:parent-style-name=\'Table_20_Contents\' style:family=\'paragraph\' style:name=\'P3\'>\n - <style:paragraph-properties fo:text-align=\'left\' style:justify-single-word=\'false\'/>\n + <style:style style:name="P11" style:family="paragraph" style:parent-style-name="Table_20_Contents">\n + <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>\n </style:style>\n - <style:style style:parent-style-name=\'Text_20_body\' style:family=\'paragraph\' style:name=\'P4\'>\n - <style:text-properties style:font-size-complex=\'6pt\' style:font-size-asian=\'6pt\' style:font-weight-complex=\'normal\' style:font-weight-asian=\'normal\' fo:font-size=\'6pt\' fo:font-weight=\'normal\'/>\n + <style:style style:name="P12" style:family="paragraph" style:parent-style-name="Table_20_Contents_20_Right">\n + <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>\n </style:style>\n - <style:style style:name="P6" style:family="paragraph" style:parent-style-name="Big_20_Table_20_Content_20_Left">\n - <style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>\n + <style:style style:name="P13" style:family="paragraph" style:parent-style-name="Table_20_Contents_20_Right">\n + <style:paragraph-properties fo:text-align="end" style:justify-single-word="false"/>\n </style:style>\n + <style:style style:name="P14" style:family="paragraph" style:parent-style-name="Item_20_Table_20_Title_20_Left">\n + <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>\n + </style:style>\n + <style:style style:name="fr1" style:family="graphic" style:parent-style-name="Header_20_Image">\n + <style:graphic-properties style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="left" style:horizontal-rel="paragraph" style:mirror="none" fo:clip="rect(0cm, 0cm, 0cm, 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="100%" draw:color-inversion="false" draw:image-opacity="100%" draw:color-mode="standard"/>\n + </style:style>\n + <number:number-style style:name="N0">\n + <number:number number:min-integer-digits="1"/>\n + </number:number-style>\n </office:automatic-styles>\n <office:body>\n <office:text>\n <text:variable-decls>\n - <text:variable-decl text:name=\'ds_title\' office:value-type=\'string\'/>\n - <text:variable-decl text:name=\'ds_address\' office:value-type=\'string\'/>\n - <text:variable-decl text:name=\'ds_telfax\' office:value-type=\'string\'/>\n - <text:variable-decl text:name=\'ds_email\' office:value-type=\'string\'/>\n - <text:variable-decl text:name=\'ds_vatid\' office:value-type=\'string\'/>\n - <text:variable-decl text:name=\'purchase_order\' office:value-type=\'string\'/>\n - <text:variable-decl text:name=\'purchase_order_tr\' office:value-type=\'string\'/>\n - <text:variable-decl text:name=\'page\' office:value-type=\'string\'/>\n - <text:variable-decl text:name=\'of\' office:value-type=\'string\'/>\n + <text:variable-decl office:value-type="string" text:name="ds_title"/>\n + <text:variable-decl office:value-type="string" text:name="ds_address"/>\n + <text:variable-decl office:value-type="string" text:name="ds_telfax"/>\n + <text:variable-decl office:value-type="string" text:name="ds_email"/>\n + <text:variable-decl office:value-type="string" text:name="ds_vatid"/>\n + <text:variable-decl office:value-type="string" text:name="purchase_order"/>\n + <text:variable-decl office:value-type="string" text:name="purchase_order_tr"/>\n + <text:variable-decl office:value-type="string" text:name="page"/>\n + <text:variable-decl office:value-type="string" text:name="of"/>\n </text:variable-decls>\n <text:sequence-decls>\n - <text:sequence-decl text:display-outline-level=\'0\' text:name=\'Illustration\'/>\n - <text:sequence-decl text:display-outline-level=\'0\' text:name=\'Table\'/>\n - <text:sequence-decl text:display-outline-level=\'0\' text:name=\'Text\'/>\n - <text:sequence-decl text:display-outline-level=\'0\' text:name=\'Drawing\'/>\n + <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>\n + <text:sequence-decl text:display-outline-level="0" text:name="Table"/>\n + <text:sequence-decl text:display-outline-level="0" text:name="Text"/>\n + <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>\n </text:sequence-decls>\n - <table:table table:style-name=\'Tableau1\' table:name=\'Tableau1\'>\n - <table:table-column table:style-name=\'Tableau1.A\'/>\n - <table:table-column table:style-name=\'Tableau1.B\'/>\n - <table:table-column table:style-name=\'Tableau1.C\'/>\n - <table:table-column table:style-name=\'Tableau1.D\'/>\n - <table:table-column table:style-name=\'Tableau1.E\'/>\n - <table:table-column table:style-name=\'Tableau1.F\'/>\n - <table:table-column table:style-name=\'Tableau1.H\'/>\n - <table:table-column table:style-name=\'Tableau1.I\'/>\n + <table:table table:name="Table1" table:style-name="Table1">\n + <table:table-column table:style-name="Table1.A"/>\n + <table:table-column table:style-name="Table1.B"/>\n + <table:table-column table:style-name="Table1.C"/>\n + <table:table-column table:style-name="Table1.D"/>\n + <table:table-column table:style-name="Table1.E"/>\n + <table:table-column table:style-name="Table1.F"/>\n + <table:table-column table:style-name="Table1.G"/>\n + <table:table-column table:style-name="Table1.H"/>\n + <table:table-column table:style-name="Table1.I"/>\n <table:table-header-rows>\n - <table:table-row table:style-name=\'Tableau1.1\'>\n - <table:table-cell table:style-name=\'Tableau1.A1\'\n - table:number-columns-spanned=\'9\'\n - office:value-type=\'string\'>\n - <table:table table:style-name=\'Tableau2\' table:name=\'Tableau2\'>\n - <table:table-column table:style-name=\'Tableau2.A\'/>\n - <table:table-column table:style-name=\'Tableau2.B\'/>\n - <table:table-column table:style-name=\'Tableau2.C\'/>\n - <table:table-column table:style-name=\'Tableau2.D\'/>\n - <table:table-column table:style-name=\'Tableau2.E\'/>\n + <table:table-row table:style-name="Table1.1">\n + <table:table-cell table:style-name="Table1.A1" table:number-columns-spanned="9" office:value-type="string">\n + <table:table table:name="Table2" table:style-name="Table2">\n + <table:table-column table:style-name="Table2.A"/>\n + <table:table-column table:style-name="Table2.B"/>\n + <table:table-column table:style-name="Table2.A"/>\n + <table:table-column table:style-name="Table2.B"/>\n + <table:table-column table:style-name="Table2.E"/>\n <table:table-header-rows>\n - <table:table-row table:style-name=\'Tableau2.1\'>\n - <table:table-cell table:style-name=\'Tableau2.A1\'\n - office:value-type=\'string\'>\n + <table:table-row table:style-name="Table2.1">\n + <table:table-cell table:style-name="Table2.A1" office:value-type="string">\n <!--This PageTemplate is Used For Sale Invoice and Purchase Invoice-->\n <tal:block tal:define="orig_string string:Supplier;\n orig_message python:here.Base_translateString(orig_string, lang=default_language);\n @@ -311,78 +596,66 @@ AAA=</string> </value> tal:condition=\'python:translated_message != orig_message\'><span tal:replace=\'translated_message\'/>:</text:p>\n </tal:block>\n </table:table-cell>\n - <table:table-cell table:style-name=\'Tableau2.A1\'\n - office:value-type=\'string\'>\n - <text:p text:style-name=\'Big_20_Table_20_Content_20_Left\'\n - tal:content=\'python:data_dict["source_section_title"]\'>source_section</text:p>\n - <text:p text:style-name=\'Table_20_Contents_20_Left\'\n - tal:content=\'python:data_dict["source_section_address"]\'>address</text:p>\n - <text:p text:style-name=\'Table_20_Contents_20_Left\'\n - tal:content=\'python:data_dict["source_section_telfax"]\'>tel, fax</text:p>\n - <text:p text:style-name=\'Table_20_Contents_20_Left\'\n - tal:content=\'python:data_dict["source_section_email"]\'>email</text:p>\n - <text:p text:style-name=\'Table_20_Contents_20_Left\'\n - tal:condition=\'data_dict/source_section_vatid\'\n - tal:content=\'python:data_dict["source_section_vatid"]\'>vat ID</text:p>\n + <table:table-cell table:style-name="Table2.A1" office:value-type="string">\n + <text:p text:style-name="Big_20_Table_20_Content_20_Left" tal:content="python:data_dict[\'source_section_title\']">Nexedi SA</text:p>\n + <text:p text:style-name="Table_20_Contents_20_Left" tal:content=\'python:data_dict["source_section_address"]\'>270 bd Clémenceau, 59700 Marcq-en-Baroeul, France</text:p>\n + <text:p text:style-name="Table_20_Contents_20_Left" tal:content=\'python:data_dict["source_section_telfax"]\'>Tel: +33(0)9-51085055, Fax: +33(0)3-20 72 99 25</text:p>\n + <text:p text:style-name="Table_20_Contents_20_Left" tal:content=\'python:data_dict["source_section_email"]\'>Email: info@nexedi.com</text:p>\n + <text:p text:style-name="Table_20_Contents_20_Left" tal:condition=\'data_dict/source_section_vatid\' tal:content=\'python:data_dict["source_section_vatid"]\'>VAT ID: FR72440047504</text:p>\n </table:table-cell>\n - <table:table-cell table:style-name=\'Tableau2.A1\'\n - office:value-type=\'string\'\n - tal:define=\'orig_string string:Client; 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=\'Table_20_Heading\'><span tal:replace=\'orig_message\'/>:</text:p>\n - <text:p text:style-name=\'Table_20_Heading\' tal:condition=\'python:translated_message != orig_message\'><span tal:replace=\'translated_message\'/>:</text:p>\n + <table:table-cell table:style-name="Table2.A1" office:value-type="string">\n + <text:p text:style-name="Table_20_Heading">Client:</text:p>\n </table:table-cell>\n - <table:table-cell table:style-name=\'Tableau2.A1\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Big_20_Table_20_Content_20_Left\' tal:content=\'python:data_dict["destination_section_title"]\'>destination</text:p>\n - <text:p text:style-name=\'Table_20_Contents_20_Left\' tal:content=\'python:data_dict["destination_section_address"]\'>address</text:p>\n - <text:p text:style-name=\'Table_20_Contents_20_Left\' tal:content=\'python:data_dict["destination_section_telfax"]\'>tel, fax</text:p>\n - <text:p text:style-name=\'Table_20_Contents_20_Left\' tal:content=\'python:data_dict["destination_section_email"]\'>email</text:p>\n - <text:p text:style-name=\'Table_20_Contents_20_Left\' tal:content=\'python:data_dict["destination_section_vatid"]\'\n - tal:condition="data_dict/destination_section_vatid">vat ID</text:p>\n + <table:table-cell table:style-name="Table2.A1" office:value-type="string">\n + <text:p text:style-name="Big_20_Table_20_Content_20_Left" tal:content=\'python:data_dict["destination_section_title"]\'>Astrium Geo-Information Services, Infoterra GmbH</text:p>\n + <text:p text:style-name="Table_20_Contents_20_Left" tal:content=\'python:data_dict["destination_section_address"]\'>Claude-Dornier-Strasse, 88090 Immenstaad, Germany</text:p>\n + <text:p text:style-name="Table_20_Contents_20_Left" tal:content=\'python:data_dict["destination_section_telfax"]\'>Tel: +49(0)-7545 8 5982, Fax: +49(0)-7545 8 1337</text:p>\n + <text:p text:style-name="Table_20_Contents_20_Left" tal:content=\'python:data_dict["destination_section_email"]\'>Email: volker.mueller@astrium.eads.net</text:p>\n + <text:p text:style-name="Table_20_Contents_20_Left" tal:content=\'python:data_dict["destination_section_vatid"]\' tal:condition="data_dict/destination_section_vatid">VAT ID: DE197540174</text:p>\n </table:table-cell>\n <table:table-cell>\n - <table:table table:is-sub-table=\'true\'>\n - <table:table-column table:style-name=\'Tableau2.E1.1\'/>\n - <table:table-column table:style-name=\'Tableau2.E1.2\'/>\n - <table:table-row table:style-name=\'Tableau2.E1.1\'>\n - <table:table-cell table:style-name=\'Tableau2.A1\' office:value-type=\'string\' tal:define=\'orig_string string:Invoice Number; 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 + <table:table table:is-sub-table="true">\n + <table:table-column table:style-name="Table2.E1.1"/>\n + <table:table-column table:style-name="Table2.E1.2"/>\n + <table:table-row table:style-name="Table2.E1.1">\n + <table:table-cell table:style-name=\'Table2.A1\' office:value-type=\'string\' tal:define=\'orig_string string:Invoice Number; 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=\'Table_20_Heading\'><span tal:replace=\'orig_message\'/>:</text:p>\n <text:p text:style-name=\'Table_20_Heading\' 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=\'Tableau2.E1.2.1\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Big_20_Table_20_Content\' tal:content=\'python:data_dict["reference"]\'>reference</text:p>\n + <table:table-cell table:style-name="Table2.E1.2.1" office:value-type="string">\n + <text:p text:style-name="Big_20_Table_20_Content" tal:content=\'python:data_dict["reference"]\'>8223</text:p>\n </table:table-cell>\n </table:table-row>\n - <table:table-row table:style-name=\'Tableau2.E1.1\'>\n - <table:table-cell table:style-name=\'Tableau2.E1.1.2\'\n + <table:table-row table:style-name="Table2.E1.1">\n + <table:table-cell table:style-name=\'Table2.E1.1.2\'\n office:value-type=\'string\'\n tal:define=\'orig_string string:Document Date; 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=\'Table_20_Heading\'><span tal:replace=\'orig_message\'/>:</text:p>\n <text:p text:style-name=\'Table_20_Heading\' 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=\'Tableau2.E1.2.2\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'\n - tal:content="data_dict/start_date">start date</text:p>\n + <table:table-cell table:style-name="Table2.E1.2.2" office:value-type="string">\n + <text:p text:style-name="Table_20_Contents" tal:content="data_dict/start_date">2012/07/18</text:p>\n </table:table-cell>\n </table:table-row>\n - <table:table-row table:style-name=\'Tableau2.E1.1\'>\n - <table:table-cell table:style-name=\'Tableau2.E1.1.2\' office:value-type=\'string\' tal:define=\'orig_string string:Currency; 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 + <table:table-row table:style-name=\'Table2.E1.1\'>\n + <table:table-cell table:style-name=\'Table2.E1.1.2\' office:value-type=\'string\' tal:define=\'orig_string string:Currency; 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=\'Table_20_Heading\'><span tal:replace=\'orig_message\'/>:</text:p>\n <text:p text:style-name=\'Table_20_Heading\' 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=\'Tableau2.E1.2.2\' office:value-type=\'string\'>\n + <table:table-cell table:style-name=\'Table2.E1.2.2\' office:value-type=\'string\'>\n <text:p text:style-name=\'Table_20_Contents\' tal:content=\'python:data_dict["currency"]\'>EUR</text:p>\n </table:table-cell>\n </table:table-row>\n </table:table>\n </table:table-cell>\n </table:table-row>\n - </table:table-header-rows>\n - <table:table-row table:style-name=\'Tableau2.1\'>\n - <table:table-cell table:style-name=\'Tableau2.E1.1.2\' office:value-type=\'string\' tal:define=\'orig_string string:Ship From; 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 + </table:table-header-rows> \n + <table:table-row table:style-name=\'Table2\'>\n + <table:table-cell table:style-name=\'Table2.E1.1.2\' office:value-type=\'string\' tal:define=\'orig_string string:Ship From; 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=\'Table_20_Heading\'><span tal:replace=\'orig_message\'/>:</text:p>\n <text:p text:style-name=\'Table_20_Heading\' 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=\'Tableau2.E1.1.2\' office:value-type=\'string\'>\n + <table:table-cell table:style-name=\'Table2.E1.1.2\' office:value-type=\'string\'>\n <text:p text:style-name=\'Big_20_Table_20_Content_20_Left\' tal:content=\'python:data_dict["source_title"]\'>name</text:p>\n <text:p text:style-name=\'Table_20_Contents_20_Left\' tal:content=\'python:data_dict["source_address"]\'>address</text:p>\n <text:p text:style-name=\'Table_20_Contents_20_Left\' tal:content=\'python:data_dict["source_telfax"]\'>tel, fax</text:p>\n @@ -390,11 +663,11 @@ AAA=</string> </value> tal:condition="data_dict/source_vatid"\n tal:content=\'python:data_dict["source_vatid"]\'>vat id</text:p>\n </table:table-cell>\n - <table:table-cell table:style-name=\'Tableau2.E1.1.2\' office:value-type=\'string\' tal:define=\'orig_string string:Ship To; 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 + <table:table-cell table:style-name=\'Table2.E1.1.2\' office:value-type=\'string\' tal:define=\'orig_string string:Ship To; 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=\'Table_20_Heading\'><span tal:replace=\'orig_message\'/>:</text:p>\n <text:p text:style-name=\'Table_20_Heading\' 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=\'Tableau2.E1.1.2\' office:value-type=\'string\'>\n + <table:table-cell table:style-name=\'Table2.E1.1.2\' office:value-type=\'string\'>\n <text:p text:style-name=\'Big_20_Table_20_Content_20_Left\' tal:content=\'python:data_dict["destination_title"]\'>name</text:p>\n <text:p text:style-name=\'Table_20_Contents_20_Left\' tal:content=\'python:data_dict["destination_address"]\'>address</text:p>\n <text:p text:style-name=\'Table_20_Contents_20_Left\' tal:content=\'python:data_dict["destination_telfax"]\'>tel, fax</text:p>\n @@ -404,32 +677,32 @@ AAA=</string> </value> </table:table-cell>\n <table:table-cell>\n <table:table table:is-sub-table=\'true\'>\n - <table:table-column table:style-name=\'Tableau2.E1.1\'/>\n - <table:table-column table:style-name=\'Tableau2.E1.2\'/>\n - <table:table-row table:style-name=\'Tableau2.E1.1\'>\n - <table:table-cell table:style-name=\'Tableau2.E1.1.2\' office:value-type=\'string\' tal:define=\'orig_string string:Payment; 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 + <table:table-column table:style-name=\'Table2.E1.1\'/>\n + <table:table-column table:style-name=\'Table2.E1.2\'/>\n + <table:table-row table:style-name=\'Table2.E1.1\'>\n + <table:table-cell table:style-name=\'Table2.E1.1.2\' office:value-type=\'string\' tal:define=\'orig_string string:Payment; 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=\'Table_20_Heading\'><span tal:replace=\'orig_message\'/>:</text:p>\n <text:p text:style-name=\'Table_20_Heading\' 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=\'Tableau2.E1.2.2\' office:value-type=\'string\'>\n + <table:table-cell table:style-name=\'Table2.E1.2.2\' office:value-type=\'string\'>\n <text:p text:style-name=\'Table_20_Contents\' tal:content=\'python:data_dict["payment_condition"]\'>60 days</text:p>\n </table:table-cell>\n </table:table-row>\n - <table:table-row table:style-name=\'Tableau2.E1.1\'>\n - <table:table-cell table:style-name=\'Tableau2.E1.1.2\' office:value-type=\'string\' tal:define=\'orig_string string:Delivery Mode; 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 + <table:table-row table:style-name=\'Table2.E1.1\'>\n + <table:table-cell table:style-name=\'Table2.E1.1.2\' office:value-type=\'string\' tal:define=\'orig_string string:Delivery Mode; 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=\'Table_20_Heading\'><span tal:replace=\'orig_message\'/>:</text:p>\n <text:p text:style-name=\'Table_20_Heading\' 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=\'Tableau2.E1.2.2\' office:value-type=\'string\'>\n + <table:table-cell table:style-name=\'Table2.E1.2.2\' office:value-type=\'string\'>\n <text:p text:style-name=\'Table_20_Contents\' tal:content=\'python:data_dict["delivery_mode"]\'>del mode</text:p>\n </table:table-cell>\n </table:table-row>\n - <table:table-row table:style-name=\'Tableau2.E1.1\'>\n - <table:table-cell table:style-name=\'Tableau2.E1.1.2\' office:value-type=\'string\' tal:define=\'orig_string string:Incoterm; 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 + <table:table-row table:style-name=\'Table2.E1.1\'>\n + <table:table-cell table:style-name=\'Table2.E1.1.2\' office:value-type=\'string\' tal:define=\'orig_string string:Incoterm; 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=\'Table_20_Heading\'><span tal:replace=\'orig_message\'/>:</text:p>\n <text:p text:style-name=\'Table_20_Heading\' 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=\'Tableau2.E1.2.2\' office:value-type=\'string\'>\n + <table:table-cell table:style-name=\'Table2.E1.2.2\' office:value-type=\'string\'>\n <text:p text:style-name=\'Table_20_Contents\' tal:content=\'python:data_dict["incoterm"]\'>incoterm</text:p>\n </table:table-cell>\n </table:table-row>\n @@ -437,7 +710,8 @@ AAA=</string> </value> </table:table-cell>\n </table:table-row>\n </table:table>\n - <text:p text:style-name=\'P1\'/>\n + <text:p text:style-name="P4"/>\n + <text:p text:style-name="P4"/>\n </table:table-cell>\n <table:covered-table-cell/>\n <table:covered-table-cell/>\n @@ -449,282 +723,405 @@ AAA=</string> </value> <table:covered-table-cell/>\n </table:table-row>\n <table:table-row>\n - <table:table-cell table:style-name=\'Tableau1.A2\' office:value-type=\'string\' tal:define=\'orig_string string:Line; 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 + <table:table-cell table:style-name=\'Table1.A2\' office:value-type=\'string\' tal:define=\'orig_string string:Line; 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_20_Left\'><span tal:replace=\'orig_message\'/></text:p>\n <text:p text:style-name=\'Item_20_Table_20_Title_20_Left\' 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.A2\' office:value-type=\'string\' tal:define=\'orig_string string:Your Item No.; 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 + <table:table-cell table:style-name=\'Table1.A2\' office:value-type=\'string\' tal:define=\'orig_string string:Your Item No.; 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_20_Left\'><span tal:replace=\'orig_message\'/></text:p>\n <text:p text:style-name=\'Item_20_Table_20_Title_20_Left\' 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.A2\' office:value-type=\'string\' tal:define=\'orig_string string:Our Item No.; 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 + <table:table-cell table:style-name=\'Table1.A2\' office:value-type=\'string\' tal:define=\'orig_string string:Our Item No.; 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_20_Left\'><span tal:replace=\'orig_message\'/></text:p>\n <text:p text:style-name=\'Item_20_Table_20_Title_20_Left\' 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.A2\' office:value-type=\'string\' tal:define=\'orig_string string:Description; 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 + <table:table-cell table:style-name=\'Table1.A2\' office:value-type=\'string\' tal:define=\'orig_string string:Description; 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_20_Left\'><span tal:replace=\'orig_message\'/></text:p>\n <text:p text:style-name=\'Item_20_Table_20_Title_20_Left\' 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.A2\' office:value-type=\'string\' tal:define=\'orig_string string:Quantity; 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 + <table:table-cell table:style-name=\'Table1.A2\' office:value-type=\'string\' tal:define=\'orig_string string:Quantity; 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_20_Left\'><span tal:replace=\'orig_message\'/></text:p>\n <text:p text:style-name=\'Item_20_Table_20_Title_20_Left\' 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.A2\' office:value-type=\'string\' tal:define=\'orig_string string:Unit; 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 + <table:table-cell table:style-name=\'Table1.A2\' office:value-type=\'string\' tal:define=\'orig_string string:Unit; 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_20_Left\'><span tal:replace=\'orig_message\'/></text:p>\n <text:p text:style-name=\'Item_20_Table_20_Title_20_Left\' 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.A2\' office:value-type=\'string\' tal:define=\'orig_string string:Unit Price; 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 + <table:table-cell table:style-name=\'Table1.A2\' office:value-type=\'string\' tal:define=\'orig_string string:Vat Code; 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_20_Left\'><span tal:replace=\'orig_message\'/></text:p>\n <text:p text:style-name=\'Item_20_Table_20_Title_20_Left\' 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.A2\' office:value-type=\'string\' tal:define=\'orig_string string:Total Price; 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 + <table:table-cell table:style-name=\'Table1.A2\' office:value-type=\'string\' tal:define=\'orig_string string:Unit Price; 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_20_Left\'><span tal:replace=\'orig_message\'/></text:p>\n + <text:p text:style-name=\'Item_20_Table_20_Title_20_Left\' 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=\'Table1.A2\' office:value-type=\'string\' tal:define=\'orig_string string:Total Price; 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_20_Left\'><span tal:replace=\'orig_message\'/></text:p>\n <text:p text:style-name=\'Item_20_Table_20_Title_20_Left\' tal:condition=\'python:translated_message != orig_message\'><span tal:replace=\'translated_message\'/></text:p>\n </table:table-cell>\n </table:table-row>\n </table:table-header-rows>\n - <table:table-row table:style-name=\'Tableau1.3\' tal:repeat=\'line_dict python:data_dict["line_list"]\'>\n - <div tal:omit-tag=\'\' tal:define=\'style_name python:line_dict["style_name"];\n - left_style_name python:line_dict["left_style_name"];\n - right_style_name python:line_dict["right_style_name"]\'>\n - <table:table-cell table:style-name=\'Tableau1.A3\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\' tal:content=\'python:line_dict["index"]\' tal:attributes=\'text:style-name left_style_name\'>1</text:p>\n - </table:table-cell>\n - <table:table-cell table:style-name=\'Tableau1.A3\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'\n - tal:content=\'python:line_dict["source_reference"]\'\n - tal:attributes=\'text:style-name style_name\'>source_ref</text:p>\n - </table:table-cell>\n - <table:table-cell table:style-name=\'Tableau1.A3\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'\n - tal:content=\'python:line_dict["reference"]\'\n - tal:attributes=\'text:style-name style_name\'>ref</text:p>\n - </table:table-cell>\n - <table:table-cell table:style-name=\'Tableau1.A3\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\' tal:attributes="text:style-name left_style_name"><tal:block tal:repeat="line line_dict/description"><tal:block\n - tal:replace="line"/><text:line-break tal:condition="not:repeat/line/end"/></tal:block></text:p>\n - </table:table-cell>\n - <table:table-cell table:style-name=\'Tableau1.A3\'\n - office:value-type=\'float\'\n - tal:condition="python: line_dict[\'total_quantity\'] != \'\'"\n - tal:attributes=\'office:value line_dict/total_quantity\'> \n - <text:p text:style-name=\'Table_20_Contents\'\n - tal:content="python: quantity_renderer(line_dict[\'total_quantity\'])"\n - tal:attributes=\'text:style-name right_style_name\'>qty</text:p>\n - </table:table-cell>\n - <table:table-cell table:style-name=\'Tableau1.A3\'\n - office:value-type=\'string\'\n - tal:condition="python: line_dict[\'total_quantity\'] == \'\'"> \n - <text:p text:style-name=\'Table_20_Contents\'/>\n - </table:table-cell>\n - <table:table-cell table:style-name=\'Tableau1.A3\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'\n - tal:content=\'python:line_dict["quantity_unit"]\'\n - tal:attributes=\'text:style-name style_name\'>qty_u</text:p>\n - </table:table-cell>\n - <table:table-cell table:style-name=\'Tableau1.A3\'\n - tal:condition="python: line_dict[\'base_price\'] != \'\'"\n - office:value-type=\'float\'\n - tal:attributes="office:value line_dict/base_price">\n - <text:p text:style-name=\'Table_20_Contents\'\n - tal:content="python: price_renderer(line_dict[\'base_price\'])"\n - tal:attributes=\'text:style-name right_style_name\'>base_price</text:p>\n - </table:table-cell>\n - <table:table-cell table:style-name=\'Tableau1.A3\'\n - office:value-type=\'string\'\n - tal:condition="python: line_dict[\'base_price\'] == \'\'"> \n - <text:p text:style-name=\'Table_20_Contents\'/>\n - </table:table-cell>\n - <table:table-cell table:style-name=\'Tableau1.A3\'\n - tal:condition="python: line_dict[\'total_price\'] != \'\'"\n - office:value-type=\'float\'\n - tal:attributes=\'office:value line_dict/total_price\'>\n - <text:p text:style-name=\'Table_20_Contents\'\n - tal:content="python: price_renderer(line_dict[\'total_price\'])"\n - tal:attributes=\'text:style-name right_style_name\'>total_price</text:p>\n - </table:table-cell>\n - <table:table-cell table:style-name=\'Tableau1.A3\'\n - office:value-type=\'string\'\n - tal:condition="python: line_dict[\'total_price\'] == \'\'"> \n - <text:p text:style-name=\'Table_20_Contents\'/>\n - </table:table-cell>\n - </div>\n - </table:table-row>\n - <table:table-row table:style-name=\'Tableau1.5\'>\n - <table:table-cell table:style-name=\'Tableau1.A5\'\n - table:number-columns-spanned=\'9\' office:value-type=\'string\'>\n - <table:table table:style-name=\'Tableau3\' table:name=\'Tableau3\'>\n - <table:table-column table:style-name=\'Tableau3.A\'/>\n - <table:table-column table:style-name=\'Tableau3.B\'/>\n - <table:table-column table:style-name=\'Tableau3.C\'/>\n - <table:table-column table:style-name=\'Tableau3.D\'/>\n - <table:table-column table:style-name=\'Tableau3.E\'/>\n - <table:table-row table:style-name=\'Tableau3.1\'>\n - <table:table-cell table:style-name=\'Tableau3.A1\' 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.A1\' 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.A1\' 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.A1\' 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.A1\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n + <tal:block tal:define="global list_number python: 0">\n + <table:table-row table:style-name=\'Table1.3\' tal:repeat=\'line_dict python:data_dict["line_not_vat"]\'>\n + <tal:block tal:omit-tag=\'\' tal:define=\'style_name python:line_dict["style_name"];\n + left_style_name python:line_dict["left_style_name"];\n + right_style_name python:line_dict["right_style_name"];\n + global list_number python: list_number + 1\'>\n + <table:table-cell table:style-name=\'Table1.A3\' office:value-type=\'string\'>\n + <text:p text:style-name=\'Table_20_Contents_20_Left\' tal:content= \'list_number\' tal:attributes=\'text:style-name left_style_name\'>100</text:p>\n + </table:table-cell>\n + <table:table-cell table:style-name=\'Table1.A3\' office:value-type=\'string\'>\n + <text:p text:style-name=\'Table_20_Contents\'\n + tal:content=\'python:line_dict["source_reference"]\'\n + tal:attributes=\'text:style-name style_name\'>source_ref</text:p>\n + </table:table-cell>\n + <table:table-cell table:style-name=\'Table1.A3\' office:value-type=\'string\'>\n + <text:p text:style-name=\'Table_20_Contents\'\n + tal:content=\'python:line_dict["reference"]\'\n + tal:attributes=\'text:style-name style_name\'>ref</text:p>\n + </table:table-cell>\n + <table:table-cell table:style-name=\'Table1.A3\' office:value-type=\'string\'>\n + <text:p text:style-name=\'Table_20_Contents_20_Left\' tal:attributes="text:style-name left_style_name"><tal:block tal:repeat="line line_dict/description"><tal:block\n + tal:replace="line"/><text:line-break tal:condition="not:repeat/line/end"/></tal:block></text:p>\n + </table:table-cell>\n + <table:table-cell table:style-name=\'Table1.A3\'\n + office:value-type=\'float\'\n + tal:condition="python: line_dict[\'total_quantity\'] != \'\'"\n + tal:attributes=\'office:value line_dict/total_quantity\'> \n + <text:p text:style-name=\'Table_20_Heading\'\n + tal:content="python: quantity_renderer(line_dict[\'total_quantity\'])">qty</text:p>\n + </table:table-cell>\n + <table:table-cell table:style-name=\'Table1.A3\'\n + office:value-type=\'string\'\n + tal:condition="python: line_dict[\'total_quantity\'] == \'\'"> \n + <text:p text:style-name=\'Table_20_Heading\'/>\n + </table:table-cell>\n + <table:table-cell table:style-name=\'Table1.A3\' office:value-type=\'string\'>\n + <text:p text:style-name=\'Table_20_Heading\'\n + tal:content=\'python:line_dict["quantity_unit"]\'>qty_u</text:p>\n + </table:table-cell>\n + <table:table-cell table:style-name=\'Table1.A3\'\n + tal:condition="python: line_dict[\'tax_number\'] != \'\'"\n + office:value-type=\'float\'\n + tal:attributes="office:value line_dict/base_price">\n + <text:p text:style-name=\'P7\'\n + tal:content="python: line_dict[\'tax_number\']">base_price</text:p>\n + </table:table-cell>\n + <table:table-cell table:style-name=\'Table1.A3\'\n + office:value-type=\'string\'\n + tal:condition="python: line_dict[\'tax_number\'] == \'\'"> \n + <text:p text:style-name=\'P7\'/>\n + </table:table-cell>\n + <table:table-cell table:style-name=\'Table1.A3\'\n + tal:condition="python: line_dict[\'base_price\'] != \'\'"\n + office:value-type=\'float\'\n + tal:attributes="office:value line_dict/base_price">\n + <text:p text:style-name=\'Table_20_Heading\'\n + tal:content="python: price_renderer(line_dict[\'base_price\'])">base_price</text:p>\n + </table:table-cell>\n + <table:table-cell table:style-name=\'Table1.A3\'\n + office:value-type=\'string\'\n + tal:condition="python: line_dict[\'base_price\'] == \'\'"> \n + <text:p text:style-name=\'Table_20_Heading\'/>\n + </table:table-cell>\n + <table:table-cell table:style-name=\'Table1.A3\'\n + tal:condition="python: line_dict[\'total_price\'] != \'\'"\n + office:value-type=\'float\'\n + tal:attributes=\'office:value line_dict/total_price\'>\n + <text:p text:style-name=\'Table_20_Heading\'\n + tal:content="python: price_renderer(line_dict[\'total_price\'])">total_price</text:p>\n + </table:table-cell>\n + <table:table-cell table:style-name=\'Table1.A3\'\n + office:value-type=\'string\'\n + tal:condition="python: line_dict[\'total_price\'] == \'\'"> \n + <text:p text:style-name=\'Table_20_Heading\'/>\n + </table:table-cell>\n + </tal:block>\n + </table:table-row>\n + </tal:block>\n + <table:table-row>\n + <table:table-cell table:number-columns-spanned="9" office:value-type="string">\n + <table:table table:name="Table3" table:style-name="Table3">\n + <table:table-column table:style-name="Table3.A"/>\n + <table:table-column table:style-name="Table3.B"/>\n + <table:table-column table:style-name="Table3.C"/>\n + <table:table-column table:style-name="Table3.D"/>\n + <table:table-column table:style-name="Table3.E"/>\n + <table:table-column table:style-name="Table3.F"/>\n + <table:table-column table:style-name="Table3.G"/>\n + <table:table-row table:style-name="Table3.1">\n + <table:table-cell table:style-name="Table3.A1" office:value-type="string">\n + <text:p text:style-name="Table_20_Contents"/>\n + </table:table-cell>\n + <table:table-cell table:style-name="Table3.A1" office:value-type="string">\n + <text:p text:style-name="Table_20_Contents"/>\n + </table:table-cell>\n + <table:table-cell table:style-name="Table3.A1" office:value-type="string">\n + <text:p text:style-name="Table_20_Contents"/>\n + </table:table-cell>\n + <table:table-cell table:style-name="Table3.A1" table:number-columns-spanned="3" office:value-type="string">\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:table-cell table:style-name="Table3.A1" 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.2\'>\n - <table:table-cell table:style-name=\'Tableau3.A2\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n + <table:table-row table:style-name="Table3.2">\n + <table:table-cell table:style-name="Table3.A2" 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.A2\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n + <table:table-cell table:style-name="Table3.A2" 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.A1\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n + <table:table-cell table:style-name="Table3.A1" 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.D2\' office:value-type=\'string\' tal:define=\'orig_string string:Total Excluding VAT; 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 + <table:table-cell table:style-name="Table3.D2" table:number-columns-spanned="3" office:value-type=\'string\' tal:define=\'orig_string string:Total Excluding VAT; 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=\'Table_20_Heading\'><span tal:replace=\'orig_message\'/>:</text:p>\n - <text:p text:style-name=\'Table_20_Heading\' tal:condition=\'python:translated_message != orig_message\'><span tal:replace=\'translated_message\'/>:</text:p>\n + <text:p text:style-name=\'Table_20_Heading\' 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=\'Tableau3.E2\'\n - office:value-type=\'float\'\n - tal:attributes=\'office:value data_dict/total_price_novat\'>\n + <table:covered-table-cell/>\n + <table:covered-table-cell/>\n + <table:table-cell table:style-name="Table3.G2" office:value-type="string">\n <text:p text:style-name=\'Table_20_Contents_20_Right\' tal:content=\'python: price_renderer(data_dict["total_price_novat"])\'>800.000,00</text:p>\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.A2\' 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.A2\' 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.A1\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n - </table:table-cell>\n - <tal:block tal:define="global total_vat_list python: []">\n - <table:table-cell table:style-name=\'Tableau3.D3\'\n - office:value-type=\'string\'>\n - <tal:block tal:repeat="vat python: data_dict[\'vat_list\']">\n - <text:p text:style-name=\'Table_20_Heading\'><span\n - tal:replace=\'vat/getResourceTitle\'/>:</text:p>\n - </tal:block>\n - <text:p text:style-name=\'Table_20_Heading\'\n - tal:define=\'orig_string string:TAX; 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")\'><span tal:replace="python: \'Total %s\' % (translated_message)"/>:</text:p>\n + <table:table-row table:style-name="Table3.3">\n + <table:table-cell table:style-name="Table3.A2" office:value-type="string">\n + <text:p text:style-name="Table_20_Contents"/>\n + </table:table-cell>\n + <table:table-cell table:style-name="Table3.A2" office:value-type="string">\n + <text:p text:style-name="Table_20_Contents"/>\n + </table:table-cell>\n + <table:table-cell table:style-name="Table3.A1" office:value-type="string">\n + <text:p text:style-name="Table_20_Contents"/>\n + </table:table-cell>\n + <table:table-cell table:style-name="Table3.A1" table:number-columns-spanned="3" office:value-type="string">\n + <text:p text:style-name="Table_20_Heading"/>\n + </table:table-cell>\n + <table:covered-table-cell/>\n + <table:covered-table-cell/>\n + <table:table-cell table:style-name="Table3.A1" office:value-type="string">\n + <text:p text:style-name="Table_20_Contents_20_Right"/>\n + </table:table-cell>\n + </table:table-row>\n + <table:table-row table:style-name="Table3.4">\n + <table:table-cell table:style-name="Table3.A2" office:value-type="string">\n + <text:p text:style-name="Table_20_Contents"/>\n + </table:table-cell>\n + <table:table-cell table:style-name="Table3.A2" office:value-type="string">\n + <text:p text:style-name="Table_20_Contents"/>\n + </table:table-cell>\n + <table:table-cell table:style-name="Table3.A1" office:value-type="string">\n + <text:p text:style-name="Table_20_Contents"/>\n + </table:table-cell>\n + <table:table-cell table:style-name=\'Table3.D4\' office:value-type=\'string\' tal:define=\'orig_string string:Vat Code; 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=\'P9\'><span tal:replace=\'orig_message\'/></text:p>\n + <text:p text:style-name=\'P9\' 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=\'Table3.D4\' office:value-type=\'string\' tal:define=\'orig_string string:Amount; 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=\'P8\'><span tal:replace=\'orig_message\'/></text:p>\n + <text:p text:style-name=\'P8\' 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=\'Table3.D4\' office:value-type=\'string\' tal:define=\'orig_string string:Rate; 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=\'P8\'><span tal:replace=\'orig_message\'/></text:p>\n + <text:p text:style-name=\'P8\' 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=\'Table3.D4\' office:value-type=\'string\' tal:define=\'orig_string string:Vat Price; 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=\'P8\'><span tal:replace=\'orig_message\'/></text:p>\n + <text:p text:style-name=\'P8\' tal:condition=\'python:translated_message != orig_message\'><span tal:replace=\'translated_message\'/></text:p>\n + </table:table-cell>\n + </table:table-row>\n + <tal:block tal:repeat=\'line_vat_dict python:data_dict["line_vat"]\'>\n + <table:table-row table:style-name=\'Table3.5\'>\n + <table:table-cell table:style-name=\'Table3.A2\' 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.E3\'\n - office:value-type=\'float\'\n - tal:attributes="office:value python: sum(total_vat_list)">\n - <tal:block tal:repeat="vat python: data_dict[\'vat_list\']">\n - <text:p tal:define="vat_price python: vat.getTotalPrice();\n - dummy python: total_vat_list.append(vat_price)"\n - text:style-name=\'Table_20_Contents_20_Right\'\n - tal:content="python: price_renderer(vat_price)">2000</text:p>\n - </tal:block>\n - <text:p text:style-name=\'Table_20_Contents_20_Right\'\n - tal:content="python: price_renderer(sum(total_vat_list))">2000</text:p>\n + <table:table-cell table:style-name=\'Table3.A2\' office:value-type=\'string\'>\n + <text:p text:style-name=\'Table_20_Contents\'/>\n </table:table-cell>\n - </tal:block>\n - </table:table-row>\n - <table:table-row table:style-name=\'Tableau3.2\'>\n - <table:table-cell table:style-name=\'Tableau3.A2\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n + <table:table-cell table:style-name=\'Table3.A1\' office:value-type=\'string\'>\n + <text:p text:style-name=\'Table_20_Contents\'/>\n + </table:table-cell>\n + <tal:block tal:define="global ">\n + <table:table-cell table:style-name=\'Table3.D5\'\n + tal:condition="python: line_vat_dict[\'vat_number\'] != \'\'"\n + office:value-type=\'float\'\n + tal:attributes=\'office:value line_vat_dict/vat_number\'>\n + <text:p text:style-name="P6" tal:content="python: line_vat_dict[\'vat_number\']">:</text:p>\n + </table:table-cell>\n + <table:table-cell table:style-name=\'Table3.D5\'\n + office:value-type=\'string\'\n + tal:condition="python: line_vat_dict[\'vat_number\'] == \'\'"> \n + <text:p text:style-name=\'P6\'/>\n + </table:table-cell>\n + <table:table-cell table:style-name=\'Table3.E5\'\n + tal:condition="python: line_vat_dict[\'total_quantity\'] != \'\'"\n + office:value-type=\'float\'\n + tal:attributes=\'office:value line_vat_dict/total_quantity\'> \n + <text:p text:style-name=\'Table_20_Heading\' tal:content="python: quantity_renderer(line_vat_dict[\'total_quantity\'])">qty</text:p>\n + </table:table-cell>\n + <table:table-cell table:style-name=\'Table3.E5\'\n + office:value-type=\'string\'\n + tal:condition="python: line_vat_dict[\'total_quantity\'] == \'\'"> \n + <text:p text:style-name=\'Table_20_Heading\'/>\n + </table:table-cell>\n + <table:table-cell table:style-name=\'Table3.F5\'\n + tal:condition="python: line_vat_dict[\'base_price\'] != \'\'"\n + office:value-type=\'float\'\n + tal:attributes=\'office:value line_vat_dict/base_price\'>\n + <text:p text:style-name=\'Table_20_Heading\' tal:content="python: line_vat_dict[\'base_price\']">:</text:p>\n + </table:table-cell> \n + <table:table-cell table:style-name=\'Table3.F5\'\n + office:value-type=\'string\'\n + tal:condition="python: line_vat_dict[\'base_price\'] == \'\'"> \n + <text:p text:style-name=\'Table_20_Heading\'/>\n + </table:table-cell> \n + <table:table-cell table:style-name=\'Table3.G5\'\n + tal:condition="python: line_vat_dict[\'total_price\'] != \'\'"\n + office:value-type=\'float\'\n + tal:attributes=\'office:value line_vat_dict/total_price\'>\n + <text:p text:style-name=\'Table_20_Heading\' tal:content="python: line_vat_dict[\'total_price\']">:</text:p>\n + </table:table-cell> \n + <table:table-cell table:style-name=\'Table3.G5\'\n + office:value-type=\'string\'\n + tal:condition="python: line_vat_dict[\'total_price\'] == \'\'"> \n + <text:p text:style-name=\'Table_20_Heading\'/>\n + </table:table-cell> \n + </tal:block>\n + </table:table-row>\n + </tal:block>\n + <table:table-row table:style-name="Table3.5">\n + <table:table-cell table:style-name="Table3.A2" 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.A2\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n + <table:table-cell table:style-name="Table3.A2" 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.A1\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n + <table:table-cell table:style-name="Table3.A1" 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.D3\' office:value-type=\'string\' tal:define=\'orig_string string:Total Including VAT; 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=\'Table_20_Heading\'><span tal:replace=\'orig_message\'/>:</text:p>\n - <text:p text:style-name=\'Table_20_Heading\' tal:condition=\'python:translated_message != orig_message\'><span tal:replace=\'translated_message\'/>:</text:p>\n + <table:table-cell table:style-name="Table3.A1" office:value-type="string">\n + <text:p text:style-name="Table_20_Heading"/>\n + </table:table-cell>\n + <table:table-cell table:style-name="Table3.E8">\n + <text:p text:style-name="Table_20_Heading"/>\n + </table:table-cell>\n + <table:table-cell table:style-name="Table3.A1" office:value-type="string">\n + <text:p text:style-name="Table_20_Heading"/>\n + </table:table-cell>\n + <table:table-cell table:style-name="Table3.G8">\n + <text:p text:style-name="Table_20_Contents_20_Right"/>\n + </table:table-cell>\n + </table:table-row>\n + <table:table-row table:style-name="Table3.2">\n + <table:table-cell table:style-name="Table3.A2" office:value-type="string">\n + <text:p text:style-name="Table_20_Contents"/>\n + </table:table-cell>\n + <table:table-cell table:style-name="Table3.A2" 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.E3\' office:value-type=\'float\' tal:attributes="office:value python:data_dict[\'total_price_novat\'] + sum(total_vat_list)">\n - <!-- TODO: use getTotalNetPrice after supporting discount ? -->\n - <text:p text:style-name=\'Table_20_Contents_20_Right\'\n - tal:content=\'python: price_renderer(data_dict["total_price_novat"] + sum(total_vat_list))\'>12345</text:p>\n + <table:table-cell table:style-name="Table3.A1" office:value-type="string">\n + <text:p text:style-name="Table_20_Contents"/>\n </table:table-cell>\n + <table:table-cell table:style-name="Table3.D2" table:number-columns-spanned="3" office:value-type=\'string\' tal:define=\'orig_string string:Total Including VAT; 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=\'Table_20_Heading\'><span tal:replace=\'orig_message\'/> :</text:p>\n + <text:p text:style-name=\'Table_20_Heading\' tal:condition=\'python:translated_message != orig_message\'><span tal:replace=\'translated_message\'/>:</text:p> \n + </table:table-cell>\n + <table:covered-table-cell/>\n + <table:covered-table-cell/>\n + <table:table-cell table:style-name=\'Table3.G2\'\n + tal:condition="python: data_dict[\'total_price\'] != \'\'"\n + office:value-type=\'float\'\n + tal:attributes=\'office:value data_dict/total_price\'>\n + <text:p text:style-name=\'Table_20_Contents_20_Right\' tal:content="python: data_dict[\'total_price\']">:</text:p>\n + </table:table-cell> \n + <table:table-cell table:style-name=\'Table3.G2\'\n + office:value-type=\'string\'\n + tal:condition="python: data_dict[\'total_price\'] == \'\'"> \n + <text:p text:style-name=\'Table_20_Contents_20_Right\'/>\n + </table:table-cell> \n </table:table-row>\n \n <!-- Bank Account information -->\n \n - <table:table-row table:style-name="Tableau3.5" tal:condition="python: \'bank_name\' in data_dict">\n - <table:table-cell table:style-name="Tableau3.A5" office:value-type="string">\n + <table:table-row table:style-name="Table3.5" tal:condition="python: \'bank_name\' in data_dict">\n + <table:table-cell table:style-name="Table3.A5" office:value-type="string">\n <text:p text:style-name="Table_20_Heading">Bank:</text:p><!-- XXX -->\n </table:table-cell>\n - <table:table-cell table:style-name="Tableau3.B5" office:value-type="string">\n + <table:table-cell table:style-name="Table3.B5" office:value-type="string">\n <text:p text:style-name="P6" tal:content="data_dict/bank_name">My Bank Name</text:p>\n <text:p text:style-name="Table_20_Contents_20_Left" tal:content="data_dict/bank_address"\n tal:condition="data_dict/bank_address">bank addess</text:p>\n <text:p text:style-name="Table_20_Contents_20_Left" tal:content="data_dict/bank_account_reference">bank account reference</text:p>\n <text:p text:style-name="Table_20_Contents_20_Left" tal:content="data_dict/bank_account_description">bank account description</text:p>\n </table:table-cell>\n - <table:table-cell table:style-name="Tableau3.A1" office:value-type="string">\n + <table:table-cell table:style-name="Table3.A1" 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.A1" office:value-type="string">\n + <table:table-cell table:style-name="Table3.A1" 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.A1" office:value-type="string">\n + <table:table-cell table:style-name="Table3.A1" office:value-type="string">\n <text:p text:style-name="Table_20_Contents"/>\n </table:table-cell>\n </table:table-row>\n \n -\n -\n - <table:table-row table:style-name=\'Tableau3.1\'>\n - <table:table-cell table:style-name=\'Tableau3.A1\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n + <table:table-row table:style-name="Table3.1">\n + <table:table-cell table:style-name="Table3.A1" 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.A1\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n + <table:table-cell table:style-name="Table3.A1" 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.A1\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n + <table:table-cell table:style-name="Table3.A1" 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.A1\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n + <table:table-cell table:style-name="Table3.A1" table:number-columns-spanned="3" 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.A1\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n + <table:covered-table-cell/>\n + <table:covered-table-cell/>\n + <table:table-cell table:style-name="Table3.A1" 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\'>\n - <table:table-cell table:style-name=\'Tableau3.A7\' 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 + <table:table-row table:style-name="Table3.11">\n + <table:table-cell table:style-name="Table3.A11" 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\'/><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.B7\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n + <table:table-cell table:style-name="Table3.B11" 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.B7\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n + <table:table-cell table:style-name="Table3.C11" 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.B7\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n + <table:table-cell table:style-name="Table3.D11" table:number-columns-spanned="3" 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.E7\' office:value-type=\'string\'>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n + <table:covered-table-cell/>\n + <table:covered-table-cell/>\n + <table:table-cell table:style-name="Table3.G11" 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.8\'\n - tal:attributes="table:style-name python: data_dict[\'description\'] and \'DynamicTableau3.8\' or \'EmptyTableau3.8\'">\n - <table:table-cell table:style-name=\'Tableau3.A8\' 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 + <table:table-row table:style-name="Table3.A12" tal:attributes="table:style-name python: data_dict[\'description\'] and \'DynamicTable3.8\' or \'EmptyTable3.8\'">\n + <table:table-cell table:style-name="Table3.A12" table:number-columns-spanned="7" office:value-type="string">\n + <text:p text:style-name=\'P2\'><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 + </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:covered-table-cell/>\n </table:table-row>\n </table:table>\n - <text:p text:style-name=\'Table_20_Contents\'/>\n + <text:p text:style-name="Table_20_Contents"/>\n </table:table-cell>\n <table:covered-table-cell/>\n <table:covered-table-cell/>\n @@ -736,17 +1133,16 @@ AAA=</string> </value> <table:covered-table-cell/>\n </table:table-row>\n </table:table>\n - <text:p text:style-name=\'P4\'/>\n + <text:p text:style-name="P3"/>\n </office:text>\n </office:body>\n -</office:document-content>\n - +</office:document-content> ]]></unicode> </value> </item> <item> <key> <string>content_type</string> </key> - <value> <string>application/vnd.oasis.opendocument.text</string> </value> + <value> <string>text/xml</string> </value> </item> <item> <key> <string>expand</string> </key> @@ -778,7 +1174,7 @@ AAA=</string> </value> </item> <item> <key> <string>title</string> </key> - <value> <string></string> </value> + <value> <unicode></unicode> </value> </item> </dictionary> </pickle> diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/Base_viewTradeFieldLibrary.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/Base_viewTradeFieldLibrary.xml old mode 100644 new mode 100755 index 3e1a77ad56..790f4e504f --- a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/Base_viewTradeFieldLibrary.xml +++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/Base_viewTradeFieldLibrary.xml @@ -303,6 +303,7 @@ <string>my_view_mode_preferred_internal_use_list</string> <string>my_view_mode_listbox_read_only_effective_date</string> <string>my_view_mode_listbox_read_only_expiration_date</string> + <string>my_view_mode_preferred_tax_use_list</string> </list> </value> </item> diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/Base_viewTradeFieldLibrary/my_view_mode_preferred_tax_use_list.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/Base_viewTradeFieldLibrary/my_view_mode_preferred_tax_use_list.xml new file mode 100644 index 0000000000..18afc20e63 --- /dev/null +++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/Base_viewTradeFieldLibrary/my_view_mode_preferred_tax_use_list.xml @@ -0,0 +1,122 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="ProxyField" module="Products.ERP5Form.ProxyField"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>delegated_list</string> </key> + <value> + <list> + <string>items</string> + <string>title</string> + </list> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>my_view_mode_preferred_tax_use_list</string> </value> + </item> + <item> + <key> <string>message_values</string> </key> + <value> + <dictionary> + <item> + <key> <string>external_validator_failed</string> </key> + <value> <string>The input failed the external validator.</string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>overrides</string> </key> + <value> + <dictionary> + <item> + <key> <string>field_id</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>form_id</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>target</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>tales</string> </key> + <value> + <dictionary> + <item> + <key> <string>field_id</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>form_id</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>items</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>target</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>values</string> </key> + <value> + <dictionary> + <item> + <key> <string>field_id</string> </key> + <value> <string>my_multi_list_field</string> </value> + </item> + <item> + <key> <string>form_id</string> </key> + <value> <string>Base_viewFieldLibrary</string> </value> + </item> + <item> + <key> <string>items</string> </key> + <value> + <list/> + </value> + </item> + <item> + <key> <string>target</string> </key> + <value> <string>Click to edit the target</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Tax Uses</string> </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="TALESMethod" module="Products.Formulator.TALESField"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_text</string> </key> + <value> <string>python: getattr(here.portal_categories.use, preferences.getPreference(\'preferred_category_child_item_list_method_id\', \'getCategoryChildCompactLogicalPathItemList\'))(base=1, local_sort_id=(\'int_index\', \'translated_title\'), checked_permission=\'View\')</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SystemPreference_viewTrade.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SystemPreference_viewTrade.xml index 84926dab59..7601673559 100644 --- a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SystemPreference_viewTrade.xml +++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SystemPreference_viewTrade.xml @@ -96,6 +96,7 @@ <string>my_preferred_supplier_role_list</string> <string>my_preferred_client_role_list</string> <string>my_preferred_trade_base_amount_list</string> + <string>my_preferred_tax_use_list</string> </list> </value> </item> diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SystemPreference_viewTrade/my_preferred_tax_use_list.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SystemPreference_viewTrade/my_preferred_tax_use_list.xml new file mode 100644 index 0000000000..34b103212c --- /dev/null +++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SystemPreference_viewTrade/my_preferred_tax_use_list.xml @@ -0,0 +1,90 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="ProxyField" module="Products.ERP5Form.ProxyField"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>delegated_list</string> </key> + <value> + <list/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>my_preferred_tax_use_list</string> </value> + </item> + <item> + <key> <string>message_values</string> </key> + <value> + <dictionary> + <item> + <key> <string>external_validator_failed</string> </key> + <value> <string>The input failed the external validator.</string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>overrides</string> </key> + <value> + <dictionary> + <item> + <key> <string>field_id</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>form_id</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>target</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>tales</string> </key> + <value> + <dictionary> + <item> + <key> <string>field_id</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>form_id</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>target</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>values</string> </key> + <value> + <dictionary> + <item> + <key> <string>field_id</string> </key> + <value> <string>my_view_mode_preferred_tax_use_list</string> </value> + </item> + <item> + <key> <string>form_id</string> </key> + <value> <string>Base_viewTradeFieldLibrary</string> </value> + </item> + <item> + <key> <string>target</string> </key> + <value> <string>Click to edit the target</string> </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/product/ERP5/bootstrap/erp5_property_sheets/PropertySheetTemplateItem/portal_property_sheets/TradePreference/preferred_tax_use_property.xml b/product/ERP5/bootstrap/erp5_property_sheets/PropertySheetTemplateItem/portal_property_sheets/TradePreference/preferred_tax_use_property.xml new file mode 100644 index 0000000000..a210d9b5db --- /dev/null +++ b/product/ERP5/bootstrap/erp5_property_sheets/PropertySheetTemplateItem/portal_property_sheets/TradePreference/preferred_tax_use_property.xml @@ -0,0 +1,44 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Standard Property" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>elementary_type/lines</string> + </tuple> + </value> + </item> + <item> + <key> <string>description</string> </key> + <value> <string>Uses of taxes</string> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>preferred_tax_use_property</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Standard Property</string> </value> + </item> + <item> + <key> <string>preference</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>property_default</string> </key> + <value> <string>python: []</string> </value> + </item> + <item> + <key> <string>write_permission</string> </key> + <value> <string>Manage properties</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/product/ERP5/tests/testInvoice.py b/product/ERP5/tests/testInvoice.py index b6610cad2b..ddf3c6540d 100644 --- a/product/ERP5/tests/testInvoice.py +++ b/product/ERP5/tests/testInvoice.py @@ -30,6 +30,8 @@ Tests invoice creation from simulation. """ +import sys, zipfile, xml.dom.minidom +import StringIO from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase from Products.ERP5Type.tests.utils import FileUpload, DummyMailHost @@ -1574,12 +1576,15 @@ class TestInvoice(TestInvoiceMixin): self.assertEquals(DateTime(2002, 03, 04), invoice_transaction_movement.getStopDate()) - def test_Invoice_viewAsODT(self): resource = self.portal.getDefaultModule( self.resource_portal_type).newContent( portal_type=self.resource_portal_type, title='Resource',) + resource_tax = self.portal.getDefaultModule( + self.resource_portal_type).newContent( + portal_type=self.resource_portal_type, + title='Resource Tax',) client = self.portal.organisation_module.newContent( portal_type='Organisation', title='Client') vendor = self.portal.organisation_module.newContent( @@ -1593,14 +1598,78 @@ class TestInvoice(TestInvoiceMixin): source_section_value=vendor, destination_value=client, destination_section_value=client) - line = invoice.newContent(portal_type=self.invoice_line_portal_type, + product_line1 = invoice.newContent(portal_type=self.invoice_line_portal_type, resource_value=resource, quantity=10, + base_contribution='tax1', price=3) + product_line2 = invoice.newContent(portal_type=self.invoice_line_portal_type, + resource_value=resource, + quantity=20, + base_contribution='tax1', + price=5) + product_line3 = invoice.newContent(portal_type=self.invoice_line_portal_type, + resource_value=resource, + quantity=60, + base_contribution='tax2', + price=5) + product_line4 = invoice.newContent(portal_type=self.invoice_line_portal_type, + resource_value=resource, + quantity=60, + price=3) + product_line5 = invoice.newContent(portal_type=self.invoice_line_portal_type, + resource_value=resource, + quantity=7, + price=20) + tax_line1 = invoice.newContent(portal_type=self.invoice_line_portal_type, + resource_value=resource_tax, + use='trade/tax', + base_contribution='tax1', + quantity=130, + price=0.2) + tax_line2 = invoice.newContent(portal_type=self.invoice_line_portal_type, + resource_value=resource_tax, + use='trade/tax', + base_contribution='tax2', + quantity=300, + price=0.05) + tax_line3 = invoice.newContent(portal_type=self.invoice_line_portal_type, + resource_value=resource_tax, + use='trade/tax', + base_contribution='tax3', + quantity=20, + price=0.1) invoice.confirm() self.tic() - odt = invoice.Invoice_viewAsODT() + import cStringIO + output = cStringIO.StringIO() + output.write(odt) + m = OpenDocumentTextFile(output) + text_content=m.toString().encode('ascii','replace') + if text_content.find('Resource Tax') != -1 : + self.fail('fail to delete the vat line in product line') + if text_content.find('Vat Code') == -1 : + self.fail('fail to add the vat code') + if text_content.find('Amount') == -1 : + self.fail('fail to add the amount for each tax') + if text_content.find('Rate') == -1 : + self.fail('fail to add the Rate for each tax') + tax1_product_total_price=str(10*3+20*5) + if text_content.find(tax1_product_total_price) == -1 : + self.fail('fail to get the total price of products which tax1') + tax2_product_total_price=str(60*5) + if text_content.find(tax2_product_total_price) == -1 : + self.fail('fail to get the total price of products which tax2') + no_tax_product_total_price=str(60*3+7*20) + if text_content.find(no_tax_product_total_price) == -1 : + self.fail('fail to get the total price of products which have no tax') + product_total_price_no_tax=str(10*3+20*5+60*5+60*3+7*20) + if text_content.find(product_total_price_no_tax) == -1 : + self.fail('fail to get the total price of the products without tax') + product_total_price=str(10*3+20*5+60*5+60*3+7*20+130*0.2+300*0.05+20*0.1) + if text_content.find(product_total_price) == -1 : + self.fail('fail to get the total price of the products with tax') from Products.ERP5OOo.tests.utils import Validator odf_validator = Validator() err_list = odf_validator.validate(odt) @@ -3502,6 +3571,28 @@ class TestPurchaseInvoice(TestInvoice, ERP5TypeTestCase): stepTic """ +class OpenDocumentTextFile : + def __init__ (self, filelikeobj) : + zip = zipfile.ZipFile(filelikeobj) + self.content = xml.dom.minidom.parseString(zip.read("content.xml")) + + def toString (self) : + """ Converts the document to a string. """ + buffer = u"" + for val in ["text:p", "text:h", "text:list"]: + for paragraph in self.content.getElementsByTagName(val) : + buffer += self.textToString(paragraph) + "\n" + return buffer + + def textToString(self, element) : + buffer = u"" + for node in element.childNodes : + if node.nodeType == xml.dom.Node.TEXT_NODE : + buffer += node.nodeValue + elif node.nodeType == xml.dom.Node.ELEMENT_NODE : + buffer += self.textToString(node) + return buffer + import unittest def test_suite(): suite = unittest.TestSuite() -- 2.30.9