Commit a094a992 authored by Jérome Perrin's avatar Jérome Perrin

ODS: update for libreoffice 7 compatibility with percentage

Now that default cloudooo is updated to LibreOffice 7, this revealed some
problems with percentage values in spreadsheet cells, it was apparently
working by chance on LibreOffice 5.

This improves erp5_ods_style to use `style:style` referencing a
`number:percentage-style` through their `style:data-style-name` attribute.

Because the same thing was missing for dates to follow the input order of
datetime fields, this is also handled at the same time.

We could do something similar to support all input styles of float fields,
so that we support `1 234.5`, `1.234,5` or `1,234.5`, but this is not done
this time.

See merge request !1861
parents 9e2642a7 d65dc312
...@@ -86,6 +86,22 @@ ...@@ -86,6 +86,22 @@
<number:number number:decimal-places="2" number:min-integer-digits="1"/> <number:number number:decimal-places="2" number:min-integer-digits="1"/>
<number:text>%</number:text> <number:text>%</number:text>
</number:percentage-style> </number:percentage-style>
<style:style style:name="Level1Percent" style:family="table-cell" style:parent-style-name="Level1" style:data-style-name="N11"/>
<style:style style:name="Level2Percent" style:family="table-cell" style:parent-style-name="Level2" style:data-style-name="N11"/>
<style:style style:name="Level3Percent" style:family="table-cell" style:parent-style-name="Level3" style:data-style-name="N11"/>
<style:style style:name="Level4Percent" style:family="table-cell" style:parent-style-name="Level4" style:data-style-name="N11"/>
<style:style style:name="Level1Cell1Percent" style:family="table-cell" style:parent-style-name="Level1Cell1" style:data-style-name="N11"/>
<style:style style:name="Level2Cell1Percent" style:family="table-cell" style:parent-style-name="Level2Cell1" style:data-style-name="N11"/>
<style:style style:name="Level3Cell1Percent" style:family="table-cell" style:parent-style-name="Level3Cell1" style:data-style-name="N11"/>
<style:style style:name="Level4Cell1Percent" style:family="table-cell" style:parent-style-name="Level4Cell1" style:data-style-name="N11"/>
<style:style style:name="Level2.1Percent" style:family="table-cell" style:parent-style-name="Level2.1" style:data-style-name="N11"/>
<style:style style:name="Level2.2Percent" style:family="table-cell" style:parent-style-name="Level2.2" style:data-style-name="N11"/>
<style:style style:name="Level2.3Percent" style:family="table-cell" style:parent-style-name="Level2.3" style:data-style-name="N11"/>
<style:style style:name="Level2.4Percent" style:family="table-cell" style:parent-style-name="Level2.4" style:data-style-name="N11"/>
<style:style style:name="Level2.5Percent" style:family="table-cell" style:parent-style-name="Level2.5" style:data-style-name="N11"/>
<style:style style:name="ce1" style:family="table-cell" style:parent-style-name="Default"> <style:style style:name="ce1" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties style:text-align-source="fix" style:repeat-content="false" style:vertical-align="middle"/> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false" style:vertical-align="middle"/>
<style:paragraph-properties fo:text-align="center"/> <style:paragraph-properties fo:text-align="center"/>
...@@ -285,7 +301,7 @@ ...@@ -285,7 +301,7 @@
<table:table-cell table:style-name="Level1" office:value-type="float" office:value="5" tal:attributes="office:value line/available_budget"> <table:table-cell table:style-name="Level1" office:value-type="float" office:value="5" tal:attributes="office:value line/available_budget">
<text:p>5</text:p> <text:p>5</text:p>
</table:table-cell> </table:table-cell>
<table:table-cell table:style-name="Level1" office:value-type="percentage" office:value="0.06" tal:attributes="office:value line/consumed_ratio"> <table:table-cell table:style-name="Level1Percent" office:value-type="percentage" office:value="0.06" tal:attributes="office:value line/consumed_ratio">
<text:p>6,00%</text:p> <text:p>6,00%</text:p>
</table:table-cell> </table:table-cell>
<table:table-cell table:number-columns-repeated="768"/> <table:table-cell table:number-columns-repeated="768"/>
...@@ -313,7 +329,7 @@ ...@@ -313,7 +329,7 @@
<table:table-cell table:style-name="ce18" office:value-type="float" office:value="5" tal:attributes="office:value line/available_budget; table:style-name style"> <table:table-cell table:style-name="ce18" office:value-type="float" office:value="5" tal:attributes="office:value line/available_budget; table:style-name style">
<text:p>5</text:p> <text:p>5</text:p>
</table:table-cell> </table:table-cell>
<table:table-cell table:style-name="ce23" office:value-type="percentage" office:value="0.06" tal:attributes="office:value line/consumed_ratio; table:style-name style"> <table:table-cell table:style-name="ce23" office:value-type="percentage" office:value="0.06" tal:attributes="office:value line/consumed_ratio; table:style-name string:${style}Percent">
<text:p>6,00%</text:p> <text:p>6,00%</text:p>
</table:table-cell> </table:table-cell>
<table:table-cell table:number-columns-repeated="768"/> <table:table-cell table:number-columns-repeated="768"/>
...@@ -345,7 +361,7 @@ ...@@ -345,7 +361,7 @@
<table:table-cell table:style-name="Level3" office:value-type="float" office:value="5" tal:attributes="office:value subline/available_budget"> <table:table-cell table:style-name="Level3" office:value-type="float" office:value="5" tal:attributes="office:value subline/available_budget">
<text:p>5</text:p> <text:p>5</text:p>
</table:table-cell> </table:table-cell>
<table:table-cell table:style-name="Level3" office:value-type="percentage" office:value="0.06" tal:attributes="office:value subline/consumed_ratio"> <table:table-cell table:style-name="Level3Percent" office:value-type="percentage" office:value="0.06" tal:attributes="office:value subline/consumed_ratio">
<text:p>6,00%</text:p> <text:p>6,00%</text:p>
</table:table-cell> </table:table-cell>
<table:table-cell table:number-columns-repeated="1016"/> <table:table-cell table:number-columns-repeated="1016"/>
...@@ -380,7 +396,7 @@ ...@@ -380,7 +396,7 @@
office:value="5" tal:attributes="office:value subsubline/available_budget"> office:value="5" tal:attributes="office:value subsubline/available_budget">
<text:p>5</text:p> <text:p>5</text:p>
</table:table-cell> </table:table-cell>
<table:table-cell table:style-name="Level4" <table:table-cell table:style-name="Level4Percent"
office:value-type="percentage" office:value="0.06" office:value-type="percentage" office:value="0.06"
tal:attributes="office:value subsubline/consumed_ratio"> tal:attributes="office:value subsubline/consumed_ratio">
<text:p>6,00%</text:p> <text:p>6,00%</text:p>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<tal:block metal:use-macro="here/style_macros/macros/style_macro"/> <tal:block metal:use-macro="here/style_macros/macros/style_macro"/>
<office:body> <office:body>
<office:spreadsheet> <office:spreadsheet>
<table:table table:style-name='ta1' table:print='false' tal:attributes="table:name python: unicode(here.getTitle(), 'utf-8')" i18n:attributes="table:name"> <table:table table:style-name='ta1' table:print='false' tal:attributes="table:name here/getTitle" i18n:attributes="table:name">
<!-- at least one table-column element is required for ODF to validate --> <!-- at least one table-column element is required for ODF to validate -->
<table:table-column <table:table-column
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
<table:table-row table:style-name='ro2'> <table:table-row table:style-name='ro2'>
<table:table-cell table:style-name='report-column-title' <table:table-cell table:style-name='report-column-title'
office:value-type='string'> office:value-type='string'>
<text:p tal:content="python:here.Localizer.erp5_ui.gettext(field.get_value ('title')).encode('utf-8')"> <text:p tal:content="python: field.get_value('title')" i18n:translate="">
</text:p> </text:p>
</table:table-cell> </table:table-cell>
<tal:block tal:define="display python: field.get_value('image_display') " <tal:block tal:define="display python: field.get_value('image_display') "
......
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
<tal:block tal:condition="python: is_report_tree_mode"> <tal:block tal:condition="python: is_report_tree_mode">
<table:table-cell table:style-name='report-column-title' table:number-columns-spanned='1' office:value-type='string' > <table:table-cell table:style-name='report-column-title' table:number-columns-spanned='1' office:value-type='string' >
<tal:block tal:condition="listboxline/getSectionName"> <tal:block tal:condition="listboxline/getSectionName">
<text:p tal:content="python: here.Localizer.erp5_ui.gettext(listboxline.getSectionName()).encode('utf-8')"/> <text:p tal:content="listboxline/getSectionName" i18n:translate=""/>
</tal:block> </tal:block>
</table:table-cell> </table:table-cell>
</tal:block> </tal:block>
...@@ -51,8 +51,8 @@ ...@@ -51,8 +51,8 @@
<tal:block tal:define="column_property python: column_item[1]; column_id python: column_item[0]"> <tal:block tal:define="column_property python: column_item[1]; column_id python: column_item[0]">
<tal:block tal:condition="python: column_property is not None" > <tal:block tal:condition="python: column_property is not None" >
<table:table-cell table:number-rows-spanned='1' table:style-name='report-column-title' table:number-columns-spanned='1' office:value-type='string' > <table:table-cell table:number-rows-spanned='1' table:style-name='report-column-title' table:number-columns-spanned='1' office:value-type='string' >
<text:p i18n:translate="" i18n:domain="ui" tal:content="column_property"> <text:p tal:content="column_property" tal:condition="python: column_id in untranslatable_columns"/>
</text:p> <text:p i18n:translate="" i18n:domain="ui" tal:content="column_property" tal:condition="python: column_id not in untranslatable_columns"/>
</table:table-cell> </table:table-cell>
</tal:block> </tal:block>
<tal:block tal:condition="python: column_property is None"> <tal:block tal:condition="python: column_property is None">
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
</tal:block> </tal:block>
<tal:block tal:define="portal_object here/getPortalObject"> <tal:block tal:define="portal_object here/getPortalObject">
<tal:block tal:condition="not: sheet_per_report_section"> <tal:block tal:condition="not: sheet_per_report_section">
<table:table tal:attributes="table:name python:unicode(form.getProperty('title'), 'utf8')" i18n:attributes="table:name"> <table:table tal:attributes="table:name python: form.getProperty('title')" i18n:attributes="table:name">
<!-- at least one table-column element is required for ODF to validate --> <!-- at least one table-column element is required for ODF to validate -->
<table:table-column <table:table-column
table:style-name='co2' table:style-name='co2'
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
office:value-type='string' office:value-type='string'
table:number-columns-spanned='5' table:number-columns-spanned='5'
table:number-rows-spanned='1'> table:number-rows-spanned='1'>
<text:p i18n:translate="" tal:content="python: unicode(form.getProperty('title'), 'utf8')" ></text:p> <text:p i18n:translate="" tal:content="python: form.getProperty('title')" ></text:p>
</table:table-cell> </table:table-cell>
</table:table-row> </table:table-row>
...@@ -95,7 +95,7 @@ ...@@ -95,7 +95,7 @@
<tal:block tal:condition="rendered_report_item_list"> <tal:block tal:condition="rendered_report_item_list">
<tal:block tal:repeat="report_item report_item_list"> <tal:block tal:repeat="report_item report_item_list">
<!-- FIXME: in deferred mode + sheet_per_report_section we do not have title --> <!-- FIXME: in deferred mode + sheet_per_report_section we do not have title -->
<table:table tal:attributes="table:name python: unicode('Sheet%s' % repeat['report_item'].index, 'utf-8')"> <table:table tal:attributes="table:name python:'Sheet%s' % repeat['report_item'].index">
<table:table-column table:style-name="co4" table:default-cell-style-name="text"/> <table:table-column table:style-name="co4" table:default-cell-style-name="text"/>
<tal:block tal:replace="structure report_item"/> <tal:block tal:replace="structure report_item"/>
</table:table> </table:table>
...@@ -105,7 +105,7 @@ ...@@ -105,7 +105,7 @@
<tal:block tal:condition="not: rendered_report_item_list"> <tal:block tal:condition="not: rendered_report_item_list">
<tal:block tal:repeat="report_item python: report_item_list"> <tal:block tal:repeat="report_item python: report_item_list">
<tal:block tal:condition="python: report_item.getFormId()"> <tal:block tal:condition="python: report_item.getFormId()">
<table:table tal:attributes="table:name python: unicode(report_item.getTitle() or 'Sheet%s' % repeat['report_item'].index, 'utf-8')"> <table:table tal:attributes="table:name python: report_item.getTitle() or 'Sheet%s' % repeat['report_item'].index">
<table:table-column table:style-name="co4" table:default-cell-style-name="text"/> <table:table-column table:style-name="co4" table:default-cell-style-name="text"/>
<tal:block metal:use-macro="here/report_view/macros/make_report_item_table"/> <tal:block metal:use-macro="here/report_view/macros/make_report_item_table"/>
</table:table> </table:table>
...@@ -116,7 +116,7 @@ ...@@ -116,7 +116,7 @@
<!-- include the report header as last page --> <!-- include the report header as last page -->
<table:table tal:condition="python: [field for field in form.get_fields() <table:table tal:condition="python: [field for field in form.get_fields()
if field.getRecursiveTemplateField().meta_type != 'ReportBox']" if field.getRecursiveTemplateField().meta_type != 'ReportBox']"
tal:attributes="table:name python:unicode(form.getProperty('title'), 'utf8')" i18n:attributes="table:name"> tal:attributes="table:name python:form.getProperty('title')" i18n:attributes="table:name">
<table:table-column <table:table-column
table:style-name='co2' table:style-name='co2'
table:number-columns-repeated='100' table:number-columns-repeated='100'
...@@ -126,7 +126,7 @@ ...@@ -126,7 +126,7 @@
office:value-type='string' office:value-type='string'
table:number-columns-spanned='5' table:number-columns-spanned='5'
table:number-rows-spanned='1'> table:number-rows-spanned='1'>
<text:p i18n:translate="" tal:content="python: unicode(form.getProperty('title'), 'utf8')" ></text:p> <text:p i18n:translate="" tal:content="python:form.getProperty('title')" ></text:p>
</table:table-cell> </table:table-cell>
</table:table-row> </table:table-row>
<!-- fields from the report form itself --> <!-- fields from the report form itself -->
......
...@@ -94,22 +94,95 @@ ...@@ -94,22 +94,95 @@
<style:table-cell-properties style:vertical-align='middle' style:repeat-content='false' style:text-align-source='fix' fo:border='none'/> <style:table-cell-properties style:vertical-align='middle' style:repeat-content='false' style:text-align-source='fix' fo:border='none'/>
<style:paragraph-properties fo:text-align='center' fo:margin-left='0cm'/> <style:paragraph-properties fo:text-align='center' fo:margin-left='0cm'/>
</style:style> </style:style>
<number:date-style style:name="date_style" number:automatic-order="true">
<style:style style:name="with_border_text" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-left='none' fo:border-bottom='0.002cm solid #000000' fo:border-right='0.002cm solid #000000' fo:border-top='0.002cm solid #000000'/>
</style:style>
<style:style style:name="with_border_figure" style:family="table-cell" style:parent-style-name="figure">
<style:table-cell-properties fo:border-left='none' fo:border-bottom='0.002cm solid #000000' fo:border-right='0.002cm solid #000000' fo:border-top='0.002cm solid #000000'/>
</style:style>
<number:date-style style:name="date_style_ymd">
<number:year number:style="long"/>
<number:text>/</number:text>
<number:month number:style="long"/>
<number:text>/</number:text>
<number:day number:style="long"/> <number:day number:style="long"/>
</number:date-style>
<number:date-style style:name="date_style_dmy">
<number:day number:style="long"/>
<number:text>/</number:text>
<number:month number:style="long"/>
<number:text>/</number:text> <number:text>/</number:text>
<number:year number:style="long"/>
</number:date-style>
<number:date-style style:name="date_style_mdy">
<number:month number:style="long"/>
<number:text>/</number:text>
<number:day number:style="long"/>
<number:text>/</number:text>
<number:year number:style="long"/>
</number:date-style>
<number:date-style style:name="date_with_time_style_ymd">
<number:year number:style="long"/>
<number:text>/</number:text>
<number:month number:style="long"/>
<number:text>/</number:text>
<number:day number:style="long"/>
<number:text> </number:text>
<number:hours number:style="long"/>
<number:text>:</number:text>
<number:minutes number:style="long"/>
</number:date-style>
<number:date-style style:name="date_with_time_style_mdy">
<number:month number:style="long"/> <number:month number:style="long"/>
<number:text>/</number:text> <number:text>/</number:text>
<number:day number:style="long"/>
<number:text>/</number:text>
<number:year number:style="long"/> <number:year number:style="long"/>
<number:text> </number:text> <number:text> </number:text>
<number:hours number:style="long"/> <number:hours number:style="long"/>
<number:text>:</number:text> <number:text>:</number:text>
<number:minutes number:style="long"/> <number:minutes number:style="long"/>
</number:date-style>
<number:date-style style:name="date_with_time_style_dmy">
<number:day number:style="long"/>
<number:text>/</number:text>
<number:month number:style="long"/>
<number:text>/</number:text>
<number:year number:style="long"/>
<number:text> </number:text>
<number:hours number:style="long"/>
<number:text>:</number:text> <number:text>:</number:text>
<number:seconds number:style="long"/> <number:minutes number:style="long"/>
</number:date-style> </number:date-style>
<style:style style:name="date_with_time" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="date_style"> <style:style style:name="stat-date_with_time" style:family="table-cell" style:parent-style-name="stat-date">
<style:table-cell-properties style:vertical-align='middle' style:repeat-content='false' style:text-align-source='fix' fo:border-right='0.002cm solid #000000' /> <style:table-cell-properties fo:border="0.002cm solid #000000"/>
</style:style> </style:style>
<style:style style:name="date_with_time" style:family="table-cell" style:parent-style-name="date">
<style:table-cell-properties style:vertical-align='middle' style:repeat-content='false' style:text-align-source='fix' fo:border-left='0.002cm solid #000000' fo:border-right='0.002cm solid #000000'/>
</style:style>
<tal:block tal:repeat="with_time_suffix python: ('', '_with_time')">
<tal:block tal:repeat="style_prefix_name python: here.Base_getODSSupportedStylePrefixList() + ('with_border_', )">
<tal:block tal:repeat="input_order python: ('ymd', 'dmy', 'mdy')">
<style:style
tal:attributes="style:name string:${style_prefix_name}date${with_time_suffix}_${input_order};
style:data-style-name string:date${with_time_suffix}_style_${input_order};
style:parent-style-name string:${style_prefix_name}date${with_time_suffix}"
style:name="date_with_time"
style:family="table-cell"
style:parent-style-name="date_with_time"
style:data-style-name="date_with_time_style_ymd">
<style:table-cell-properties tal:condition="python: style_prefix_name == ''" style:vertical-align='middle' style:repeat-content='false' style:text-align-source='fix' fo:border-left='0.002cm solid #000000' fo:border-right='0.002cm solid #000000' />
<style:table-cell-properties tal:condition="python: style_prefix_name == 'stat-'" fo:border='0.002cm solid #000000' />
<style:table-cell-properties tal:condition="python: style_prefix_name == 'with_border_'" fo:border-left='none' fo:border-bottom='0.002cm solid #000000' fo:border-right='0.002cm solid #000000' fo:border-top='0.002cm solid #000000'/>
</style:style>
</tal:block>
</tal:block>
</tal:block>
<tal:block tal:repeat="precision python: range(0,here.Base_getODSMaximumSupportedPrecision())"> <tal:block tal:repeat="precision python: range(0,here.Base_getODSMaximumSupportedPrecision())">
<tal:block tal:define="figure_data_precision_style_name string:figure_data_precision_${precision}"> <tal:block tal:define="figure_data_precision_style_name string:figure_data_precision_${precision}">
<number:number-style style:name="figure_data_precision_X" tal:attributes="style:name figure_data_precision_style_name"> <number:number-style style:name="figure_data_precision_X" tal:attributes="style:name figure_data_precision_style_name">
...@@ -118,6 +191,43 @@ ...@@ -118,6 +191,43 @@
<tal:block tal:repeat="style_prefix_name python: here.Base_getODSSupportedStylePrefixList()"> <tal:block tal:repeat="style_prefix_name python: here.Base_getODSSupportedStylePrefixList()">
<style:style style:name="figure_X" style:family="table-cell" style:parent-style-name="figure" style:data-style-name="figure_data_precision_X" tal:attributes="style:name string:${style_prefix_name}figure_${precision}; style:data-style-name figure_data_precision_style_name ; style:parent-style-name string:${style_prefix_name}figure"/> <style:style style:name="figure_X" style:family="table-cell" style:parent-style-name="figure" style:data-style-name="figure_data_precision_X" tal:attributes="style:name string:${style_prefix_name}figure_${precision}; style:data-style-name figure_data_precision_style_name ; style:parent-style-name string:${style_prefix_name}figure"/>
</tal:block> </tal:block>
<style:style
style:name="with_border_figure_X"
style:family="table-cell"
style:parent-style-name="figure_X"
style:data-style-name="figure_data_precision_style_name"
tal:attributes="style:name string:with_border_figure_${precision};
style:data-style-name figure_data_precision_style_name;
style:parent-style-name string:figure_${precision}">
<style:table-cell-properties fo:border-left='none' fo:border-bottom='0.002cm solid #000000' fo:border-right='0.002cm solid #000000' fo:border-top='0.002cm solid #000000'/>
</style:style>
</tal:block>
<tal:block tal:define="percentage_data_precision_style_name string:percentage_data_precision_${precision}">
<number:percentage-style style:name="percentage_data_precision_X" tal:attributes="style:name percentage_data_precision_style_name">
<number:number number:decimal-places="X" number:min-integer-digits="1" tal:attributes="number:decimal-places precision"/>
<number:text>%</number:text>
</number:percentage-style>
<tal:block tal:repeat="style_prefix_name python: here.Base_getODSSupportedStylePrefixList()">
<style:style
style:name="percentage_X"
style:family="table-cell"
style:parent-style-name="figure"
style:data-style-name="percentage_data_precision_X"
tal:attributes="style:name string:${style_prefix_name}percentage_${precision};
style:data-style-name percentage_data_precision_style_name;
style:parent-style-name string:${style_prefix_name}figure"/>
</tal:block>
<style:style
style:name="with_border_percentage_X"
style:family="table-cell"
style:parent-style-name="percentage_X"
style:data-style-name="percentage_data_precision_style_name"
tal:attributes="style:name string:with_border_percentage_${precision};
style:data-style-name percentage_data_precision_style_name;
style:parent-style-name string:percentage_${precision}">
<style:table-cell-properties fo:border-left='none' fo:border-bottom='0.002cm solid #000000' fo:border-right='0.002cm solid #000000' fo:border-top='0.002cm solid #000000'/>
</style:style>
</tal:block> </tal:block>
</tal:block> </tal:block>
</office:automatic-styles> </office:automatic-styles>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="_reconstructor" module="copy_reg"/>
</klass>
<tuple>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
<global name="object" module="__builtin__"/>
<none/>
</tuple>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>selection, **kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Foo_statStartDate</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -78,7 +78,9 @@ ...@@ -78,7 +78,9 @@
<item> <item>
<key> <string>bottom</string> </key> <key> <string>bottom</string> </key>
<value> <value>
<list/> <list>
<string>listbox</string>
</list>
</value> </value>
</item> </item>
<item> <item>
...@@ -90,7 +92,9 @@ ...@@ -90,7 +92,9 @@
<item> <item>
<key> <string>hidden</string> </key> <key> <string>hidden</string> </key>
<value> <value>
<list/> <list>
<string>listbox_start_date</string>
</list>
</value> </value>
</item> </item>
<item> <item>
......
...@@ -156,7 +156,9 @@ ...@@ -156,7 +156,9 @@
</item> </item>
<item> <item>
<key> <string>date_only</string> </key> <key> <string>date_only</string> </key>
<value> <string></string> </value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item> </item>
<item> <item>
<key> <string>date_separator</string> </key> <key> <string>date_separator</string> </key>
...@@ -170,6 +172,10 @@ ...@@ -170,6 +172,10 @@
<key> <string>default_now</string> </key> <key> <string>default_now</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>default_timezone</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -204,7 +210,9 @@ ...@@ -204,7 +210,9 @@
</item> </item>
<item> <item>
<key> <string>input_order</string> </key> <key> <string>input_order</string> </key>
<value> <string></string> </value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item> </item>
<item> <item>
<key> <string>input_style</string> </key> <key> <string>input_style</string> </key>
...@@ -222,6 +230,10 @@ ...@@ -222,6 +230,10 @@
<key> <string>time_separator</string> </key> <key> <string>time_separator</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>timezone_style</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -364,37 +376,37 @@ ...@@ -364,37 +376,37 @@
<item> <item>
<key> <string>ampm</string> </key> <key> <string>ampm</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value> </value>
</item> </item>
<item> <item>
<key> <string>day</string> </key> <key> <string>day</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value> </value>
</item> </item>
<item> <item>
<key> <string>hour</string> </key> <key> <string>hour</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAc=</string> </persistent>
</value> </value>
</item> </item>
<item> <item>
<key> <string>minute</string> </key> <key> <string>minute</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAg=</string> </persistent>
</value> </value>
</item> </item>
<item> <item>
<key> <string>month</string> </key> <key> <string>month</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAc=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAk=</string> </persistent>
</value> </value>
</item> </item>
<item> <item>
<key> <string>year</string> </key> <key> <string>year</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAg=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAo=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
...@@ -467,6 +479,32 @@ ...@@ -467,6 +479,32 @@
</pickle> </pickle>
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>request/date_only | python: 0</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>request/input_order | string:ymd</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle> <pickle>
<tuple> <tuple>
<tuple> <tuple>
...@@ -729,7 +767,7 @@ ...@@ -729,7 +767,7 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="4" aka="AAAAAAAAAAQ="> <record id="6" aka="AAAAAAAAAAY=">
<pickle> <pickle>
<tuple> <tuple>
<tuple> <tuple>
...@@ -984,7 +1022,7 @@ ...@@ -984,7 +1022,7 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="5" aka="AAAAAAAAAAU="> <record id="7" aka="AAAAAAAAAAc=">
<pickle> <pickle>
<tuple> <tuple>
<tuple> <tuple>
...@@ -1239,7 +1277,7 @@ ...@@ -1239,7 +1277,7 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="6" aka="AAAAAAAAAAY="> <record id="8" aka="AAAAAAAAAAg=">
<pickle> <pickle>
<tuple> <tuple>
<tuple> <tuple>
...@@ -1494,7 +1532,7 @@ ...@@ -1494,7 +1532,7 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="7" aka="AAAAAAAAAAc="> <record id="9" aka="AAAAAAAAAAk=">
<pickle> <pickle>
<tuple> <tuple>
<tuple> <tuple>
...@@ -1749,7 +1787,7 @@ ...@@ -1749,7 +1787,7 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="8" aka="AAAAAAAAAAg="> <record id="10" aka="AAAAAAAAAAo=">
<pickle> <pickle>
<tuple> <tuple>
<tuple> <tuple>
......
...@@ -82,7 +82,9 @@ ...@@ -82,7 +82,9 @@
<item> <item>
<key> <string>bottom</string> </key> <key> <string>bottom</string> </key>
<value> <value>
<list/> <list>
<string>listbox</string>
</list>
</value> </value>
</item> </item>
<item> <item>
...@@ -94,7 +96,10 @@ ...@@ -94,7 +96,10 @@
<item> <item>
<key> <string>hidden</string> </key> <key> <string>hidden</string> </key>
<value> <value>
<list/> <list>
<string>listbox_quantity</string>
<string>listbox_delivery_ratio</string>
</list>
</value> </value>
</item> </item>
<item> <item>
......
...@@ -108,6 +108,10 @@ ...@@ -108,6 +108,10 @@
<key> <string>alternate_name</string> </key> <key> <string>alternate_name</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>autocomplete</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>css_class</string> </key> <key> <string>css_class</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -158,7 +162,9 @@ ...@@ -158,7 +162,9 @@
</item> </item>
<item> <item>
<key> <string>precision</string> </key> <key> <string>precision</string> </key>
<value> <string></string> </value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item> </item>
<item> <item>
<key> <string>required</string> </key> <key> <string>required</string> </key>
...@@ -183,6 +189,10 @@ ...@@ -183,6 +189,10 @@
<key> <string>alternate_name</string> </key> <key> <string>alternate_name</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>autocomplete</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>css_class</string> </key> <key> <string>css_class</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -253,4 +263,17 @@ ...@@ -253,4 +263,17 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </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>request/precision | python: 1</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -108,6 +108,10 @@ ...@@ -108,6 +108,10 @@
<key> <string>alternate_name</string> </key> <key> <string>alternate_name</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>autocomplete</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>css_class</string> </key> <key> <string>css_class</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -153,9 +157,15 @@ ...@@ -153,9 +157,15 @@
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>precision</string> </key> <key> <string>input_type</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>precision</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item> <item>
<key> <string>required</string> </key> <key> <string>required</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -221,7 +231,7 @@ ...@@ -221,7 +231,7 @@
</item> </item>
<item> <item>
<key> <string>input_style</string> </key> <key> <string>input_style</string> </key>
<value> <string>-1.234,5</string> </value> <value> <string>-1 234.5</string> </value>
</item> </item>
<item> <item>
<key> <string>input_type</string> </key> <key> <string>input_type</string> </key>
...@@ -249,4 +259,17 @@ ...@@ -249,4 +259,17 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </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>request/precision | python: 2</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
This diff is collapsed.
...@@ -60,7 +60,6 @@ from .interfaces import IMessageCatalog ...@@ -60,7 +60,6 @@ from .interfaces import IMessageCatalog
from .LanguageManager import LanguageManager from .LanguageManager import LanguageManager
from .LocalFiles import LocalDTMLFile from .LocalFiles import LocalDTMLFile
from .utils import charsets, lang_negotiator, _ from .utils import charsets, lang_negotiator, _
from Products.ERP5Type.Utils import ensure_list
########################################################################### ###########################################################################
...@@ -312,7 +311,7 @@ class MessageCatalog(LanguageManager, ObjectManager, SimpleItem): ...@@ -312,7 +311,7 @@ class MessageCatalog(LanguageManager, ObjectManager, SimpleItem):
if lang is None: if lang is None:
# Builds the list of available languages # Builds the list of available languages
# should the empty translations be filtered? # should the empty translations be filtered?
available_languages = ensure_list(self._languages) available_languages = list(self._languages)
# Imagine that the default language is 'en'. There is no # Imagine that the default language is 'en'. There is no
# translation from 'en' to 'en' in the message catalog # translation from 'en' to 'en' in the message catalog
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment