Commit 8c313674 authored by Jérome Perrin's avatar Jérome Perrin

accounting: improve General Ledger

- We now have two different layouts for export and report
- Export mode uses the new merge_report_section_list parameter from erp5_ods_style
- Project is displayed as ${project_reference} - ${project_title} (in
  all reports)
- Show grouping reference & modification date
parent 62c1971a
...@@ -30,7 +30,9 @@ ...@@ -30,7 +30,9 @@
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>icon</string> </key>
...@@ -73,7 +75,7 @@ ...@@ -73,7 +75,7 @@
<key> <string>text</string> </key> <key> <string>text</string> </key>
<value> <string encoding="cdata"><![CDATA[ <value> <string encoding="cdata"><![CDATA[
string:${object_url}/AccountModule_viewGeneralLedgerReportDialog?your_portal_skin=ODS&your_format= string:${object_url}/AccountModule_viewGeneralLedgerReportDialog?your_portal_skin=ODS&your_format=&your_export:int=1
]]></string> </value> ]]></string> </value>
</item> </item>
......
...@@ -30,7 +30,9 @@ ...@@ -30,7 +30,9 @@
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>icon</string> </key>
......
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
<key> <string>text</string> </key> <key> <string>text</string> </key>
<value> <string encoding="cdata"><![CDATA[ <value> <string encoding="cdata"><![CDATA[
string:${object_url}/accounting_module/AccountModule_viewGeneralLedgerReportDialog?mirror_section=${object/getRelativeUrl}&your_portal_skin=ODS&your_format= string:${object_url}/accounting_module/AccountModule_viewGeneralLedgerReportDialog?mirror_section=${object/getRelativeUrl}&your_portal_skin=ODS&your_format=&field_your_export:int=1
]]></string> </value> ]]></string> </value>
</item> </item>
......
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
<key> <string>text</string> </key> <key> <string>text</string> </key>
<value> <string encoding="cdata"><![CDATA[ <value> <string encoding="cdata"><![CDATA[
string:${object_url}/accounting_module/AccountModule_viewGeneralLedgerReportDialog?mirror_section=${object/getRelativeUrl}&your_portal_skin=ODS&your_format= string:${object_url}/accounting_module/AccountModule_viewGeneralLedgerReportDialog?mirror_section=${object/getRelativeUrl}&your_portal_skin=ODS&your_format=&field_your_export:int=1
]]></string> </value> ]]></string> </value>
</item> </item>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>return (\n
(\'Movement_getNodeGapId\', \'Account Code\'),\n
(\'node_translated_title\', \'Account Name\'),\n
(\'section_title\', \'Section\'),\n
(\'mirror_section_title\', \'Third Party\'),\n
(\'date\', \'Operation Date\'),\n
(\'modification_date\', \'Modification Date\'),\n
(\'Movement_getSpecificReference\', \'Transaction Reference\'),\n
(\'Movement_getExplanationTranslatedPortalType\', \'Type\'),\n
(\'Movement_getExplanationTitle\', \'Title\'),\n
(\'Movement_getExplanationReference\', \'Document Reference\'),\n
) + context.accounting_module.AccountModule_getAnalyticColumnList() + (\n
(\'debit_price\', \'Debit\'),\n
(\'credit_price\', \'Credit\'),\n
(\'total_price\', \'Balance\'),\n
(\'Movement_getSectionPriceCurrency\', \'Accounting Currency\'),\n
\n
(\'debit\', \'Transaction Currency Debit\'),\n
(\'credit\', \'Transaction Currency Credit\'),\n
(\'total_quantity\', \'Transaction Currency Balance\'),\n
(\'resource_reference\', \'Transaction Currency\'),\n
\n
(\'Movement_getPaymentTitle\', \'Section Bank Account\',),\n
(\'payment_mode_translated_title\', \'Payment Mode\',),\n
\n
(\'grouping_reference\', \'Grouping Reference\'),\n
(\'grouping_date\', \'Grouping Date\'),\n
(\'getTranslatedSimulationStateTitle\', \'State\'),\n
)\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>AccountModule_getGeneralLedgerColumnItemList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -58,6 +58,7 @@ from Products.ZSQLCatalog.SQLCatalog import Query, ComplexQuery\n ...@@ -58,6 +58,7 @@ from Products.ZSQLCatalog.SQLCatalog import Query, ComplexQuery\n
from Products.ERP5Form.Report import ReportSection\n from Products.ERP5Form.Report import ReportSection\n
portal = context.portal_url.getPortalObject()\n portal = context.portal_url.getPortalObject()\n
request = portal.REQUEST\n request = portal.REQUEST\n
\n
cat_tool = portal.portal_categories\n cat_tool = portal.portal_categories\n
Base_translateString = portal.Base_translateString\n Base_translateString = portal.Base_translateString\n
\n \n
...@@ -77,18 +78,22 @@ for gap in request.get(\'gap_list\', ()):\n ...@@ -77,18 +78,22 @@ for gap in request.get(\'gap_list\', ()):\n
# XXX the field should maybe use base=1 on the category, but it is also used in other contexts\n # XXX the field should maybe use base=1 on the category, but it is also used in other contexts\n
gap_list.append(\'gap/%s\' % gap)\n gap_list.append(\'gap/%s\' % gap)\n
\n \n
display_categories = request.get(\'display_categories\', False)\n
period_start_date = context\\\n period_start_date = context\\\n
.Base_getAccountingPeriodStartDateForSectionCategory(\n .Base_getAccountingPeriodStartDateForSectionCategory(\n
section_category=section_category, date=from_date or at_date)\n section_category=section_category, date=from_date or at_date)\n
gap_root = request.get(\'gap_root\')\n gap_root = request.get(\'gap_root\')\n
\n \n
\n \n
export = request[\'export\']\n
if export:\n
request.set(\'merge_report_section_list\', 1)\n
\n
# currency precision\n # currency precision\n
currency = portal.Base_getCurrencyForSection(request[\'section_category\'])\n currency = portal.Base_getCurrencyForSection(request[\'section_category\'])\n
precision = portal.account_module.getQuantityPrecisionFromResource(currency)\n precision = portal.account_module.getQuantityPrecisionFromResource(currency)\n
request.set(\'precision\', precision)\n request.set(\'precision\', precision)\n
\n \n
# There are some disabled fields in Account_viewAccountingTransactionList based on this condition.\n
request.other[\'is_accounting_report\'] = True\n request.other[\'is_accounting_report\'] = True\n
\n \n
params = dict(precision=precision,\n params = dict(precision=precision,\n
...@@ -151,23 +156,24 @@ if hide_analytic:\n ...@@ -151,23 +156,24 @@ if hide_analytic:\n
\'payment_uid\' )\n \'payment_uid\' )\n
else:\n else:\n
analytic_column_list = context.accounting_module.AccountModule_getAnalyticColumnList()\n analytic_column_list = context.accounting_module.AccountModule_getAnalyticColumnList()\n
request.set(\'analytic_column_list\', analytic_column_list) # for Movement_getExplanationTitleAndAnalytics\n
\n \n
account_columns = (\n account_columns = (\n
(\'Movement_getSpecificReference\', \'Reference\'),\n (\'date\', \'Operation Date\'),\n
(\'Movement_getExplanationTitle\', \'Title\'),\n (\'Movement_getSpecificReference\', \'Transaction Reference\'),\n
(\'date\', \'Date\'),\n (\'Movement_getExplanationTitleAndAnalytics\', \'Title\\nReference and Analytics\' if analytic_column_list else \'Title\\nReference\'),\n
(\'Movement_getExplanationTranslatedPortalType\', \'Type\'),\n (\'debit_price\', \'Debit\'),\n
(\'Movement_getExplanationReference\', \'Document Reference\'),\n (\'credit_price\', \'Credit\'),\n
(\'Movement_getMirrorSectionTitle\', \'Third Party\'),)\n (\'running_total_price\', \'Running Balance\'),\n
if len(simulation_state) > 1:\n (\'grouping_reference\', \'Grouping Reference\'),\n
account_columns += (\n (\'grouping_date\', \'Grouping Date\'),\n
(\'getTranslatedSimulationStateTitle\', \'State\'),)\n (\'modification_date\', \'Modification Date\'),\n
account_columns += analytic_column_list\n (\'getTranslatedSimulationStateTitle\', \'State\'),\n
account_columns += (\n )\n
(\'debit_price\', \'Debit\'),\n # export mode have a different layout\n
(\'credit_price\', \'Credit\'),\n if export:\n
(\'running_total_price\', \'Net\'), )\n account_columns = context.AccountModule_getGeneralLedgerColumnItemList()\n
\n \n
# utility functions\n # utility functions\n
traverse = portal.restrictedTraverse\n traverse = portal.restrictedTraverse\n
account_name_cache = {}\n account_name_cache = {}\n
...@@ -205,7 +211,17 @@ def getFullAccountName(account_info):\n ...@@ -205,7 +211,17 @@ def getFullAccountName(account_info):\n
account_name = \'%s (%s)\' % (account_name, payment_name)\n account_name = \'%s (%s)\' % (account_name, payment_name)\n
return account_name\n return account_name\n
\n \n
\n def addReportSection(**kw):\n
kw.setdefault(\'form_id\', \'Account_viewAccountingTransactionList\')\n
kw.setdefault(\'selection_name\', \'account_preference_selection\')\n
kw.setdefault(\'selection_columns\', account_columns)\n
kw.setdefault(\'listbox_display_mode\', \'FlatListMode\')\n
title = kw[\'title\']\n
if export: # in export more we do not insert report sections headers and use\n
# a list view form\n
kw.pop(\'title\')\n
kw[\'form_id\'] = \'Account_viewAccountingTransactionListExport\'\n
report_section_list.append((title, ReportSection(**kw)))\n
\n \n
# look at inventories to decide which sections will be shown\n # look at inventories to decide which sections will be shown\n
balance_sheet_account_type_list = [c[0] for c in\n balance_sheet_account_type_list = [c[0] for c in\n
...@@ -264,15 +280,9 @@ for inventory in portal.portal_simulation.getInventoryList(\n ...@@ -264,15 +280,9 @@ for inventory in portal.portal_simulation.getInventoryList(\n
selection_params[\'node_uid\'] = inventory.node_uid\n selection_params[\'node_uid\'] = inventory.node_uid\n
selection_params[\'payment_uid\'] = None\n selection_params[\'payment_uid\'] = None\n
selection_params.setdefault(\'mirror_section_uid\', None)\n selection_params.setdefault(\'mirror_section_uid\', None)\n
report_section_list.append(\n addReportSection(path=inventory.node_relative_url,\n
ReportSection(\n selection_params=selection_params,\n
path=inventory.node_relative_url,\n title=getFullAccountName(key))\n
title=getFullAccountName(key),\n
form_id=\'Account_viewAccountingTransactionList\',\n
selection_name=\'account_preference_selection\',\n
selection_params=selection_params,\n
selection_columns=account_columns,\n
listbox_display_mode=\'FlatListMode\',))\n
\n \n
# non zero balance at begining of period\n # non zero balance at begining of period\n
for inventory in portal.portal_simulation.getInventoryList(\n for inventory in portal.portal_simulation.getInventoryList(\n
...@@ -297,15 +307,9 @@ for inventory in portal.portal_simulation.getInventoryList(\n ...@@ -297,15 +307,9 @@ for inventory in portal.portal_simulation.getInventoryList(\n
selection_params[\'node_uid\'] = inventory.node_uid\n selection_params[\'node_uid\'] = inventory.node_uid\n
selection_params[\'payment_uid\'] = None\n selection_params[\'payment_uid\'] = None\n
selection_params.setdefault(\'mirror_section_uid\', None)\n selection_params.setdefault(\'mirror_section_uid\', None)\n
report_section_list.append(\n addReportSection(path=inventory.node_relative_url,\n
ReportSection(\n selection_params=selection_params,\n
path=inventory.node_relative_url,\n title=getFullAccountName(key))\n
title=getFullAccountName(key),\n
form_id=\'Account_viewAccountingTransactionList\',\n
selection_name=\'account_preference_selection\',\n
selection_params=selection_params,\n
selection_columns=account_columns,\n
listbox_display_mode=\'FlatListMode\',))\n
\n \n
\n \n
# profit & loss -> same, but from date limited to the current period\n # profit & loss -> same, but from date limited to the current period\n
...@@ -327,15 +331,9 @@ for inventory in portal.portal_simulation.getInventoryList(\n ...@@ -327,15 +331,9 @@ for inventory in portal.portal_simulation.getInventoryList(\n
selection_params[\'node_uid\'] = inventory.node_uid\n selection_params[\'node_uid\'] = inventory.node_uid\n
selection_params[\'payment_uid\'] = None\n selection_params[\'payment_uid\'] = None\n
selection_params.setdefault(\'mirror_section_uid\', None)\n selection_params.setdefault(\'mirror_section_uid\', None)\n
report_section_list.append(\n addReportSection(path=inventory.node_relative_url,\n
ReportSection(\n selection_params=selection_params,\n
path=inventory.node_relative_url,\n title=getFullAccountName(key))\n
title=getFullAccountName(key),\n
form_id=\'Account_viewAccountingTransactionList\',\n
selection_name=\'account_preference_selection\',\n
selection_params=selection_params,\n
selection_columns=account_columns,\n
listbox_display_mode=\'FlatListMode\',))\n
\n \n
# group by mirror_section\n # group by mirror_section\n
# movements in the period\n # movements in the period\n
...@@ -358,15 +356,9 @@ for inventory in portal.portal_simulation.getInventoryList(\n ...@@ -358,15 +356,9 @@ for inventory in portal.portal_simulation.getInventoryList(\n
selection_params[\'node_uid\'] = inventory.node_uid\n selection_params[\'node_uid\'] = inventory.node_uid\n
selection_params[\'payment_uid\'] = None\n selection_params[\'payment_uid\'] = None\n
selection_params[\'mirror_section_uid\'] = inventory.mirror_section_uid or Query(mirror_section_uid=None)\n selection_params[\'mirror_section_uid\'] = inventory.mirror_section_uid or Query(mirror_section_uid=None)\n
report_section_list.append(\n addReportSection(path=inventory.node_relative_url,\n
ReportSection(\n selection_params=selection_params,\n
path=inventory.node_relative_url,\n title=getFullAccountName(key))\n
title=getFullAccountName(key),\n
form_id=\'Account_viewAccountingTransactionList\',\n
selection_name=\'account_preference_selection\',\n
selection_params=selection_params,\n
selection_columns=account_columns,\n
listbox_display_mode=\'FlatListMode\',))\n
\n \n
# non zero balance at begining of period\n # non zero balance at begining of period\n
for inventory in portal.portal_simulation.getInventoryList(\n for inventory in portal.portal_simulation.getInventoryList(\n
...@@ -392,16 +384,9 @@ for inventory in portal.portal_simulation.getInventoryList(\n ...@@ -392,16 +384,9 @@ for inventory in portal.portal_simulation.getInventoryList(\n
selection_params[\'node_uid\'] = inventory.node_uid\n selection_params[\'node_uid\'] = inventory.node_uid\n
selection_params[\'payment_uid\'] = None\n selection_params[\'payment_uid\'] = None\n
selection_params[\'mirror_section_uid\'] = inventory.mirror_section_uid or Query(mirror_section_uid=None)\n selection_params[\'mirror_section_uid\'] = inventory.mirror_section_uid or Query(mirror_section_uid=None)\n
report_section_list.append(\n addReportSection(path=inventory.node_relative_url,\n
ReportSection(\n selection_params=selection_params,\n
path=inventory.node_relative_url,\n title=getFullAccountName(key))\n
title=getFullAccountName(key),\n
form_id=\'Account_viewAccountingTransactionList\',\n
selection_name=\'account_preference_selection\',\n
selection_params=selection_params,\n
selection_columns=account_columns,\n
listbox_display_mode=\'FlatListMode\',))\n
\n
\n \n
# group by payment\n # group by payment\n
# movements in the period\n # movements in the period\n
...@@ -424,15 +409,9 @@ for inventory in portal.portal_simulation.getInventoryList(\n ...@@ -424,15 +409,9 @@ for inventory in portal.portal_simulation.getInventoryList(\n
selection_params[\'node_uid\'] = inventory.node_uid\n selection_params[\'node_uid\'] = inventory.node_uid\n
selection_params[\'payment_uid\'] = inventory.payment_uid or Query(payment_uid=None)\n selection_params[\'payment_uid\'] = inventory.payment_uid or Query(payment_uid=None)\n
selection_params.setdefault(\'mirror_section_uid\', None)\n selection_params.setdefault(\'mirror_section_uid\', None)\n
report_section_list.append(\n addReportSection(path=inventory.node_relative_url,\n
ReportSection(\n selection_params=selection_params,\n
path=inventory.node_relative_url,\n title=getFullAccountName(key))\n
title=getFullAccountName(key),\n
form_id=\'Account_viewAccountingTransactionList\',\n
selection_name=\'account_preference_selection\',\n
selection_params=selection_params,\n
selection_columns=account_columns,\n
listbox_display_mode=\'FlatListMode\',))\n
\n \n
# non zero balance at begining of period\n # non zero balance at begining of period\n
for inventory in portal.portal_simulation.getInventoryList(\n for inventory in portal.portal_simulation.getInventoryList(\n
...@@ -457,21 +436,17 @@ for inventory in portal.portal_simulation.getInventoryList(\n ...@@ -457,21 +436,17 @@ for inventory in portal.portal_simulation.getInventoryList(\n
selection_params[\'node_uid\'] = inventory.node_uid\n selection_params[\'node_uid\'] = inventory.node_uid\n
selection_params[\'payment_uid\'] = inventory.payment_uid or Query(payment_uid=None)\n selection_params[\'payment_uid\'] = inventory.payment_uid or Query(payment_uid=None)\n
selection_params.setdefault(\'mirror_section_uid\', None)\n selection_params.setdefault(\'mirror_section_uid\', None)\n
report_section_list.append(\n addReportSection(path=inventory.node_relative_url,\n
ReportSection(\n selection_params=selection_params,\n
path=inventory.node_relative_url,\n title=getFullAccountName(key))\n
title=getFullAccountName(key),\n \n
form_id=\'Account_viewAccountingTransactionList\',\n \n
selection_name=\'account_preference_selection\',\n report_section_list = [x[1] for x in sorted(report_section_list, key=lambda x: x[0])]\n
selection_params=selection_params,\n \n
listbox_display_mode=\'FlatListMode\',\n if not export:\n
selection_columns=account_columns, ))\n total_params = default_selection_params.copy()\n
\n total_params[\'at_date\'] = at_date\n
report_section_list.sort(key=ReportSection.getTitle)\n report_section_list.append(ReportSection(\n
\n
total_params = default_selection_params.copy()\n
total_params[\'at_date\'] = at_date\n
report_section_list.append(ReportSection(\n
path=context.getPhysicalPath(),\n path=context.getPhysicalPath(),\n
title=Base_translateString("Total"),\n title=Base_translateString("Total"),\n
form_id=\'AccountModule_viewGeneralLedgerSummary\',\n form_id=\'AccountModule_viewGeneralLedgerSummary\',\n
......
...@@ -112,6 +112,7 @@ ...@@ -112,6 +112,7 @@
<list> <list>
<string>your_simulation_state</string> <string>your_simulation_state</string>
<string>your_mirror_section_category_list</string> <string>your_mirror_section_category_list</string>
<string>your_export</string>
</list> </list>
</value> </value>
</item> </item>
......
<?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>css_class</string>
<string>hidden</string>
<string>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>your_export</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>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string>hidden_label</string> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_checkbox</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>1</int> </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>Export Mode</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -101,6 +101,8 @@ ...@@ -101,6 +101,8 @@
<string>listbox_function</string> <string>listbox_function</string>
<string>listbox_project</string> <string>listbox_project</string>
<string>listbox_funding</string> <string>listbox_funding</string>
<string>listbox_modification_date</string>
<string>listbox_grouping_date</string>
</list> </list>
</value> </value>
</item> </item>
......
...@@ -181,6 +181,14 @@ ...@@ -181,6 +181,14 @@
<string>date</string> <string>date</string>
<string>date</string> <string>date</string>
</tuple> </tuple>
<tuple>
<string>modification_date</string>
<string>date</string>
</tuple>
<tuple>
<string>grouping_date</string>
<string>date</string>
</tuple>
<tuple> <tuple>
<string>debit_price</string> <string>debit_price</string>
<string>debit</string> <string>debit</string>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="DateTimeField" module="Products.Formulator.StandardFields"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>listbox_grouping_date</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>datetime_out_of_range</string> </key>
<value> <string>The date and time you entered were out of range.</string> </value>
</item>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>not_datetime</string> </key>
<value> <string>You did not enter a valid date and time.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>allow_empty_time</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>ampm_time_style</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>date_only</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>date_separator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_now</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end_datetime</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden_day_is_last_day</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hide_day</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>input_order</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>input_style</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start_datetime</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time_separator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>sub_form</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>allow_empty_time</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>ampm_time_style</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>date_only</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>date_separator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_now</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end_datetime</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden_day_is_last_day</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hide_day</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>input_order</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>input_style</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start_datetime</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time_separator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>allow_empty_time</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>ampm_time_style</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>date_only</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>date_separator</string> </key>
<value> <string>/</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>default_now</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>end_datetime</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>hidden_day_is_last_day</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>hide_day</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>input_order</string> </key>
<value> <string>ymd</string> </value>
</item>
<item>
<key> <string>input_style</string> </key>
<value> <string>text</string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>start_datetime</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>time_separator</string> </key>
<value> <string>:</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Date</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.Form</string>
<string>BasicForm</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>fields</string> </key>
<value>
<dictionary>
<item>
<key> <string>ampm</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>day</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
<item>
<key> <string>hour</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
<item>
<key> <string>minute</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAc=</string> </persistent>
</value>
</item>
<item>
<key> <string>month</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAg=</string> </persistent>
</value>
</item>
<item>
<key> <string>year</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAk=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>Default</string>
<string>date</string>
<string>time</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>Default</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>date</string> </key>
<value>
<list>
<string>year</string>
<string>month</string>
<string>day</string>
</list>
</value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<list>
<string>hour</string>
<string>minute</string>
<string>ampm</string>
</list>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>ISO-8859-1</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Basic Form</string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.TALESField</string>
<string>TALESMethod</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>preferences/getPreferredDateOrder | string:ymd</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.StandardFields</string>
<string>StringField</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>ampm</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>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>Too much input was given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>am/pm</string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.StandardFields</string>
<string>IntegerField</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>day</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>
<item>
<key> <string>integer_out_of_range</string> </key>
<value> <string>The integer you entered was out of range.</string> </value>
</item>
<item>
<key> <string>not_integer</string> </key>
<value> <string>You did not enter an integer.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Day</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.StandardFields</string>
<string>IntegerField</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>hour</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>
<item>
<key> <string>integer_out_of_range</string> </key>
<value> <string>The integer you entered was out of range.</string> </value>
</item>
<item>
<key> <string>not_integer</string> </key>
<value> <string>You did not enter an integer.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Hour</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="7" aka="AAAAAAAAAAc=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.StandardFields</string>
<string>IntegerField</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>minute</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>
<item>
<key> <string>integer_out_of_range</string> </key>
<value> <string>The integer you entered was out of range.</string> </value>
</item>
<item>
<key> <string>not_integer</string> </key>
<value> <string>You did not enter an integer.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Minute</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="8" aka="AAAAAAAAAAg=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.StandardFields</string>
<string>IntegerField</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>month</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>
<item>
<key> <string>integer_out_of_range</string> </key>
<value> <string>The integer you entered was out of range.</string> </value>
</item>
<item>
<key> <string>not_integer</string> </key>
<value> <string>You did not enter an integer.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Month</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="9" aka="AAAAAAAAAAk=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.StandardFields</string>
<string>IntegerField</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>year</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>
<item>
<key> <string>integer_out_of_range</string> </key>
<value> <string>The integer you entered was out of range.</string> </value>
</item>
<item>
<key> <string>not_integer</string> </key>
<value> <string>You did not enter an integer.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Year</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="DateTimeField" module="Products.Formulator.StandardFields"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>listbox_modification_date</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>datetime_out_of_range</string> </key>
<value> <string>The date and time you entered were out of range.</string> </value>
</item>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>not_datetime</string> </key>
<value> <string>You did not enter a valid date and time.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>allow_empty_time</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>ampm_time_style</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>date_only</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>date_separator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_now</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end_datetime</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden_day_is_last_day</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hide_day</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>input_order</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>input_style</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start_datetime</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time_separator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>sub_form</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>allow_empty_time</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>ampm_time_style</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>date_only</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>date_separator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_now</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end_datetime</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden_day_is_last_day</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hide_day</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>input_order</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>input_style</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start_datetime</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time_separator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>allow_empty_time</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>ampm_time_style</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>date_only</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>date_separator</string> </key>
<value> <string>/</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>default_now</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>end_datetime</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>hidden_day_is_last_day</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>hide_day</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>input_order</string> </key>
<value> <string>ymd</string> </value>
</item>
<item>
<key> <string>input_style</string> </key>
<value> <string>text</string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>start_datetime</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>time_separator</string> </key>
<value> <string>:</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Date</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.Form</string>
<string>BasicForm</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>fields</string> </key>
<value>
<dictionary>
<item>
<key> <string>ampm</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>day</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
<item>
<key> <string>hour</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent>
</value>
</item>
<item>
<key> <string>minute</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAc=</string> </persistent>
</value>
</item>
<item>
<key> <string>month</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAg=</string> </persistent>
</value>
</item>
<item>
<key> <string>year</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAk=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>Default</string>
<string>date</string>
<string>time</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>Default</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>date</string> </key>
<value>
<list>
<string>year</string>
<string>month</string>
<string>day</string>
</list>
</value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<list>
<string>hour</string>
<string>minute</string>
<string>ampm</string>
</list>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>ISO-8859-1</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Basic Form</string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.TALESField</string>
<string>TALESMethod</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>preferences/getPreferredDateOrder | string:ymd</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.StandardFields</string>
<string>StringField</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>ampm</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>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>Too much input was given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>am/pm</string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.StandardFields</string>
<string>IntegerField</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>day</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>
<item>
<key> <string>integer_out_of_range</string> </key>
<value> <string>The integer you entered was out of range.</string> </value>
</item>
<item>
<key> <string>not_integer</string> </key>
<value> <string>You did not enter an integer.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Day</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="6" aka="AAAAAAAAAAY=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.StandardFields</string>
<string>IntegerField</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>hour</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>
<item>
<key> <string>integer_out_of_range</string> </key>
<value> <string>The integer you entered was out of range.</string> </value>
</item>
<item>
<key> <string>not_integer</string> </key>
<value> <string>You did not enter an integer.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Hour</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="7" aka="AAAAAAAAAAc=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.StandardFields</string>
<string>IntegerField</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>minute</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>
<item>
<key> <string>integer_out_of_range</string> </key>
<value> <string>The integer you entered was out of range.</string> </value>
</item>
<item>
<key> <string>not_integer</string> </key>
<value> <string>You did not enter an integer.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Minute</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="8" aka="AAAAAAAAAAg=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.StandardFields</string>
<string>IntegerField</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>month</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>
<item>
<key> <string>integer_out_of_range</string> </key>
<value> <string>The integer you entered was out of range.</string> </value>
</item>
<item>
<key> <string>not_integer</string> </key>
<value> <string>You did not enter an integer.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>2</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Month</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="9" aka="AAAAAAAAAAk=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.StandardFields</string>
<string>IntegerField</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>year</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>
<item>
<key> <string>integer_out_of_range</string> </key>
<value> <string>The integer you entered was out of range.</string> </value>
</item>
<item>
<key> <string>not_integer</string> </key>
<value> <string>You did not enter an integer.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>end</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>start</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Year</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ERP5 Form" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string>Base_edit</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>edit_order</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>left</string>
<string>right</string>
<string>center</string>
<string>bottom</string>
<string>hidden</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>bottom</string> </key>
<value>
<list>
<string>listbox</string>
</list>
</value>
</item>
<item>
<key> <string>center</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>left</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Account_viewAccountingTransactionListExport</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>Account_viewAccountingTransactionList</string> </value>
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>form_list</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Account</string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_action_title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?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>selection_name</string>
<string>stat_columns</string>
<string>stat_method</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>listbox</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>listbox</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Account_viewAccountingTransactionList</string> </value>
</item>
<item>
<key> <string>selection_name</string> </key>
<value> <string>account_history_export_selection</string> </value>
</item>
<item>
<key> <string>stat_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>stat_method</string> </key>
<value> <string></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>
...@@ -63,10 +63,13 @@ if context.getPortalType() == \'Accounting Transaction Module\':\n ...@@ -63,10 +63,13 @@ if context.getPortalType() == \'Accounting Transaction Module\':\n
project_list = []\n project_list = []\n
for project in portal.portal_catalog(\n for project in portal.portal_catalog(\n
portal_type=\'Project\',\n portal_type=\'Project\',\n
select_list=[\'relative_url\', \'title\'],\n select_list=[\'relative_url\', \'title\', \'reference\'],\n
validation_state=(\'validated\',),\n validation_state=(\'validated\',),\n
sort_on=((\'title\', \'ASC\'),)):\n sort_on=((\'title\', \'ASC\'),)):\n
project_list.append((project.title, project.relative_url,))\n if project.reference:\n
project_list.append((\'%s - %s\' % (project.reference, project.title), project.relative_url,))\n
else:\n
project_list.append((project.title, project.relative_url,))\n
\n \n
if not project_list:\n if not project_list:\n
return [] # returning an empty list, not to add project column on reports\n return [] # returning an empty list, not to add project column on reports\n
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>request = container.REQUEST\n
movement = brain.getObject()\n
\n
explanation = movement.getExplanationValue()\n
\n
if movement.hasTitle():\n
title = movement.getTitle()\n
else:\n
title = explanation.getTitle()\n
\n
analytic_property_list = [explanation.getReference()]\n
\n
for property_name, property_title in request[\'analytic_column_list\']:\n
# XXX it would be a little better to reuse editable field\n
if property_name == \'project\':\n
analytic_property_list.append(brain.Movement_getProjectTitle())\n
elif property_name == \'function\':\n
analytic_property_list.append(brain.Movement_getFunctionTitle())\n
elif property_name == \'funding\':\n
analytic_property_list.append(brain.Movement_getFundingTitle())\n
else:\n
analytic_property_list.append(movement.getProperty(property_name))\n
\n
return "%s\\n%s" % (title, \', \'.join([x for x in analytic_property_list if x]))\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>brain, selection=None, **kwd</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Movement_getExplanationTitleAndAnalytics</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>if brain.payment_uid:\n
bank_account = context.getPortalObject().portal_catalog.getObject(brain.payment_uid)\n
if bank_account is not None:\n
# XXX use preference ?\n
if bank_account.getReference():\n
return \'%s - %s\' % (bank_account.getReference(), bank_account.getTitle())\n
return bank_account.getTitle()\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>brain, selection=None, **kwd</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Movement_getPaymentTitle</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>portal = context.getPortalObject()\n
\n
accounting_currency_reference_cache = container.REQUEST.get(\'%s.cache\' % script.id, {})\n
def getAccountingCurrencyReference(section_relative_url):\n
try:\n
return accounting_currency_reference_cache[section_relative_url]\n
except KeyError:\n
reference = \'\'\n
if section_relative_url:\n
section = portal.restrictedTraverse(section_relative_url, None)\n
if section is not None:\n
reference = section.getProperty(\'price_currency_reference\')\n
accounting_currency_reference_cache[section_relative_url] = reference\n
return reference\n
\n
return getAccountingCurrencyReference(brain.section_relative_url)\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>brain, *args, **kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Movement_getSectionPriceCurrency</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -721,9 +721,11 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -721,9 +721,11 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
# create some projects # create some projects
self.project_1 = self.portal.project_module.newContent( self.project_1 = self.portal.project_module.newContent(
portal_type='Project', portal_type='Project',
reference='P1',
title='Project 1') title='Project 1')
self.project_2 = self.portal.project_module.newContent( self.project_2 = self.portal.project_module.newContent(
portal_type='Project', portal_type='Project',
reference='P2',
title='Project 2') title='Project 2')
account_module = self.portal.account_module account_module = self.portal.account_module
...@@ -732,6 +734,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -732,6 +734,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
title='Function a Project 1', title='Function a Project 1',
source_reference='1', source_reference='1',
simulation_state='delivered', simulation_state='delivered',
reference='FaP1',
destination_section_value=self.organisation_module.client_1, destination_section_value=self.organisation_module.client_1,
source_function_value=self.function_a, source_function_value=self.function_a,
source_project_value=self.project_1, source_project_value=self.project_1,
...@@ -744,6 +747,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -744,6 +747,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
portal_type='Sale Invoice Transaction', portal_type='Sale Invoice Transaction',
title='Function b Project 2', title='Function b Project 2',
source_reference='2', source_reference='2',
reference='FbP2',
simulation_state='delivered', simulation_state='delivered',
destination_section_value=self.organisation_module.client_1, destination_section_value=self.organisation_module.client_1,
source_function_value=self.function_b, source_function_value=self.function_b,
...@@ -757,6 +761,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -757,6 +761,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
portal_type='Sale Invoice Transaction', portal_type='Sale Invoice Transaction',
title='No function no project', title='No function no project',
source_reference='3', source_reference='3',
reference='nono',
simulation_state='delivered', simulation_state='delivered',
destination_section_value=self.organisation_module.client_1, destination_section_value=self.organisation_module.client_1,
start_date=DateTime(2006, 2, 2), start_date=DateTime(2006, 2, 2),
...@@ -772,6 +777,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -772,6 +777,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
title='Invoice to a client', title='Invoice to a client',
source_reference='1', source_reference='1',
simulation_state='delivered', simulation_state='delivered',
reference='Ic',
destination_section_value=self.organisation_module.client_1, destination_section_value=self.organisation_module.client_1,
start_date=DateTime(2006, 2, 2), start_date=DateTime(2006, 2, 2),
lines=(dict(source_value=account_module.receivable, lines=(dict(source_value=account_module.receivable,
...@@ -782,6 +788,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -782,6 +788,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
portal_type='Sale Invoice Transaction', portal_type='Sale Invoice Transaction',
title='Invoice to a supplier', title='Invoice to a supplier',
source_reference='2', source_reference='2',
reference='Is',
simulation_state='delivered', simulation_state='delivered',
destination_section_value=self.organisation_module.supplier, destination_section_value=self.organisation_module.supplier,
start_date=DateTime(2006, 2, 2), start_date=DateTime(2006, 2, 2),
...@@ -1125,6 +1132,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -1125,6 +1132,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
request_form['hide_analytic'] = False request_form['hide_analytic'] = False
request_form['gap_list'] = ['my_country/my_accounting_standards/4/41'] request_form['gap_list'] = ['my_country/my_accounting_standards/4/41']
request_form['omit_grouping_reference'] = True request_form['omit_grouping_reference'] = True
request_form['export'] = False
report_section_list = self.getReportSectionList( report_section_list = self.getReportSectionList(
self.portal.accounting_module, self.portal.accounting_module,
...@@ -1139,31 +1147,27 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -1139,31 +1147,27 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
data_line_list = [l for l in line_list if l.isDataLine()] data_line_list = [l for l in line_list if l.isDataLine()]
# report layout # report layout
self.assertEqual(['Movement_getSpecificReference', self.assertEqual( ['date', 'Movement_getSpecificReference',
'Movement_getExplanationTitle', 'date', 'Movement_getExplanationTitleAndAnalytics', 'debit_price',
'Movement_getExplanationTranslatedPortalType', 'credit_price', 'running_total_price', 'grouping_reference',
'Movement_getExplanationReference', 'Movement_getMirrorSectionTitle', 'grouping_date', 'modification_date',
'debit_price', 'credit_price', 'running_total_price'], 'getTranslatedSimulationStateTitle'],
data_line_list[0].column_id_list) data_line_list[0].column_id_list)
self.assertEqual(1, len(data_line_list)) self.assertEqual(1, len(data_line_list))
self.checkLineProperties(data_line_list[0], self.checkLineProperties(data_line_list[0],
Movement_getSpecificReference='2', Movement_getSpecificReference='2',
Movement_getExplanationTitle='Grouped after period', Movement_getExplanationTitleAndAnalytics='Grouped after period\nref2',
grouping_reference='B',
grouping_date=DateTime(2006, 3, 2),
date=DateTime(2006, 2, 3), date=DateTime(2006, 2, 3),
Movement_getExplanationTranslatedPortalType='Sale Invoice Transaction',
Movement_getExplanationReference='ref2',
Movement_getMirrorSectionTitle='Client 2',
debit_price=239.20, credit_price=0, running_total_price=239.20, ) debit_price=239.20, credit_price=0, running_total_price=239.20, )
self.assertTrue(line_list[-1].isStatLine()) self.assertTrue(line_list[-1].isStatLine())
self.checkLineProperties(line_list[-1], self.checkLineProperties(line_list[-1],
Movement_getSpecificReference=None, Movement_getSpecificReference=None,
Movement_getExplanationTitle=None, Movement_getExplanationTitleAndAnalytics=None,
date=None, date=None,
Movement_getExplanationTranslatedPortalType=None,
Movement_getExplanationReference=None,
Movement_getMirrorSectionTitle=None,
debit_price=239.20, credit_price=0, ) debit_price=239.20, credit_price=0, )
self.assertEqual('Total', report_section_list[1].getTitle()) self.assertEqual('Total', report_section_list[1].getTitle())
...@@ -3425,6 +3429,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3425,6 +3429,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
request_form['section_category_strict'] = False request_form['section_category_strict'] = False
request_form['simulation_state'] = ['delivered'] request_form['simulation_state'] = ['delivered']
request_form['hide_analytic'] = False request_form['hide_analytic'] = False
request_form['export'] = False
report_section_list = self.getReportSectionList( report_section_list = self.getReportSectionList(
self.portal.accounting_module, self.portal.accounting_module,
...@@ -3454,40 +3459,31 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3454,40 +3459,31 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
AccountModule_viewGeneralLedgerReport.your_currency.get_value('default')) AccountModule_viewGeneralLedgerReport.your_currency.get_value('default'))
# report layout # report layout
self.assertEqual(['Movement_getSpecificReference', self.assertEqual( ['date', 'Movement_getSpecificReference',
'Movement_getExplanationTitle', 'date', 'Movement_getExplanationTitleAndAnalytics', 'debit_price',
'Movement_getExplanationTranslatedPortalType', 'credit_price', 'running_total_price', 'grouping_reference',
'Movement_getExplanationReference', 'Movement_getMirrorSectionTitle', 'grouping_date', 'modification_date',
'debit_price', 'credit_price', 'running_total_price'], 'getTranslatedSimulationStateTitle'],
data_line_list[0].column_id_list) data_line_list[0].column_id_list)
self.assertEqual(2, len(data_line_list)) self.assertEqual(2, len(data_line_list))
self.checkLineProperties(data_line_list[0], self.checkLineProperties(data_line_list[0],
Movement_getSpecificReference='1', Movement_getSpecificReference='1',
Movement_getExplanationTitle='Transaction 1', Movement_getExplanationTitleAndAnalytics='Transaction 1\nref1',
date=DateTime(2006, 2, 1), date=DateTime(2006, 2, 1),
Movement_getExplanationTranslatedPortalType='Accounting Transaction',
Movement_getExplanationReference='ref1',
Movement_getMirrorSectionTitle='Client 1',
debit_price=0, credit_price=100, running_total_price=-100, ) debit_price=0, credit_price=100, running_total_price=-100, )
self.checkLineProperties(data_line_list[1], self.checkLineProperties(data_line_list[1],
Movement_getSpecificReference='2', Movement_getSpecificReference='2',
Movement_getExplanationTitle='Transaction 2', Movement_getExplanationTitleAndAnalytics='Transaction 2\nref2',
date=DateTime(2006, 2, 1, 0, 1), date=DateTime(2006, 2, 1, 0, 1),
Movement_getExplanationTranslatedPortalType='Accounting Transaction',
Movement_getExplanationReference='ref2',
Movement_getMirrorSectionTitle='Client 1',
debit_price=200, credit_price=0, running_total_price=100, ) debit_price=200, credit_price=0, running_total_price=100, )
self.assertTrue(line_list[-1].isStatLine()) self.assertTrue(line_list[-1].isStatLine())
self.checkLineProperties(line_list[-1], self.checkLineProperties(line_list[-1],
Movement_getSpecificReference=None, Movement_getSpecificReference=None,
Movement_getExplanationTitle=None, Movement_getExplanationTitleAndAnalytics=None,
date=None, date=None,
Movement_getExplanationTranslatedPortalType=None,
Movement_getExplanationReference=None,
Movement_getMirrorSectionTitle=None,
debit_price=200, credit_price=100, ) debit_price=200, credit_price=100, )
self.assertEqual('41 - Receivable (Client 1)', self.assertEqual('41 - Receivable (Client 1)',
...@@ -3497,58 +3493,39 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3497,58 +3493,39 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
self.assertEqual(5, len(data_line_list)) self.assertEqual(5, len(data_line_list))
self.checkLineProperties(data_line_list[0], self.checkLineProperties(data_line_list[0],
Movement_getSpecificReference='1', Movement_getSpecificReference='1',
Movement_getExplanationTitle='Transaction 1', Movement_getExplanationTitleAndAnalytics='Transaction 1\nref1',
date=DateTime(2006, 2, 1), date=DateTime(2006, 2, 1),
Movement_getExplanationTranslatedPortalType='Accounting Transaction',
Movement_getExplanationReference='ref1',
Movement_getMirrorSectionTitle='Client 1',
debit_price=100, credit_price=0, running_total_price=100, ) debit_price=100, credit_price=0, running_total_price=100, )
self.checkLineProperties(data_line_list[1], self.checkLineProperties(data_line_list[1],
Movement_getSpecificReference='2', Movement_getSpecificReference='2',
Movement_getExplanationTitle='Transaction 2', Movement_getExplanationTitleAndAnalytics='Transaction 2\nref2',
date=DateTime(2006, 2, 1, 0, 1), date=DateTime(2006, 2, 1, 0, 1),
Movement_getExplanationTranslatedPortalType='Accounting Transaction',
Movement_getExplanationReference='ref2',
Movement_getMirrorSectionTitle='Client 1',
debit_price=0, credit_price=200, running_total_price=-100, ) debit_price=0, credit_price=200, running_total_price=-100, )
self.checkLineProperties(data_line_list[2], self.checkLineProperties(data_line_list[2],
Movement_getSpecificReference='3', Movement_getSpecificReference='3',
Movement_getExplanationTitle='Transaction 3', Movement_getExplanationTitleAndAnalytics='Transaction 3\nref3',
date=DateTime(2006, 2, 2, 0, 2), date=DateTime(2006, 2, 2, 0, 2),
Movement_getExplanationTranslatedPortalType='Payment Transaction',
Movement_getExplanationReference='ref3',
Movement_getMirrorSectionTitle='Client 1',
debit_price=300, credit_price=0, running_total_price=200, ) debit_price=300, credit_price=0, running_total_price=200, )
self.checkLineProperties(data_line_list[3], self.checkLineProperties(data_line_list[3],
Movement_getSpecificReference='6', Movement_getSpecificReference='6',
Movement_getExplanationTitle='Transaction 6', Movement_getExplanationTitleAndAnalytics='Transaction 6\nref6',
date=DateTime(2006, 2, 2, 0, 5), date=DateTime(2006, 2, 2, 0, 5),
Movement_getExplanationTranslatedPortalType
='Purchase Invoice Transaction',
Movement_getExplanationReference='ref6',
Movement_getMirrorSectionTitle='Client 1',
debit_price=600, credit_price=0, running_total_price=800, ) debit_price=600, credit_price=0, running_total_price=800, )
self.checkLineProperties(data_line_list[4], self.checkLineProperties(data_line_list[4],
Movement_getSpecificReference='8', Movement_getSpecificReference='8',
Movement_getExplanationTitle='Transaction 8', Movement_getExplanationTitleAndAnalytics='Transaction 8\nref8',
date=DateTime(2006, 2, 3), date=DateTime(2006, 2, 3),
Movement_getExplanationTranslatedPortalType='Accounting Transaction',
Movement_getExplanationReference='ref8',
Movement_getMirrorSectionTitle='Client 1',
debit_price=800, credit_price=0, running_total_price=1600, ) debit_price=800, credit_price=0, running_total_price=1600, )
self.assertTrue(line_list[-1].isStatLine()) self.assertTrue(line_list[-1].isStatLine())
self.checkLineProperties(line_list[-1], self.checkLineProperties(line_list[-1],
Movement_getSpecificReference=None, Movement_getSpecificReference=None,
Movement_getExplanationTitle=None, Movement_getExplanationTitleAndAnalytics=None,
date=None, date=None,
Movement_getExplanationTranslatedPortalType=None,
Movement_getExplanationReference=None,
Movement_getMirrorSectionTitle=None,
debit_price=1800, credit_price=200, ) debit_price=1800, credit_price=200, )
self.assertEqual('41 - Receivable (Client 2)', self.assertEqual('41 - Receivable (Client 2)',
...@@ -3558,11 +3535,8 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3558,11 +3535,8 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
self.assertEqual(1, len(data_line_list)) self.assertEqual(1, len(data_line_list))
self.checkLineProperties(data_line_list[0], self.checkLineProperties(data_line_list[0],
Movement_getSpecificReference='4', Movement_getSpecificReference='4',
Movement_getExplanationTitle='Transaction 4', Movement_getExplanationTitleAndAnalytics='Transaction 4\nref4',
date=DateTime(2006, 2, 2, 0, 3), date=DateTime(2006, 2, 2, 0, 3),
Movement_getExplanationTranslatedPortalType='Payment Transaction',
Movement_getExplanationReference='ref4',
Movement_getMirrorSectionTitle='Client 2',
debit_price=400, credit_price=0, running_total_price=400, ) debit_price=400, credit_price=0, running_total_price=400, )
self.assertTrue(line_list[-1].isStatLine()) self.assertTrue(line_list[-1].isStatLine())
...@@ -3575,11 +3549,8 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3575,11 +3549,8 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
self.assertEqual(1, len(data_line_list)) self.assertEqual(1, len(data_line_list))
self.checkLineProperties(data_line_list[0], self.checkLineProperties(data_line_list[0],
Movement_getSpecificReference='5', Movement_getSpecificReference='5',
Movement_getExplanationTitle='Transaction 5', Movement_getExplanationTitleAndAnalytics='Transaction 5\nref5',
date=DateTime(2006, 2, 2, 0, 4), date=DateTime(2006, 2, 2, 0, 4),
Movement_getExplanationTranslatedPortalType='Accounting Transaction',
Movement_getExplanationReference='ref5',
Movement_getMirrorSectionTitle='John Smith',
debit_price=500, credit_price=0, running_total_price=500, ) debit_price=500, credit_price=0, running_total_price=500, )
self.assertTrue(line_list[-1].isStatLine()) self.assertTrue(line_list[-1].isStatLine())
...@@ -3592,48 +3563,32 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3592,48 +3563,32 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
self.assertEqual(5, len(data_line_list)) self.assertEqual(5, len(data_line_list))
self.checkLineProperties(data_line_list[0], self.checkLineProperties(data_line_list[0],
Movement_getSpecificReference='3', Movement_getSpecificReference='3',
Movement_getExplanationTitle='Transaction 3', Movement_getExplanationTitleAndAnalytics='Transaction 3\nref3',
date=DateTime(2006, 2, 2, 0, 2), date=DateTime(2006, 2, 2, 0, 2),
Movement_getExplanationTranslatedPortalType='Payment Transaction',
Movement_getExplanationReference='ref3',
Movement_getMirrorSectionTitle='Client 1',
debit_price=0, credit_price=300, running_total_price=-300, ) debit_price=0, credit_price=300, running_total_price=-300, )
self.checkLineProperties(data_line_list[1], self.checkLineProperties(data_line_list[1],
Movement_getSpecificReference='4', Movement_getSpecificReference='4',
Movement_getExplanationTitle='Transaction 4', Movement_getExplanationTitleAndAnalytics='Transaction 4\nref4',
date=DateTime(2006, 2, 2, 0, 3), date=DateTime(2006, 2, 2, 0, 3),
Movement_getExplanationTranslatedPortalType='Payment Transaction',
Movement_getExplanationReference='ref4',
Movement_getMirrorSectionTitle='Client 2',
debit_price=0, credit_price=400, running_total_price=-700, ) debit_price=0, credit_price=400, running_total_price=-700, )
self.checkLineProperties(data_line_list[2], self.checkLineProperties(data_line_list[2],
Movement_getSpecificReference='5', Movement_getSpecificReference='5',
Movement_getExplanationTitle='Transaction 5', Movement_getExplanationTitleAndAnalytics='Transaction 5\nref5',
date=DateTime(2006, 2, 2, 0, 4), date=DateTime(2006, 2, 2, 0, 4),
Movement_getExplanationTranslatedPortalType='Accounting Transaction',
Movement_getExplanationReference='ref5',
Movement_getMirrorSectionTitle='John Smith',
debit_price=0, credit_price=500, running_total_price=-1200, ) debit_price=0, credit_price=500, running_total_price=-1200, )
self.checkLineProperties(data_line_list[3], self.checkLineProperties(data_line_list[3],
Movement_getSpecificReference='6', Movement_getSpecificReference='6',
Movement_getExplanationTitle='Transaction 6', Movement_getExplanationTitleAndAnalytics='Transaction 6\nref6',
date=DateTime(2006, 2, 2, 0, 5), date=DateTime(2006, 2, 2, 0, 5),
Movement_getExplanationTranslatedPortalType
='Purchase Invoice Transaction',
Movement_getExplanationReference='ref6',
Movement_getMirrorSectionTitle='Client 1',
debit_price=0, credit_price=600, running_total_price=-1800, ) debit_price=0, credit_price=600, running_total_price=-1800, )
self.checkLineProperties(data_line_list[4], self.checkLineProperties(data_line_list[4],
Movement_getSpecificReference='8', Movement_getSpecificReference='8',
Movement_getExplanationTitle='Transaction 8', Movement_getExplanationTitleAndAnalytics='Transaction 8\nref8',
date=DateTime(2006, 2, 3), date=DateTime(2006, 2, 3),
Movement_getExplanationTranslatedPortalType='Accounting Transaction',
Movement_getExplanationReference='ref8',
Movement_getMirrorSectionTitle='Client 1',
debit_price=0, credit_price=800, running_total_price=-2600, ) debit_price=0, credit_price=800, running_total_price=-2600, )
self.assertTrue(line_list[-1].isStatLine()) self.assertTrue(line_list[-1].isStatLine())
...@@ -3662,6 +3617,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3662,6 +3617,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
request_form['section_category_strict'] = False request_form['section_category_strict'] = False
request_form['simulation_state'] = ['delivered'] request_form['simulation_state'] = ['delivered']
request_form['hide_analytic'] = False request_form['hide_analytic'] = False
request_form['export'] = False
report_section_list = self.getReportSectionList( report_section_list = self.getReportSectionList(
self.portal.accounting_module, self.portal.accounting_module,
...@@ -3676,30 +3632,21 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3676,30 +3632,21 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
self.assertEqual(2, len(data_line_list)) self.assertEqual(2, len(data_line_list))
self.checkLineProperties(data_line_list[0], self.checkLineProperties(data_line_list[0],
Movement_getSpecificReference='1', Movement_getSpecificReference='1',
Movement_getExplanationTitle='Transaction 1', Movement_getExplanationTitleAndAnalytics='Transaction 1\nref1',
date=DateTime(2006, 2, 1), date=DateTime(2006, 2, 1),
Movement_getExplanationTranslatedPortalType='Accounting Transaction',
Movement_getExplanationReference='ref1',
Movement_getMirrorSectionTitle='Client 1',
debit_price=0, credit_price=100, running_total_price=-100, ) debit_price=0, credit_price=100, running_total_price=-100, )
self.checkLineProperties(data_line_list[1], self.checkLineProperties(data_line_list[1],
Movement_getSpecificReference='2', Movement_getSpecificReference='2',
Movement_getExplanationTitle='Transaction 2', Movement_getExplanationTitleAndAnalytics='Transaction 2\nref2',
date=DateTime(2006, 2, 1, 0, 1), date=DateTime(2006, 2, 1, 0, 1),
Movement_getExplanationTranslatedPortalType='Accounting Transaction',
Movement_getExplanationReference='ref2',
Movement_getMirrorSectionTitle='Client 1',
debit_price=200, credit_price=0, running_total_price=100, ) debit_price=200, credit_price=0, running_total_price=100, )
self.assertTrue(line_list[-1].isStatLine()) self.assertTrue(line_list[-1].isStatLine())
self.checkLineProperties(line_list[-1], self.checkLineProperties(line_list[-1],
Movement_getSpecificReference=None, Movement_getSpecificReference=None,
Movement_getExplanationTitle=None, Movement_getExplanationTitleAndAnalytics=None,
date=None, date=None,
Movement_getExplanationTranslatedPortalType=None,
Movement_getExplanationReference=None,
Movement_getMirrorSectionTitle=None,
debit_price=200, credit_price=100, ) debit_price=200, credit_price=100, )
self.assertEqual('Total', report_section_list[1].getTitle()) self.assertEqual('Total', report_section_list[1].getTitle())
...@@ -3720,6 +3667,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3720,6 +3667,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
request_form['simulation_state'] = ['delivered'] request_form['simulation_state'] = ['delivered']
request_form['function'] = 'function/a' request_form['function'] = 'function/a'
request_form['hide_analytic'] = False request_form['hide_analytic'] = False
request_form['export'] = False
report_section_list = self.getReportSectionList( report_section_list = self.getReportSectionList(
self.portal.accounting_module, self.portal.accounting_module,
...@@ -3731,10 +3679,9 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3731,10 +3679,9 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
self.assertEqual(1, len(data_line_list)) self.assertEqual(1, len(data_line_list))
self.checkLineProperties(data_line_list[0], self.checkLineProperties(data_line_list[0],
Movement_getSpecificReference='1', Movement_getSpecificReference='1',
Movement_getExplanationTitle='Function a Project 1', Movement_getExplanationTitleAndAnalytics=
'Function a Project 1\nFaP1',
date=DateTime(2006, 2, 2), date=DateTime(2006, 2, 2),
Movement_getExplanationTranslatedPortalType='Sale Invoice Transaction',
Movement_getMirrorSectionTitle='Client 1',
debit_price=500, credit_price=0, running_total_price=500, ) debit_price=500, credit_price=0, running_total_price=500, )
self.assertTrue(line_list[-1].isStatLine()) self.assertTrue(line_list[-1].isStatLine())
self.checkLineProperties(line_list[-1], debit_price=500, credit_price=0) self.checkLineProperties(line_list[-1], debit_price=500, credit_price=0)
...@@ -3744,10 +3691,9 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3744,10 +3691,9 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
self.assertEqual(1, len(data_line_list)) self.assertEqual(1, len(data_line_list))
self.checkLineProperties(data_line_list[0], self.checkLineProperties(data_line_list[0],
Movement_getSpecificReference='1', Movement_getSpecificReference='1',
Movement_getExplanationTitle='Function a Project 1', Movement_getExplanationTitleAndAnalytics=
'Function a Project 1\nFaP1',
date=DateTime(2006, 2, 2), date=DateTime(2006, 2, 2),
Movement_getExplanationTranslatedPortalType='Sale Invoice Transaction',
Movement_getMirrorSectionTitle='Client 1',
debit_price=0, credit_price=500, running_total_price=-500, ) debit_price=0, credit_price=500, running_total_price=-500, )
self.assertTrue(line_list[-1].isStatLine()) self.assertTrue(line_list[-1].isStatLine())
self.checkLineProperties(line_list[-1], debit_price=0, credit_price=500) self.checkLineProperties(line_list[-1], debit_price=0, credit_price=500)
...@@ -3769,6 +3715,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3769,6 +3715,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
request_form['simulation_state'] = ['delivered'] request_form['simulation_state'] = ['delivered']
request_form['project'] = 'None' request_form['project'] = 'None'
request_form['hide_analytic'] = False request_form['hide_analytic'] = False
request_form['export'] = False
report_section_list = self.getReportSectionList( report_section_list = self.getReportSectionList(
self.portal.accounting_module, self.portal.accounting_module,
...@@ -3780,10 +3727,8 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3780,10 +3727,8 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
self.assertEqual(1, len(data_line_list)) self.assertEqual(1, len(data_line_list))
self.checkLineProperties(data_line_list[0], self.checkLineProperties(data_line_list[0],
Movement_getSpecificReference='3', Movement_getSpecificReference='3',
Movement_getExplanationTitle='No function no project', Movement_getExplanationTitleAndAnalytics='No function no project\nnono',
date=DateTime(2006, 2, 2), date=DateTime(2006, 2, 2),
Movement_getExplanationTranslatedPortalType='Sale Invoice Transaction',
Movement_getMirrorSectionTitle='Client 1',
debit_price=700, credit_price=0, running_total_price=700, ) debit_price=700, credit_price=0, running_total_price=700, )
self.assertTrue(line_list[-1].isStatLine()) self.assertTrue(line_list[-1].isStatLine())
self.checkLineProperties(line_list[-1], debit_price=700, credit_price=0) self.checkLineProperties(line_list[-1], debit_price=700, credit_price=0)
...@@ -3793,10 +3738,8 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3793,10 +3738,8 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
self.assertEqual(1, len(data_line_list)) self.assertEqual(1, len(data_line_list))
self.checkLineProperties(data_line_list[0], self.checkLineProperties(data_line_list[0],
Movement_getSpecificReference='3', Movement_getSpecificReference='3',
Movement_getExplanationTitle='No function no project', Movement_getExplanationTitleAndAnalytics='No function no project\nnono',
date=DateTime(2006, 2, 2), date=DateTime(2006, 2, 2),
Movement_getExplanationTranslatedPortalType='Sale Invoice Transaction',
Movement_getMirrorSectionTitle='Client 1',
debit_price=0, credit_price=700, running_total_price=-700, ) debit_price=0, credit_price=700, running_total_price=-700, )
self.assertTrue(line_list[-1].isStatLine()) self.assertTrue(line_list[-1].isStatLine())
self.checkLineProperties(line_list[-1], debit_price=0, credit_price=700) self.checkLineProperties(line_list[-1], debit_price=0, credit_price=700)
...@@ -3819,6 +3762,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3819,6 +3762,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
request_form['simulation_state'] = ['delivered'] request_form['simulation_state'] = ['delivered']
request_form['project'] = self.project_1.getRelativeUrl() request_form['project'] = self.project_1.getRelativeUrl()
request_form['hide_analytic'] = False request_form['hide_analytic'] = False
request_form['export'] = False
report_section_list = self.getReportSectionList( report_section_list = self.getReportSectionList(
self.portal.accounting_module, self.portal.accounting_module,
...@@ -3830,10 +3774,8 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3830,10 +3774,8 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
self.assertEqual(1, len(data_line_list)) self.assertEqual(1, len(data_line_list))
self.checkLineProperties(data_line_list[0], self.checkLineProperties(data_line_list[0],
Movement_getSpecificReference='1', Movement_getSpecificReference='1',
Movement_getExplanationTitle='Function a Project 1', Movement_getExplanationTitleAndAnalytics='Function a Project 1\nFaP1',
date=DateTime(2006, 2, 2), date=DateTime(2006, 2, 2),
Movement_getExplanationTranslatedPortalType='Sale Invoice Transaction',
Movement_getMirrorSectionTitle='Client 1',
debit_price=500, credit_price=0, running_total_price=500, ) debit_price=500, credit_price=0, running_total_price=500, )
self.assertTrue(line_list[-1].isStatLine()) self.assertTrue(line_list[-1].isStatLine())
self.checkLineProperties(line_list[-1], debit_price=500, credit_price=0) self.checkLineProperties(line_list[-1], debit_price=500, credit_price=0)
...@@ -3843,10 +3785,8 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3843,10 +3785,8 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
self.assertEqual(1, len(data_line_list)) self.assertEqual(1, len(data_line_list))
self.checkLineProperties(data_line_list[0], self.checkLineProperties(data_line_list[0],
Movement_getSpecificReference='1', Movement_getSpecificReference='1',
Movement_getExplanationTitle='Function a Project 1', Movement_getExplanationTitleAndAnalytics='Function a Project 1\nFaP1',
date=DateTime(2006, 2, 2), date=DateTime(2006, 2, 2),
Movement_getExplanationTranslatedPortalType='Sale Invoice Transaction',
Movement_getMirrorSectionTitle='Client 1',
debit_price=0, credit_price=500, running_total_price=-500, ) debit_price=0, credit_price=500, running_total_price=-500, )
self.assertTrue(line_list[-1].isStatLine()) self.assertTrue(line_list[-1].isStatLine())
self.checkLineProperties(line_list[-1], debit_price=0, credit_price=500) self.checkLineProperties(line_list[-1], debit_price=0, credit_price=500)
...@@ -3868,6 +3808,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3868,6 +3808,7 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
request_form['simulation_state'] = ['delivered'] request_form['simulation_state'] = ['delivered']
request_form['mirror_section_category_list'] = ['role/supplier'] request_form['mirror_section_category_list'] = ['role/supplier']
request_form['hide_analytic'] = False request_form['hide_analytic'] = False
request_form['export'] = False
report_section_list = self.getReportSectionList( report_section_list = self.getReportSectionList(
self.portal.accounting_module, self.portal.accounting_module,
...@@ -3879,10 +3820,8 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3879,10 +3820,8 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
self.assertEqual(1, len(data_line_list)) self.assertEqual(1, len(data_line_list))
self.checkLineProperties(data_line_list[0], self.checkLineProperties(data_line_list[0],
Movement_getSpecificReference='2', Movement_getSpecificReference='2',
Movement_getExplanationTitle='Invoice to a supplier', Movement_getExplanationTitleAndAnalytics='Invoice to a supplier\nIs',
date=DateTime(2006, 2, 2), date=DateTime(2006, 2, 2),
Movement_getExplanationTranslatedPortalType='Sale Invoice Transaction',
Movement_getMirrorSectionTitle='Supplier',
debit_price=300, credit_price=0, running_total_price=300, ) debit_price=300, credit_price=0, running_total_price=300, )
self.assertTrue(line_list[-1].isStatLine()) self.assertTrue(line_list[-1].isStatLine())
self.checkLineProperties(line_list[-1], debit_price=300, credit_price=0) self.checkLineProperties(line_list[-1], debit_price=300, credit_price=0)
...@@ -3892,10 +3831,8 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase): ...@@ -3892,10 +3831,8 @@ class TestAccountingReports(AccountingTestCase, ERP5ReportTestCase):
self.assertEqual(1, len(data_line_list)) self.assertEqual(1, len(data_line_list))
self.checkLineProperties(data_line_list[0], self.checkLineProperties(data_line_list[0],
Movement_getSpecificReference='2', Movement_getSpecificReference='2',
Movement_getExplanationTitle='Invoice to a supplier', Movement_getExplanationTitleAndAnalytics='Invoice to a supplier\nIs',
date=DateTime(2006, 2, 2), date=DateTime(2006, 2, 2),
Movement_getExplanationTranslatedPortalType='Sale Invoice Transaction',
Movement_getMirrorSectionTitle='Supplier',
debit_price=0, credit_price=300, running_total_price=-300, ) debit_price=0, credit_price=300, running_total_price=-300, )
self.assertTrue(line_list[-1].isStatLine()) self.assertTrue(line_list[-1].isStatLine())
self.checkLineProperties(line_list[-1], debit_price=0, credit_price=300) self.checkLineProperties(line_list[-1], debit_price=0, credit_price=300)
...@@ -4232,9 +4169,11 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase): ...@@ -4232,9 +4169,11 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase):
# create some projects # create some projects
self.project_1 = self.portal.project_module.newContent( self.project_1 = self.portal.project_module.newContent(
portal_type='Project', portal_type='Project',
reference='P1',
title='Project 1') title='Project 1')
self.project_2 = self.portal.project_module.newContent( self.project_2 = self.portal.project_module.newContent(
portal_type='Project', portal_type='Project',
reference='P2',
title='Project 2') title='Project 2')
preference = self.portal.portal_preferences.getActivePreference() preference = self.portal.portal_preferences.getActivePreference()
...@@ -4251,6 +4190,7 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase): ...@@ -4251,6 +4190,7 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase):
self._makeOne( self._makeOne(
portal_type='Sale Invoice Transaction', portal_type='Sale Invoice Transaction',
title='Detailed Transaction', title='Detailed Transaction',
reference='DT',
source_reference='1', source_reference='1',
simulation_state='delivered', simulation_state='delivered',
destination_section_value=self.portal.organisation_module.client_1, destination_section_value=self.portal.organisation_module.client_1,
...@@ -4327,21 +4267,21 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase): ...@@ -4327,21 +4267,21 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase):
debit=1500, debit=1500,
credit=0) credit=0)
self.checkLineProperties(data_line_list[1], self.checkLineProperties(data_line_list[1],
project='Project 1', project='P1 - Project 1',
function='a', function='a',
product_line_translated_title='pl1', product_line_translated_title='pl1',
node_title='7', node_title='7',
debit=0, debit=0,
credit=300) credit=300)
self.checkLineProperties(data_line_list[2], self.checkLineProperties(data_line_list[2],
project='Project 1', project='P1 - Project 1',
function='b', function='b',
product_line_translated_title='pl1', product_line_translated_title='pl1',
node_title='7', node_title='7',
debit=0, debit=0,
credit=500) credit=500)
self.checkLineProperties(data_line_list[3], self.checkLineProperties(data_line_list[3],
project='Project 2', project='P2 - Project 2',
function='b', function='b',
product_line_translated_title=None, product_line_translated_title=None,
node_title='7', node_title='7',
...@@ -4422,21 +4362,21 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase): ...@@ -4422,21 +4362,21 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase):
'debit_price', 'credit_price', 'running_total_price']) 'debit_price', 'credit_price', 'running_total_price'])
self.checkLineProperties(data_line_list[0], self.checkLineProperties(data_line_list[0],
project='Project 1', project='P1 - Project 1',
function='a', function='a',
product_line_translated_title='pl1', product_line_translated_title='pl1',
debit_price=0, debit_price=0,
credit_price=300, credit_price=300,
running_total_price=-300) running_total_price=-300)
self.checkLineProperties(data_line_list[1], self.checkLineProperties(data_line_list[1],
project='Project 1', project='P1 - Project 1',
function='b', function='b',
product_line_translated_title='pl1', product_line_translated_title='pl1',
debit_price=0, debit_price=0,
credit_price=500, credit_price=500,
running_total_price=-800) running_total_price=-800)
self.checkLineProperties(data_line_list[2], self.checkLineProperties(data_line_list[2],
project='Project 2', project='P2 - Project 2',
function='b', function='b',
product_line_translated_title=None, product_line_translated_title=None,
debit_price=0, debit_price=0,
...@@ -4494,6 +4434,7 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase): ...@@ -4494,6 +4434,7 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase):
request_form['section_category_strict'] = False request_form['section_category_strict'] = False
request_form['simulation_state'] = ['delivered'] request_form['simulation_state'] = ['delivered']
request_form['hide_analytic'] = False request_form['hide_analytic'] = False
request_form['export'] = False
report_section_list = self.getReportSectionList( report_section_list = self.getReportSectionList(
self.portal.accounting_module, self.portal.accounting_module,
...@@ -4502,33 +4443,29 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase): ...@@ -4502,33 +4443,29 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase):
line_list = self.getListBoxLineList(report_section_list[1]) line_list = self.getListBoxLineList(report_section_list[1])
data_line_list = [l for l in line_list if l.isDataLine()] data_line_list = [l for l in line_list if l.isDataLine()]
# FIXME: order of columns is inconsistant in GL and Account Statement
self.assertEqual(['Movement_getSpecificReference', self.assertEqual( ['date', 'Movement_getSpecificReference',
'Movement_getExplanationTitle', 'date', 'Movement_getExplanationTitleAndAnalytics', 'debit_price',
'Movement_getExplanationTranslatedPortalType', 'credit_price', 'running_total_price', 'grouping_reference',
'Movement_getExplanationReference', 'Movement_getMirrorSectionTitle', 'grouping_date', 'modification_date',
'function', 'project', 'product_line_translated_title', 'getTranslatedSimulationStateTitle'],
'debit_price', 'credit_price', 'running_total_price'],
data_line_list[0].column_id_list) data_line_list[0].column_id_list)
self.checkLineProperties(data_line_list[0], self.checkLineProperties(data_line_list[0],
project='Project 1', Movement_getExplanationTitleAndAnalytics='''Detailed Transaction
function='a', DT, a, P1 - Project 1, pl1''',
product_line_translated_title='pl1', debit_price=0,
debit_price=0, credit_price=300,
credit_price=300, running_total_price=-300)
running_total_price=-300)
self.checkLineProperties(data_line_list[1], self.checkLineProperties(data_line_list[1],
project='Project 1', Movement_getExplanationTitleAndAnalytics='''Detailed Transaction
function='b', DT, b, P1 - Project 1, pl1''',
product_line_translated_title='pl1', debit_price=0,
debit_price=0, credit_price=500,
credit_price=500, running_total_price=-800)
running_total_price=-800)
self.checkLineProperties(data_line_list[2], self.checkLineProperties(data_line_list[2],
project='Project 2', Movement_getExplanationTitleAndAnalytics='''Detailed Transaction
function='b', DT, b, P2 - Project 2''',
product_line_translated_title=None,
debit_price=0, debit_price=0,
credit_price=700, credit_price=700,
running_total_price=-1500) running_total_price=-1500)
...@@ -4553,6 +4490,7 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase): ...@@ -4553,6 +4490,7 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase):
request_form['section_category_strict'] = False request_form['section_category_strict'] = False
request_form['simulation_state'] = ['delivered'] request_form['simulation_state'] = ['delivered']
request_form['hide_analytic'] = True request_form['hide_analytic'] = True
request_form['export'] = False
report_section_list = self.getReportSectionList( report_section_list = self.getReportSectionList(
self.portal.accounting_module, self.portal.accounting_module,
...@@ -4561,11 +4499,11 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase): ...@@ -4561,11 +4499,11 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase):
line_list = self.getListBoxLineList(report_section_list[0]) line_list = self.getListBoxLineList(report_section_list[0])
data_line_list = [l for l in line_list if l.isDataLine()] data_line_list = [l for l in line_list if l.isDataLine()]
self.assertEqual(['Movement_getSpecificReference', self.assertEqual( ['date', 'Movement_getSpecificReference',
'Movement_getExplanationTitle', 'date', 'Movement_getExplanationTitleAndAnalytics', 'debit_price',
'Movement_getExplanationTranslatedPortalType', 'credit_price', 'running_total_price', 'grouping_reference',
'Movement_getExplanationReference', 'Movement_getMirrorSectionTitle', 'grouping_date', 'modification_date',
'debit_price', 'credit_price', 'running_total_price'], 'getTranslatedSimulationStateTitle'],
data_line_list[0].column_id_list) data_line_list[0].column_id_list)
# receivable account # receivable account
self.assertEqual(1, len(data_line_list)) self.assertEqual(1, len(data_line_list))
...@@ -4595,6 +4533,165 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase): ...@@ -4595,6 +4533,165 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase):
debit_price=1500, debit_price=1500,
credit_price=1500,) credit_price=1500,)
def testGeneralLedgerExport(self):
self.project_1.validate()
self.project_2.validate()
self.tic()
request_form = self.portal.REQUEST.form
request_form['from_date'] = DateTime(2006, 1, 1)
request_form['at_date'] = DateTime(2006, 12, 31)
request_form['section_category'] = 'group/demo_group'
request_form['section_category_strict'] = False
request_form['simulation_state'] = ['delivered']
request_form['hide_analytic'] = False
request_form['export'] = True
report_section_list = self.getReportSectionList(
self.portal.accounting_module,
'AccountModule_viewGeneralLedgerReport')
# There are two report sections, but in reality they are merged into one
self.assertEqual(2, len(report_section_list))
# because merge_report_section_list is set to true
self.assertTrue(self.portal.REQUEST.get('merge_report_section_list'))
line_list = self.getListBoxLineList(report_section_list[0])
data_line_list = [l for l in line_list if l.isDataLine()]
self.assertEqual(1, len(data_line_list))
# all the columns configured in AccountModule_getGeneralLedgerColumnItemList
# are displayed
self.assertEqual(
['Movement_getNodeGapId', 'node_translated_title', 'section_title',
'mirror_section_title', 'date', 'modification_date',
'Movement_getSpecificReference',
'Movement_getExplanationTranslatedPortalType',
'Movement_getExplanationTitle', 'Movement_getExplanationReference',
# those are analytics columns
'function', 'project', 'product_line_translated_title',
'debit_price', 'credit_price',
'total_price', 'Movement_getSectionPriceCurrency', 'debit', 'credit',
'total_quantity', 'resource_reference', 'Movement_getPaymentTitle',
'payment_mode_translated_title', 'grouping_reference', 'grouping_date',
'getTranslatedSimulationStateTitle'],
data_line_list[0].column_id_list)
self.assertEqual([x[0] for x in
self.portal.accounting_module.AccountModule_getGeneralLedgerColumnItemList()],
data_line_list[0].column_id_list)
self.checkLineProperties(data_line_list[0],
Movement_getNodeGapId='41',
node_translated_title='Receivable',
section_title='My Organisation',
mirror_section_title='Client 1',
date=DateTime(2006, 2, 2),
Movement_getSpecificReference='1',
Movement_getExplanationTranslatedPortalType=
'Sale Invoice Transaction',
Movement_getExplanationTitle='Detailed Transaction',
Movement_getExplanationReference='DT',
function='',
project='',
product_line_translated_title=None,
debit_price=1500,
credit_price=0,
total_price=1500,
Movement_getSectionPriceCurrency='EUR',
debit=1500, credit=0, total_quantity=1500,
resource_reference='EUR',
Movement_getPaymentTitle=None,
payment_mode_translated_title=None,
grouping_reference=None,
grouping_date=None,
getTranslatedSimulationStateTitle='Closed')
line_list = self.getListBoxLineList(report_section_list[1])
data_line_list = [l for l in line_list if l.isDataLine()]
self.assertEqual(3, len(data_line_list))
self.checkLineProperties(data_line_list[0],
Movement_getNodeGapId='7',
node_translated_title='Goods Sales',
section_title='My Organisation',
mirror_section_title='Client 1',
date=DateTime(2006, 2, 2),
Movement_getSpecificReference='1',
Movement_getExplanationTranslatedPortalType=
'Sale Invoice Transaction',
Movement_getExplanationTitle='Detailed Transaction',
Movement_getExplanationReference='DT',
function='a',
project='P1 - Project 1',
product_line_translated_title='pl1',
debit_price=0,
credit_price=300,
total_price=-300,
Movement_getSectionPriceCurrency='EUR',
debit=0, credit=300, total_quantity=-300,
resource_reference='EUR',
Movement_getPaymentTitle=None,
payment_mode_translated_title=None,
grouping_reference=None,
grouping_date=None,
getTranslatedSimulationStateTitle='Closed')
self.checkLineProperties(data_line_list[1],
Movement_getNodeGapId='7',
node_translated_title='Goods Sales',
section_title='My Organisation',
mirror_section_title='Client 1',
date=DateTime(2006, 2, 2),
Movement_getSpecificReference='1',
Movement_getExplanationTranslatedPortalType=
'Sale Invoice Transaction',
Movement_getExplanationTitle='Detailed Transaction',
Movement_getExplanationReference='DT',
function='b',
project='P1 - Project 1',
product_line_translated_title='pl1',
debit_price=0,
credit_price=500,
total_price=-500,
Movement_getSectionPriceCurrency='EUR',
debit=0, credit=500, total_quantity=-500,
resource_reference='EUR',
Movement_getPaymentTitle=None,
payment_mode_translated_title=None,
grouping_reference=None,
grouping_date=None,
getTranslatedSimulationStateTitle='Closed')
self.checkLineProperties(data_line_list[2],
Movement_getNodeGapId='7',
node_translated_title='Goods Sales',
section_title='My Organisation',
mirror_section_title='Client 1',
date=DateTime(2006, 2, 2),
Movement_getSpecificReference='1',
Movement_getExplanationTranslatedPortalType=
'Sale Invoice Transaction',
Movement_getExplanationTitle='Detailed Transaction',
Movement_getExplanationReference='DT',
function='b',
project='P2 - Project 2',
product_line_translated_title=None,
debit_price=0,
credit_price=700,
total_price=-700,
Movement_getSectionPriceCurrency='EUR',
debit=0, credit=700, total_quantity=-700,
resource_reference='EUR',
Movement_getPaymentTitle=None,
payment_mode_translated_title=None,
grouping_reference=None,
grouping_date=None,
getTranslatedSimulationStateTitle='Closed')
stat_line = line_list[-1]
# There is no stat in export mode
self.assertFalse(line_list[-1].isStatLine())
# There is not stat section either
def testTrialBalanceGroupByProject(self): def testTrialBalanceGroupByProject(self):
request_form = self.portal.REQUEST.form request_form = self.portal.REQUEST.form
request_form['from_date'] = DateTime(2006, 1, 1) request_form['from_date'] = DateTime(2006, 1, 1)
...@@ -4623,13 +4720,13 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase): ...@@ -4623,13 +4720,13 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase):
'final_balance_if_credit'], data_line_list[0].column_id_list) 'final_balance_if_credit'], data_line_list[0].column_id_list)
self.checkLineProperties(data_line_list[0], node_id='7', self.checkLineProperties(data_line_list[0], node_id='7',
node_title='Goods Sales', project_uid='Project 1', node_title='Goods Sales', project_uid='P1 - Project 1',
initial_debit_balance=0, initial_credit_balance=0, debit=0, initial_debit_balance=0, initial_credit_balance=0, debit=0,
credit=800, final_debit_balance=0, final_credit_balance=800, credit=800, final_debit_balance=0, final_credit_balance=800,
final_balance_if_debit=0, final_balance_if_credit=800) final_balance_if_debit=0, final_balance_if_credit=800)
self.checkLineProperties(data_line_list[1], node_id='7', self.checkLineProperties(data_line_list[1], node_id='7',
node_title='Goods Sales', project_uid='Project 2', node_title='Goods Sales', project_uid='P2 - Project 2',
initial_debit_balance=0, initial_credit_balance=0, debit=0, initial_debit_balance=0, initial_credit_balance=0, debit=0,
credit=700, final_debit_balance=0, final_credit_balance=700, credit=700, final_debit_balance=0, final_credit_balance=700,
final_balance_if_debit=0, final_balance_if_credit=700) final_balance_if_debit=0, final_balance_if_credit=700)
...@@ -4713,19 +4810,19 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase): ...@@ -4713,19 +4810,19 @@ class TestAccountingReportsWithAnalytic(AccountingTestCase, ERP5ReportTestCase):
'final_balance_if_credit'], data_line_list[0].column_id_list) 'final_balance_if_credit'], data_line_list[0].column_id_list)
self.checkLineProperties(data_line_list[0], node_id='7', self.checkLineProperties(data_line_list[0], node_id='7',
node_title='Goods Sales', function_uid='a', project_uid='Project 1', node_title='Goods Sales', function_uid='a', project_uid='P1 - Project 1',
initial_debit_balance=0, initial_credit_balance=0, debit=0, initial_debit_balance=0, initial_credit_balance=0, debit=0,
credit=300, final_debit_balance=0, final_credit_balance=300, credit=300, final_debit_balance=0, final_credit_balance=300,
final_balance_if_debit=0, final_balance_if_credit=300) final_balance_if_debit=0, final_balance_if_credit=300)
self.checkLineProperties(data_line_list[1], node_id='7', self.checkLineProperties(data_line_list[1], node_id='7',
node_title='Goods Sales', function_uid='b', project_uid='Project 1', node_title='Goods Sales', function_uid='b', project_uid='P1 - Project 1',
initial_debit_balance=0, initial_credit_balance=0, debit=0, initial_debit_balance=0, initial_credit_balance=0, debit=0,
credit=500, final_debit_balance=0, final_credit_balance=500, credit=500, final_debit_balance=0, final_credit_balance=500,
final_balance_if_debit=0, final_balance_if_credit=500) final_balance_if_debit=0, final_balance_if_credit=500)
self.checkLineProperties(data_line_list[2], node_id='7', self.checkLineProperties(data_line_list[2], node_id='7',
node_title='Goods Sales', function_uid='b', project_uid='Project 2', node_title='Goods Sales', function_uid='b', project_uid='P2 - Project 2',
initial_debit_balance=0, initial_credit_balance=0, debit=0, initial_debit_balance=0, initial_credit_balance=0, debit=0,
credit=700, final_debit_balance=0, final_credit_balance=700, credit=700, final_debit_balance=0, final_credit_balance=700,
final_balance_if_debit=0, final_balance_if_credit=700) final_balance_if_debit=0, final_balance_if_credit=700)
......
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