Commit 783efd4c authored by Kazuhiko Shiozaki's avatar Kazuhiko Shiozaki

Merge remote-tracking branch 'origin/master' into erp5-component

parents 574d45a6 0d8e7211
Changes
=======
0.4.24 (2013-02-11)
-------------------
* erp5.util.testnode:
- Fixed wrong location for the construction os test suite software
[Sebastien Robin]
0.4.23 (2013-02-11)
-------------------
* erp5.util.testnode:
- Make erp5testnode allow remote access to test suite logs instead of
uploading them to master [Tatuya Kamada], [Sebastien Robin]
0.4.22 (2013-01-08)
-------------------
......
......@@ -99,7 +99,7 @@
<string>your_omit_grouping_reference</string>
<string>your_mirror_section_category_list</string>
<string>your_mirror_section</string>
<string>your_gap</string>
<string>your_gap_list</string>
<string>your_gap_root</string>
<string>your_simulation_state</string>
</list>
......@@ -111,7 +111,6 @@
<list>
<string>your_at_date</string>
<string>your_from_date</string>
<string>your_gap</string>
<string>your_gap_root</string>
<string>your_section_category</string>
<string>your_simulation_state</string>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="MultiListField" module="Products.Formulator.StandardFields"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>your_gap_list</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>unknown_selection</string> </key>
<value> <string>You selected an item that was not in the list.</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>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>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>view_separator</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>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</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>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>view_separator</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>
<list/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </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>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>GAP</string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>view_separator</string> </key>
<value> <string encoding="cdata"><![CDATA[
<br />
]]></string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: request.get(\'gap_list\') or request.get(\'your_gap_list\') or None</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: context.Account_getGapItemList()</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -75,10 +75,10 @@ while date < context.getStopDate():\n
\n
if frequency == \'quarterly\':\n
period.setShortTitle(\'%s-%s\' % (\n
date.strftime(\'%Y %m\'), (end_date - 1).strftime(\'%m\')))\n
start_date.strftime(\'%Y %m\'), (end_date - 1).strftime(\'%m\')))\n
else:\n
period.setShortTitle(date.strftime(\'%Y-%m\'))\n
period.setTitle(str(translateString(date.strftime(\'%B\'))))\n
period.setShortTitle(start_date.strftime(\'%Y-%m\'))\n
period.setTitle(str(translateString(start_date.strftime(\'%B\'))))\n
\n
if open_periods:\n
period.start()\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 encoding="cdata"><![CDATA[
"""\n
Returns journal entries, for use with AccountingTransactionModule_viewJournal\n
\n
return a list of dictionnaries like that :\n
\n
{ \'date\' : Date\n
, \'description\': String\n
, \'currency\' : String\n
, \'lines\' : { \'debtor\' : Bool\n
, \'account_gap_id\': String\n
, \'account_name\' : String # with extra-description (ie. bank name if a bank, organisation name if an other party)\n
, \'amount\' : Float\n
}\n
}\n
"""\n
\n
request = context.REQUEST\n
selection_name = "accounting_selection"\n
Base_translateString = context.Base_translateString\n
result = []\n
journal_total_debit = 0\n
journal_total_credit = 0\n
\n
# this report can be used in two ways:\n
# * with a report dialog to specify parameters\n
if request.has_key(\'at_date\'):\n
at_date = request[\'at_date\'].latestTime()\n
section_category = request[\'transaction_section_category\']\n
transaction_simulation_state = request[\'transaction_simulation_state\']\n
transaction_portal_type = request[\'transaction_portal_type\']\n
from_date = request.get(\'from_date\', None)\n
params = { \'sort_on\' : \'delivery.start_date\',\n
\'at_date\' : at_date,\n
\'simulation_state\': transaction_simulation_state,\n
\'search_result_keys\': [],\n
\'section_category\': section_category,\n
\'portal_type\' : transaction_portal_type, }\n
\n
if from_date:\n
params[\'from_date\'] = from_date\n
\n
zGetList = context.AccountingTransactionModule_zGetAccountingTransactionList\n
transaction_list = zGetList( selection_params = params\n
, **params\n
)\n
else:\n
stool = context.getPortalObject().portal_selections\n
transaction_list = [x.getObject() for x in \n
stool.callSelectionFor(selection_name)]\n
section_category = stool.getSelectionParamsFor(selection_name\n
).get(\'section_category\', \'unset\')\n
\n
for transaction in transaction_list:\n
transaction = transaction.getObject()\n
destination_section = transaction.getDestinationSectionValue()\n
source_section = transaction.getSourceSectionValue()\n
\n
# add a test on portal type to bypass bad acquisition of group category from\n
# person to Orignisation This help us filter employee of the source_section:\n
# because of acquisition via subordination they are seen as part of the group\n
# but in this accounting context group define a business unit composed of\n
# organisation\n
we_are_destination = (destination_section is not None) and \\\n
(\'group/%s\' % destination_section.getGroup(\'\')\n
).startswith(section_category) and \\\n
destination_section.getPortalType() == "Organisation"\n
we_are_source = (source_section is not None) and \\\n
(\'group/%s\' % source_section.getGroup(\'\')\n
).startswith(section_category) and \\\n
source_section.getPortalType() == "Organisation"\n
\n
if we_are_source:\n
specific_reference = transaction.getSourceReference()\n
date = transaction.getStartDate()\n
else:\n
specific_reference = transaction.getDestinationReference()\n
date = transaction.getStopDate()\n
\n
lines = []\n
transaction_dict = {\n
\'date\' : context.Base_FormatDate( date ),\n
\'lines\' : lines,\n
\'description\': Base_translateString(\n
"${transaction_title} (Transaction Reference "\n
"= ${transaction_reference},\\n Creation Date = "\n
"${creation_date} \\n Currency = ${currency_title})",\n
mapping = {\n
"transaction_title": unicode(transaction.getTitle() or \'\', \'utf8\'),\n
"transaction_reference": unicode(specific_reference or \'\', \'utf8\'),\n
"creation_date": context.Base_FormatDate(transaction.getCreationDate()),\n
"currency_title": transaction.getResourceTitle() or \'\' })}\n
\n
result.append(transaction_dict)\n
transaction_lines = transaction.contentValues(\n
filter = {\'portal_type\' : context.getPortalAccountingMovementTypeList()})\n
\n
if we_are_source :\n
transaction_lines.sort(key=lambda x: x.getObject().getSourceInventoriatedTotalAssetPrice(),\n
reverse=True)\n
else :\n
transaction_lines.sort(key=lambda x: x.getObject().getDestinationInventoriatedTotalAssetPrice(),\n
reverse=True)\n
\n
for line in transaction_lines:\n
line = line.getObject()\n
\n
if we_are_source :\n
debit = line.getSourceInventoriatedTotalAssetDebit() or 0.0\n
credit = line.getSourceInventoriatedTotalAssetCredit() or 0.0\n
debtor = (line.getSourceInventoriatedTotalAssetPrice() > 0)\n
account = line.getSourceValue()\n
if account is None: continue\n
if account.isMemberOf(\'account_type/asset/cash\'):\n
account_description = "%s (%s)" % ( line.getSourceTitle()\n
, line.getSourcePaymentTitle()\n
)\n
elif account.getAccountType() in (\'asset/receivable\',\n
\'liability/payable\'):\n
account_description = "%s (%s)" % ( line.getSourceTitle()\n
, line.getDestinationSectionTitle()\n
)\n
else:\n
account_description = line.getSourceTitle()\n
lines.append({ \'debtor\' : debtor\n
, \'account_gap_id\': account.Account_getGapId()\n
, \'account_name\' : account_description\n
, \'amount\' : debtor and (debit) or (credit)\n
})\n
if debtor:\n
journal_total_debit += debit\n
else:\n
journal_total_credit += credit\n
\n
if we_are_destination:\n
debit = line.getDestinationInventoriatedTotalAssetDebit() or 0.0\n
credit = line.getDestinationInventoriatedTotalAssetCredit() or 0.0\n
debtor = (debit > credit)\n
account = line.getDestinationValue()\n
if account is None: continue\n
if account.isMemberOf(\'account_type/asset/cash\'):\n
account_description = "%s (%s)" % ( line.getDestinationTitle()\n
, line.getDestinationPaymentTitle()\n
)\n
elif account.getAccountType() in (\'asset/receivable\',\n
\'liability/payable\'):\n
account_description = "%s (%s)" % ( line.getDestinationTitle()\n
, line.getSourceSectionTitle()\n
)\n
else:\n
account_description = line.getDestinationTitle()\n
lines.append({ \'debtor\' : debtor\n
, \'account_gap_id\': account.Account_getGapId()\n
, \'account_name\' : account_description\n
, \'amount\' : debtor and (debit) or (credit)\n
})\n
if debtor:\n
journal_total_debit += debit\n
else:\n
journal_total_credit += credit\n
\n
\n
return result + [{ "journal_total_debit" : journal_total_debit\n
, "journal_total_credit": journal_total_credit\n
}]\n
]]></string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>AccountingTransactionModule_getJournalAccountingTransactionList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<?xml version="1.0" encoding="iso-8859-1"?>\n
<template bottommargin=\'2cm\' showboundary=\'0\' topmargin=\'2cm\' \n
rightmargin=\'2cm\' tal:define=\'portal python:here.portal_url.getPortalObject()\' \n
filename=\'journal.pdf\' pagesize=\'A4\' allowsplitting=\'1\' landscape=\'0\' leftmargin=\'2cm\'>\n
\n
<pagetemplate startframe=\'content\' id=\'FirstPage\'>\n
<static>\n
<infostring align="left" x="1cm" y= "29cm" size="8" font="Helvetica" color="(0,0,0)"\n
tal:content="python: here.Localizer.erp5_ui.gettext(\'Printed by %(user)s at %(date)s\') % {\'user\':user.getUserName(), \'date\':DateTime()}" >Printed by</infostring>\n
<infostring align="left" x="18cm" y= "0.5cm" size="10" font="Helvetica" color="(0,0,0)" >Page %(page)s</infostring>\n
</static>\n
<frame showBoundary=\'0\' leftpadding=\'0.1cm\' height=\'23.94cm\' width=\'17.59cm\' rightpadding=\'0.1cm\' y=\'2cm\' x=\'2cm\' nextid=\'content\' toppadding=\'0.2cm\' id=\'content\' bottompadding=\'0.5cm\'/>\n
</pagetemplate>\n
\n
<stylesheet>\n
<paragraphstyle name="Title" parent="Normal" fontname="Helvetica-Bold" fontsize="32" align="CENTER"/>\n
<tablestyle name=\'default\'>\n
<stylecmd expr="(\'GRID\', (0,0), (-1,-1), 0.1, colors.black)"/>\n
</tablestyle>\n
<paragraphstyle name="TableStandard" parent="Normal" fontname="Helvetica" fontsize="8" alignment="left" />\n
<paragraphstyle name="TableStandardLeftAligned" parent="Normal" fontname="Helvetica" fontsize="7" alignment="left" />\n
<paragraphstyle name="TableStandardRightAligned" parent="Normal" fontname="Helvetica" fontsize="7" alignment="right" />\n
<paragraphstyle name="TableHeader" parent="Normal" fontname="Helvetica-Oblique" fontsize="9" alignment="left" />\n
<paragraphstyle name="TableLastLine" parent="Normal" fontname="Helvetica-Oblique" fontsize="11" alignment="left" />\n
\n
<tablestyle name=\'transaction_header\'>\n
<stylecmd expr="(\'LINEBELOW\', (2,0), (2,0), 0.1, colors.black)"/> \n
<stylecmd expr="(\'LINEBELOW\', (-3,0), (-3,0), 0.1, colors.black)"/> \n
<stylecmd expr="(\'LINEBEFORE\', (0,0),(2,0), 0.1, colors.black)"/>\n
<stylecmd expr="(\'LINEAFTER\', (-3,0),(-1,0), 0.1, colors.black)"/>\n
<stylecmd expr="(\'ALIGN\', (0,0),(-1,-1), \'CENTER\')"/>\n
<stylecmd expr="(\'VALIGN\', (0,0),(-1,-1), \'BOTTOM\')"/>\n
</tablestyle>\n
<tablestyle name=\'transaction_body\'>\n
<stylecmd expr="(\'FONT\', (0,0), (-1,-1), \'Helvetica\', 8)"/>\n
<stylecmd expr="(\'LINEBEFORE\', (0,0),(2,0), 0.1, colors.black)"/>\n
<stylecmd expr="(\'LINEAFTER\', (-3,0),(-1,0), 0.1, colors.black)"/>\n
<stylecmd expr="(\'ALIGN\', (-2,0), (-1,-1), \'RIGHT\')"/>\n
</tablestyle>\n
<tablestyle name=\'transaction_footer\'>\n
<stylecmd expr="(\'LINEBEFORE\', (0,0),(2,0), 0.1, colors.black)"/>\n
<stylecmd expr="(\'LINEAFTER\', (-3,0),(-1,0), 0.1, colors.black)"/>\n
<stylecmd expr="(\'FONT\', (0,0), (-1,-1), \'Times-Italic\', 10)"/>\n
</tablestyle>\n
\n
<tablestyle name="top_of_page">\n
<stylecmd expr="(\'FONT\', (0,0), (-1,-1), \'Helvetica\', 8)"/>\n
<stylecmd expr="(\'BOX\', (0,0), (-1,0), 1, colors.black)"/>\n
<stylecmd expr="(\'BOX\', (0,1), (-1,-1), 1, colors.black)"/>\n
<stylecmd expr="(\'BACKGROUND\', (0,0), (-1,0), (0.9,0.9,0.9))"/>\n
<stylecmd expr="(\'ALIGN\', (0,0), (-1,-1), \'CENTER\')"/>\n
<stylecmd expr="(\'VALIGN\', (0,0), (-1,-1), \'TOP\')"/>\n
<stylecmd expr="(\'LEFTPADDING\', (0,0), (-1,-1), 1)"/>\n
<stylecmd expr="(\'RIGHTPADDING\', (0,0), (-1,-1), 1)"/>\n
<stylecmd expr="(\'BOTTOMPADDING\', (0,0), (-1,-1), 0)"/>\n
<stylecmd expr="(\'TOPPADDING\', (0,0), (-1,-1), 1)"/>\n
</tablestyle>\n
\n
<tablestyle name="AttributesTable">\n
<stylecmd expr="(\'INNERGRID\', (0,0), (-1,-1), 1, (0.5,0.5,0.5))"/>\n
<stylecmd expr="(\'FONT\', (0,0), (-1,-1), \'Helvetica\', 8)"/>\n
<stylecmd expr="(\'BOX\', (0,0), (-1,-1), 1, colors.black)"/>\n
<stylecmd expr="(\'BACKGROUND\', (0,0), (0,-1), (0.9,0.9,0.9))"/>\n
<stylecmd expr="(\'ALIGN\', (0,0), (-1,-1), \'CENTER\')"/>\n
<stylecmd expr="(\'VALIGN\', (0,0), (-1,-1), \'TOP\')"/>\n
</tablestyle>\n
\n
</stylesheet>\n
</template>
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>AccountingTransactionModule_journal_pdf_template</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PDFTemplate" module="Products.ERP5Form.PDFTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<?xml version="1.0" encoding="latin1"?>\n
<document\n
filename="journal.pdf"\n
tal:define="portal here/portal_url/getPortalObject;\n
transaction_list here/AccountingTransactionModule_getJournalAccountingTransactionList;\n
precision here/Base_getPreferredPrecision">\n
<title>Journal</title>\n
<author>ERP5</author>\n
<subject>Journal</subject>\n
<content xmlns:tal="http://xml.zope.org/namespaces/tal">\n
<para style="Title" i18n:translate="" i18n:domain="ui">Journal</para>\n
<action name="nextPageTemplate">\n
<parameter>FirstPage</parameter>\n
</action>\n
<spacer height="50"/>\n
\n
<table splitbyrow="1" repeatrows="0"\n
repeatcols="0" style="AttributesTable"\n
tal:condition="request/at_date | nothing">\n
<tr tal:condition="python: request.get(\'from_date\', 0)">\n
<td colwidth="5cm"> <para style="TableHeader" tal:content="python: here.Base_translateString(\'From Date\')"/> </td>\n
<td colwidth="15cm"> <para style="TableStandardRightAligned" tal:content="python: here.Base_FormatDate(request.get(\'from_date\'))"/></td> </tr>\n
<tr>\n
<td colwidth="5cm"> <para style="TableHeader" tal:content="python: here.Base_translateString(\'At Date\')"/> </td>\n
<td colwidth="15cm"> <para style="TableStandardRightAligned" tal:content="python: here.Base_FormatDate(request.get(\'at_date\'))"/></td> </tr>\n
<tr>\n
<td colwidth="5cm"> <para style="TableHeader" tal:content="python: here.Base_translateString(\'Section\')"/> </td>\n
<td colwidth="15cm"> <para style="TableStandardRightAligned" tal:content="python: here.portal_categories.restrictedTraverse(request.get(\'transaction_section_category\')).getLogicalPath()"/></td> </tr>\n
<tr>\n
<td colwidth="5cm"> <para style="TableHeader" tal:content="python: here.Base_translateString(\'Transactions Simulation State\')"/> </td>\n
<td colwidth="15cm"> <tal:block tal:repeat="state python:request.get(\'transaction_simulation_state\', [])">\n
<para style="TableStandardRightAligned" tal:content="state"/> </tal:block> </td> </tr>\n
<tr>\n
<td colwidth="5cm"> <para style="TableHeader" tal:content="python: here.Base_translateString(\'Journal Type\')"/> </td>\n
<td colwidth="15cm"> <tal:block tal:repeat="type python:request.get(\'transaction_portal_type\', [])">\n
<para style="TableStandardRightAligned" tal:content="python: here.Base_translateString(type)"/> </tal:block> </td> </tr>\n
\n
</table>\n
<spacer height="10"/>\n
\n
<table style="top_of_page" splitbyrow="1" repeatrows="0" repeatcols="0">\n
<tr rowheight="0.512cm">\n
<td colwidth="1.5cm">Debit</td>\n
<td colwidth="1.5cm">Credit</td>\n
<td colwidth="12cm">Account Title</td>\n
<td colwidth="2.5cm">Debit</td>\n
<td colwidth="2.5cm">Credit</td>\n
</tr>\n
</table>\n
<tal:block tal:repeat="transaction python:transaction_list[:-1]">\n
<table style="transaction_header" splitbyrow="1" repeatrows="0" repeatcols="0">\n
<tr rowheight="0.5cm">\n
<td colwidth="1.5cm"/>\n
<td colwidth="1.5cm"/>\n
<td colwidth="4.5cm"/>\n
<td colwidth="3cm" tal:content="transaction/date">Date</td>\n
<td colwidth="4.5cm"/>\n
<td colwidth="2.5cm"/>\n
<td colwidth="2.5cm"/>\n
</tr>\n
</table>\n
<tal:block tal:repeat="line transaction/lines">\n
<table style="transaction_body" splitbyrow="1" repeatrows="0" repeatcols="0">\n
<tr rowheight="0.512cm">\n
<td colwidth="1.5cm" tal:content="python:line[\'debtor\'] and line[\'account_gap_id\'] or \' \' "/>\n
<td colwidth="1.5cm" tal:content="python:line[\'debtor\'] and \' \' or line[\'account_gap_id\'] "/>\n
<tal:block tal:condition="not:line/debtor">\n
<td colwidth="2cm"/>\n
</tal:block>\n
<td colwidth="modified"\n
tal:attributes="colwidth python: line[\'debtor\'] and \'12cm\' or \'10cm\' ;" tal:content="python:line[\'account_name\']"/>\n
<td colwidth="2.5cm" tal:content="python:line[\'debtor\'] and here.Base_getRoundValue(line[\'amount\'], precision) or \' \' "/>\n
<td colwidth="2.5cm" tal:content="python:line[\'debtor\'] and \' \' or here.Base_getRoundValue(line[\'amount\'], precision) "/>\n
</tr>\n
</table>\n
</tal:block>\n
<table style="transaction_footer" splitbyrow="1" repeatrows="0" repeatcols="0">\n
<tr>\n
<td colwidth="1.5cm"/>\n
<td colwidth="1.5cm"/>\n
<td colwidth="0.5cm"/>\n
<td colwidth="11.5cm" tal:content="transaction/description"/>\n
<td colwidth="2.5cm"/>\n
<td colwidth="2.5cm"/>\n
</tr>\n
</table>\n
</tal:block>\n
\n
<tal:block tal:replace="nothing"> Summary.\n
</tal:block>\n
<tal:block>\n
<table style="transaction_header" splitbyrow="1" repeatrows="0" repeatcols="0">\n
<tr rowheight="0.5cm">\n
<td colwidth="1.5cm"/>\n
<td colwidth="1.5cm"/>\n
<td colwidth="4.5cm"/>\n
<td colwidth="3cm"/>\n
<td colwidth="4.5cm"/>\n
<td colwidth="2.5cm"/>\n
<td colwidth="2.5cm"/>\n
</tr>\n
</table>\n
<table style="transaction_body" splitbyrow="1" repeatrows="0" repeatcols="0">\n
<tr rowheight="1.5cm">\n
<td colwidth="1.5cm"/>\n
<td colwidth="1.5cm"/>\n
<td colwidth="2cm"/>\n
<td colwidth="10cm" > Total </td>\n
<td colwidth="2.5cm" tal:content="python: here.Base_getRoundValue(transaction_list[-1][\'journal_total_debit\' ], precision) "/>\n
<td colwidth="2.5cm" tal:content="python: here.Base_getRoundValue(transaction_list[-1][\'journal_total_credit\'], precision) "/>\n
</tr>\n
</table>\n
</tal:block>\n
</content>\n
</document>\n
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>AccountingTransactionModule_viewJournalAsPdf</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>pdf_stylesheet</string> </key>
<value> <string>AccountingTransactionModule_journal_pdf_template</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -150,6 +150,7 @@ for (node, section, mirror_section, extra_parameter), line_info_list in lines_pe
\n
for line in line_info_list:\n
line_obj = portal.restrictedTraverse(line[\'path\'])\n
assert not line_obj.getGroupingReference(), line\n
line_obj.setGroupingReference(string_reference)\n
line_obj.setGroupingDate(date)\n
line_obj.reindexObject(activate_kw=dict(tag=\'accounting_grouping_reference\'))\n
......
......@@ -50,110 +50,19 @@
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>src__ = 0\n
if kw.has_key(\'src__\'): src__ = kw[\'src__\']\n
precision = context.Base_getPreferredPrecision()\n
r_ = lambda x: context.Base_getRoundValue(x, precision)\n
\n
# read settings from user preference\n
preference = context.getPortalObject().portal_preferences\n
simulation_state = preference.getPreferredAccountingTransactionSimulationStateList()\n
section_category = preference.getPreferredAccountingTransactionSectionCategory()\n
from_date = preference.getPreferredAccountingTransactionFromDate()\n
at_date = preference.getPreferredAccountingTransactionAtDate()\n
\n
# Build the common inventory dict\n
params = {}\n
\n
if kw.get(\'no_from_date\', False): from_date = None\n
\n
if simulation_state: params[\'simulation_state\'] = simulation_state\n
params[\'section_uid\'] = context.Base_getSectionUidListForSectionCategory(section_category)\n
\n
\n
if kw.has_key(\'node_uid\') : params[\'node_uid\'] = kw[\'node_uid\']\n
if kw.has_key(\'portal_type\'): params[\'portal_type\'] = kw[\'portal_type\']\n
\n
# Create the related accouting line list\n
new_result = []\n
net_balance = 0.0\n
\n
if from_date is not None:\n
# Create a new parameter list to get the previous balance\n
get_inventory_kw = params.copy()\n
get_inventory_kw.update({ \'omit_simulation\' : True\n
, \'payment_uid\' : context.getUid()\n
, \'to_date\' : from_date\n
# , \'where_expression\': " section.portal_type = \'Organisation\' "\n
, \'stat\' : True\n
})\n
\n
getInventory = context.getPortalObject().portal_simulation.getInventory\n
# Get previous debit and credit\n
previous_total_debit = r_(getInventory(omit_output=True, **get_inventory_kw))\n
previous_total_credit = r_(getInventory(omit_input =True, **get_inventory_kw))\n
if previous_total_credit != 0:\n
previous_total_credit = - previous_total_credit\n
\n
# Show the previous balance if not empty\n
if previous_total_credit != 0 or previous_total_debit != 0:\n
from Products.ERP5Type.Document import newTempAccountingTransaction\n
\n
net_balance = r_(previous_total_debit - previous_total_credit)\n
previous_balance = newTempAccountingTransaction( context.getPortalObject()\n
, "temp_%s" % context.getUid()\n
)\n
previous_balance.setUid(\'new_000\')\n
\n
previous_balance.edit( \\\n
title = context.Base_translateString("Previous Balance")\n
, date = from_date - 1\n
, portal_type = ""\n
, simulation_state_title = ""\n
, debit = previous_total_debit\n
, credit = previous_total_credit\n
, balance = net_balance\n
, net_balance = net_balance\n
, is_previous_balance = True\n
)\n
new_result.append(previous_balance)\n
\n
\n
# Show / Hide grouping if needed\n
if kw.has_key(\'hide_grouping\'): params[\'hide_grouping\'] = kw[\'hide_grouping\']\n
\n
# FIXME:\n
# using listbox current page number * number of line per listbox page, you can call a\n
# ZSQL Method to initialize net_balance and calculate this only for this page.\n
#\n
# But this is just temporary because some day, erp5_accounting will be rewritten using\n
# only portal_catalog and getInventory. The Iventory API should provide a way to implement\n
# such a net_balance column (in one instruction, so that we do not need to write a wrapping\n
# list method like this one)\n
result = context.BankAccount_zGetAccountingTransactionList( from_date = from_date\n
, at_date = at_date\n
, src__ = src__\n
, **params\n
)\n
if src__:\n
return result\n
\n
# Add related accounting lines one by one in order to calculate intermediate balance\n
for l in result:\n
o = l.getObject()\n
net_balance += l.balance or 0.0\n
if o is not None:\n
c = o.asContext( net_balance = net_balance\n
, balance = l.balance\n
, credit = l.credit\n
, debit = l.debit\n
, date = l.date.toZone(l.getObject().getStartDate().timezone())\n
, section_title = l.section_title\n
, specific_reference = l.specific_reference\n
)\n
new_result.append(c)\n
\n
return new_result\n
<value> <string>"""Returns Accounting Transactions where this bank account is payment.\n
"""\n
kw[\'payment_uid\'] = context.getUid()\n
kw[\'node_category\'] = \'account_type/asset/cash/bank\'\n
transaction_list = context.Node_getAccountingTransactionList(**kw)\n
\n
# As we are showing quantities and not asset prices, we use the precision\n
# from this bank account currency\n
if context.getPriceCurrency():\n
container.REQUEST.set(\'precision\',\n
context.getQuantityPrecisionFromResource(context.getPriceCurrency()))\n
\n
return transaction_list\n
</string> </value>
</item>
<item>
......
......@@ -50,10 +50,13 @@
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>kw[\'omit_input\'] = 1\n
debit = context.BankAccount_statSourceBalance(**kw)\n
return float(\'%.02f\' % debit)\n
# vim: syntax=python\n
<value> <string>"""Total balance (in local currency) of all accounting transactions having this\n
bank account as payment node\n
"""\n
kw[\'payment_uid\'] = context.getUid()\n
kw[\'asset_price\'] = False\n
kw[\'node_category\'] = \'account_type/asset/cash/bank\'\n
return context.Node_statAccountingBalance(**kw)\n
</string> </value>
</item>
<item>
......@@ -62,7 +65,7 @@ return float(\'%.02f\' % debit)\n
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BankAccount_statSourceDebit</string> </value>
<value> <string>BankAccount_statBalance</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -50,19 +50,26 @@
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>context.log(old_method_name, \'%s is deprecated, use %s instead\'\n
% (old_method_name, new_method_name))\n
<value> <string>"""Total credit (in local currency) of all accounting transactions having this\n
bank account as payment\n
"""\n
kw[\'payment_uid\'] = context.getUid()\n
kw[\'omit_asset_increase\'] = 1\n
kw[\'asset_price\'] = False\n
kw[\'node_category\'] = \'account_type/asset/cash/bank\'\n
kw.update(kw[\'selection\'].getParams())\n
\n
return getattr(context, new_method_name)(*args, **kw)\n
# here, or 0 is to prevent displaying "- 0"\n
return - context.Node_statAccountingBalance(**kw) or 0\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>old_method_name, new_method_name, *args, **kw</string> </value>
<value> <string>**kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Base_callDeprecatedMethod</string> </value>
<value> <string>BankAccount_statCredit</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -50,12 +50,16 @@
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>kw[\'omit_output\'] = 1\n
credit = context.BankAccount_statSourceBalance(**kw)\n
if credit :\n
return float(\'%.02f\' % - credit)\n
return 0.0\n
# vim: syntax=python\n
<value> <string>"""Total debit (in local currency) of all accounting transactions having this\n
bank account as payment\n
"""\n
kw[\'payment_uid\'] = context.getUid()\n
kw[\'omit_asset_decrease\'] = 1\n
kw[\'asset_price\'] = False\n
kw[\'node_category\'] = \'account_type/asset/cash/bank\'\n
kw.update(kw[\'selection\'].getParams())\n
\n
return context.Node_statAccountingBalance(**kw)\n
</string> </value>
</item>
<item>
......@@ -64,7 +68,7 @@ return 0.0\n
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BankAccount_statSourceCredit</string> </value>
<value> <string>BankAccount_statDebit</string> </value>
</item>
</dictionary>
</pickle>
......
<?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>params = {}\n
pref = context.getPortalObject().portal_preferences\n
precision = context.Base_getPreferredPrecision()\n
\n
###\n
# Get the \'from_date\' parameter\n
from_date = kw.get( \'from_date\'\n
, pref.getPreferredAccountingTransactionFromDate()\n
)\n
if from_date:\n
params[\'from_date\'] = from_date\n
\n
###\n
# Get the \'at_date\' parameter\n
at_date = kw.get( \'at_date\'\n
, pref.getPreferredAccountingTransactionAtDate()\n
)\n
if at_date:\n
params[\'at_date\'] = at_date\n
\n
###\n
# Get the \'simulation_state\' parameter\n
# Sometimes \'simulation_state\' is now as \'transaction_simulation_state\'\n
simulation_state = kw.get( \'transaction_simulation_state\'\n
, None\n
)\n
if not simulation_state:\n
simulation_state = kw.get( \'simulation_state\'\n
, pref.getPreferredAccountingTransactionSimulationStateList()\n
)\n
if simulation_state:\n
params[\'simulation_state\'] = simulation_state\n
\n
###\n
# Get the \'section_category\' parameter\n
# Sometimes \'section_category\' is now as \'transaction_section_category\'\n
section_category = kw.get( \'transaction_section_category\'\n
, None\n
)\n
if not section_category:\n
section_category = kw.get( \'section_category\'\n
, pref.getPreferredAccountingTransactionSectionCategory()\n
)\n
if section_category:\n
params[\'section_category\'] = section_category\n
\n
###\n
# Parameters only used in reports\n
if kw.has_key(\'node_uid\'): params[\'node_uid\'] = kw[\'node_uid\']\n
\n
###\n
# Get omit parameters\n
if kw.get(\'omit_input\') : params[\'omit_input\'] = 1\n
if kw.get(\'omit_output\'): params[\'omit_output\'] = 1\n
\n
params[\'stat\'] = 1\n
\n
if kw.has_key(\'getUid\') : params[\'getUid\'] = kw[\'getUid\']\n
if kw.has_key(\'getParentUid\'): params[\'getParentUid\'] = kw[\'getParentUid\']\n
\n
###\n
# Call the query with selected parameters\n
result = context.BankAccount_zGetAccountingTransactionList(**params)\n
row = result[0]\n
\n
###\n
# Round the result to avoid float bad precision\n
# TODO: use currency precision\n
return context.Base_getRoundValue(row.quantity or 0.0, precision)\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>**kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BankAccount_statSourceBalance</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -53,6 +53,7 @@
<string>right</string>
<string>center</string>
<string>bottom</string>
<string>hidden</string>
</list>
</value>
</item>
......@@ -76,6 +77,18 @@
</list>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value>
<list>
<string>listbox_credit</string>
<string>listbox_date</string>
<string>listbox_debit</string>
<string>listbox_running_total_quantity</string>
<string>listbox_total_quantity</string>
</list>
</value>
</item>
<item>
<key> <string>left</string> </key>
<value>
......
......@@ -11,10 +11,12 @@
<value>
<list>
<string>columns</string>
<string>domain_root_list</string>
<string>editable_columns</string>
<string>list_method</string>
<string>portal_types</string>
<string>selection_name</string>
<string>sort</string>
<string>sort_columns</string>
<string>stat_columns</string>
<string>stat_method</string>
<string>title</string>
......@@ -96,27 +98,31 @@
<value>
<list>
<tuple>
<string>title</string>
<string>Title</string>
<string>Movement_getSpecificReference</string>
<string>Reference</string>
</tuple>
<tuple>
<string>section_title</string>
<string>Section</string>
<string>Movement_getExplanationTitle</string>
<string>Title</string>
</tuple>
<tuple>
<string>date</string>
<string>Date</string>
</tuple>
<tuple>
<string>translated_portal_type</string>
<string>Movement_getExplanationTranslatedPortalType</string>
<string>Type</string>
</tuple>
<tuple>
<string>specific_reference</string>
<string>Transaction Reference</string>
<string>Movement_getExplanationReference</string>
<string>Invoice Number</string>
</tuple>
<tuple>
<string>Movement_getMirrorSectionTitle</string>
<string>Third Party</string>
</tuple>
<tuple>
<string>translated_simulation_state_title</string>
<string>getTranslatedSimulationStateTitle</string>
<string>State</string>
</tuple>
<tuple>
......@@ -128,27 +134,47 @@
<string>Credit</string>
</tuple>
<tuple>
<string>balance</string>
<string>total_quantity</string>
<string>Balance</string>
</tuple>
<tuple>
<string>net_balance</string>
<string>Net</string>
<string>running_total_quantity</string>
<string>Running Balance</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>domain_root_list</string> </key>
<key> <string>editable_columns</string> </key>
<value>
<list>
<tuple>
<string>group</string>
<string>Group</string>
<string>function</string>
<string>function</string>
</tuple>
<tuple>
<string>project</string>
<string>project</string>
</tuple>
<tuple>
<string>date</string>
<string>date</string>
</tuple>
<tuple>
<string>debit</string>
<string>debit</string>
</tuple>
<tuple>
<string>credit</string>
<string>credit</string>
</tuple>
<tuple>
<string>region</string>
<string>Region</string>
<string>total_quantity</string>
<string>total_quantity</string>
</tuple>
<tuple>
<string>running_total_quantity</string>
<string>running_total_quantity</string>
</tuple>
</list>
</value>
......@@ -194,21 +220,47 @@
<key> <string>selection_name</string> </key>
<value> <string>bank_account_transaction_selection</string> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value>
<list>
<tuple>
<string>stock.date</string>
<string>ASC</string>
</tuple>
<tuple>
<string>stock.uid</string>
<string>ASC</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>sort_columns</string> </key>
<value>
<list>
<tuple>
<string>None</string>
<string>sorting disabled</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>stat_columns</string> </key>
<value>
<list>
<tuple>
<string>debit</string>
<string>BankAccount_statSourceDebit</string>
<string>BankAccount_statDebit</string>
</tuple>
<tuple>
<string>credit</string>
<string>BankAccount_statSourceCredit</string>
<string>BankAccount_statCredit</string>
</tuple>
<tuple>
<string>balance</string>
<string>BankAccount_statSourceBalance</string>
<string>total_quantity</string>
<string>BankAccount_statBalance</string>
</tuple>
</list>
</value>
......
......@@ -9,12 +9,14 @@
<item>
<key> <string>delegated_list</string> </key>
<value>
<list/>
<list>
<string>editable</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>your_gap</string> </value>
<value> <string>listbox_credit</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
......@@ -50,12 +52,6 @@
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
......@@ -75,13 +71,17 @@
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>your_gap</string> </value>
<value> <string>my_view_mode_money_quantity</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>AccountModule_viewReportFieldLibrary</string> </value>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>target</string> </key>
......@@ -93,17 +93,4 @@
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: dict([x[::-1] for x in here.Account_getGapItemList()])[here.REQUEST.get(\'gap\')]</string> </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_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="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>editable</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>listbox_debit</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>editable</string> </key>
<value> <string></string> </value>
</item>
<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>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_view_mode_money_quantity</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</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>
<?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>editable</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>listbox_running_total_quantity</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>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_view_mode_money_quantity</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</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>
<?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>editable</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>listbox_total_quantity</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>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_view_mode_money_quantity</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</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>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="SQL" module="Products.ZSQLMethods.SQL"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Use_Database_Methods_Permission</string> </key>
<value>
<list>
<string>Member</string>
</list>
</value>
</item>
<item>
<key> <string>allow_simple_one_argument_traversal</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>arguments_src</string> </key>
<value> <string>getUid\r\n
getParentUid\r\n
query\r\n
omit_input\r\n
omit_output\r\n
resource_uid:list\r\n
from_date\r\n
at_date\r\n
to_date\r\n
simulation_state:list\r\n
node_uid:list\r\n
stat</string> </value>
</item>
<item>
<key> <string>cache_time_</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>class_file_</string> </key>
<value> <string>ZSQLCatalog.zsqlbrain</string> </value>
</item>
<item>
<key> <string>class_name_</string> </key>
<value> <string>ZSQLBrain</string> </value>
</item>
<item>
<key> <string>connection_hook</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>connection_id</string> </key>
<value> <string>erp5_sql_connection</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BankAccount_zGetAccountingTransactionList</string> </value>
</item>
<item>
<key> <string>max_cache_</string> </key>
<value> <int>100</int> </value>
</item>
<item>
<key> <string>max_rows_</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>src</string> </key>
<value> <string encoding="cdata"><![CDATA[
<dtml-if getParentUid>\n
SELECT\n
<dtml-if stat>\n
SUM(stock.quantity) AS quantity\n
<dtml-else>\n
catalog.uid\n
, catalog.path\n
, stock.date as date\n
, section.title as section_title\n
, IF(delivery.source_section_uid = stock.section_uid,\n
catalog.source_reference,\n
catalog.destination_reference) AS specific_reference\n
, IFNULL(SUM(IF(stock.quantity > 0, stock.quantity, 0)), 0) AS debit\n
, IFNULL(SUM(IF(stock.quantity < 0, - stock.quantity, 0)), 0) AS credit\n
, - IFNULL(SUM(IF(stock.quantity < 0, - stock.quantity, 0)), 0)\n
+ IFNULL(SUM(IF(stock.quantity > 0, stock.quantity, 0)), 0) AS balance \n
</dtml-if>\n
FROM\n
movement\n
, catalog AS child\n
, catalog\n
, catalog AS node\n
, category AS node_category\n
, delivery\n
, stock\n
LEFT JOIN catalog AS section\n
ON stock.mirror_section_uid = section.uid\n
<dtml-if query>\n
, category\n
</dtml-if>\n
WHERE stock.section_uid = <dtml-var getParentUid>\n
AND stock.payment_uid = <dtml-var getUid>\n
AND delivery.uid = catalog.uid\n
AND child.uid = stock.uid\n
AND child.parent_uid = catalog.uid\n
AND movement.uid = stock.uid\n
AND movement.is_accountable = 1\n
AND node.uid = stock.node_uid\n
AND node.uid = node_category.uid\n
AND node_category.category_uid = <dtml-sqlvar\n
"portal_categories.account_type.asset.cash.bank.getUid()" type="int">\n
<dtml-if node_uid>\n
AND (\n
<dtml-in node_uid>\n
stock.node_uid = <dtml-sqlvar sequence-item type="int">\n
<dtml-unless sequence-end> OR </dtml-unless>\n
</dtml-in>\n
)\n
</dtml-if>\n
<dtml-if resource_uid>\n
AND (\n
<dtml-in resource_uid>\n
movement.resource_uid = <dtml-sqlvar sequence-item type="int">\n
<dtml-unless sequence-end> OR </dtml-unless>\n
</dtml-in>\n
)\n
</dtml-if>\n
<dtml-if from_date>\n
AND stock.date >= <dtml-sqlvar from_date type="datetime">\n
</dtml-if>\n
<dtml-if at_date>\n
AND stock.date <= <dtml-sqlvar at_date type="datetime">\n
</dtml-if>\n
<dtml-if to_date>\n
AND stock.date < <dtml-sqlvar to_date type="datetime">\n
</dtml-if>\n
<dtml-if omit_input>\n
AND stock.quantity > 0\n
</dtml-if>\n
<dtml-if omit_output>\n
AND stock.quantity < 0\n
</dtml-if>\n
<dtml-if simulation_state>\n
AND (\n
<dtml-in simulation_state>\n
catalog.simulation_state = <dtml-sqlvar sequence-item type="string">\n
<dtml-unless sequence-end> OR </dtml-unless>\n
</dtml-in>\n
)\n
</dtml-if>\n
<dtml-if query>\n
AND category.uid = stock.section_uid\n
AND <dtml-var query>\n
</dtml-if>\n
<dtml-unless stat>\n
GROUP BY catalog.uid\n
</dtml-unless>\n
ORDER BY stock.date, movement.uid\n
</dtml-if>\n
]]></string> </value>
</item>
<item>
<key> <string>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="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 encoding="cdata"><![CDATA[
try:\n
# Round the value\n
# Fortunately, the round() python method follow french fiscal rules.\n
# Exemples:\n
# 116.5049 should be rounded to 116.50\n
# 116.505 should be rounded to 116.51\n
# 116.5051 should be rounded to 116.51\n
# Please check in your country if the round() method comply with local accounting and fiscal laws.\n
rounded_value = round(value, precision)\n
\n
# Truncate the rounded value\n
trunc_value = (\'%.\' + str(precision) + \'f\') % rounded_value\n
\n
if as_string:\n
return trunc_value\n
return float(trunc_value)\n
\n
except:\n
context.log("bad convertion >>>", repr(context) + " | " + repr(value) + " | " + repr(precision))\n
return 0.0\n
]]></string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>value, precision, as_string=False</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Base_getRoundValue</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -54,9 +54,13 @@
portal = context.getPortalObject()\n
\n
params = portal.ERP5Accounting_getParams(selection_name=selection_name)\n
getInventoryAssetPrice = portal.portal_simulation.getInventoryAssetPrice\n
getSelectionDomainDictFor = context.portal_selections.getSelectionDomainDictFor\n
\n
if asset_price:\n
getInventory = portal.portal_simulation.getInventoryAssetPrice\n
else:\n
getInventory = portal.portal_simulation.getInventory\n
\n
if kw.get(\'node_uid\'):\n
params[\'node_uid\'] = kw[\'node_uid\']\n
\n
......@@ -138,26 +142,26 @@ if period_start_date and params.get(\'node_uid\'):\n
# balance at the beginning of the period, plus debit or credit from this\n
# beginning of period to the from_date\n
at_date = params.pop(\'at_date\', None)\n
period_openning_balance = getInventoryAssetPrice(\n
period_openning_balance = getInventory(\n
selection_domain=getSelectionDomainDictFor(selection_name),\n
to_date=period_start_date,\n
**params)\n
if omit_asset_decrease:\n
return getInventoryAssetPrice(omit_asset_decrease=1,\n
return getInventory(omit_asset_decrease=1,\n
from_date=period_start_date,\n
at_date=at_date,\n
**params) + max(period_openning_balance, 0)\n
elif omit_asset_increase:\n
return getInventoryAssetPrice(omit_asset_increase=1,\n
return getInventory(omit_asset_increase=1,\n
from_date=period_start_date,\n
at_date=at_date,\n
**params) - max(-period_openning_balance, 0)\n
return getInventoryAssetPrice(\n
return getInventory(\n
from_date=period_start_date,\n
at_date=at_date,\n
**params) + period_openning_balance\n
\n
return getInventoryAssetPrice(\n
return getInventory(\n
omit_asset_increase=omit_asset_increase,\n
omit_asset_decrease=omit_asset_decrease,\n
selection_domain=getSelectionDomainDictFor(selection_name),\n
......@@ -166,7 +170,7 @@ return getInventoryAssetPrice(\n
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>selection=None, omit_asset_increase=0, omit_asset_decrease=0, selection_name=None, **kw</string> </value>
<value> <string>selection=None, omit_asset_increase=0, omit_asset_decrease=0, asset_price=True, selection_name=None, **kw</string> </value>
</item>
<item>
<key> <string>_proxy_roles</string> </key>
......
<?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>context.log(\'erp5_accounting\',\n
\'InvoiceTransactionLine_getSourceItemList is a deprecated compatibility\'\n
\' alias to AccountingTransactionLine_getNodeItemList()\')\n
return context.AccountingTransactionLine_getNodeItemList()\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>category_dict=None, caching_method_id=\'InvoiceTransactionLine_getSourceItemList\'</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>InvoiceTransactionLine_getSourceItemList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -50,7 +50,9 @@
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>from Products.DCWorkflow.DCWorkflow import ValidationFailed\n
<value> <string encoding="cdata"><![CDATA[
from Products.DCWorkflow.DCWorkflow import ValidationFailed\n
from Products.ERP5Type.Message import translateString\n
\n
period = state_change[\'object\']\n
......@@ -64,6 +66,18 @@ all_state_list = [x[1] for x in\n
invalid_simulation_state_list = [state for state in all_state_list\n
if state not in valid_simulation_state_list]\n
\n
if period.getParentValue().getPortalType() == \'Organisation\':\n
# if this is a "main" accounting period, we refuse to close if the previous\n
# period is not already closed.\n
for other_period in period.getParentValue().contentValues(\n
portal_type=\'Accounting Period\',\n
checked_permission=\'View\'):\n
if other_period != period and \\\n
other_period.getSimulationState() not in (\'delivered\', \'cancelled\') and\\\n
other_period.getStartDate() < period.getStartDate():\n
raise ValidationFailed(translateString(\n
"Previous accounting periods has to be closed first."))\n
\n
section = period.getParentValue()\n
while section.getPortalType() == period.getPortalType():\n
section = section.getParentValue()\n
......@@ -115,7 +129,9 @@ movement_list = portal.portal_simulation.getMovementHistoryList(\n
if movement_list:\n
raise ValidationFailed, translateString(\n
"All Accounting Transactions for this organisation during the period have to be closed first.")\n
</string> </value>
]]></string> </value>
</item>
<item>
<key> <string>_params</string> </key>
......
1508
\ No newline at end of file
1517
erp5_accounting
\ No newline at end of file
erp5_accounting_bbb
\ No newline at end of file
......@@ -71,9 +71,6 @@ request = context.REQUEST\n
gap_base = request.get("gap_base", "gap/fr/pcg/")\n
getURL = lambda gap_id: context.GAPCategory_getURLFromId(gap_id, gap_base)\n
\n
precision = context.Base_getPreferredPrecision()\n
r_ = lambda x: context.Base_getRoundValue(x, precision)\n
\n
section = context.restrictedTraverse(request.get("organisation"))\n
section_region = section.getRegion()\n
\n
......@@ -81,8 +78,8 @@ section_region = section.getRegion()\n
params = { \'omit_simulation\' : True\n
, \'simulation_state\': request.get("simulation_state", [\'stopped\', \'delivered\'])\n
, \'section_uid\' : section.getUid()\n
, \'precision\' : 2\n
, \'at_date\' : request[\'at_date\']\n
, \'where_expression\': " section.portal_type = \'Organisation\' "\n
}\n
params.update(kw)\n
\n
......@@ -134,12 +131,12 @@ for gap_id in gap_id_list:\n
\n
# Get the transaction\'s balance\n
if not region.startswith(section_region):\n
new_balance = r_(r_(new_balance) + r_(transaction.total_price)) or 0.0\n
new_balance = new_balance + transaction.total_price\n
\n
# Update the general balance\n
net_balance = r_(r_(net_balance) + r_(new_balance))\n
net_balance = net_balance + new_balance\n
\n
return r_(net_balance)\n
return net_balance\n
</string> </value>
</item>
<item>
......
26
\ No newline at end of file
27
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<?xml version="1.0" encoding="iso-8859-1"?>\n
<template bottommargin=\'2cm\' showboundary=\'0\' topmargin=\'2cm\' \n
rightmargin=\'2cm\' tal:define=\'portal python:here.portal_url.getPortalObject()\' \n
filename=\'journal.pdf\' pagesize=\'A4\' allowsplitting=\'1\' landscape=\'0\' leftmargin=\'2cm\'>\n
\n
<pagetemplate startframe=\'content\' id=\'FirstPage\'>\n
<static>\n
<infostring align="left" x="1cm" y= "29cm" size="8" font="Helvetica" color="(0,0,0)"\n
tal:content="python: here.Localizer.erp5_ui.gettext(\'Printed by %(user)s at %(date)s\') % {\'user\':user.getUserName(), \'date\':DateTime()}" >Printed by</infostring>\n
<infostring align="left" x="18cm" y= "0.5cm" size="10" font="Helvetica" color="(0,0,0)" >Page %(page)s</infostring>\n
</static>\n
<frame showBoundary=\'0\' leftpadding=\'0.1cm\' height=\'23.94cm\' width=\'17.59cm\' rightpadding=\'0.1cm\' y=\'2cm\' x=\'2cm\' nextid=\'content\' toppadding=\'0.2cm\' id=\'content\' bottompadding=\'0.5cm\'/>\n
</pagetemplate>\n
\n
<stylesheet>\n
<paragraphstyle name="Title" parent="Normal" fontname="Helvetica-Bold" fontsize="32" align="CENTER"/>\n
<tablestyle name=\'default\'>\n
<stylecmd expr="(\'GRID\', (0,0), (-1,-1), 0.1, colors.black)"/>\n
</tablestyle>\n
<paragraphstyle name="TableStandard" parent="Normal" fontname="Helvetica" fontsize="8" alignment="left" />\n
<paragraphstyle name="TableStandardLeftAligned" parent="Normal" fontname="Helvetica" fontsize="7" alignment="left" />\n
<paragraphstyle name="TableStandardRightAligned" parent="Normal" fontname="Helvetica" fontsize="7" alignment="right" />\n
<paragraphstyle name="TableHeader" parent="Normal" fontname="Helvetica-Oblique" fontsize="9" alignment="left" />\n
<paragraphstyle name="TableLastLine" parent="Normal" fontname="Helvetica-Oblique" fontsize="11" alignment="left" />\n
\n
<tablestyle name=\'transaction_header\'>\n
\t <stylecmd expr="(\'LINEBELOW\', (0,0), (0,0), 0.1, colors.black)"/> \n
\t <stylecmd expr="(\'LINEBELOW\', (-3,0), (-3,0), 0.1, colors.black)"/> \n
\t <stylecmd expr="(\'LINEBEFORE\', (0,0),(0,0), 0.1, colors.black)"/>\n
\t <stylecmd expr="(\'LINEAFTER\', (-3,0),(-1,0), 0.1, colors.black)"/>\n
<stylecmd expr="(\'ALIGN\', (0,0),(-1,-1), \'CENTER\')"/>\n
<stylecmd expr="(\'VALIGN\', (0,0),(-1,-1), \'BOTTOM\')"/>\n
</tablestyle>\n
<tablestyle name=\'transaction_body\'>\n
<stylecmd expr="(\'LINEBEFORE\', (0,0),(0,0), 0.1, colors.black)"/>\n
<stylecmd expr="(\'LINEAFTER\', (-3,0),(-1,0), 0.1, colors.black)"/>\n
<stylecmd expr="(\'ALIGN\', (-2,0), (-1,-1), \'RIGHT\')"/>\n
</tablestyle>\n
<tablestyle name=\'transaction_footer\'>\n
<stylecmd expr="(\'LINEBEFORE\', (0,0),(0,0), 0.1, colors.black)"/>\n
<stylecmd expr="(\'LINEAFTER\', (-3,0),(-1,0), 0.1, colors.black)"/>\n
<stylecmd expr="(\'FONT\', (0,0), (-1,-1), \'Times-Italic\', 10)"/>\n
</tablestyle>\n
\n
<tablestyle name="top_of_page">\n
<stylecmd expr="(\'FONT\', (0,0), (-1,-1), \'Helvetica\', 8)"/>\n
<stylecmd expr="(\'BOX\', (0,0), (-1,0), 1, colors.black)"/>\n
<stylecmd expr="(\'BOX\', (0,1), (-1,-1), 1, colors.black)"/>\n
<stylecmd expr="(\'BACKGROUND\', (0,0), (-1,0), (0.9,0.9,0.9))"/>\n
<stylecmd expr="(\'ALIGN\', (0,0), (-1,-1), \'CENTER\')"/>\n
<stylecmd expr="(\'VALIGN\', (0,0), (-1,-1), \'TOP\')"/>\n
<stylecmd expr="(\'LEFTPADDING\', (0,0), (-1,-1), 1)"/>\n
<stylecmd expr="(\'RIGHTPADDING\', (0,0), (-1,-1), 1)"/>\n
<stylecmd expr="(\'BOTTOMPADDING\', (0,0), (-1,-1), 0)"/>\n
<stylecmd expr="(\'TOPPADDING\', (0,0), (-1,-1), 1)"/>\n
</tablestyle>\n
\n
<tablestyle name="AttributesTable">\n
<stylecmd expr="(\'INNERGRID\', (0,0), (-1,-1), 1, (0.5,0.5,0.5))"/>\n
<stylecmd expr="(\'FONT\', (0,0), (-1,-1), \'Helvetica\', 8)"/>\n
<stylecmd expr="(\'BOX\', (0,0), (-1,-1), 1, colors.black)"/>\n
<stylecmd expr="(\'BACKGROUND\', (0,0), (0,-1), (0.9,0.9,0.9))"/>\n
<stylecmd expr="(\'ALIGN\', (0,0), (-1,-1), \'CENTER\')"/>\n
<stylecmd expr="(\'VALIGN\', (0,0), (-1,-1), \'TOP\')"/>\n
</tablestyle>\n
\n
</stylesheet>\n
</template>\n
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>AccountingTransactionModule_journal_pdf_template</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PDFTemplate" module="Products.ERP5Form.PDFTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<?xml version="1.0" encoding="latin1"?>\n
<document\n
filename="journal.pdf"\n
tal:define="portal here/portal_url/getPortalObject;\n
transaction_list here/AccountingTransactionModule_getJournalAccountingTransactionList;\n
precision here/Base_getPreferredPrecision">\n
<title>Journal</title>\n
<author>ERP5</author>\n
<subject>Journal</subject>\n
<content xmlns:tal="http://xml.zope.org/namespaces/tal">\n
<para style="Title" i18n:translate="" i18n:domain="ui">Journal</para>\n
<action name="nextPageTemplate">\n
<parameter>FirstPage</parameter>\n
</action>\n
<spacer height="50"/>\n
\n
<table splitbyrow="1" repeatrows="0" repeatcols="0" style="AttributesTable" >\n
<tr tal:condition="python: request.get(\'from_date\', 0)">\n
<td colwidth="5cm"> <para style="TableHeader" tal:content="python: here.Base_translateString(\'From Date\')"/> </td>\n
<td colwidth="15cm"> <para style="TableStandardRightAligned" tal:content="python: here.Base_FormatDate(request.get(\'from_date\'))"/></td> </tr>\n
<tr>\n
<td colwidth="5cm"> <para style="TableHeader" tal:content="python: here.Base_translateString(\'At Date\')"/> </td>\n
<td colwidth="15cm"> <para style="TableStandardRightAligned" tal:content="python: here.Base_FormatDate(request.get(\'at_date\'))"/></td> </tr>\n
<tr>\n
<td colwidth="5cm"> <para style="TableHeader" tal:content="python: here.Base_translateString(\'Section\')"/> </td>\n
<td colwidth="15cm"> <para style="TableStandardRightAligned" tal:content="python: here.portal_categories.restrictedTraverse(request.get(\'transaction_section_category\')).getLogicalPath()"/></td> </tr>\n
<tr>\n
<td colwidth="5cm"> <para style="TableHeader" tal:content="python: here.Base_translateString(\'Transactions Simulation State\')"/> </td>\n
<td colwidth="15cm"> <tal:block tal:repeat="state python:request.get(\'transaction_simulation_state\', [])">\n
<para style="TableStandardRightAligned" tal:content="state"/> </tal:block> </td> </tr>\n
<tr>\n
<td colwidth="5cm"> <para style="TableHeader" tal:content="python: here.Base_translateString(\'Journal Type\')"/> </td>\n
<td colwidth="15cm"> <tal:block tal:repeat="type python:request.get(\'transaction_portal_type\', [])">\n
<para style="TableStandardRightAligned" tal:content="python: here.Base_translateString(type)"/> </tal:block> </td> </tr>\n
\n
</table>\n
<spacer height="10"/>\n
\n
<table style="top_of_page" splitbyrow="1" repeatrows="0" repeatcols="0">\n
<tr rowheight="0.512cm">\n
<td colwidth="12cm">Account Title</td>\n
<td colwidth="2.5cm">Debit</td>\n
<td colwidth="2.5cm">Credit</td>\n
</tr>\n
</table>\n
<tal:block tal:repeat="transaction python:transaction_list[:-1]">\n
<table style="transaction_header" splitbyrow="1" repeatrows="0" repeatcols="0">\n
<tr rowheight="0.5cm">\n
<td colwidth="4.5cm"/>\n
<td colwidth="3cm" tal:content="transaction/date">Date</td>\n
<td colwidth="4.5cm"/>\n
<td colwidth="2.5cm"/>\n
<td colwidth="2.5cm"/>\n
</tr>\n
</table>\n
\n
<tal:block tal:repeat="line transaction/lines">\n
<table style="transaction_body" splitbyrow="1" repeatrows="0" repeatcols="0">\n
<tr rowheight="0.512cm">\n
<tal:block tal:condition="not:line/debtor">\n
<td colwidth="2cm"/>\n
</tal:block>\n
<td colwidth="modified"\n
tal:attributes="colwidth python: line[\'debtor\'] and \'12cm\' or \'10cm\' ;" tal:content="python:line[\'account_name\']"/>\n
<td colwidth="2.5cm" tal:content="python:line[\'debtor\'] and here.Base_getRoundValue(line[\'amount\'], precision) or \' \' "/>\n
<td colwidth="2.5cm" tal:content="python:line[\'debtor\'] and \' \' or here.Base_getRoundValue(line[\'amount\'], precision) "/>\n
</tr>\n
</table>\n
</tal:block>\n
\n
<table style="transaction_footer" splitbyrow="1" repeatrows="0" repeatcols="0">\n
<tr>\n
<td colwidth="0.5cm"/>\n
<td colwidth="11.5cm" tal:content="transaction/description"/>\n
<td colwidth="2.5cm"/>\n
<td colwidth="2.5cm"/>\n
</tr>\n
</table>\n
</tal:block>\n
\n
<tal:block tal:replace="nothing"> Summary.\n
</tal:block>\n
<tal:block>\n
\t\t\t<!--\n
<table style="transaction_header" splitbyrow="1" repeatrows="0" repeatcols="0">\n
<tr rowheight="0.5cm">\n
<td colwidth="1.5cm"/>\n
<td colwidth="1.5cm"/>\n
<td colwidth="4.5cm"/>\n
<td colwidth="3cm"/>\n
<td colwidth="4.5cm"/>\n
<td colwidth="2.5cm"/>\n
<td colwidth="2.5cm"/>\n
</tr>\n
</table>\n
\t\t\t-->\n
<table style="transaction_body" splitbyrow="1" repeatrows="0" repeatcols="0">\n
<tr rowheight="1.5cm">\n
<!-- <td colwidth="1.5cm"/>-->\n
<!-- <td colwidth="1.5cm"/>-->\n
<!-- <td colwidth="2cm"/>-->\n
\t\t\t\t\t<td colwidth="0.5cm"/>\n
<td colwidth="11.5cm" > Total </td>\n
<td colwidth="2.5cm" tal:content="python: here.Base_getRoundValue(transaction_list[-1][\'journal_total_debit\' ], precision) "/>\n
<td colwidth="2.5cm" tal:content="python: here.Base_getRoundValue(transaction_list[-1][\'journal_total_credit\'], precision) "/>\n
</tr>\n
</table>\n
</tal:block>\n
</content>\n
</document>\n
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>AccountingTransactionModule_viewJournalAsPdf</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>pdf_stylesheet</string> </key>
<value> <string>AccountingTransactionModule_journal_pdf_template</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
20
\ No newline at end of file
21
\ No newline at end of file
......@@ -275,7 +275,7 @@
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python:cell.getObject().InvoiceTransactionLine_getSourceItemList()</string> </value>
<value> <string>python:cell.getObject().AccountingTransactionLine_getNodeItemList()</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -275,7 +275,7 @@
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python:cell.getObject().InvoiceTransactionLine_getSourceItemList()</string> </value>
<value> <string>python:cell.getObject().AccountingTransactionLine_getNodeItemList()</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -275,7 +275,7 @@
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python:cell.getObject().InvoiceTransactionLine_getSourceItemList()</string> </value>
<value> <string>python:cell.getObject().AccountingTransactionLine_getNodeItemList()</string> </value>
</item>
</dictionary>
</pickle>
......
706
\ No newline at end of file
707
\ No newline at end of file
......@@ -275,7 +275,7 @@
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python:cell.getObject().InvoiceTransactionLine_getSourceItemList()</string> </value>
<value> <string>python:cell.getObject().AccountingTransactionLine_getNodeItemList()</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -275,7 +275,7 @@
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python:cell.getObject().InvoiceTransactionLine_getSourceItemList()</string> </value>
<value> <string>python:cell.getObject().AccountingTransactionLine_getNodeItemList()</string> </value>
</item>
</dictionary>
</pickle>
......
498
\ No newline at end of file
499
\ No newline at end of file
......@@ -275,7 +275,7 @@
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python:cell.getObject().InvoiceTransactionLine_getSourceItemList()</string> </value>
<value> <string>python:cell.getObject().AccountingTransactionLine_getNodeItemList()</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -77,7 +77,10 @@ if engaged_budget:\n
portal.getPortalCurrentInventoryStateList() +\n
portal.getPortalTransitInventoryStateList())\n
\n
kw.setdefault(\'simulation_state\', portal.getPortalCurrentInventoryStateList())\n
# those are simulation state parameters equivalent to getCurrentInventoryQuery that can be passed to getMovementHistoryList\n
kw.setdefault(\'simulation_state\', portal.getPortalCurrentInventoryStateList() + portal.getPortalTransitInventoryStateList())\n
kw.setdefault(\'transit_simulation_state\', portal.getPortalTransitInventoryStateList())\n
kw.setdefault(\'omit_transit\', False)\n
\n
return kw\n
</string> </value>
......
......@@ -352,8 +352,8 @@
<value>
<list>
<tuple>
<string>id</string>
<string>ID</string>
<string>reference</string>
<string>Reference</string>
</tuple>
<tuple>
<string>SaleOrder_getFormattedTotalPrice</string>
......@@ -364,7 +364,7 @@
<string>Order Date</string>
</tuple>
<tuple>
<string>translated_simulation_state</string>
<string>translated_simulation_state_title</string>
<string>State</string>
</tuple>
</list>
......@@ -382,6 +382,10 @@
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_display_style</string> </key>
<value> <string>table</string> </value>
</item>
<item>
<key> <string>default_params</string> </key>
<value>
......@@ -392,6 +396,12 @@
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_style_list</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>domain_root_list</string> </key>
<value>
......@@ -426,6 +436,10 @@
<list/>
</value>
</item>
<item>
<key> <string>global_search_column</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
......@@ -454,6 +468,10 @@
<list/>
</value>
</item>
<item>
<key> <string>page_navigation_template</string> </key>
<value> <string>ListBox_viewSliderPageNavigationRenderer</string> </value>
</item>
<item>
<key> <string>page_template</string> </key>
<value> <string></string> </value>
......@@ -517,8 +535,8 @@
<value>
<list>
<tuple>
<string>id</string>
<string>ID</string>
<string>reference</string>
<string>Reference</string>
</tuple>
<tuple>
<string>SaleOrder_getFormattedTotalPrice</string>
......@@ -529,7 +547,7 @@
<string>Date</string>
</tuple>
<tuple>
<string>translated_simulation_state</string>
<string>translated_simulation_state_title</string>
<string>State</string>
</tuple>
</list>
......@@ -545,9 +563,15 @@
<key> <string>stat_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>style_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Sale Orders</string> </value>
<value> <string>My Orders</string> </value>
</item>
<item>
<key> <string>untranslatable_columns</string> </key>
......@@ -560,7 +584,7 @@
<value>
<list>
<tuple>
<string>id</string>
<string>reference</string>
<string>SaleOrder_getSaleOrderUrl</string>
</tuple>
<tuple>
......@@ -572,7 +596,7 @@
<string>SaleOrder_getSaleOrderUrl</string>
</tuple>
<tuple>
<string>translated_simulation_state</string>
<string>translated_simulation_state_title</string>
<string>SaleOrder_getSaleOrderUrl</string>
</tuple>
</list>
......@@ -586,10 +610,7 @@
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<global name="Method" module="Products.Formulator.MethodField"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
......
......@@ -106,7 +106,7 @@
<key> <string>default</string> </key>
<value> <string encoding="cdata"><![CDATA[
<h2>Sale Order Details</h2>
<h2>Order Details</h2>
]]></string> </value>
</item>
......
......@@ -72,7 +72,7 @@
website here/getWebSiteValue">\n
\n
<p class="article">\n
<span><span tal:replace="python: here.Base_translateString(\'You are logged as\')"/> <span tal:replace="customer/getTitle"/></span>\n
<span><span tal:replace="python: here.Base_translateString(\'You are logged as\')"/> <span tal:replace="customer/getTitle | string:Unknown User"/></span>\n
</p>\n
<a class="articlelink" \n
tal:attributes="href python: \'%s/sale_order_module/SaleOrderModule_viewAsWebSaleOrderList\' % website.absolute_url()">\n
......@@ -89,8 +89,7 @@
<br/>\n
</tal:block>\n
\n
</tal:block>\n
</tal:block>
]]></unicode> </value>
</item>
......
......@@ -58,8 +58,7 @@
</tal:block>\n
</tal:block>\n
</tal:block>\n
</tal:block>\n
</tal:block>
]]></unicode> </value>
</item>
......
......@@ -27,7 +27,10 @@
<item>
<key> <string>transitions</string> </key>
<value>
<tuple/>
<tuple>
<string>delete</string>
<string>delete_action</string>
</tuple>
</value>
</item>
<item>
......
1268
\ No newline at end of file
1269
\ No newline at end of file
......@@ -55,20 +55,31 @@ SearchableText</string> </value>
<key> <string>src</string> </key>
<value> <string encoding="cdata"><![CDATA[
REPLACE INTO\n
DELETE FROM\n
full_text\n
WHERE\n
<dtml-in uid>\n
uid=<dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if>\n
</dtml-in>\n
;\n
<dtml-var "\'\\0\'"><dtml-let document_list="[]">\n
<dtml-in prefix="loop" expr="_.range(_.len(uid))">\n
<dtml-if "SearchableText[loop_item]">\n
<dtml-call expr="document_list.append(loop_item)">\n
</dtml-if>\n
</dtml-in>\n
<dtml-if expr="_.len(document_list) > 0">\n
INSERT INTO\n
full_text\n
VALUES\n
<dtml-in prefix="loop" expr="_.range(_.len(uid))">\n
(\n
<dtml-sqlvar expr="uid[loop_item]" type="int">, \n
<dtml-in prefix="loop" expr="document_list">\n
( \n
<dtml-sqlvar expr="uid[loop_item]" type="int">,\n
<dtml-sqlvar expr="SearchableText[loop_item]" type="string" optional>\n
)\n
<dtml-if sequence-end>\n
<dtml-else>\n
,\n
</dtml-if>\n
</dtml-in>\n
)<dtml-unless sequence-end>,</dtml-unless>\n
</dtml-in>\n
</dtml-if>\n
</dtml-let>
]]></string> </value>
</item>
......
5
\ No newline at end of file
6
\ No newline at end of file
......@@ -116,7 +116,7 @@
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python:cell.getObject().InvoiceTransactionLine_getSourceItemList()</string> </value>
<value> <string>python:cell.getObject().AccountingTransactionLine_getNodeItemList()</string> </value>
</item>
</dictionary>
</pickle>
......
181
\ No newline at end of file
182
\ No newline at end of file
......@@ -14,7 +14,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>erp5_accounting_bbb</string> </value>
<value> <string>jqzoom</string> </value>
</item>
<item>
<key> <string>title</string> </key>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>http_cache</string> </value>
</item>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts48589804.75</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>jqzoom-core-pack.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/*!\r\n
* jQzoom Evolution Library v2.3 - Javascript Image magnifier\r\n
* http://www.mind-projects.it\r\n
*\r\n
* Copyright 2011, Engineer Marco Renzi\r\n
* Licensed under the BSD license.\r\n
*\r\n
* Redistribution and use in source and binary forms, with or without\r\n
* modification, are permitted provided that the following conditions are met:\r\n
* * Redistributions of source code must retain the above copyright\r\n
* notice, this list of conditions and the following disclaimer.\r\n
* * Redistributions in binary form must reproduce the above copyright\r\n
* notice, this list of conditions and the following disclaimer in the\r\n
* documentation and/or other materials provided with the distribution.\r\n
* * Neither the name of the organization nor the\r\n
* names of its contributors may be used to endorse or promote products\r\n
* derived from this software without specific prior written permission.\r\n
*\r\n
* Date: 03 May 2011 22:16:00\r\n
*/\r\n
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?\'\':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!\'\'.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return\'\\\\w+\'};c=1};while(c--)if(k[c])p=p.replace(new RegExp(\'\\\\b\'+e(c)+\'\\\\b\',\'g\'),k[c]);return p}(\'(8($){9 v=($.1A.2j&&$.1A.2k<7);9 w=$(1B.1C);9 y=$(y);9 z=F;$.3d.13=8(b){G 5.1Y(8(){9 a=5.3e.3f();A(a==\\\'a\\\'){Q 13(5,b)}})};13=8(g,h){9 j=2l;j=$(g).1D("13");A(j)G j;9 k=5;9 l=$.1E({},$.13.2m,h||{});k.3g=g;g.1p=$(g).R(\\\'1p\\\');g.1F=F;g.3h=F;g.1u=F;g.1h=F;g.1b={};g.2n=2l;g.14={};g.1G=F;$(g).D({\\\'3i-1i\\\':\\\'1v\\\',\\\'3j-3k\\\':\\\'1v\\\'});9 m=$("3l:3m(0)",g);g.V=$(g).R(\\\'V\\\');g.1Z=m.R(\\\'V\\\');9 n=($.1w(g.V).Y>0)?g.V:g.1Z;9 p=Q 2o(m);9 q=Q 2p();9 r=Q 2q();9 s=Q 2r();9 t=Q 2s();$(g).1H(\\\'2t\\\',8(e){e.2u();G F});9 u=[\\\'20\\\',\\\'1c\\\',\\\'1j\\\',\\\'1q\\\'];A($.3n($.1w(l.H),u)<0){l.H=\\\'20\\\'}$.1E(k,{21:8(){A($(".L",g).Y==0){g.L=$(\\\'<Z/>\\\').1I(\\\'L\\\');m.3o(g.L)}A(l.H==\\\'1j\\\'){l.15=p.w;l.16=p.h}A($(".22",g).Y==0){q.S()}A($(".23",g).Y==0){r.S()}A($(".2v",g).Y==0){t.S()}A(l.24||l.H==\\\'1c\\\'||l.1J){k.1K()}k.2w()},2w:8(){A(l.H==\\\'1c\\\'){$(".L",g).3p(8(){g.1G=17});$(".L",g).3q(8(){g.1G=F});1B.1C.3r=8(){G F};$(".L",g).D({1L:\\\'1r\\\'});$(".22",g).D({1L:\\\'3s\\\'})}A(l.H==\\\'1j\\\'){$(".1M",g).D({1L:\\\'3t\\\'})}$(".L",g).1H(\\\'3u 3v\\\',8(a){m.R(\\\'V\\\',\\\'\\\');$(g).R(\\\'V\\\',\\\'\\\');g.1F=17;p.1s();A(g.1h){k.25(a)}1k{k.1K()}});$(".L",g).1H(\\\'3w\\\',8(a){k.2x()});$(".L",g).1H(\\\'3x\\\',8(e){A(e.26>p.E.r||e.26<p.E.l||e.27<p.E.t||e.27>p.E.b){q.1N();G F}g.1F=17;A(g.1h&&!$(\\\'.23\\\',g).3y(\\\':2y\\\')){k.25(e)}A(g.1h&&(l.H!=\\\'1c\\\'||(l.H==\\\'1c\\\'&&g.1G))){q.1l(e)}});9 c=Q 2z();9 i=0;9 d=Q 2z();d=$(\\\'a\\\').3z(8(){9 a=Q 3A("3B[\\\\\\\\s]*:[\\\\\\\\s]*\\\'"+$.1w(g.1p)+"\\\'","i");9 b=$(5).R(\\\'1p\\\');A(a.3C(b)){G 5}});A(d.Y>0){9 f=d.3D(0,1);d.3E(f)}d.1Y(8(){A(l.24){9 a=$.1E({},1O("("+$.1w($(5).R(\\\'1p\\\'))+")"));c[i]=Q 28();c[i].1d=a.1x;i++}$(5).2t(8(e){A($(5).3F(\\\'29\\\')){G F}d.1Y(8(){$(5).3G(\\\'29\\\')});e.2u();k.2A(5);G F})})},1K:8(){A(g.1h==F&&g.1u==F){9 a=$(g).R(\\\'2B\\\');g.1u=17;s.2C(a)}},25:8(e){3H(g.2n);q.T();r.T()},2x:8(e){1P(l.H){1t\\\'1c\\\':W;1r:m.R(\\\'V\\\',g.1Z);$(g).R(\\\'V\\\',g.V);A(l.1J){q.1N()}1k{r.O();q.O()}W}g.1F=F},2A:8(a){g.1u=F;g.1h=F;9 b=Q 3I();b=$.1E({},1O("("+$.1w($(a).R(\\\'1p\\\'))+")"));A(b.1Q&&b.1x){9 c=b.1Q;9 d=b.1x;$(a).1I(\\\'29\\\');$(g).R(\\\'2B\\\',d);m.R(\\\'1d\\\',c);q.O();r.O();k.1K()}1k{2a(\\\'2D :: 2E 2F 1R 1x 2G 1Q.\\\');2b\\\'2D :: 2E 2F 1R 1x 2G 1Q.\\\';}G F}});A(m[0].3J){p.1s();A($(".L",g).Y==0)k.21()}8 2o(c){9 d=5;5.6=c[0];5.2H=8(){9 a=0;a=c.D(\\\'2c-B-P\\\');M=\\\'\\\';9 b=0;b=c.D(\\\'2c-C-P\\\');K=\\\'\\\';A(a){1R(i=0;i<3;i++){9 x=[];x=a.1S(i,1);A(2I(x)==F){M=M+\\\'\\\'+a.1S(i,1)}1k{W}}}A(b){1R(i=0;i<3;i++){A(!2I(b.1S(i,1))){K=K+b.1S(i,1)}1k{W}}}d.M=(M.Y>0)?1O(M):0;d.K=(K.Y>0)?1O(K):0};5.1s=8(){d.2H();d.w=c.P();d.h=c.12();d.1m=c.3K();d.1e=c.3L();d.E=c.1f();d.E.l=c.1f().C+d.K;d.E.t=c.1f().B+d.M;d.E.r=d.w+d.E.l;d.E.b=d.h+d.E.t;d.2J=c.1f().C+d.1m;d.3M=c.1f().B+d.1e};5.6.2K=8(){2a(\\\'1T 1U 1V X.\\\');2b\\\'1T 1U 1V X.\\\';};5.6.2L=8(){d.1s();A($(".L",g).Y==0)k.21()};G d};8 2s(){9 a=5;5.S=8(){5.6=$(\\\'<Z/>\\\').1I(\\\'2v\\\').D(\\\'2d\\\',\\\'2M\\\').2N(l.2O);$(\\\'.L\\\',g).S(5.6)};5.T=8(){5.6.B=(p.1e-5.6.12())/2;5.6.C=(p.1m-5.6.P())/2;5.6.D({B:5.6.B,C:5.6.C,11:\\\'18\\\',2d:\\\'2y\\\'})};5.O=8(){5.6.D(\\\'2d\\\',\\\'2M\\\')};G 5}8 2p(){9 d=5;5.6=$(\\\'<Z/>\\\').1I(\\\'22\\\');5.S=8(){$(\\\'.L\\\',g).S($(5.6).O());A(l.H==\\\'1q\\\'){5.X=Q 28();5.X.1d=p.6.1d;$(5.6).2e().S(5.X)}};5.2P=8(){5.6.w=(1W((l.15)/g.1b.x)>p.w)?p.w:(1W(l.15/g.1b.x));5.6.h=(1W((l.16)/g.1b.y)>p.h)?p.h:(1W(l.16/g.1b.y));5.6.B=(p.1e-5.6.h-2)/2;5.6.C=(p.1m-5.6.w-2)/2;5.6.D({B:0,C:0,P:5.6.w+\\\'I\\\',12:5.6.h+\\\'I\\\',11:\\\'18\\\',1g:\\\'1v\\\',2f:1+\\\'I\\\'});A(l.H==\\\'1q\\\'){5.X.1d=p.6.1d;$(5.6).D({\\\'2g\\\':1});$(5.X).D({11:\\\'18\\\',1g:\\\'1y\\\',C:-(5.6.C+1-p.K)+\\\'I\\\',B:-(5.6.B+1-p.M)+\\\'I\\\'})}};5.1N=8(){5.6.B=(p.1e-5.6.h-2)/2;5.6.C=(p.1m-5.6.w-2)/2;5.6.D({B:5.6.B,C:5.6.C});A(l.H==\\\'1q\\\'){$(5.X).D({11:\\\'18\\\',1g:\\\'1y\\\',C:-(5.6.C+1-p.K)+\\\'I\\\',B:-(5.6.B+1-p.M)+\\\'I\\\'})}s.1l()};5.1l=8(e){g.14.x=e.26;g.14.y=e.27;9 b=0;9 c=0;8 2Q(a){G g.14.x-(a.w)/2<p.E.l}8 2R(a){G g.14.x+(a.w)/2>p.E.r}8 2S(a){G g.14.y-(a.h)/2<p.E.t}8 2T(a){G g.14.y+(a.h)/2>p.E.b}b=g.14.x+p.K-p.E.l-(5.6.w+2)/2;c=g.14.y+p.M-p.E.t-(5.6.h+2)/2;A(2Q(5.6)){b=p.K-1}1k A(2R(5.6)){b=p.w+p.K-5.6.w-1}A(2S(5.6)){c=p.M-1}1k A(2T(5.6)){c=p.h+p.M-5.6.h-1}5.6.C=b;5.6.B=c;5.6.D({\\\'C\\\':b+\\\'I\\\',\\\'B\\\':c+\\\'I\\\'});A(l.H==\\\'1q\\\'){A($.1A.2j&&$.1A.2k>7){$(5.6).2e().S(5.X)}$(5.X).D({11:\\\'18\\\',1g:\\\'1y\\\',C:-(5.6.C+1-p.K)+\\\'I\\\',B:-(5.6.B+1-p.M)+\\\'I\\\'})}s.1l()};5.O=8(){m.D({\\\'2g\\\':1});5.6.O()};5.T=8(){A(l.H!=\\\'1j\\\'&&(l.2U||l.H==\\\'1c\\\')){5.6.T()}A(l.H==\\\'1q\\\'){m.D({\\\'2g\\\':l.2V})}};5.2h=8(){9 o={};o.C=d.6.C;o.B=d.6.B;G o};G 5};8 2q(){9 b=5;5.6=$("<Z 1z=\\\'23\\\'><Z 1z=\\\'1M\\\'><Z 1z=\\\'1X\\\'></Z><Z 1z=\\\'2i\\\'></Z></Z></Z>");5.U=$(\\\'<2W 1z="3N" 1d="3O:\\\\\\\'\\\\\\\';" 3P="0" 3Q="0" 3R="2X" 3S="3T" 3U="0" ></2W>\\\');5.1l=8(){5.6.1n=0;5.6.1o=0;A(l.H!=\\\'1j\\\'){1P(l.11){1t"C":5.6.1n=(p.E.l-p.K-J.N(l.19)-l.15>0)?(0-l.15-J.N(l.19)):(p.1m+J.N(l.19));5.6.1o=J.N(l.1a);W;1t"B":5.6.1n=J.N(l.19);5.6.1o=(p.E.t-p.M-J.N(l.1a)-l.16>0)?(0-l.16-J.N(l.1a)):(p.1e+J.N(l.1a));W;1t"2X":5.6.1n=J.N(l.19);5.6.1o=(p.E.t-p.M+p.1e+J.N(l.1a)+l.16<2Y.12)?(p.1e+J.N(l.1a)):(0-l.16-J.N(l.1a));W;1r:5.6.1n=(p.2J+J.N(l.19)+l.15<2Y.P)?(p.1m+J.N(l.19)):(0-l.15-J.N(l.19));5.6.1o=J.N(l.1a);W}}5.6.D({\\\'C\\\':5.6.1n+\\\'I\\\',\\\'B\\\':5.6.1o+\\\'I\\\'});G 5};5.S=8(){$(\\\'.L\\\',g).S(5.6);5.6.D({11:\\\'18\\\',1g:\\\'1v\\\',2Z:3V});A(l.H==\\\'1j\\\'){5.6.D({1L:\\\'1r\\\'});9 a=(p.K==0)?1:p.K;$(\\\'.1M\\\',5.6).D({2f:a+\\\'I\\\'})}$(\\\'.1M\\\',5.6).D({P:J.30(l.15)+\\\'I\\\',2f:a+\\\'I\\\'});$(\\\'.2i\\\',5.6).D({P:\\\'31%\\\',12:J.30(l.16)+\\\'I\\\'});$(\\\'.1X\\\',5.6).D({P:\\\'31%\\\',11:\\\'18\\\'});$(\\\'.1X\\\',5.6).O();A(l.V&&n.Y>0){$(\\\'.1X\\\',5.6).2N(n).T()}b.1l()};5.O=8(){1P(l.32){1t\\\'3W\\\':5.6.3X(l.33,8(){});W;1r:5.6.O();W}5.U.O()};5.T=8(){1P(l.34){1t\\\'3Y\\\':5.6.35();5.6.35(l.36,8(){});W;1r:5.6.T();W}A(v&&l.H!=\\\'1j\\\'){5.U.P=5.6.P();5.U.12=5.6.12();5.U.C=5.6.1n;5.U.B=5.6.1o;5.U.D({1g:\\\'1y\\\',11:"18",C:5.U.C,B:5.U.B,2Z:3Z,P:5.U.P+\\\'I\\\',12:5.U.12+\\\'I\\\'});$(\\\'.L\\\',g).S(5.U);5.U.T()}}};8 2r(){9 c=5;5.6=Q 28();5.2C=8(a){t.T();5.40=a;5.6.1i.11=\\\'18\\\';5.6.1i.2c=\\\'37\\\';5.6.1i.1g=\\\'1v\\\';5.6.1i.C=\\\'-41\\\';5.6.1i.B=\\\'37\\\';1B.1C.42(5.6);5.6.1d=a};5.1s=8(){9 a=$(5.6);9 b={};5.6.1i.1g=\\\'1y\\\';c.w=a.P();c.h=a.12();c.E=a.1f();c.E.l=a.1f().C;c.E.t=a.1f().B;c.E.r=c.w+c.E.l;c.E.b=c.h+c.E.t;b.x=(c.w/p.w);b.y=(c.h/p.h);g.1b=b;1B.1C.43(5.6);$(\\\'.2i\\\',g).2e().S(5.6);q.2P()};5.6.2K=8(){2a(\\\'1T 1U 1V 38 39 X.\\\');2b\\\'1T 1U 1V 38 39 X.\\\';};5.6.2L=8(){c.1s();t.O();g.1u=F;g.1h=17;A(l.H==\\\'1c\\\'||l.1J){q.T();r.T();q.1N()}};5.1l=8(){9 a=-g.1b.x*(q.2h().C-p.K+1);9 b=-g.1b.y*(q.2h().B-p.M+1);$(5.6).D({\\\'C\\\':a+\\\'I\\\',\\\'B\\\':b+\\\'I\\\'})};G 5};$(g).1D("13",k)};$.13={2m:{H:\\\'20\\\',15:3a,16:3a,19:10,1a:0,11:"44",24:17,2O:\\\'45 46\\\',V:17,2U:17,2V:0.4,1J:F,34:\\\'T\\\',32:\\\'O\\\',36:\\\'47\\\',33:\\\'48\\\'},3b:8(a){9 b=$(a).1D(\\\'13\\\');b.3b();G F},3c:8(a){9 b=$(a).1D(\\\'13\\\');b.3c();G F},49:8(a){z=17},4a:8(a){z=F}}})(4b);\',62,260,\'|||||this|node||function|var|||||||||||||||||||||||||||if|top|left|css|pos|false|return|zoomType|px|Math|bleft|zoomPad|btop|abs|hide|width|new|attr|append|show|ieframe|title|break|image|length|div||position|height|jqzoom|mousepos|zoomWidth|zoomHeight|true|absolute|xOffset|yOffset|scale|drag|src|oh|offset|display|largeimageloaded|style|innerzoom|else|setposition|ow|leftpos|toppos|rel|reverse|default|fetchdata|case|largeimageloading|none|trim|largeimage|block|class|browser|document|body|data|extend|zoom_active|mouseDown|bind|addClass|alwaysOn|load|cursor|zoomWrapper|setcenter|eval|switch|smallimage|for|substr|Problems|while|loading|parseInt|zoomWrapperTitle|each|imagetitle|standard|create|zoomPup|zoomWindow|preloadImages|activate|pageX|pageY|Image|zoomThumbActive|alert|throw|border|visibility|empty|borderWidth|opacity|getoffset|zoomWrapperImage|msie|version|null|defaults|timer|Smallimage|Lens|Stage|Largeimage|Loader|click|preventDefault|zoomPreload|init|deactivate|visible|Array|swapimage|href|loadimage|ERROR|Missing|parameter|or|findborder|isNaN|rightlimit|onerror|onload|hidden|html|preloadText|setdimensions|overleft|overright|overtop|overbottom|lens|imageOpacity|iframe|bottom|screen|zIndex|round|100|hideEffect|fadeoutSpeed|showEffect|fadeIn|fadeinSpeed|0px|the|big|300|disable|enable|fn|nodeName|toLowerCase|el|zoom_disabled|outline|text|decoration|img|eq|inArray|wrap|mousedown|mouseup|ondragstart|move|crosshair|mouseenter|mouseover|mouseleave|mousemove|is|filter|RegExp|gallery|test|splice|push|hasClass|removeClass|clearTimeout|Object|complete|outerWidth|outerHeight|bottomlimit|zoomIframe|javascript|marginwidth|marginheight|align|scrolling|no|frameborder|5001|fadeout|fadeOut|fadein|99|url|5000px|appendChild|removeChild|right|Loading|zoom|slow|2000|disableAll|enableAll|jQuery\'.split(\'|\'),0,{}))\r\n
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>9669</int> </value>
</item>
<item>
<key> <string>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="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>http_cache</string> </value>
</item>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts58795626.09</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>jqzoom-core.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/*!\r\n
* jQzoom Evolution Library v2.3 - Javascript Image magnifier\r\n
* http://www.mind-projects.it\r\n
*\r\n
* Copyright 2011, Engineer Marco Renzi\r\n
* Licensed under the BSD license.\r\n
*\r\n
* Redistribution and use in source and binary forms, with or without\r\n
* modification, are permitted provided that the following conditions are met:\r\n
* * Redistributions of source code must retain the above copyright\r\n
* notice, this list of conditions and the following disclaimer.\r\n
* * Redistributions in binary form must reproduce the above copyright\r\n
* notice, this list of conditions and the following disclaimer in the\r\n
* documentation and/or other materials provided with the distribution.\r\n
* * Neither the name of the organization nor the\r\n
* names of its contributors may be used to endorse or promote products\r\n
* derived from this software without specific prior written permission.\r\n
*\r\n
* Date: 03 May 2011 22:16:00\r\n
*/\r\n
(function ($) {\r\n
//GLOBAL VARIABLES\r\n
var isIE6 = ($.browser.msie && $.browser.version < 7);\r\n
var body = $(document.body);\r\n
var window = $(window);\r\n
var jqzoompluging_disabled = false; //disabilita globalmente il plugin\r\n
$.fn.jqzoom = function (options) {\r\n
return this.each(function () {\r\n
var node = this.nodeName.toLowerCase();\r\n
if (node == \'a\') {\r\n
new jqzoom(this, options);\r\n
}\r\n
});\r\n
};\r\n
jqzoom = function (el, options) {\r\n
var api = null;\r\n
api = $(el).data("jqzoom");\r\n
if (api) return api;\r\n
var obj = this;\r\n
var settings = $.extend({}, $.jqzoom.defaults, options || {});\r\n
obj.el = el;\r\n
el.rel = $(el).attr(\'rel\');\r\n
//ANCHOR ELEMENT\r\n
el.zoom_active = false;\r\n
el.zoom_disabled = false; //to disable single zoom instance\r\n
el.largeimageloading = false; //tell us if large image is loading\r\n
el.largeimageloaded = false; //tell us if large image is loaded\r\n
el.scale = {};\r\n
el.timer = null;\r\n
el.mousepos = {};\r\n
el.mouseDown = false;\r\n
$(el).css({\r\n
\'outline-style\': \'none\',\r\n
\'text-decoration\': \'none\'\r\n
});\r\n
//BASE IMAGE\r\n
var img = $("img:eq(0)", el);\r\n
el.title = $(el).attr(\'title\');\r\n
el.imagetitle = img.attr(\'title\');\r\n
var zoomtitle = ($.trim(el.title).length > 0) ? el.title : el.imagetitle;\r\n
var smallimage = new Smallimage(img);\r\n
var lens = new Lens();\r\n
var stage = new Stage();\r\n
var largeimage = new Largeimage();\r\n
var loader = new Loader();\r\n
//preventing default click,allowing the onclick event [exmple: lightbox]\r\n
$(el).bind(\'click\', function (e) {\r\n
e.preventDefault();\r\n
return false;\r\n
});\r\n
//setting the default zoomType if not in settings\r\n
var zoomtypes = [\'standard\', \'drag\', \'innerzoom\', \'reverse\'];\r\n
if ($.inArray($.trim(settings.zoomType), zoomtypes) < 0) {\r\n
settings.zoomType = \'standard\';\r\n
}\r\n
$.extend(obj, {\r\n
create: function () { //create the main objects\r\n
//create ZoomPad\r\n
if ($(".zoomPad", el).length == 0) {\r\n
el.zoomPad = $(\'<div/>\').addClass(\'zoomPad\');\r\n
img.wrap(el.zoomPad);\r\n
}\r\n
if(settings.zoomType == \'innerzoom\'){\r\n
settings.zoomWidth = smallimage.w;\r\n
settings.zoomHeight = smallimage.h;\r\n
}\r\n
//creating ZoomPup\r\n
if ($(".zoomPup", el).length == 0) {\r\n
lens.append();\r\n
}\r\n
//creating zoomWindow\r\n
if ($(".zoomWindow", el).length == 0) {\r\n
stage.append();\r\n
}\r\n
//creating Preload\r\n
if ($(".zoomPreload", el).length == 0) {\r\n
loader.append();\r\n
}\r\n
//preloading images\r\n
if (settings.preloadImages || settings.zoomType == \'drag\' || settings.alwaysOn) {\r\n
obj.load();\r\n
}\r\n
obj.init();\r\n
},\r\n
init: function () {\r\n
//drag option\r\n
if (settings.zoomType == \'drag\') {\r\n
$(".zoomPad", el).mousedown(function () {\r\n
el.mouseDown = true;\r\n
});\r\n
$(".zoomPad", el).mouseup(function () {\r\n
el.mouseDown = false;\r\n
});\r\n
document.body.ondragstart = function () {\r\n
return false;\r\n
};\r\n
$(".zoomPad", el).css({\r\n
cursor: \'default\'\r\n
});\r\n
$(".zoomPup", el).css({\r\n
cursor: \'move\'\r\n
});\r\n
}\r\n
if (settings.zoomType == \'innerzoom\') {\r\n
$(".zoomWrapper", el).css({\r\n
cursor: \'crosshair\'\r\n
});\r\n
}\r\n
$(".zoomPad", el).bind(\'mouseenter mouseover\', function (event) {\r\n
img.attr(\'title\', \'\');\r\n
$(el).attr(\'title\', \'\');\r\n
el.zoom_active = true;\r\n
//if loaded then activate else load large image\r\n
smallimage.fetchdata();\r\n
if (el.largeimageloaded) {\r\n
obj.activate(event);\r\n
} else {\r\n
obj.load();\r\n
}\r\n
});\r\n
$(".zoomPad", el).bind(\'mouseleave\', function (event) {\r\n
obj.deactivate();\r\n
});\r\n
$(".zoomPad", el).bind(\'mousemove\', function (e) {\r\n
\r\n
//prevent fast mouse mevements not to fire the mouseout event\r\n
if (e.pageX > smallimage.pos.r || e.pageX < smallimage.pos.l || e.pageY < smallimage.pos.t || e.pageY > smallimage.pos.b) {\r\n
lens.setcenter();\r\n
return false;\r\n
}\r\n
el.zoom_active = true;\r\n
if (el.largeimageloaded && !$(\'.zoomWindow\', el).is(\':visible\')) {\r\n
obj.activate(e);\r\n
}\r\n
if (el.largeimageloaded && (settings.zoomType != \'drag\' || (settings.zoomType == \'drag\' && el.mouseDown))) {\r\n
lens.setposition(e);\r\n
}\r\n
});\r\n
var thumb_preload = new Array();\r\n
var i = 0;\r\n
//binding click event on thumbnails\r\n
var thumblist = new Array();\r\n
thumblist = $(\'a\').filter(function () {\r\n
var regex = new RegExp("gallery[\\\\s]*:[\\\\s]*\'" + $.trim(el.rel) + "\'", "i");\r\n
var rel = $(this).attr(\'rel\');\r\n
if (regex.test(rel)) {\r\n
return this;\r\n
}\r\n
});\r\n
if (thumblist.length > 0) {\r\n
//getting the first to the last\r\n
var first = thumblist.splice(0, 1);\r\n
thumblist.push(first);\r\n
}\r\n
thumblist.each(function () {\r\n
//preloading thumbs\r\n
if (settings.preloadImages) {\r\n
var thumb_options = $.extend({}, eval("(" + $.trim($(this).attr(\'rel\')) + ")"));\r\n
thumb_preload[i] = new Image();\r\n
thumb_preload[i].src = thumb_options.largeimage;\r\n
i++;\r\n
}\r\n
$(this).click(function (e) {\r\n
if($(this).hasClass(\'zoomThumbActive\')){\r\n
return false;\r\n
}\r\n
thumblist.each(function () {\r\n
$(this).removeClass(\'zoomThumbActive\');\r\n
});\r\n
e.preventDefault();\r\n
obj.swapimage(this);\r\n
return false;\r\n
});\r\n
});\r\n
},\r\n
load: function () {\r\n
if (el.largeimageloaded == false && el.largeimageloading == false) {\r\n
var url = $(el).attr(\'href\');\r\n
el.largeimageloading = true;\r\n
largeimage.loadimage(url);\r\n
}\r\n
},\r\n
activate: function (e) {\r\n
clearTimeout(el.timer);\r\n
//show lens and zoomWindow\r\n
lens.show();\r\n
stage.show();\r\n
},\r\n
deactivate: function (e) {\r\n
switch (settings.zoomType) {\r\n
case \'drag\':\r\n
//nothing or lens.setcenter();\r\n
break;\r\n
default:\r\n
img.attr(\'title\', el.imagetitle);\r\n
$(el).attr(\'title\', el.title);\r\n
if (settings.alwaysOn) {\r\n
lens.setcenter();\r\n
} else {\r\n
stage.hide();\r\n
lens.hide();\r\n
}\r\n
break;\r\n
}\r\n
el.zoom_active = false;\r\n
},\r\n
swapimage: function (link) {\r\n
el.largeimageloading = false;\r\n
el.largeimageloaded = false;\r\n
var options = new Object();\r\n
options = $.extend({}, eval("(" + $.trim($(link).attr(\'rel\')) + ")"));\r\n
if (options.smallimage && options.largeimage) {\r\n
var smallimage = options.smallimage;\r\n
var largeimage = options.largeimage;\r\n
$(link).addClass(\'zoomThumbActive\');\r\n
$(el).attr(\'href\', largeimage);\r\n
img.attr(\'src\', smallimage);\r\n
lens.hide();\r\n
stage.hide();\r\n
obj.load();\r\n
} else {\r\n
alert(\'ERROR :: Missing parameter for largeimage or smallimage.\');\r\n
throw \'ERROR :: Missing parameter for largeimage or smallimage.\';\r\n
}\r\n
return false;\r\n
}\r\n
});\r\n
//sometimes image is already loaded and onload will not fire\r\n
if (img[0].complete) {\r\n
//fetching data from sallimage if was previously loaded\r\n
smallimage.fetchdata();\r\n
if ($(".zoomPad", el).length == 0) obj.create();\r\n
}\r\n
/*========================================================,\r\n
| Smallimage\r\n
|---------------------------------------------------------:\r\n
| Base image into the anchor element\r\n
`========================================================*/\r\n
\r\n
function Smallimage(image) {\r\n
var $obj = this;\r\n
this.node = image[0];\r\n
this.findborder = function () {\r\n
var bordertop = 0;\r\n
bordertop = image.css(\'border-top-width\');\r\n
btop = \'\';\r\n
var borderleft = 0;\r\n
borderleft = image.css(\'border-left-width\');\r\n
bleft = \'\';\r\n
if (bordertop) {\r\n
for (i = 0; i < 3; i++) {\r\n
var x = [];\r\n
x = bordertop.substr(i, 1);\r\n
if (isNaN(x) == false) {\r\n
btop = btop + \'\' + bordertop.substr(i, 1);\r\n
} else {\r\n
break;\r\n
}\r\n
}\r\n
}\r\n
if (borderleft) {\r\n
for (i = 0; i < 3; i++) {\r\n
if (!isNaN(borderleft.substr(i, 1))) {\r\n
bleft = bleft + borderleft.substr(i, 1)\r\n
} else {\r\n
break;\r\n
}\r\n
}\r\n
}\r\n
$obj.btop = (btop.length > 0) ? eval(btop) : 0;\r\n
$obj.bleft = (bleft.length > 0) ? eval(bleft) : 0;\r\n
};\r\n
this.fetchdata = function () {\r\n
$obj.findborder();\r\n
$obj.w = image.width();\r\n
$obj.h = image.height();\r\n
$obj.ow = image.outerWidth();\r\n
$obj.oh = image.outerHeight();\r\n
$obj.pos = image.offset();\r\n
$obj.pos.l = image.offset().left + $obj.bleft;\r\n
$obj.pos.t = image.offset().top + $obj.btop;\r\n
$obj.pos.r = $obj.w + $obj.pos.l;\r\n
$obj.pos.b = $obj.h + $obj.pos.t;\r\n
$obj.rightlimit = image.offset().left + $obj.ow;\r\n
$obj.bottomlimit = image.offset().top + $obj.oh;\r\n
\r\n
};\r\n
this.node.onerror = function () {\r\n
alert(\'Problems while loading image.\');\r\n
throw \'Problems while loading image.\';\r\n
};\r\n
this.node.onload = function () {\r\n
$obj.fetchdata();\r\n
if ($(".zoomPad", el).length == 0) obj.create();\r\n
};\r\n
return $obj;\r\n
};\r\n
/*========================================================,\r\n
| Loader\r\n
|---------------------------------------------------------:\r\n
| Show that the large image is loading\r\n
`========================================================*/\r\n
\r\n
function Loader() {\r\n
var $obj = this;\r\n
this.append = function () {\r\n
this.node = $(\'<div/>\').addClass(\'zoomPreload\').css(\'visibility\', \'hidden\').html(settings.preloadText);\r\n
$(\'.zoomPad\', el).append(this.node);\r\n
};\r\n
this.show = function () {\r\n
this.node.top = (smallimage.oh - this.node.height()) / 2;\r\n
this.node.left = (smallimage.ow - this.node.width()) / 2;\r\n
//setting position\r\n
this.node.css({\r\n
top: this.node.top,\r\n
left: this.node.left,\r\n
position: \'absolute\',\r\n
visibility: \'visible\'\r\n
});\r\n
};\r\n
this.hide = function () {\r\n
this.node.css(\'visibility\', \'hidden\');\r\n
};\r\n
return this;\r\n
}\r\n
/*========================================================,\r\n
| Lens\r\n
|---------------------------------------------------------:\r\n
| Lens over the image\r\n
`========================================================*/\r\n
\r\n
function Lens() {\r\n
var $obj = this;\r\n
this.node = $(\'<div/>\').addClass(\'zoomPup\');\r\n
//this.nodeimgwrapper = $("<div/>").addClass(\'zoomPupImgWrapper\');\r\n
this.append = function () {\r\n
$(\'.zoomPad\', el).append($(this.node).hide());\r\n
if (settings.zoomType == \'reverse\') {\r\n
this.image = new Image();\r\n
this.image.src = smallimage.node.src; // fires off async\r\n
$(this.node).empty().append(this.image);\r\n
}\r\n
};\r\n
this.setdimensions = function () {\r\n
this.node.w = (parseInt((settings.zoomWidth) / el.scale.x) > smallimage.w ) ? smallimage.w : (parseInt(settings.zoomWidth / el.scale.x)); \r\n
this.node.h = (parseInt((settings.zoomHeight) / el.scale.y) > smallimage.h ) ? smallimage.h : (parseInt(settings.zoomHeight / el.scale.y)); \r\n
this.node.top = (smallimage.oh - this.node.h - 2) / 2;\r\n
this.node.left = (smallimage.ow - this.node.w - 2) / 2;\r\n
//centering lens\r\n
this.node.css({\r\n
top: 0,\r\n
left: 0,\r\n
width: this.node.w + \'px\',\r\n
height: this.node.h + \'px\',\r\n
position: \'absolute\',\r\n
display: \'none\',\r\n
borderWidth: 1 + \'px\'\r\n
});\r\n
\r\n
\r\n
\r\n
if (settings.zoomType == \'reverse\') {\r\n
this.image.src = smallimage.node.src;\r\n
$(this.node).css({\r\n
\'opacity\': 1\r\n
});\r\n
\r\n
$(this.image).css({\r\n
position: \'absolute\',\r\n
display: \'block\',\r\n
left: -(this.node.left + 1 - smallimage.bleft) + \'px\',\r\n
top: -(this.node.top + 1 - smallimage.btop) + \'px\'\r\n
});\r\n
\r\n
}\r\n
};\r\n
this.setcenter = function () {\r\n
//calculating center position\r\n
this.node.top = (smallimage.oh - this.node.h - 2) / 2;\r\n
this.node.left = (smallimage.ow - this.node.w - 2) / 2;\r\n
//centering lens\r\n
this.node.css({\r\n
top: this.node.top,\r\n
left: this.node.left\r\n
});\r\n
if (settings.zoomType == \'reverse\') {\r\n
$(this.image).css({\r\n
position: \'absolute\',\r\n
display: \'block\',\r\n
left: -(this.node.left + 1 - smallimage.bleft) + \'px\',\r\n
top: -(this.node.top + 1 - smallimage.btop) + \'px\'\r\n
});\r\n
\r\n
}\r\n
//centering large image\r\n
largeimage.setposition();\r\n
};\r\n
this.setposition = function (e) {\r\n
el.mousepos.x = e.pageX;\r\n
el.mousepos.y = e.pageY;\r\n
var lensleft = 0;\r\n
var lenstop = 0;\r\n
\r\n
function overleft(lens) {\r\n
return el.mousepos.x - (lens.w) / 2 < smallimage.pos.l; \r\n
}\r\n
\r\n
function overright(lens) {\r\n
return el.mousepos.x + (lens.w) / 2 > smallimage.pos.r; \r\n
\r\n
}\r\n
\r\n
function overtop(lens) {\r\n
return el.mousepos.y - (lens.h) / 2 < smallimage.pos.t; \r\n
}\r\n
\r\n
function overbottom(lens) {\r\n
return el.mousepos.y + (lens.h) / 2 > smallimage.pos.b; \r\n
}\r\n
\r\n
lensleft = el.mousepos.x + smallimage.bleft - smallimage.pos.l - (this.node.w + 2) / 2;\r\n
lenstop = el.mousepos.y + smallimage.btop - smallimage.pos.t - (this.node.h + 2) / 2;\r\n
if (overleft(this.node)) {\r\n
lensleft = smallimage.bleft - 1;\r\n
} else if (overright(this.node)) {\r\n
lensleft = smallimage.w + smallimage.bleft - this.node.w - 1;\r\n
}\r\n
if (overtop(this.node)) {\r\n
lenstop = smallimage.btop - 1;\r\n
} else if (overbottom(this.node)) {\r\n
lenstop = smallimage.h + smallimage.btop - this.node.h - 1;\r\n
}\r\n
\r\n
this.node.left = lensleft;\r\n
this.node.top = lenstop;\r\n
this.node.css({\r\n
\'left\': lensleft + \'px\',\r\n
\'top\': lenstop + \'px\'\r\n
});\r\n
if (settings.zoomType == \'reverse\') {\r\n
if ($.browser.msie && $.browser.version > 7) {\r\n
$(this.node).empty().append(this.image);\r\n
}\r\n
\r\n
$(this.image).css({\r\n
position: \'absolute\',\r\n
display: \'block\',\r\n
left: -(this.node.left + 1 - smallimage.bleft) + \'px\',\r\n
top: -(this.node.top + 1 - smallimage.btop) + \'px\'\r\n
});\r\n
}\r\n
\r\n
largeimage.setposition();\r\n
};\r\n
this.hide = function () {\r\n
img.css({\r\n
\'opacity\': 1\r\n
});\r\n
this.node.hide();\r\n
};\r\n
this.show = function () { \r\n
\r\n
if (settings.zoomType != \'innerzoom\' && (settings.lens || settings.zoomType == \'drag\')) {\r\n
this.node.show();\r\n
} \r\n
\r\n
if (settings.zoomType == \'reverse\') {\r\n
img.css({\r\n
\'opacity\': settings.imageOpacity\r\n
});\r\n
}\r\n
};\r\n
this.getoffset = function () {\r\n
var o = {};\r\n
o.left = $obj.node.left;\r\n
o.top = $obj.node.top;\r\n
return o;\r\n
};\r\n
return this;\r\n
};\r\n
/*========================================================,\r\n
| Stage\r\n
|---------------------------------------------------------:\r\n
| Window area that contains the large image\r\n
`========================================================*/\r\n
\r\n
function Stage() {\r\n
var $obj = this;\r\n
this.node = $("<div class=\'zoomWindow\'><div class=\'zoomWrapper\'><div class=\'zoomWrapperTitle\'></div><div class=\'zoomWrapperImage\'></div></div></div>");\r\n
this.ieframe = $(\'<iframe class="zoomIframe" src="javascript:\\\'\\\';" marginwidth="0" marginheight="0" align="bottom" scrolling="no" frameborder="0" ></iframe>\');\r\n
this.setposition = function () {\r\n
this.node.leftpos = 0;\r\n
this.node.toppos = 0;\r\n
if (settings.zoomType != \'innerzoom\') {\r\n
//positioning\r\n
switch (settings.position) {\r\n
case "left":\r\n
this.node.leftpos = (smallimage.pos.l - smallimage.bleft - Math.abs(settings.xOffset) - settings.zoomWidth > 0) ? (0 - settings.zoomWidth - Math.abs(settings.xOffset)) : (smallimage.ow + Math.abs(settings.xOffset));\r\n
this.node.toppos = Math.abs(settings.yOffset);\r\n
break;\r\n
case "top":\r\n
this.node.leftpos = Math.abs(settings.xOffset);\r\n
this.node.toppos = (smallimage.pos.t - smallimage.btop - Math.abs(settings.yOffset) - settings.zoomHeight > 0) ? (0 - settings.zoomHeight - Math.abs(settings.yOffset)) : (smallimage.oh + Math.abs(settings.yOffset));\r\n
break;\r\n
case "bottom":\r\n
this.node.leftpos = Math.abs(settings.xOffset);\r\n
this.node.toppos = (smallimage.pos.t - smallimage.btop + smallimage.oh + Math.abs(settings.yOffset) + settings.zoomHeight < screen.height) ? (smallimage.oh + Math.abs(settings.yOffset)) : (0 - settings.zoomHeight - Math.abs(settings.yOffset));\r\n
break;\r\n
default:\r\n
this.node.leftpos = (smallimage.rightlimit + Math.abs(settings.xOffset) + settings.zoomWidth < screen.width) ? (smallimage.ow + Math.abs(settings.xOffset)) : (0 - settings.zoomWidth - Math.abs(settings.xOffset));\r\n
this.node.toppos = Math.abs(settings.yOffset);\r\n
break;\r\n
}\r\n
}\r\n
this.node.css({\r\n
\'left\': this.node.leftpos + \'px\',\r\n
\'top\': this.node.toppos + \'px\'\r\n
});\r\n
return this;\r\n
};\r\n
this.append = function () {\r\n
$(\'.zoomPad\', el).append(this.node);\r\n
this.node.css({\r\n
position: \'absolute\',\r\n
display: \'none\',\r\n
zIndex: 5001\r\n
});\r\n
if (settings.zoomType == \'innerzoom\') {\r\n
this.node.css({\r\n
cursor: \'default\'\r\n
});\r\n
var thickness = (smallimage.bleft == 0) ? 1 : smallimage.bleft;\r\n
$(\'.zoomWrapper\', this.node).css({\r\n
borderWidth: thickness + \'px\'\r\n
}); \r\n
}\r\n
\r\n
$(\'.zoomWrapper\', this.node).css({\r\n
width: Math.round(settings.zoomWidth) + \'px\' ,\r\n
borderWidth: thickness + \'px\'\r\n
});\r\n
$(\'.zoomWrapperImage\', this.node).css({\r\n
width: \'100%\',\r\n
height: Math.round(settings.zoomHeight) + \'px\'\r\n
});\r\n
//zoom title\r\n
$(\'.zoomWrapperTitle\', this.node).css({\r\n
width: \'100%\',\r\n
position: \'absolute\'\r\n
}); \r\n
\r\n
$(\'.zoomWrapperTitle\', this.node).hide();\r\n
if (settings.title && zoomtitle.length > 0) {\r\n
$(\'.zoomWrapperTitle\', this.node).html(zoomtitle).show();\r\n
}\r\n
$obj.setposition();\r\n
};\r\n
this.hide = function () {\r\n
switch (settings.hideEffect) {\r\n
case \'fadeout\':\r\n
this.node.fadeOut(settings.fadeoutSpeed, function () {});\r\n
break;\r\n
default:\r\n
this.node.hide();\r\n
break;\r\n
}\r\n
this.ieframe.hide();\r\n
};\r\n
this.show = function () {\r\n
switch (settings.showEffect) {\r\n
case \'fadein\':\r\n
this.node.fadeIn();\r\n
this.node.fadeIn(settings.fadeinSpeed, function () {});\r\n
break;\r\n
default:\r\n
this.node.show();\r\n
break;\r\n
}\r\n
if (isIE6 && settings.zoomType != \'innerzoom\') {\r\n
this.ieframe.width = this.node.width();\r\n
this.ieframe.height = this.node.height();\r\n
this.ieframe.left = this.node.leftpos;\r\n
this.ieframe.top = this.node.toppos;\r\n
this.ieframe.css({\r\n
display: \'block\',\r\n
position: "absolute",\r\n
left: this.ieframe.left,\r\n
top: this.ieframe.top,\r\n
zIndex: 99,\r\n
width: this.ieframe.width + \'px\',\r\n
height: this.ieframe.height + \'px\'\r\n
});\r\n
$(\'.zoomPad\', el).append(this.ieframe);\r\n
this.ieframe.show();\r\n
};\r\n
};\r\n
};\r\n
/*========================================================,\r\n
| LargeImage\r\n
|---------------------------------------------------------:\r\n
| The large detailed image\r\n
`========================================================*/\r\n
\r\n
function Largeimage() {\r\n
var $obj = this;\r\n
this.node = new Image();\r\n
this.loadimage = function (url) {\r\n
//showing preload\r\n
loader.show();\r\n
this.url = url;\r\n
this.node.style.position = \'absolute\';\r\n
this.node.style.border = \'0px\';\r\n
this.node.style.display = \'none\';\r\n
this.node.style.left = \'-5000px\';\r\n
this.node.style.top = \'0px\';\r\n
document.body.appendChild(this.node);\r\n
this.node.src = url; // fires off async\r\n
};\r\n
this.fetchdata = function () {\r\n
var image = $(this.node);\r\n
var scale = {};\r\n
this.node.style.display = \'block\';\r\n
$obj.w = image.width();\r\n
$obj.h = image.height();\r\n
$obj.pos = image.offset();\r\n
$obj.pos.l = image.offset().left;\r\n
$obj.pos.t = image.offset().top;\r\n
$obj.pos.r = $obj.w + $obj.pos.l;\r\n
$obj.pos.b = $obj.h + $obj.pos.t;\r\n
scale.x = ($obj.w / smallimage.w);\r\n
scale.y = ($obj.h / smallimage.h);\r\n
el.scale = scale;\r\n
document.body.removeChild(this.node);\r\n
$(\'.zoomWrapperImage\', el).empty().append(this.node);\r\n
//setting lens dimensions;\r\n
lens.setdimensions();\r\n
};\r\n
this.node.onerror = function () {\r\n
alert(\'Problems while loading the big image.\');\r\n
throw \'Problems while loading the big image.\';\r\n
};\r\n
this.node.onload = function () {\r\n
//fetching data\r\n
$obj.fetchdata();\r\n
loader.hide();\r\n
el.largeimageloading = false;\r\n
el.largeimageloaded = true;\r\n
if (settings.zoomType == \'drag\' || settings.alwaysOn) {\r\n
lens.show();\r\n
stage.show();\r\n
lens.setcenter();\r\n
}\r\n
};\r\n
this.setposition = function () {\r\n
var left = -el.scale.x * (lens.getoffset().left - smallimage.bleft + 1);\r\n
var top = -el.scale.y * (lens.getoffset().top - smallimage.btop + 1);\r\n
$(this.node).css({\r\n
\'left\': left + \'px\',\r\n
\'top\': top + \'px\'\r\n
});\r\n
};\r\n
return this;\r\n
};\r\n
$(el).data("jqzoom", obj);\r\n
};\r\n
//es. $.jqzoom.disable(\'#jqzoom1\');\r\n
$.jqzoom = {\r\n
defaults: {\r\n
zoomType: \'standard\',\r\n
//innerzoom/standard/reverse/drag\r\n
zoomWidth: 300,\r\n
//zoomWindow default width\r\n
zoomHeight: 300,\r\n
//zoomWindow default height\r\n
xOffset: 10,\r\n
//zoomWindow x offset, can be negative(more on the left) or positive(more on the right)\r\n
yOffset: 0,\r\n
//zoomWindow y offset, can be negative(more on the left) or positive(more on the right)\r\n
position: "right",\r\n
//zoomWindow default position\r\n
preloadImages: true,\r\n
//image preload\r\n
preloadText: \'Loading zoom\',\r\n
title: true,\r\n
lens: true,\r\n
imageOpacity: 0.4,\r\n
alwaysOn: false,\r\n
showEffect: \'show\',\r\n
//show/fadein\r\n
hideEffect: \'hide\',\r\n
//hide/fadeout\r\n
fadeinSpeed: \'slow\',\r\n
//fast/slow/number\r\n
fadeoutSpeed: \'2000\' //fast/slow/number\r\n
},\r\n
disable: function (el) {\r\n
var api = $(el).data(\'jqzoom\');\r\n
api.disable();\r\n
return false;\r\n
},\r\n
enable: function (el) {\r\n
var api = $(el).data(\'jqzoom\');\r\n
api.enable();\r\n
return false;\r\n
},\r\n
disableAll: function (el) {\r\n
jqzoompluging_disabled = true;\r\n
},\r\n
enableAll: function (el) {\r\n
jqzoompluging_disabled = false;\r\n
}\r\n
};\r\n
})(jQuery);
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>31322</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>jquery.jqzoom-core.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>http_cache</string> </value>
</item>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts48590418.74</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>jqzoom.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string>.zoomPad{\r\n
\tposition:relative;\r\n
\tfloat:left;\r\n
\tz-index:99;\r\n
\tcursor:crosshair;\r\n
}\r\n
\r\n
\r\n
.zoomPreload{\r\n
-moz-opacity:0.8;\r\n
opacity: 0.8;\r\n
filter: alpha(opacity = 80);\r\n
color: #333;\r\n
font-size: 12px;\r\n
font-family: Tahoma;\r\n
text-decoration: none;\r\n
border: 1px solid #CCC;\r\n
background-color: white;\r\n
padding: 8px;\r\n
text-align:center;\r\n
background-image: url(../images/zoomloader.gif);\r\n
background-repeat: no-repeat;\r\n
background-position: 43px 30px;\r\n
z-index:110;\r\n
width:90px;\r\n
height:43px;\r\n
position:absolute;\r\n
top:0px;\r\n
left:0px;\r\n
* width:100px;\r\n
* height:49px;\r\n
}\r\n
\r\n
\r\n
.zoomPup{\r\n
\toverflow:hidden;\r\n
\tbackground-color: #FFF;\r\n
\t-moz-opacity:0.6;\r\n
\topacity: 0.6;\r\n
\tfilter: alpha(opacity = 60);\r\n
\tz-index:120;\r\n
\tposition:absolute;\r\n
\tborder:1px solid #CCC;\r\n
z-index:101;\r\n
cursor:crosshair;\r\n
}\r\n
\r\n
.zoomOverlay{\r\n
\tposition:absolute;\r\n
\tleft:0px;\r\n
\ttop:0px;\r\n
\tbackground:#FFF;\r\n
\t/*opacity:0.5;*/\r\n
\tz-index:5000;\r\n
\twidth:100%;\r\n
\theight:100%;\r\n
\tdisplay:none;\r\n
z-index:101;\r\n
}\r\n
\r\n
.zoomWindow{\r\n
\tposition:absolute;\r\n
\tleft:110%;\r\n
\ttop:40px;\r\n
\tbackground:#FFF;\r\n
\tz-index:6000;\r\n
\theight:auto;\r\n
z-index:10000;\r\n
z-index:110;\r\n
}\r\n
.zoomWrapper{\r\n
\tposition:relative;\r\n
\tborder:1px solid #999;\r\n
z-index:110;\r\n
}\r\n
.zoomWrapperTitle{\r\n
\tdisplay:block;\r\n
\tbackground:#999;\r\n
\tcolor:#FFF;\r\n
\theight:18px;\r\n
\tline-height:18px;\r\n
\twidth:100%;\r\n
overflow:hidden;\r\n
\ttext-align:center;\r\n
\tfont-size:10px;\r\n
position:absolute;\r\n
top:0px;\r\n
left:0px;\r\n
z-index:120;\r\n
-moz-opacity:0.6;\r\n
opacity: 0.6;\r\n
filter: alpha(opacity = 60);\r\n
}\r\n
.zoomWrapperImage{\r\n
\tdisplay:block;\r\n
position:relative;\r\n
overflow:hidden;\r\n
z-index:110;\r\n
\r\n
}\r\n
.zoomWrapperImage img{\r\n
border:0px;\r\n
display:block;\r\n
position:absolute;\r\n
z-index:101;\r\n
}\r\n
\r\n
.zoomIframe{\r\n
z-index: -1;\r\n
filter:alpha(opacity=0);\r\n
-moz-opacity: 0.80;\r\n
opacity: 0.80;\r\n
position:absolute;\r\n
display:block;\r\n
}\r\n
\r\n
/*********************************************************\r\n
/ When clicking on thumbs jqzoom will add the class\r\n
/ "zoomThumbActive" on the anchor selected\r\n
/*********************************************************/</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>2139</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>jquery.jqzoom.css</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
2013-01-21 rafael
* The initial commit
\ No newline at end of file
2013 (c) Nexedi SA
\ No newline at end of file
erp5_jquery
\ No newline at end of file
This Business Template contains only static files of jqzoom plugin.
\ No newline at end of file
GPL
\ No newline at end of file
rafael
\ No newline at end of file
1
\ No newline at end of file
portal_skins/erp5_jquery/jquery/plugin/jqzoom
portal_skins/erp5_jquery/jquery/plugin/jqzoom/**
\ No newline at end of file
erp5_jquery_plugin_jqzoom
\ No newline at end of file
5.4.7
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>lightbox</string> </value>
</item>
<item>
<key> <string>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="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>http_cache</string> </value>
</item>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts48651728.89</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>lightbox-0.5.css</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/css</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/**\r\n
* jQuery lightBox plugin\r\n
* This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/)\r\n
* and adapted to me for use like a plugin from jQuery.\r\n
* @name jquery-lightbox-0.5.css\r\n
* @author Leandro Vieira Pinho - http://leandrovieira.com\r\n
* @version 0.5\r\n
* @date April 11, 2008\r\n
* @category jQuery plugin\r\n
* @copyright (c) 2008 Leandro Vieira Pinho (leandrovieira.com)\r\n
* @license CCAttribution-ShareAlike 2.5 Brazil - http://creativecommons.org/licenses/by-sa/2.5/br/deed.en_US\r\n
* @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin\r\n
*/\r\n
#jquery-overlay {\r\n
\tposition: absolute;\r\n
\ttop: 0;\r\n
\tleft: 0;\r\n
\tz-index: 90;\r\n
\twidth: 100%;\r\n
\theight: 500px;\r\n
}\r\n
#jquery-lightbox {\r\n
\tposition: absolute;\r\n
\ttop: 0;\r\n
\tleft: 0;\r\n
\twidth: 100%;\r\n
\tz-index: 100;\r\n
\ttext-align: center;\r\n
\tline-height: 0;\r\n
}\r\n
#jquery-lightbox a img { border: none; }\r\n
#lightbox-container-image-box {\r\n
\tposition: relative;\r\n
\tbackground-color: #fff;\r\n
\twidth: 250px;\r\n
\theight: 250px;\r\n
\tmargin: 0 auto;\r\n
}\r\n
#lightbox-container-image { padding: 10px; }\r\n
#lightbox-loading {\r\n
\tposition: absolute;\r\n
\ttop: 40%;\r\n
\tleft: 0%;\r\n
\theight: 25%;\r\n
\twidth: 100%;\r\n
\ttext-align: center;\r\n
\tline-height: 0;\r\n
}\r\n
#lightbox-nav {\r\n
\tposition: absolute;\r\n
\ttop: 0;\r\n
\tleft: 0;\r\n
\theight: 100%;\r\n
\twidth: 100%;\r\n
\tz-index: 10;\r\n
}\r\n
#lightbox-container-image-box > #lightbox-nav { left: 0; }\r\n
#lightbox-nav a { outline: none;}\r\n
#lightbox-nav-btnPrev, #lightbox-nav-btnNext {\r\n
\twidth: 49%;\r\n
\theight: 100%;\r\n
\tzoom: 1;\r\n
\tdisplay: block;\r\n
}\r\n
#lightbox-nav-btnPrev { \r\n
\tleft: 0; \r\n
\tfloat: left;\r\n
}\r\n
#lightbox-nav-btnNext { \r\n
\tright: 0; \r\n
\tfloat: right;\r\n
}\r\n
#lightbox-container-image-data-box {\r\n
\tfont: 10px Verdana, Helvetica, sans-serif;\r\n
\tbackground-color: #fff;\r\n
\tmargin: 0 auto;\r\n
\tline-height: 1.4em;\r\n
\toverflow: auto;\r\n
\twidth: 100%;\r\n
\tpadding: 0 10px 0;\r\n
}\r\n
#lightbox-container-image-data {\r\n
\tpadding: 0 10px; \r\n
\tcolor: #666; \r\n
}\r\n
#lightbox-container-image-data #lightbox-image-details { \r\n
\twidth: 70%; \r\n
\tfloat: left; \r\n
\ttext-align: left; \r\n
}\t\r\n
#lightbox-image-details-caption { font-weight: bold; }\r\n
#lightbox-image-details-currentNumber {\r\n
\tdisplay: block; \r\n
\tclear: left; \r\n
\tpadding-bottom: 1.0em;\t\r\n
}\t\t\t\r\n
#lightbox-secNav-btnClose {\r\n
\twidth: 66px; \r\n
\tfloat: right;\r\n
\tpadding-bottom: 0.7em;\t\r\n
}
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>2366</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>jquery.lightbox-0.5.css</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>http_cache</string> </value>
</item>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts58795772.1</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>lightbox-0.5.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/**\r\n
* jQuery lightBox plugin\r\n
* This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/)\r\n
* and adapted to me for use like a plugin from jQuery.\r\n
* @name jquery-lightbox-0.5.js\r\n
* @author Leandro Vieira Pinho - http://leandrovieira.com\r\n
* @version 0.5\r\n
* @date April 11, 2008\r\n
* @category jQuery plugin\r\n
* @copyright (c) 2008 Leandro Vieira Pinho (leandrovieira.com)\r\n
* @license CCAttribution-ShareAlike 2.5 Brazil - http://creativecommons.org/licenses/by-sa/2.5/br/deed.en_US\r\n
* @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin\r\n
*/\r\n
\r\n
// Offering a Custom Alias suport - More info: http://docs.jquery.com/Plugins/Authoring#Custom_Alias\r\n
(function($) {\r\n
\t/**\r\n
\t * $ is an alias to jQuery object\r\n
\t *\r\n
\t */\r\n
\t$.fn.lightBox = function(settings) {\r\n
\t\t// Settings to configure the jQuery lightBox plugin how you like\r\n
\t\tsettings = jQuery.extend({\r\n
\t\t\t// Configuration related to overlay\r\n
\t\t\toverlayBgColor: \t\t\'#000\',\t\t// (string) Background color to overlay; inform a hexadecimal value like: #RRGGBB. Where RR, GG, and BB are the hexadecimal values for the red, green, and blue values of the color.\r\n
\t\t\toverlayOpacity:\t\t\t0.8,\t\t// (integer) Opacity value to overlay; inform: 0.X. Where X are number from 0 to 9\r\n
\t\t\t// Configuration related to navigation\r\n
\t\t\tfixedNavigation:\t\tfalse,\t\t// (boolean) Boolean that informs if the navigation (next and prev button) will be fixed or not in the interface.\r\n
\t\t\t// Configuration related to images\r\n
\t\t\timageLoading:\t\t\t\'images/lightbox-ico-loading.gif\',\t\t// (string) Path and the name of the loading icon\r\n
\t\t\timageBtnPrev:\t\t\t\'images/lightbox-btn-prev.gif\',\t\t\t// (string) Path and the name of the prev button image\r\n
\t\t\timageBtnNext:\t\t\t\'images/lightbox-btn-next.gif\',\t\t\t// (string) Path and the name of the next button image\r\n
\t\t\timageBtnClose:\t\t\t\'images/lightbox-btn-close.gif\',\t\t// (string) Path and the name of the close btn\r\n
\t\t\timageBlank:\t\t\t\t\'images/lightbox-blank.gif\',\t\t\t// (string) Path and the name of a blank image (one pixel)\r\n
\t\t\t// Configuration related to container image box\r\n
\t\t\tcontainerBorderSize:\t10,\t\t\t// (integer) If you adjust the padding in the CSS for the container, #lightbox-container-image-box, you will need to update this value\r\n
\t\t\tcontainerResizeSpeed:\t400,\t\t// (integer) Specify the resize duration of container image. These number are miliseconds. 400 is default.\r\n
\t\t\t// Configuration related to texts in caption. For example: Image 2 of 8. You can alter either "Image" and "of" texts.\r\n
\t\t\ttxtImage:\t\t\t\t\'Image\',\t// (string) Specify text "Image"\r\n
\t\t\ttxtOf:\t\t\t\t\t\'of\',\t\t// (string) Specify text "of"\r\n
\t\t\t// Configuration related to keyboard navigation\r\n
\t\t\tkeyToClose:\t\t\t\t\'c\',\t\t// (string) (c = close) Letter to close the jQuery lightBox interface. Beyond this letter, the letter X and the SCAPE key is used to.\r\n
\t\t\tkeyToPrev:\t\t\t\t\'p\',\t\t// (string) (p = previous) Letter to show the previous image\r\n
\t\t\tkeyToNext:\t\t\t\t\'n\',\t\t// (string) (n = next) Letter to show the next image.\r\n
\t\t\t// Don\xb4t alter these variables in any way\r\n
\t\t\timageArray:\t\t\t\t[],\r\n
\t\t\tactiveImage:\t\t\t0\r\n
\t\t},settings);\r\n
\t\t// Caching the jQuery object with all elements matched\r\n
\t\tvar jQueryMatchedObj = this; // This, in this context, refer to jQuery object\r\n
\t\t/**\r\n
\t\t * Initializing the plugin calling the start function\r\n
\t\t *\r\n
\t\t * @return boolean false\r\n
\t\t */\r\n
\t\tfunction _initialize() {\r\n
\t\t\t_start(this,jQueryMatchedObj); // This, in this context, refer to object (link) which the user have clicked\r\n
\t\t\treturn false; // Avoid the browser following the link\r\n
\t\t}\r\n
\t\t/**\r\n
\t\t * Start the jQuery lightBox plugin\r\n
\t\t *\r\n
\t\t * @param object objClicked The object (link) whick the user have clicked\r\n
\t\t * @param object jQueryMatchedObj The jQuery object with all elements matched\r\n
\t\t */\r\n
\t\tfunction _start(objClicked,jQueryMatchedObj) {\r\n
\t\t\t// Hime some elements to avoid conflict with overlay in IE. These elements appear above the overlay.\r\n
\t\t\t$(\'embed, object, select\').css({ \'visibility\' : \'hidden\' });\r\n
\t\t\t// Call the function to create the markup structure; style some elements; assign events in some elements.\r\n
\t\t\t_set_interface();\r\n
\t\t\t// Unset total images in imageArray\r\n
\t\t\tsettings.imageArray.length = 0;\r\n
\t\t\t// Unset image active information\r\n
\t\t\tsettings.activeImage = 0;\r\n
\t\t\t// We have an image set? Or just an image? Let\xb4s see it.\r\n
\t\t\tif ( jQueryMatchedObj.length == 1 ) {\r\n
\t\t\t\tsettings.imageArray.push(new Array(objClicked.getAttribute(\'href\'),objClicked.getAttribute(\'title\')));\r\n
\t\t\t} else {\r\n
\t\t\t\t// Add an Array (as many as we have), with href and title atributes, inside the Array that storage the images references\t\t\r\n
\t\t\t\tfor ( var i = 0; i < jQueryMatchedObj.length; i++ ) {\r\n
\t\t\t\t\tsettings.imageArray.push(new Array(jQueryMatchedObj[i].getAttribute(\'href\'),jQueryMatchedObj[i].getAttribute(\'title\')));\r\n
\t\t\t\t}\r\n
\t\t\t}\r\n
\t\t\twhile ( settings.imageArray[settings.activeImage][0] != objClicked.getAttribute(\'href\') ) {\r\n
\t\t\t\tsettings.activeImage++;\r\n
\t\t\t}\r\n
\t\t\t// Call the function that prepares image exibition\r\n
\t\t\t_set_image_to_view();\r\n
\t\t}\r\n
\t\t/**\r\n
\t\t * Create the jQuery lightBox plugin interface\r\n
\t\t *\r\n
\t\t * The HTML markup will be like that:\r\n
\t\t\t<div id="jquery-overlay"></div>\r\n
\t\t\t<div id="jquery-lightbox">\r\n
\t\t\t\t<div id="lightbox-container-image-box">\r\n
\t\t\t\t\t<div id="lightbox-container-image">\r\n
\t\t\t\t\t\t<img src="../fotos/XX.jpg" id="lightbox-image">\r\n
\t\t\t\t\t\t<div id="lightbox-nav">\r\n
\t\t\t\t\t\t\t<a href="#" id="lightbox-nav-btnPrev"></a>\r\n
\t\t\t\t\t\t\t<a href="#" id="lightbox-nav-btnNext"></a>\r\n
\t\t\t\t\t\t</div>\r\n
\t\t\t\t\t\t<div id="lightbox-loading">\r\n
\t\t\t\t\t\t\t<a href="#" id="lightbox-loading-link">\r\n
\t\t\t\t\t\t\t\t<img src="../images/lightbox-ico-loading.gif">\r\n
\t\t\t\t\t\t\t</a>\r\n
\t\t\t\t\t\t</div>\r\n
\t\t\t\t\t</div>\r\n
\t\t\t\t</div>\r\n
\t\t\t\t<div id="lightbox-container-image-data-box">\r\n
\t\t\t\t\t<div id="lightbox-container-image-data">\r\n
\t\t\t\t\t\t<div id="lightbox-image-details">\r\n
\t\t\t\t\t\t\t<span id="lightbox-image-details-caption"></span>\r\n
\t\t\t\t\t\t\t<span id="lightbox-image-details-currentNumber"></span>\r\n
\t\t\t\t\t\t</div>\r\n
\t\t\t\t\t\t<div id="lightbox-secNav">\r\n
\t\t\t\t\t\t\t<a href="#" id="lightbox-secNav-btnClose">\r\n
\t\t\t\t\t\t\t\t<img src="../images/lightbox-btn-close.gif">\r\n
\t\t\t\t\t\t\t</a>\r\n
\t\t\t\t\t\t</div>\r\n
\t\t\t\t\t</div>\r\n
\t\t\t\t</div>\r\n
\t\t\t</div>\r\n
\t\t *\r\n
\t\t */\r\n
\t\tfunction _set_interface() {\r\n
\t\t\t// Apply the HTML markup into body tag\r\n
\t\t\t$(\'body\').append(\'<div id="jquery-overlay"></div><div id="jquery-lightbox"><div id="lightbox-container-image-box"><div id="lightbox-container-image"><img id="lightbox-image"><div style="" id="lightbox-nav"><a href="#" id="lightbox-nav-btnPrev"></a><a href="#" id="lightbox-nav-btnNext"></a></div><div id="lightbox-loading"><a href="#" id="lightbox-loading-link"><img src="\' + settings.imageLoading + \'"></a></div></div></div><div id="lightbox-container-image-data-box"><div id="lightbox-container-image-data"><div id="lightbox-image-details"><span id="lightbox-image-details-caption"></span><span id="lightbox-image-details-currentNumber"></span></div><div id="lightbox-secNav"><a href="#" id="lightbox-secNav-btnClose"><img src="\' + settings.imageBtnClose + \'"></a></div></div></div></div>\');\t\r\n
\t\t\t// Get page sizes\r\n
\t\t\tvar arrPageSizes = ___getPageSize();\r\n
\t\t\t// Style overlay and show it\r\n
\t\t\t$(\'#jquery-overlay\').css({\r\n
\t\t\t\tbackgroundColor:\tsettings.overlayBgColor,\r\n
\t\t\t\topacity:\t\t\tsettings.overlayOpacity,\r\n
\t\t\t\twidth:\t\t\t\tarrPageSizes[0],\r\n
\t\t\t\theight:\t\t\t\tarrPageSizes[1]\r\n
\t\t\t}).fadeIn();\r\n
\t\t\t// Get page scroll\r\n
\t\t\tvar arrPageScroll = ___getPageScroll();\r\n
\t\t\t// Calculate top and left offset for the jquery-lightbox div object and show it\r\n
\t\t\t$(\'#jquery-lightbox\').css({\r\n
\t\t\t\ttop:\tarrPageScroll[1] + (arrPageSizes[3] / 10),\r\n
\t\t\t\tleft:\tarrPageScroll[0]\r\n
\t\t\t}).show();\r\n
\t\t\t// Assigning click events in elements to close overlay\r\n
\t\t\t$(\'#jquery-overlay,#jquery-lightbox\').click(function() {\r\n
\t\t\t\t_finish();\t\t\t\t\t\t\t\t\t\r\n
\t\t\t});\r\n
\t\t\t// Assign the _finish function to lightbox-loading-link and lightbox-secNav-btnClose objects\r\n
\t\t\t$(\'#lightbox-loading-link,#lightbox-secNav-btnClose\').click(function() {\r\n
\t\t\t\t_finish();\r\n
\t\t\t\treturn false;\r\n
\t\t\t});\r\n
\t\t\t// If window was resized, calculate the new overlay dimensions\r\n
\t\t\t$(window).resize(function() {\r\n
\t\t\t\t// Get page sizes\r\n
\t\t\t\tvar arrPageSizes = ___getPageSize();\r\n
\t\t\t\t// Style overlay and show it\r\n
\t\t\t\t$(\'#jquery-overlay\').css({\r\n
\t\t\t\t\twidth:\t\tarrPageSizes[0],\r\n
\t\t\t\t\theight:\t\tarrPageSizes[1]\r\n
\t\t\t\t});\r\n
\t\t\t\t// Get page scroll\r\n
\t\t\t\tvar arrPageScroll = ___getPageScroll();\r\n
\t\t\t\t// Calculate top and left offset for the jquery-lightbox div object and show it\r\n
\t\t\t\t$(\'#jquery-lightbox\').css({\r\n
\t\t\t\t\ttop:\tarrPageScroll[1] + (arrPageSizes[3] / 10),\r\n
\t\t\t\t\tleft:\tarrPageScroll[0]\r\n
\t\t\t\t});\r\n
\t\t\t});\r\n
\t\t}\r\n
\t\t/**\r\n
\t\t * Prepares image exibition; doing a image\xb4s preloader to calculate it\xb4s size\r\n
\t\t *\r\n
\t\t */\r\n
\t\tfunction _set_image_to_view() { // show the loading\r\n
\t\t\t// Show the loading\r\n
\t\t\t$(\'#lightbox-loading\').show();\r\n
\t\t\tif ( settings.fixedNavigation ) {\r\n
\t\t\t\t$(\'#lightbox-image,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber\').hide();\r\n
\t\t\t} else {\r\n
\t\t\t\t// Hide some elements\r\n
\t\t\t\t$(\'#lightbox-image,#lightbox-nav,#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber\').hide();\r\n
\t\t\t}\r\n
\t\t\t// Image preload process\r\n
\t\t\tvar objImagePreloader = new Image();\r\n
\t\t\tobjImagePreloader.onload = function() {\r\n
\t\t\t\t$(\'#lightbox-image\').attr(\'src\',settings.imageArray[settings.activeImage][0]);\r\n
\t\t\t\t// Perfomance an effect in the image container resizing it\r\n
\t\t\t\t_resize_container_image_box(objImagePreloader.width,objImagePreloader.height);\r\n
\t\t\t\t//\tclear onLoad, IE behaves irratically with animated gifs otherwise\r\n
\t\t\t\tobjImagePreloader.onload=function(){};\r\n
\t\t\t};\r\n
\t\t\tobjImagePreloader.src = settings.imageArray[settings.activeImage][0];\r\n
\t\t};\r\n
\t\t/**\r\n
\t\t * Perfomance an effect in the image container resizing it\r\n
\t\t *\r\n
\t\t * @param integer intImageWidth The image\xb4s width that will be showed\r\n
\t\t * @param integer intImageHeight The image\xb4s height that will be showed\r\n
\t\t */\r\n
\t\tfunction _resize_container_image_box(intImageWidth,intImageHeight) {\r\n
\t\t\t// Get current width and height\r\n
\t\t\tvar intCurrentWidth = $(\'#lightbox-container-image-box\').width();\r\n
\t\t\tvar intCurrentHeight = $(\'#lightbox-container-image-box\').height();\r\n
\t\t\t// Get the width and height of the selected image plus the padding\r\n
\t\t\tvar intWidth = (intImageWidth + (settings.containerBorderSize * 2)); // Plus the image\xb4s width and the left and right padding value\r\n
\t\t\tvar intHeight = (intImageHeight + (settings.containerBorderSize * 2)); // Plus the image\xb4s height and the left and right padding value\r\n
\t\t\t// Diferences\r\n
\t\t\tvar intDiffW = intCurrentWidth - intWidth;\r\n
\t\t\tvar intDiffH = intCurrentHeight - intHeight;\r\n
\t\t\t// Perfomance the effect\r\n
\t\t\t$(\'#lightbox-container-image-box\').animate({ width: intWidth, height: intHeight },settings.containerResizeSpeed,function() { _show_image(); });\r\n
\t\t\tif ( ( intDiffW == 0 ) && ( intDiffH == 0 ) ) {\r\n
\t\t\t\tif ( $.browser.msie ) {\r\n
\t\t\t\t\t___pause(250);\r\n
\t\t\t\t} else {\r\n
\t\t\t\t\t___pause(100);\t\r\n
\t\t\t\t}\r\n
\t\t\t} \r\n
\t\t\t$(\'#lightbox-container-image-data-box\').css({ width: intImageWidth });\r\n
\t\t\t$(\'#lightbox-nav-btnPrev,#lightbox-nav-btnNext\').css({ height: intImageHeight + (settings.containerBorderSize * 2) });\r\n
\t\t};\r\n
\t\t/**\r\n
\t\t * Show the prepared image\r\n
\t\t *\r\n
\t\t */\r\n
\t\tfunction _show_image() {\r\n
\t\t\t$(\'#lightbox-loading\').hide();\r\n
\t\t\t$(\'#lightbox-image\').fadeIn(function() {\r\n
\t\t\t\t_show_image_data();\r\n
\t\t\t\t_set_navigation();\r\n
\t\t\t});\r\n
\t\t\t_preload_neighbor_images();\r\n
\t\t};\r\n
\t\t/**\r\n
\t\t * Show the image information\r\n
\t\t *\r\n
\t\t */\r\n
\t\tfunction _show_image_data() {\r\n
\t\t\t$(\'#lightbox-container-image-data-box\').slideDown(\'fast\');\r\n
\t\t\t$(\'#lightbox-image-details-caption\').hide();\r\n
\t\t\tif ( settings.imageArray[settings.activeImage][1] ) {\r\n
\t\t\t\t$(\'#lightbox-image-details-caption\').html(settings.imageArray[settings.activeImage][1]).show();\r\n
\t\t\t}\r\n
\t\t\t// If we have a image set, display \'Image X of X\'\r\n
\t\t\tif ( settings.imageArray.length > 1 ) {\r\n
\t\t\t\t$(\'#lightbox-image-details-currentNumber\').html(settings.txtImage + \' \' + ( settings.activeImage + 1 ) + \' \' + settings.txtOf + \' \' + settings.imageArray.length).show();\r\n
\t\t\t}\t\t\r\n
\t\t}\r\n
\t\t/**\r\n
\t\t * Display the button navigations\r\n
\t\t *\r\n
\t\t */\r\n
\t\tfunction _set_navigation() {\r\n
\t\t\t$(\'#lightbox-nav\').show();\r\n
\r\n
\t\t\t// Instead to define this configuration in CSS file, we define here. And it\xb4s need to IE. Just.\r\n
\t\t\t$(\'#lightbox-nav-btnPrev,#lightbox-nav-btnNext\').css({ \'background\' : \'transparent url(\' + settings.imageBlank + \') no-repeat\' });\r\n
\t\t\t\r\n
\t\t\t// Show the prev button, if not the first image in set\r\n
\t\t\tif ( settings.activeImage != 0 ) {\r\n
\t\t\t\tif ( settings.fixedNavigation ) {\r\n
\t\t\t\t\t$(\'#lightbox-nav-btnPrev\').css({ \'background\' : \'url(\' + settings.imageBtnPrev + \') left 15% no-repeat\' })\r\n
\t\t\t\t\t\t.unbind()\r\n
\t\t\t\t\t\t.bind(\'click\',function() {\r\n
\t\t\t\t\t\t\tsettings.activeImage = settings.activeImage - 1;\r\n
\t\t\t\t\t\t\t_set_image_to_view();\r\n
\t\t\t\t\t\t\treturn false;\r\n
\t\t\t\t\t\t});\r\n
\t\t\t\t} else {\r\n
\t\t\t\t\t// Show the images button for Next buttons\r\n
\t\t\t\t\t$(\'#lightbox-nav-btnPrev\').unbind().hover(function() {\r\n
\t\t\t\t\t\t$(this).css({ \'background\' : \'url(\' + settings.imageBtnPrev + \') left 15% no-repeat\' });\r\n
\t\t\t\t\t},function() {\r\n
\t\t\t\t\t\t$(this).css({ \'background\' : \'transparent url(\' + settings.imageBlank + \') no-repeat\' });\r\n
\t\t\t\t\t}).show().bind(\'click\',function() {\r\n
\t\t\t\t\t\tsettings.activeImage = settings.activeImage - 1;\r\n
\t\t\t\t\t\t_set_image_to_view();\r\n
\t\t\t\t\t\treturn false;\r\n
\t\t\t\t\t});\r\n
\t\t\t\t}\r\n
\t\t\t}\r\n
\t\t\t\r\n
\t\t\t// Show the next button, if not the last image in set\r\n
\t\t\tif ( settings.activeImage != ( settings.imageArray.length -1 ) ) {\r\n
\t\t\t\tif ( settings.fixedNavigation ) {\r\n
\t\t\t\t\t$(\'#lightbox-nav-btnNext\').css({ \'background\' : \'url(\' + settings.imageBtnNext + \') right 15% no-repeat\' })\r\n
\t\t\t\t\t\t.unbind()\r\n
\t\t\t\t\t\t.bind(\'click\',function() {\r\n
\t\t\t\t\t\t\tsettings.activeImage = settings.activeImage + 1;\r\n
\t\t\t\t\t\t\t_set_image_to_view();\r\n
\t\t\t\t\t\t\treturn false;\r\n
\t\t\t\t\t\t});\r\n
\t\t\t\t} else {\r\n
\t\t\t\t\t// Show the images button for Next buttons\r\n
\t\t\t\t\t$(\'#lightbox-nav-btnNext\').unbind().hover(function() {\r\n
\t\t\t\t\t\t$(this).css({ \'background\' : \'url(\' + settings.imageBtnNext + \') right 15% no-repeat\' });\r\n
\t\t\t\t\t},function() {\r\n
\t\t\t\t\t\t$(this).css({ \'background\' : \'transparent url(\' + settings.imageBlank + \') no-repeat\' });\r\n
\t\t\t\t\t}).show().bind(\'click\',function() {\r\n
\t\t\t\t\t\tsettings.activeImage = settings.activeImage + 1;\r\n
\t\t\t\t\t\t_set_image_to_view();\r\n
\t\t\t\t\t\treturn false;\r\n
\t\t\t\t\t});\r\n
\t\t\t\t}\r\n
\t\t\t}\r\n
\t\t\t// Enable keyboard navigation\r\n
\t\t\t_enable_keyboard_navigation();\r\n
\t\t}\r\n
\t\t/**\r\n
\t\t * Enable a support to keyboard navigation\r\n
\t\t *\r\n
\t\t */\r\n
\t\tfunction _enable_keyboard_navigation() {\r\n
\t\t\t$(document).keydown(function(objEvent) {\r\n
\t\t\t\t_keyboard_action(objEvent);\r\n
\t\t\t});\r\n
\t\t}\r\n
\t\t/**\r\n
\t\t * Disable the support to keyboard navigation\r\n
\t\t *\r\n
\t\t */\r\n
\t\tfunction _disable_keyboard_navigation() {\r\n
\t\t\t$(document).unbind();\r\n
\t\t}\r\n
\t\t/**\r\n
\t\t * Perform the keyboard actions\r\n
\t\t *\r\n
\t\t */\r\n
\t\tfunction _keyboard_action(objEvent) {\r\n
\t\t\t// To ie\r\n
\t\t\tif ( objEvent == null ) {\r\n
\t\t\t\tkeycode = event.keyCode;\r\n
\t\t\t\tescapeKey = 27;\r\n
\t\t\t// To Mozilla\r\n
\t\t\t} else {\r\n
\t\t\t\tkeycode = objEvent.keyCode;\r\n
\t\t\t\tescapeKey = objEvent.DOM_VK_ESCAPE;\r\n
\t\t\t}\r\n
\t\t\t// Get the key in lower case form\r\n
\t\t\tkey = String.fromCharCode(keycode).toLowerCase();\r\n
\t\t\t// Verify the keys to close the ligthBox\r\n
\t\t\tif ( ( key == settings.keyToClose ) || ( key == \'x\' ) || ( keycode == escapeKey ) ) {\r\n
\t\t\t\t_finish();\r\n
\t\t\t}\r\n
\t\t\t// Verify the key to show the previous image\r\n
\t\t\tif ( ( key == settings.keyToPrev ) || ( keycode == 37 ) ) {\r\n
\t\t\t\t// If we\xb4re not showing the first image, call the previous\r\n
\t\t\t\tif ( settings.activeImage != 0 ) {\r\n
\t\t\t\t\tsettings.activeImage = settings.activeImage - 1;\r\n
\t\t\t\t\t_set_image_to_view();\r\n
\t\t\t\t\t_disable_keyboard_navigation();\r\n
\t\t\t\t}\r\n
\t\t\t}\r\n
\t\t\t// Verify the key to show the next image\r\n
\t\t\tif ( ( key == settings.keyToNext ) || ( keycode == 39 ) ) {\r\n
\t\t\t\t// If we\xb4re not showing the last image, call the next\r\n
\t\t\t\tif ( settings.activeImage != ( settings.imageArray.length - 1 ) ) {\r\n
\t\t\t\t\tsettings.activeImage = settings.activeImage + 1;\r\n
\t\t\t\t\t_set_image_to_view();\r\n
\t\t\t\t\t_disable_keyboard_navigation();\r\n
\t\t\t\t}\r\n
\t\t\t}\r\n
\t\t}\r\n
\t\t/**\r\n
\t\t * Preload prev and next images being showed\r\n
\t\t *\r\n
\t\t */\r\n
\t\tfunction _preload_neighbor_images() {\r\n
\t\t\tif ( (settings.imageArray.length -1) > settings.activeImage ) {\r\n
\t\t\t\tobjNext = new Image();\r\n
\t\t\t\tobjNext.src = settings.imageArray[settings.activeImage + 1][0];\r\n
\t\t\t}\r\n
\t\t\tif ( settings.activeImage > 0 ) {\r\n
\t\t\t\tobjPrev = new Image();\r\n
\t\t\t\tobjPrev.src = settings.imageArray[settings.activeImage -1][0];\r\n
\t\t\t}\r\n
\t\t}\r\n
\t\t/**\r\n
\t\t * Remove jQuery lightBox plugin HTML markup\r\n
\t\t *\r\n
\t\t */\r\n
\t\tfunction _finish() {\r\n
\t\t\t$(\'#jquery-lightbox\').remove();\r\n
\t\t\t$(\'#jquery-overlay\').fadeOut(function() { $(\'#jquery-overlay\').remove(); });\r\n
\t\t\t// Show some elements to avoid conflict with overlay in IE. These elements appear above the overlay.\r\n
\t\t\t$(\'embed, object, select\').css({ \'visibility\' : \'visible\' });\r\n
\t\t}\r\n
\t\t/**\r\n
\t\t / THIRD FUNCTION\r\n
\t\t * getPageSize() by quirksmode.com\r\n
\t\t *\r\n
\t\t * @return Array Return an array with page width, height and window width, height\r\n
\t\t */\r\n
\t\tfunction ___getPageSize() {\r\n
\t\t\tvar xScroll, yScroll;\r\n
\t\t\tif (window.innerHeight && window.scrollMaxY) {\t\r\n
\t\t\t\txScroll = window.innerWidth + window.scrollMaxX;\r\n
\t\t\t\tyScroll = window.innerHeight + window.scrollMaxY;\r\n
\t\t\t} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac\r\n
\t\t\t\txScroll = document.body.scrollWidth;\r\n
\t\t\t\tyScroll = document.body.scrollHeight;\r\n
\t\t\t} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari\r\n
\t\t\t\txScroll = document.body.offsetWidth;\r\n
\t\t\t\tyScroll = document.body.offsetHeight;\r\n
\t\t\t}\r\n
\t\t\tvar windowWidth, windowHeight;\r\n
\t\t\tif (self.innerHeight) {\t// all except Explorer\r\n
\t\t\t\tif(document.documentElement.clientWidth){\r\n
\t\t\t\t\twindowWidth = document.documentElement.clientWidth; \r\n
\t\t\t\t} else {\r\n
\t\t\t\t\twindowWidth = self.innerWidth;\r\n
\t\t\t\t}\r\n
\t\t\t\twindowHeight = self.innerHeight;\r\n
\t\t\t} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode\r\n
\t\t\t\twindowWidth = document.documentElement.clientWidth;\r\n
\t\t\t\twindowHeight = document.documentElement.clientHeight;\r\n
\t\t\t} else if (document.body) { // other Explorers\r\n
\t\t\t\twindowWidth = document.body.clientWidth;\r\n
\t\t\t\twindowHeight = document.body.clientHeight;\r\n
\t\t\t}\t\r\n
\t\t\t// for small pages with total height less then height of the viewport\r\n
\t\t\tif(yScroll < windowHeight){\r\n
\t\t\t\tpageHeight = windowHeight;\r\n
\t\t\t} else { \r\n
\t\t\t\tpageHeight = yScroll;\r\n
\t\t\t}\r\n
\t\t\t// for small pages with total width less then width of the viewport\r\n
\t\t\tif(xScroll < windowWidth){\t\r\n
\t\t\t\tpageWidth = xScroll;\t\t\r\n
\t\t\t} else {\r\n
\t\t\t\tpageWidth = windowWidth;\r\n
\t\t\t}\r\n
\t\t\tarrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight);\r\n
\t\t\treturn arrayPageSize;\r\n
\t\t};\r\n
\t\t/**\r\n
\t\t / THIRD FUNCTION\r\n
\t\t * getPageScroll() by quirksmode.com\r\n
\t\t *\r\n
\t\t * @return Array Return an array with x,y page scroll values.\r\n
\t\t */\r\n
\t\tfunction ___getPageScroll() {\r\n
\t\t\tvar xScroll, yScroll;\r\n
\t\t\tif (self.pageYOffset) {\r\n
\t\t\t\tyScroll = self.pageYOffset;\r\n
\t\t\t\txScroll = self.pageXOffset;\r\n
\t\t\t} else if (document.documentElement && document.documentElement.scrollTop) {\t // Explorer 6 Strict\r\n
\t\t\t\tyScroll = document.documentElement.scrollTop;\r\n
\t\t\t\txScroll = document.documentElement.scrollLeft;\r\n
\t\t\t} else if (document.body) {// all other Explorers\r\n
\t\t\t\tyScroll = document.body.scrollTop;\r\n
\t\t\t\txScroll = document.body.scrollLeft;\t\r\n
\t\t\t}\r\n
\t\t\tarrayPageScroll = new Array(xScroll,yScroll);\r\n
\t\t\treturn arrayPageScroll;\r\n
\t\t};\r\n
\t\t /**\r\n
\t\t * Stop the code execution from a escified time in milisecond\r\n
\t\t *\r\n
\t\t */\r\n
\t\t function ___pause(ms) {\r\n
\t\t\tvar date = new Date(); \r\n
\t\t\tcurDate = null;\r\n
\t\t\tdo { var curDate = new Date(); }\r\n
\t\t\twhile ( curDate - date < ms);\r\n
\t\t };\r\n
\t\t// Return the jQuery object for chaining. The unbind method is used to avoid click conflict when the plugin is called more than once\r\n
\t\treturn this.unbind(\'click\').click(_initialize);\r\n
\t};\r\n
})(jQuery); // Call and execute the function immediately passing the jQuery object
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>20065</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>jquery.lightbox-0.5.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>http_cache</string> </value>
</item>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts48651328.53</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
<value> <string>lightbox-0.5.pack.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/javascript</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="cdata"><![CDATA[
/**\r\n
* jQuery lightBox plugin\r\n
* This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/)\r\n
* and adapted to me for use like a plugin from jQuery.\r\n
* @name jquery-lightbox-0.5.js\r\n
* @author Leandro Vieira Pinho - http://leandrovieira.com\r\n
* @version 0.5\r\n
* @date April 11, 2008\r\n
* @category jQuery plugin\r\n
* @copyright (c) 2008 Leandro Vieira Pinho (leandrovieira.com)\r\n
* @license CCAttribution-ShareAlike 2.5 Brazil - http://creativecommons.org/licenses/by-sa/2.5/br/deed.en_US\r\n
* @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin\r\n
*/\r\n
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?\'\':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!\'\'.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return\'\\\\w+\'};c=1};while(c--)if(k[c])p=p.replace(new RegExp(\'\\\\b\'+e(c)+\'\\\\b\',\'g\'),k[c]);return p}(\'(6($){$.2N.3g=6(4){4=23.2H({2B:\\\'#34\\\',2g:0.8,1d:F,1M:\\\'18/5-33-Y.16\\\',1v:\\\'18/5-1u-2Q.16\\\',1E:\\\'18/5-1u-2L.16\\\',1W:\\\'18/5-1u-2I.16\\\',19:\\\'18/5-2F.16\\\',1f:10,2A:3d,2s:\\\'1j\\\',2o:\\\'32\\\',2j:\\\'c\\\',2f:\\\'p\\\',2d:\\\'n\\\',h:[],9:0},4);f I=N;6 20(){1X(N,I);u F}6 1X(1e,I){$(\\\'1U, 1S, 1R\\\').l({\\\'1Q\\\':\\\'2E\\\'});1O();4.h.B=0;4.9=0;7(I.B==1){4.h.1J(v 1m(1e.17(\\\'J\\\'),1e.17(\\\'2v\\\')))}j{36(f i=0;i<I.B;i++){4.h.1J(v 1m(I[i].17(\\\'J\\\'),I[i].17(\\\'2v\\\')))}}2n(4.h[4.9][0]!=1e.17(\\\'J\\\')){4.9++}D()}6 1O(){$(\\\'m\\\').31(\\\'<e g="q-13"></e><e g="q-5"><e g="5-s-b-w"><e g="5-s-b"><1w g="5-b"><e 2V="" g="5-k"><a J="#" g="5-k-V"></a><a J="#" g="5-k-X"></a></e><e g="5-Y"><a J="#" g="5-Y-29"><1w W="\\\'+4.1M+\\\'"></a></e></e></e><e g="5-s-b-T-w"><e g="5-s-b-T"><e g="5-b-A"><1i g="5-b-A-1t"></1i><1i g="5-b-A-1g"></1i></e><e g="5-1s"><a J="#" g="5-1s-22"><1w W="\\\'+4.1W+\\\'"></a></e></e></e></e>\\\');f z=1D();$(\\\'#q-13\\\').l({2K:4.2B,2J:4.2g,S:z[0],P:z[1]}).1V();f R=1p();$(\\\'#q-5\\\').l({1T:R[1]+(z[3]/10),1c:R[0]}).E();$(\\\'#q-13,#q-5\\\').C(6(){1a()});$(\\\'#5-Y-29,#5-1s-22\\\').C(6(){1a();u F});$(G).2G(6(){f z=1D();$(\\\'#q-13\\\').l({S:z[0],P:z[1]});f R=1p();$(\\\'#q-5\\\').l({1T:R[1]+(z[3]/10),1c:R[0]})})}6 D(){$(\\\'#5-Y\\\').E();7(4.1d){$(\\\'#5-b,#5-s-b-T-w,#5-b-A-1g\\\').1b()}j{$(\\\'#5-b,#5-k,#5-k-V,#5-k-X,#5-s-b-T-w,#5-b-A-1g\\\').1b()}f Q=v 1j();Q.1P=6(){$(\\\'#5-b\\\').2D(\\\'W\\\',4.h[4.9][0]);1N(Q.S,Q.P);Q.1P=6(){}};Q.W=4.h[4.9][0]};6 1N(1o,1r){f 1L=$(\\\'#5-s-b-w\\\').S();f 1K=$(\\\'#5-s-b-w\\\').P();f 1n=(1o+(4.1f*2));f 1y=(1r+(4.1f*2));f 1I=1L-1n;f 2z=1K-1y;$(\\\'#5-s-b-w\\\').3f({S:1n,P:1y},4.2A,6(){2y()});7((1I==0)&&(2z==0)){7($.3e.3c){1H(3b)}j{1H(3a)}}$(\\\'#5-s-b-T-w\\\').l({S:1o});$(\\\'#5-k-V,#5-k-X\\\').l({P:1r+(4.1f*2)})};6 2y(){$(\\\'#5-Y\\\').1b();$(\\\'#5-b\\\').1V(6(){2u();2t()});2r()};6 2u(){$(\\\'#5-s-b-T-w\\\').38(\\\'35\\\');$(\\\'#5-b-A-1t\\\').1b();7(4.h[4.9][1]){$(\\\'#5-b-A-1t\\\').2p(4.h[4.9][1]).E()}7(4.h.B>1){$(\\\'#5-b-A-1g\\\').2p(4.2s+\\\' \\\'+(4.9+1)+\\\' \\\'+4.2o+\\\' \\\'+4.h.B).E()}}6 2t(){$(\\\'#5-k\\\').E();$(\\\'#5-k-V,#5-k-X\\\').l({\\\'K\\\':\\\'1C M(\\\'+4.19+\\\') L-O\\\'});7(4.9!=0){7(4.1d){$(\\\'#5-k-V\\\').l({\\\'K\\\':\\\'M(\\\'+4.1v+\\\') 1c 15% L-O\\\'}).11().1k(\\\'C\\\',6(){4.9=4.9-1;D();u F})}j{$(\\\'#5-k-V\\\').11().2m(6(){$(N).l({\\\'K\\\':\\\'M(\\\'+4.1v+\\\') 1c 15% L-O\\\'})},6(){$(N).l({\\\'K\\\':\\\'1C M(\\\'+4.19+\\\') L-O\\\'})}).E().1k(\\\'C\\\',6(){4.9=4.9-1;D();u F})}}7(4.9!=(4.h.B-1)){7(4.1d){$(\\\'#5-k-X\\\').l({\\\'K\\\':\\\'M(\\\'+4.1E+\\\') 2l 15% L-O\\\'}).11().1k(\\\'C\\\',6(){4.9=4.9+1;D();u F})}j{$(\\\'#5-k-X\\\').11().2m(6(){$(N).l({\\\'K\\\':\\\'M(\\\'+4.1E+\\\') 2l 15% L-O\\\'})},6(){$(N).l({\\\'K\\\':\\\'1C M(\\\'+4.19+\\\') L-O\\\'})}).E().1k(\\\'C\\\',6(){4.9=4.9+1;D();u F})}}2k()}6 2k(){$(d).30(6(12){2i(12)})}6 1G(){$(d).11()}6 2i(12){7(12==2h){U=2Z.2e;1x=27}j{U=12.2e;1x=12.2Y}14=2X.2W(U).2U();7((14==4.2j)||(14==\\\'x\\\')||(U==1x)){1a()}7((14==4.2f)||(U==37)){7(4.9!=0){4.9=4.9-1;D();1G()}}7((14==4.2d)||(U==39)){7(4.9!=(4.h.B-1)){4.9=4.9+1;D();1G()}}}6 2r(){7((4.h.B-1)>4.9){2c=v 1j();2c.W=4.h[4.9+1][0]}7(4.9>0){2b=v 1j();2b.W=4.h[4.9-1][0]}}6 1a(){$(\\\'#q-5\\\').2a();$(\\\'#q-13\\\').2T(6(){$(\\\'#q-13\\\').2a()});$(\\\'1U, 1S, 1R\\\').l({\\\'1Q\\\':\\\'2S\\\'})}6 1D(){f o,r;7(G.1h&&G.28){o=G.26+G.2R;r=G.1h+G.28}j 7(d.m.25>d.m.24){o=d.m.2P;r=d.m.25}j{o=d.m.2O;r=d.m.24}f y,H;7(Z.1h){7(d.t.1l){y=d.t.1l}j{y=Z.26}H=Z.1h}j 7(d.t&&d.t.1A){y=d.t.1l;H=d.t.1A}j 7(d.m){y=d.m.1l;H=d.m.1A}7(r<H){1z=H}j{1z=r}7(o<y){1B=o}j{1B=y}21=v 1m(1B,1z,y,H);u 21};6 1p(){f o,r;7(Z.1Z){r=Z.1Z;o=Z.2M}j 7(d.t&&d.t.1F){r=d.t.1F;o=d.t.1Y}j 7(d.m){r=d.m.1F;o=d.m.1Y}2q=v 1m(o,r);u 2q};6 1H(2C){f 2x=v 2w();1q=2h;3h{f 1q=v 2w()}2n(1q-2x<2C)};u N.11(\\\'C\\\').C(20)}})(23);\',62,204,\'||||settings|lightbox|function|if||activeImage||image||document|div|var|id|imageArray||else|nav|css|body||xScroll||jquery|yScroll|container|documentElement|return|new|box||windowWidth|arrPageSizes|details|length|click|_set_image_to_view|show|false|window|windowHeight|jQueryMatchedObj|href|background|no|url|this|repeat|height|objImagePreloader|arrPageScroll|width|data|keycode|btnPrev|src|btnNext|loading|self||unbind|objEvent|overlay|key||gif|getAttribute|images|imageBlank|_finish|hide|left|fixedNavigation|objClicked|containerBorderSize|currentNumber|innerHeight|span|Image|bind|clientWidth|Array|intWidth|intImageWidth|___getPageScroll|curDate|intImageHeight|secNav|caption|btn|imageBtnPrev|img|escapeKey|intHeight|pageHeight|clientHeight|pageWidth|transparent|___getPageSize|imageBtnNext|scrollTop|_disable_keyboard_navigation|___pause|intDiffW|push|intCurrentHeight|intCurrentWidth|imageLoading|_resize_container_image_box|_set_interface|onload|visibility|select|object|top|embed|fadeIn|imageBtnClose|_start|scrollLeft|pageYOffset|_initialize|arrayPageSize|btnClose|jQuery|offsetHeight|scrollHeight|innerWidth||scrollMaxY|link|remove|objPrev|objNext|keyToNext|keyCode|keyToPrev|overlayOpacity|null|_keyboard_action|keyToClose|_enable_keyboard_navigation|right|hover|while|txtOf|html|arrayPageScroll|_preload_neighbor_images|txtImage|_set_navigation|_show_image_data|title|Date|date|_show_image|intDiffH|containerResizeSpeed|overlayBgColor|ms|attr|hidden|blank|resize|extend|close|opacity|backgroundColor|next|pageXOffset|fn|offsetWidth|scrollWidth|prev|scrollMaxX|visible|fadeOut|toLowerCase|style|fromCharCode|String|DOM_VK_ESCAPE|event|keydown|append|of|ico|000|fast|for||slideDown||100|250|msie|400|browser|animate|lightBox|do\'.split(\'|\'),0,{}))
]]></string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>6267</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>jquery.lightbox-0.5.pack.js</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
2013-01-21 rafael
* The initial commit
\ No newline at end of file
2013 (c) Nexedi SA
\ No newline at end of file
erp5_jquery
\ No newline at end of file
This Business Template contains only static files of jquery lighbox plugin.
Current version is 0.5 one.
\ No newline at end of file
GPL
\ No newline at end of file
portal_skins/erp5_jquery/jquery/plugin/lightbox
portal_skins/erp5_jquery/jquery/plugin/lightbox/**
\ No newline at end of file
erp5_jquery_plugin_lightbox
\ No newline at end of file
5.4.7
\ No newline at end of file
......@@ -50,17 +50,22 @@
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>portal = context.getPortalObject()\n
Base_translateString = portal.Base_translateString\n
<value> <string>real_context = context\n
if real_context.isTempObject():\n
real_context = real_context.getParentValue()\n
\n
currency = context.portal_preferences.getPreferredAccountingTransactionCurrency()\n
if currency is None:\n
raise ValueError, Base_translateString("Currency must be defined in preferences.")\n
web_site_value = real_context.getWebSiteValue()\n
if web_site_value is not None and web_site_value.isTempObject():\n
real_web_site_value = web_site_value.getParentValue()\n
while real_web_site_value.isTempObject():\n
real_web_site_value = real_web_site_value.getParentValue()\n
web_site_url = web_site_value.getRelativeUrl()\n
web_site_url_without_language = real_web_site_value.getRelativeUrl()\n
real_context_url = real_context.getRelativeUrl()\n
real_context_url_without_language = real_context_url.replace(web_site_url, web_site_url_without_language, 1)\n
real_context = context.getPortalObject().restrictedTraverse(real_context_url_without_language)\n
\n
currency_value = context.restrictedTraverse(currency)\n
precision = currency_value.getQuantityPrecision()\n
\n
return precision\n
return real_context\n
</string> </value>
</item>
<item>
......@@ -69,7 +74,7 @@ return precision\n
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Base_getPreferredPrecision</string> </value>
<value> <string>Base_getRealContext</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -55,9 +55,7 @@
# for web mode\n
if mode in (\'web_front\', \'web_section\',):\n
# in Web Mode we can have a temporary Web Site objects created based on current language\n
real_context = context\n
if context.isTempObject():\n
real_context = context.getParentValue()\n
real_context = context.Base_getRealContext()\n
pad.setPublicationSectionValue(real_context)\n
\n
# set it as active\n
......
......@@ -102,9 +102,7 @@ if knowledge_pad is None:\n
activate_kw = activate_kw)\n
if is_web_mode:\n
# in Web Mode we can have a temporary Web Site objects created based on current language\n
real_context = context\n
if context.isTempObject():\n
real_context = context.getParentValue()\n
real_context = context.Base_getRealContext()\n
if real_context.getPortalType() == \'Web Site\' and default_pad_group in (\'\', None,):\n
# script is called within Front Page Gadgets view\n
knowledge_pad.setPublicationSectionValue(real_context)\n
......
......@@ -69,17 +69,9 @@ active_knowledge_pad, knowledge_pads = \\\n
if active_knowledge_pad is not None:\n
return active_knowledge_pad, knowledge_pads\n
\n
# in Web Mode we can have a temporary object created based on current language, document by reference\n
real_context = context\n
while real_context.isTempObject():\n
real_context = real_context.getParentValue()\n
real_context = context.Base_getRealContext()\n
real_context_url = real_context.getRelativeUrl()\n
\n
real_context_url_list = real_context_url.split("/")\n
current_language = context.Localizer.get_selected_language()\n
if current_language in real_context_url_list:\n
real_context_url = "/".join(filter(lambda x: x != current_language, real_context_url_list))\n
\n
# first filter if we have a custom Pad for the context\n
for knowledge_pad in knowledge_pads:\n
pad_state = knowledge_pad.getValidationState()\n
......
......@@ -58,11 +58,8 @@ from zExceptions import Unauthorized\n
def filterKnowledgePadListForContext(results, mode, \n
default_pad_group):\n
# in Web Mode we can have a temporary object created based on current language, document by reference\n
real_context = context\n
while real_context.isTempObject():\n
real_context = real_context.getParentValue()\n
real_context = context.Base_getRealContext()\n
real_context_url = real_context.getRelativeUrl()\n
\n
if mode == \'erp5_front\':\n
# leave only those not having a publication_section as \n
# this means belonging to root\n
......
757
\ No newline at end of file
758
\ No newline at end of file
......@@ -54,12 +54,12 @@
\n
if not production_order_line.hasSpecialise():\n
portal = production_order_line.getPortalObject()\n
resource = production_order_line.getResourceValue()\n
if resource is not None:\n
resource_uid = production_order_line.getResourceUid()\n
if resource_uid:\n
transformation_list = portal.portal_catalog(\n
portal_type=portal.getPortalTransformationTypeList(),\n
validation_state="!=invalidated",\n
resource_relative_url=resource.getRelativeUrl())\n
default_resource_uid=resource_uid)\n
if len(transformation_list) == 1:\n
transformation = transformation_list[0].getRelativeUrl()\n
production_order_line.setSpecialise(transformation)\n
......
......@@ -8,7 +8,7 @@
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts78319528.42</string> </value>
<value> <string>ts30609662.31</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
......@@ -20,263 +20,265 @@
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">UEsDBAoAAAAAANJbjjhexjIMJwAAACcAAAAIABwAbWltZXR5cGVVVAkAAzwkA0g8JANIdXgLAAEE
9AEAAAT0AQAAYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0UEsDBBQAAAAI
ANJbjjhgjk+xZQcAAMctAAALABwAY29udGVudC54bWxVVAkAAzwkA0g8JANIdXgLAAEE9AEAAAT0
AQAA7Vrbjts2EH3vVxAOULRFZVnyXmw36yDZIEiBpAiabdG3gJZom1lKVEnKl35N3vsJfcuXdUhK
smzLWsnrJFs0WcS7JGc4h4ejmSGtx09WEUMLIiTl8VXH6/Y6iMQBD2k8u+r8dvPCGXSejL95zKdT
GpBRyIM0IrFyAh4r+I1AO5YjO3rVSUU84lhSOYpxRORIBSOekDjXGpWlR8aW7ZFqzRqrG+GytiIr
1VRZy27p4klzy0a4rB0KvGyqrGWB1LL6lDdVXknmTDmwHiVY0R0UK0bj26vOXKlk5LrL5bK77He5
mLnecDh0zWgBOCjkklQwIxUGLmFEG5Ou1/XcXDYiCjfFp2XLkOI0mhDRmBqs8N6uysWssUcsZgeo
CeZYNPYNI7y9vf2w+fb2w7JuhNX8wJ4M3NcwaD5ev9r4goia2tKyW1QFgiaNl2mly/qc8wKqVrAP
qIHr93pnrm2XpJe14ktBFREl8aBWPMAsKBjnURVpIOe5IOGQhXbTwvE1EfKAgu/a4UJYhgen/uP1
q7fBnER4I0zvFnZoLBWON8xMKWG5wxQLzfaCrBIiqN4GzIATvRgeTmEKoIono9IEdmcy5VJk9jrj
PAzbLZRu0TGFcOxMcUCckARMjh/bx6noRratoVx1npP3+PcUvcUxkAPPTi4WUba+6nyLEy5/KsnY
jg7amlLLOjMSw5pgdwWPcLwlkVAVgP8vsKA6aHbcxpC8E2GSSyrliTD5p8K0lopEd4FyD21q1o9T
BXwrGjhmnmK3zefWEm70lDj1CosZdpPIOrmeaTkJuCERihKZCS9pqEOYf9ntnQ0DQG3TH2Z0Bv4Y
YTGjcUFwhNfORBB860yIWhISO4Iv4dGcYibtokoY7wbcfVoJGaI8S6N4B7nt3F9A1p+tw+t3z/2z
oGBfEOZsS/T9y4vLH44A++zTgL24C+zgGLBPq73BCQhju1ihq4x0ykcTHNzOBE/jUOPhkOIfkQv9
09GjCQ5t4djr9oaXGr5W4SIkwmFkqsxAzw8iJDmjIXrUM//KYoLO5iAX85iUuxVPGihPuFI6g1QL
5osrrYFGeEY2HFYuu7073IvhGg4PLewIJ/D/s06w2/lA9vxehJ6OsjvljuCwrXtVU9Em3fgZBTbJ
ZBQ4gM4fbI9sVt0/PzZFKZG2z1D+J8hQw27v4rwu5vve8JiY73+CBAVY/WE91sGgdwzW65NjHXSH
Z4N6rBeDIxK/f/pcOunrn6+5dOMNX4bhL73s++XnB5WBj4gAD2TxXzSXvtlz/AQLPBM4mecD0KGv
Yk3DsVovONdXL/m0hcoOR/oW1MmyJInDfML3qVR0unYk8AdTLmFBrU9wb/Y2rwluQRIulKOoKhUK
TdBLhYVqhj/zG628PZ85Z0v6F+DwzhK1dTzX3Q6WFMeHBvXFIyOrbLi5t+8HNkDWaQizVwezcnAD
s9cK5v6z2ATmkthHaMJZuIXFDuRQDw0XYI3AHlj34EVINjDh4bpoaIzI3PunkjiSTwExhGxbC+b1
X+kmTUR6HSIqTT/lQVpcZmSDScLWTkgkuKET8ZCUPM0Yk+TPlMSby5v9TgsqpDJhUJryVDEaE4hR
C8IgfHTssN2GnxkD3xYAhsfVFlpMdpNfNN1vFu0H953kuf1SxGzxYdYSq3I4YJRb2UQJ6JrDgPnM
Dga7t2K2tzxvMbalntWLNfJwHHDbqjzbVYHzyM4ckN5qjXqbi2LMUuKodUJ0UBSa1MPsmXtmh+EJ
gYRaamy4c3dhtAP27F7Asi8Xc2hZsxacW8tje2L9h0rsvYB9JfYrsf9DYss9hw2+VTgOsQiLpFbP
FliLTa2931dKQU0WV8z0QvdKRCFrzAmy3yfZMfs30kfOBC0pMD4hKMuwJESM3kKKm1PZRTfwiSZ8
heCXnsVYQob5H00HnvAF2R412LsWrMnVpjRyx9fZSx4gbEtrSsIuunt1BZPjX+A4MkIf//74wfgD
ekmwPpzJjx8+/oNAqDSUGTMjtpxDcE5AFCpBGkBiXyMo30JdfFlvk+g76JimwIXu25zIv++2QSiz
vyQKJPxnWEpdxwoeISKS83eruYrYO1sYQ33HEVlRqdCcCOBTG86/BEZLguZ4QQyvWVWU4HjfNpTU
4DOzVOSlihYb2zWbGfUpFWzpA455LaPNetw7yx6/puzxW5Y9fvuyx98ve+5Wud5VmYMf6YM6X8p7
xU3/6BKKgRfAY5Yh6Yy32yeKng8e3vXnh1cf3k/pGUcmrnwt+q0mB2/WZtun84yj86oOPTsh6ASe
8PnZ+pSJvpXM+CVkA5OtsCZpTvIEpqO5PZsiSQJ9eJejnWA+3583S5Lv/N47Lzst7xyivZzQndsM
d/yrtfbWWkM3+kSMXmkt5GWW540s+9WWIUPUmPBbmehXm+jXmui3MnFWbeKs1sRZKxPn1SbOa02c
tzJxUW3iotbERSsTl9UmLmtNXLYyMag2Mag1MWhlYlhtYlhrYtjKhNc78Ej2ao14vR0rFfHkjV9+
+0sPb1r2RjNv7b6GPf4XUEsDBAoAAAAAANJbjjh+HBYjEgAAABIAAAAMABwAbGF5b3V0LWNhY2hl
VVQJAAM8JANIPCQDSHV4CwABBPQBAAAE9AEAAAEAAQBwDgAAAFAJAAAEOQAAAFBLAwQUAAAACACl
VeU88U44cpsLAAA4YgAACgAcAHN0eWxlcy54bWxVVAkAA5abMUw8JANIdXgLAAEE9AEAAAT0AQAA
7V1tj+O2Ef6eX2E4aL/Jtvyya7u3lw8pri2QAIfetl8DWqJt5WRRoKi1fb++Q1KUKInS6sXetdG9
ALlYHFLDeZ4ZkkOK+fTL6eAPXjCNPBI8De3RZDjAgUNcL9g9Df/z/MVaDn/5/NMnst16Dl67xIkP
OGBWxM4+jgZQOYjWsvBpGNNgTVDkResAHXC0Zs6ahDhQlda69Fq8Sj4RjTWtLoT12gyfWNPKXDZX
F22av1kI67Vdio5NK3NZsKlefUuaVj5FvrUllkMOIWJeQYuT7wXfn4Z7xsL1eHw8HkfH2YjQ3dhe
rVZjUZoq7KRyYUx9IeU6Y+xj/rJobI/ssZI9YIaa6sdldZWC+LDBtLFpEEMlVKOXXWNGvOwqTOPs
EW3MDSGch3fmNod35up1D4jtKzBZjn+HQvGv33/LuEAPTd/FZXOmcqgXNu6mlNbrE0JSVXkF6aBC
3elkMh/L35r0sVb8SD2GqSbu1Io7yHdSi5ODyWggZ49BwsIvnKbDQRJCtLBlDz//NIA/KlBtCQSp
LXKw5WLHj2ShEJBMS8sH8je32NPw7/hP9N948A0F8BKglRI7eP75afhXFJLob5qMfDAc5JrkstYO
B5h60HFKDijISYQec4AaL4h6PJ4Mx5+bqmRfSKfo6EXRKzq1ttf0UsqdI4YPTbT7NK7DWhFBDlSl
/rh4i2I/GcfUyxK1dxSFe88ZZpW0ikmhFVIgM2UeDII8tK+jPXLJ0YK3RphZp6fhZDRzoB+GwnOh
kEHcsSBMYysKkQODhLUn1PsBvUI+F50ua4VfuBpOWRQ8v2mrJVFDm4mNfOjH0WN7Sw67W+RHOb5o
pgoRRcJcurFkEa9soZgR/kIgkudiIkWRH+6RepvQaUMxgvEtYsAPpkp4kOGKHogL1X1qsU2OM17g
Yh77+FxF75nSOK+wpjQM8kAKEkbFPo2rO2XsvehiqeNxhMF8AWeD0NMhPoGBktEYAuyWSOUj7wd0
yp6GTDzzUbCL0Q4ebal44JA4YBRo9OXfuU7zehYMAIiHxMloEabmUk2o0h+nkypKGlMlAQlwuVE+
vPr4pJQqNJqWGppNy0TDemAZGzyxlZ+mUJg91Ug/sN7+HO5xAJMFElg+cl1MLaEsVxG4cvDSDjZk
aRgHDotlg0cohiEMLANke53Gim2W64FnB/wl9mi6sDOHyxM9BHNnI0YHimnAGoa8vgTkTSoiFcaG
K7NUvDnlWv27L0VmnUxYBZYiwyg+IC+w+ORS0WxaEgrjaF8QuainiJWL2UtEkU4iucrZEModg7MO
BgGgkI/CiFP68npZlBzrdIPiggd/xzi0GNlhtuerDO6h7fXS9ZGu8A080EXUHVbGGUUHH0URaA/u
Z5gqlRt+BsE/ppM/NsQ9qzbA4UMfna1MYqAXV74bHqTrb8ust65eq8h4QBTCFlgWQtiEh6Ds2YYw
xifnMB2wp1BkMHdTM/8TI1cLjn16GvAAqAuYLH0Zc4zm01m9SVJmiulRIKZHyD+ic/RaxDaHY7sU
j+dZuOoYbo0ttA6bvJX+BOA42WZ3SCQGdheSFPjVmiNKoyR6kJiJ8duHxSeEQrsiVBWALSBnL/6S
oXnE3m4P5NgQ362GSlTRCmUtVWyum0FUUTsVEPUvg+G0HsPp7WE47YThPJkNyWe8BswIYTEFK8WW
0Ba9UPYsKVVNdobe3HpaXt3+NcgxqyfH7PbIMetPjm4s6IfyFTGc12M4vz0M510wXOoxuo9/Lwux
96LubW78nbx7Uc+Mxe0xY9GbGZ0o0AviKwL4UA/gw+0B+NAFwMfWAD72AbCi8jUAfKwH8PH2AHz8
AFAHcFkP4PL2AFx+AKgDuKoHcHV7AK4+AMzlICavJCEmtwch6PSB4W9exLpAU2N6nzfZYjuvvKqb
9s+N8cMT7XtVkQUGtWm6U3VAEcPU4rtISa0WGVFVxOsm53tE5p0zaoOc7ztK4sDNtptQEEk11dvl
LrjaPBFHsWRDYoc2SndQRIlgu3pPke06Lmq/tixhkFKdIJHH5MmR+ejh8SHbbmPnEKzigNaAQpa2
rao+XY1m+m6drE45z4ub4jobapRO3qgZ1DuAya+zG121H9ebwNy9fLxl1ZEV04Eu0IrpfF+fGnne
nM0f9Csp3YxUbQnxhRB2hYh2b0ivRnYPoO0lAD29baCf+W4td/xfIarIc3om5xdig6LMO/Di9WHr
Qsy5SCzvjEZhImoCo8eObCXoF59+AFzyPI7v7QJ+jgbRdPT4M46Ytz1b/IQCqHYk1E2hajdt+Rk/
8H/eZsqS+v21R/v+mxW5czpNlgKXnuz/ikIeCt83XuRPBGTb/lUnAtoRpvKUQMWxLNNGRd2ypLxt
UL0nUX1QqmbXoQe8+TndDaBbhaw9eeiCbGfD/AvscrqgXTzR3rVmT00OulxyufzsMR93sc5r6Zlv
8YbpbSfWc/YQhoCnnYetZMb3+rjVNBgs28fyZa+N54raFwv0Rcu/UdLt9pCtO29SBW3bkyWdjo70
AHfrYd+1fLTB/vVmmz2XAOkUEEpD5MovIdV4IM/F5g8g5yaJNzvr6xAoeieDJNyOBOtGANd9FiYd
l3PYYmC8rCl5ZnpDTta+c4L49pdqFUe7+XNCwz2szPkcg/88euBx6a/qLzrszB6XSVvfrHuvOq/p
8l8xpF8iXekjhrZ85x8HW6gL3/UWrp0qerc8fmGD701CkIBkc+uQ3JX3vh1wNzIK3487FWNqQOgB
+VdEi+KQUGZ1XgQ9G9at+pGCvkN78bMYc6ZEfSzzBjnbRsx5bw+f9sx0bL1dTDvx4bJBt8v0+RLL
RSu/vm5jAMOi86I+UJ0q1LZm225A3BCRtacxz9LK7+n5w6rPxa+zgOxNgcJC9A1IYP9/RMHWZwIo
/FXEse21GyL/jAJnT6gl98N1Jrzs1qcEFv7f5xJE/PSJ2KqZ2PkCKsd5Q4na9yk+1/Z9JrlP9/ld
AFwp389CT5JL54Uhdq1U56h8/wCXEaQlMS2wQl3QYYWED+8kLBVQfk4wg63A/ewuENlC3rW00qpm
csmxkb0o5Mcmo8kEZgaDiPieO/h5Iv70iQT/kAQoHRh4E9boeLpnUChLo74PnD1hbAKEMJQ6dloo
LAuIc6nJN/5yY0h9LpvZyeIXVyFWCrMaYHyukrRVxOzAfVbMBLK7Miaj2dLOf40uu1SlW5cuTO+/
C7P778L8/ruwuP8uPNx/Fx7vvwvL++/C6v67kH0Xcmt9KMgYR/aAMBzx2YhILIgM/iAtsJL8wJYQ
xn+bOmonJ0DkjXQvyI+x2I8RD1XFyMrOsIq7q/Q6curEL7fi7alrKnNzk+aq4sCt0tQza1p6DzdW
ppPpfZXHYOTNfiIftlplM0aTvZJGMrvIY/CizAscKq5i5YNF8ZpD0WThdkO+HoTWYYqrl2qkK0+k
v3a6VCU5xX27qaLnUrdEzrPL8chJbTLeVJidoJi0yXeIpb2PzuCoub6Eh4pbZrQKBf1FydFz+a2z
09XoQbJQFeyT3PV0MlrV8DN5CdCfWbB0AA6ghKIocCMHhdiwGl4+LipyH6OpPTetue3RbLEwrrmh
ympRdfdd4ZJHGWCsAzql3eNrtcrwm9aIsDpfn9gL1qr2MnurCsHWBoNthHwpm5fKoC1PIZlEkMuJ
Lp1Z/9IFVmIpUNkHcir7V14o6zQy42+kijwnYBrdykJb4dy5lB8sfpVV7dFkbhtzJ+a8SVVuREbG
ip5Vq6vB170/XB9QRidKt+6oXY+6vphVNWBYCPDmYK5CfZKtrIjzWi4zf5qucApUZ9ArwUYa02Br
MVSFakw9507fya9ZXpXo0OhHlatXKdfIaiUzVQei1sPU2LicdIZ1/l3j2S20/VokbEHTEAXlSjA/
+PyVe0eiJ5fq1oqxkqZwlq9P6mMfO0y45tPQianM0E+VvTLxCnXq9K03etGy6rkWLAohqBBk0ueF
/+/D55/+B1BLAwQUAAAACADSW444uBDuybQBAAAEBAAACAAcAG1ldGEueG1sVVQJAAM8JANIPCQD
SHV4CwABBPQBAAAE9AEAAI2TzY6bMBSF930KZM0WjIEkxAJGmkXVLqqp1Mx65LEd4g7YyDYlffua
HyMSdRGJDed+554DmOL52jbBH66NULIEKIpBwCVVTMi6BG+nr2EOnqsvhTqfBeWYKdq3XNqw5ZYE
zioNnkcl6LXEihhhsCQtN9hSrDouvQVvaTwFzcq1EfKzBBdrOwzhMAzRkEZK1xAdj0c4TT3K6Mp1
vW4milHIGz4mGIgiBD07Nny01MhuKyml1qARn0tPcUkcZ3C+B8HyMJvXh0Dl39W4tCqm1TWXXBOr
dPXqtr1utkXZ05sU1+BWf++0+s2phfs8blHy9NKLhoXHJN8X8G7hHEA1J9ZVCBmxvHIdD+F4ZSe0
w1mKd/Hiu+UKRrE35I4OkTOkOI1x6oL8cE7gTFh3JkL6lzbcVId82Xin38Ks11Nc9fOE9t8OP5L0
151tJWZjb7gOGT8LyVkwKeNnK8F3eVYBAvARLHkMSx/DshVbz76xrrKxgs6wJR8ND6nqpS1BAmZR
tKRexXgR1cf4Ue/VbkMmq6ZJrUl38YPUTwalmRfRLl1UenEGat1z+BHaT83hzWGE//uNq39QSwME
CgAAAAAAlVXlPAAAAAAAAAAAAAAAAAsAHABUaHVtYm5haWxzL1VUCQADeZsxTHmbMUx1eAsAAQT0
AQAABPQBAABQSwMEFAAAAAgA0luOOI/junJCDwAAjxAAABgAHABUaHVtYm5haWxzL3RodW1ibmFp
bC5wbmdVVAkAAzwkA0g8JANIdXgLAAEE9AEAAAT0AQAAtVh5NNTt2/9anlCPlBJZe7JFhIw1Ywk9
TdmirDFkxJCRZcg2tDDGMrKHNIksyRIyzIiyxljCaIpsMXaDkWYwzDvPe95/3/c85/zO+8/33Od7
rvuc+7o/n+tzXZ8bY2P1t+Bh8cMAAAhCrprZAgAXZwm85z/E+dZw/3USAI7ZQ8xMbj54vlbgkiBp
Ltrtp40JHH3gdEJ+0rz5jnBR13Xy57ub8QmPeJt54zr28o+dTTz3KqCL73jzX4TwjU98N2yOge5+
eCSecke6+SyEbAYSnxALQWYc7NbrbY2SQxghg30KmsEoI8cIIoGwfBNJaa0YvIm0xL76zBVrqbAO
5wHcBx8CgNghLkD9T27AXYwX+KjOD8R6HAOA9jMAEG8CAH8+/rcBFhR+49e2mDvK5u1cLzWk/gLM
xfEI+AawVqTE9fRKGVtISIjoRcpu2twMxEftBIUNghlyM/v7+7Shv2WQOlNRwdTv3rgUOWzNnc7D
eFhPeiIuvmRJ5x64agbFAh13bArymhsPZEyEyQoDgj4EvpqIbV8dXV3H02JiCQ2IibwnE2FT0T2/
M6wN0xQbiKu1JDNA+KHje99bwqFD5qIYgFx8XDtoB8rYj39xquRH+ELBAF72VOzdpEPu8SV/GItX
3Zs9tDQZsaIaNhMnak9cjI6ORiwMFGhtjrSBBPW0tbXtKTVaUcvk8qzmGtAl4KWG6h5QnB/Tr0Vp
xKF2y8fMcZfCENsixg+YM+iJtrgjGWyqyBnYp0d/INY/MEJnzsrDZ5wCTS9tnABAJUpcGxKUn51J
5zeh247OotFLw6+zmGqaKWlpaeSuZbQfS70qHh0KGHuOHZwHrN1iaYWyqEO8sWCe/xijfxXwbJj7
5fUHPMYLtiGYlpIIIF/bP8jU1JTWrzP1Nl4q9JvHqCdBjb3yVejxgEmVwIpeqHTwfB/GkM3amhtb
NMUvIpW3niKuAfXvSL+T1Fru80neN65ld0kEkLXoFGgM+PvBZrdMP+wPd2E4q6269SAPNK/l91Vu
b7gxFfzbkQPw1K0QeVoRVl9599eI9cSvpZHrSeEj4Ni3Nfcjl8tLFVyOC7w4ADo3JIJYMfYP6Oyu
FInzHs2v6sk8sZNAK9Z1g0uMT8bY+5EQJ00mJ7WRIUMAWBS8z81tZdw+zQs6avVxgFfxTKwH549Y
SVFBLBOIOBIFhH7ic5eMAgoEONHt0zwcPv+9BwAvdT4K8OtyCdo5A/fFuH4dbeb+H7LDub41hwfP
pXKdo++1ykwe7Rg/3YpvkFeNdYPN9+We2LrlHvNnrPbilVY2Lore08NeeB6M3Zt+LJSuvuNkM6D3
M0E2fQvZmnDVgHNtiM2fnV6WfLGxw9zHtL/cRbEpD02d4FQNbe35bDUo7ZSq81yJVYHz1yhgY1Ff
5mMOFJV7r3V3+bxO5O9V8L3+jnecsoLBKC+seCLyOditn9L/80aM6cHeeisVc1vqRdlm+759+Pao
QwarhX0QGdYjn0NOzrAijeMt21E7VFE8YkKfU0nPnLO/uLEfjL2rYRUVFdE4gIW0t7cj2PsM67bL
EiCpmD689Pg7TzSRRlgRNroOhUJ9Wwr9PRyfXXFmbfx4u7kApwYwkHFgUzsw8EGPFdjLw8ODGG/w
T5OmaPRGYDvAzOnH5/WznQaG9mVTDYZ7HO9O5DCNDphFTN5lREtT8AKhoorQOxEyYonUwRWX7ywe
NIdvCY9fuXJFzgDD+JmkRnAJ+PD+VSDy+ftU6S3SmdUfTZp5ILita5Rqa7GW/1j9tWYZyKxQqkxw
n4bW0p5nyygCXtMtFXZbbrywsDBPP+uB/ryL/0iwPOLHdAadCWfC/U6TsSou9QcnIS6Mbd2zX/ZB
8gB8NhMfMOVWp7Yo5mUS8HEjXolQPa45aFBHH76u9rorx/OgqVYGm/qbMaoAth5OjDtHT93x2rgX
6NQBlxd0JUzVimhs+CePHFmDqK5ztmXce22y1915oX8K359aQR0CsbrWU2SqK9BnZwdNJV4Sc21k
Yqe2R0s7v31zLN6jH10P07s0AxdmqDs3mIhHq9hCCsc8Tnw0G8oEOia6ffZ3t0fDPtUcUdvbDaFD
BUOMsDmrfjl2T2lepQnGl15umup8yQR8ZkXphI3T1YfLBWUriUeBE9cp+3/yA2s8/1f9jwzDXl7U
bGepDZYU5GhlVA+pNIamSPflLzmQ5/2qP2hHcFQRVmtZAHYK1c5bYgwasXVzo8g+9u65QXHULVJR
N0y70CipxkdaFBoVCLp48efBPmOKfDprBvUi2tpoPySEpIovlj6ytUmyJR/CwUdKzDnMOB8tA8mz
Bm9nkmrrRuDlfOoBk83LgrIigbSmBQJHGZzvJt0KeMMhtzmfVMjTvTX8VLrHR3HUT4yiwsJue2Kp
Ne5Chs+yctABayet+Hz3nMHOuYTBh3zSYvsc7otA/NrjBWnNWwPB661sVDrla6VLUbdMzI9OF/yd
zkTfsXRssZKMImawGlKd3N/ifxGyhJZBlZXnpxodNO5yZdZgWRto6Ygy39mdBZwMZr/NLXKNeuHD
L1vGmF/1KLkTolhwU7UIKv2d4T/8q9Qi96xdRob6d6PdxaIKqpSkZPIkam8tT7+RRSdVhPuK144S
RoNW8VMorYUeSkE9y+/rW0jB5VWKp1sujXO63Pe5edVkXIBDtmCEIMiSPYaRoosoKxGTL6dIBMpB
a9Mjrz4NZoFONiEiWssLNpsKT7uauLhxDeivvIWptBqU/2pjmn3SYVnpzjxZHA9orZS2Gx4QAbmC
refFmYu1nsJ/twjL6SROTqcH6HZ8G4QaWX9924/KrW6m986d8A4UejnQUq9Pb98HjaJyW5pD15wZ
n2VTydSFnCG8aj0Eg4vX8nCqk+Pg+ItgEMcUUArWf7PjK71HIwa4TvQkfz6m6u0MLskqv9FCHKju
eKVgTSOwWF359lbvPSljCZBnfT6jkeeiPpdJPZoMQEmFrhhkZ5fy6LTFLPvGdR52C0NNPn/E6d06
mkZGk7iYgyVE48whfBC119eRFVL9I3L9g9ZCMXXqaP4sLcbcjYs3fJdKTUPjEKy5JCs9aia5nHzN
Jx8KdVrosG6y2GMZZA0NDV2m9hCwMiimx9Lug+mHfOKhlSOrwwbtftPjp75+h8bsi2wzGIrgU2zp
XiLWGR1erVxgZa3HRbzxUOK40c6YW8mVbdDxcG3Tb2Uc7T3Z033bLHM8uvL1JqkhN4T4fvOIqoCx
U7d93URx7YKX3sPeOUWXHruSiyTBUtzv3qDbXnEigT+1lKF5gjPh5ivnqhGJ2edTmJDTSyumP7YH
LCO7sVKQ/a7tdHHrBnh4C4cgELUAXPRv+C5h3jX17IBpiqah4YvdpUaVcdK3xksyMEuB2PVi4cez
DKUcqo3dQiYbUbpw3WSUSyvmgDUHHgybjhtQgvh1JZ/W2iQrzV16ShaQY1pJTh1X8FiOsi19vS45
Ui1OEk14vQnemcvoadGVfP+jdhRUt6xIwpRql5laDA4xvNcirkXtfH0U5Wnjz78CDRB7p0ojUHTv
tLPokrC8eN1GetU7SYqfLC4i535gXiLOZHk2P6Cl/HwproEpOGe3aVtV/8DDiRyoNEOMOtqDtPV2
FZ6O7v7CljbPXUlz0Dn48IqJrKbcsPGuH5NDzkNF2Ya/RrYL2ojXefOEAeRnyYjFQlpRquG1C43H
9Mm1kt6FdX9j4Y5jGkaqIhlflDLnjQ8LSHnABy72W8epoHTeBh6KxxLVLVujwq2aa1C1qzlM+i35
KSUqpZU9YfhOVSWDtqdzK/uxxQj/Fn/1O6hD3sE2Bbp+SsVxepIz+PURsoJf99FPutXCIL4G5S49
aipJU1t0MHv4G5XnXS9nClU9iM+LSnJLbSYI+GO2ylGyGiFtb2SH1PAxLTGDML24sBx+i7IT6qTv
8ziZsNKLI72XstE41IsTiv1NZVipJoCu6DpQH2IKaulQWu7wm0u+KfFPT9GR/kvuvIGKZ/ZjFYui
Ia0BgrYDNBqJaElZJQWf2uVWQEZ/+kM0YRpU37S4fe6ngUWdZjN2+WpfHaQn+P760YhegW/KXuLG
k02Ga/fLOicmq5AXLU/2G0qFoR/X5T8f+kfRFcyAOeIWfbIPrUEynchC6/u9EDgObNoztrebxhFE
/7Pp6/AyIt3Gu9/uGjDc5boQyBHVrdwphUJar2nBPu4VKmEYHOvgFt7pGtgp0sMuLQjNi+QYjYo9
tGTQVbrm9Hx/foZn2ATSQfhC9/Yziwdpt4Ln8DY7enPM2dTqeMjYh4RMKOkrlpAx9YVaWsQpZr1y
ox1MleiK1Uplln4GQWCF1LZvn5ntxvUL7+HkjeA0NK1umH55zOx1KqlPv5yZq+mtIGr5dMpEvk+8
klzw9qkKz6sn9cjDkVnN+hwlYLzhPuNTIOAR7dQ8VetzDbhMjVp91/2GfZ06GdgtRasbNAzm2Irb
vlEkmzCqkq03x16MUr+U1/2snxA4J+rOGbR77JLfL5FM/vtyUoa5beb3Oe3kxbn8qEHbkkneZZpR
45RC9jD3dGrnb+9XKViswgn7eDR65W6lE5rw2XvguV5alfAaGu3JbppKvDFPIXBSgQHxujAY/ZEK
Bqyufmyp8wtGmDMup+kGdOwpr1CCC8+YOWAm6+F2IRxrQDGARfVOBlQ4VIceEb1gQSNOuLyiFVJ7
jCV0EBYNF71dn6sT56scUtFZ1rPop+5Hr2ip+KOiv+8J0pVUgRSCKHG+S/OM7MvVM8pMIRoe8zoT
2Ph1aFH1mSD//z7Xl6iSHuMf4ezTQpKqGkawow/Fs6oLtoEaRZ9yvmNVbzMali2/po9GGKi6upp0
GSkGIEVd7X9AAz9DqZ3QGXOJhgCiinihTPLVpIqlZWWzurv9QQeJ5jO207Vvno4l6horjqQDsMrL
siDnWn2DC8yKticLc5U04a4bw9nlVnWKicvIqw4+myOCgzcioztCU9bVXP/4gqlHep2Jycpolq8Y
wR6ZeaPuRLrtXUmzhXkICVLqqUq4hpsNAUesAxdvEYYFvg2Muvr8cM+t4jhmH6H/X+/zHwUsnu3q
7i7qyVB0CGm1LTfTyFJ1aTDTvNt3tQ3W6hPBDxiLanj1noRPIyYIyKG3TnXKGQqW19oGdWeTfSVF
4s4u/QUArk+078FZtQXgyFDhFo/2+DbraBle4GWSEzHU304Q+q9Os2VkV4veL76pW/PPewPE3Mqs
6rL7o/8CUEsDBAoAAAAAAJVV5TwAAAAAAAAAAAAAAAAQABwAQ29uZmlndXJhdGlvbnMyL1VUCQAD
eZsxTHmbMUx1eAsAAQT0AQAABPQBAABQSwMECgAAAAAAlVXlPAAAAAAAAAAAAAAAABwAHABDb25m
aWd1cmF0aW9uczIvYWNjZWxlcmF0b3IvVVQJAAN5mzFMeZsxTHV4CwABBPQBAAAE9AEAAFBLAwQK
AAAAAADSW444AAAAAAAAAAAAAAAAJwAcAENvbmZpZ3VyYXRpb25zMi9hY2NlbGVyYXRvci9jdXJy
ZW50LnhtbFVUCQADPCQDSDwkA0h1eAsAAQT0AQAABPQBAABQSwMECgAAAAAA0luOOAAAAAAAAAAA
AAAAABwAHABDb25maWd1cmF0aW9uczIvcHJvZ3Jlc3NiYXIvVVQJAAM8JANIPCQDSHV4CwABBPQB
AAAE9AEAAFBLAwQKAAAAAADSW444AAAAAAAAAAAAAAAAGAAcAENvbmZpZ3VyYXRpb25zMi9mbG9h
dGVyL1VUCQADPCQDSDwkA0h1eAsAAQT0AQAABPQBAABQSwMECgAAAAAA0luOOAAAAAAAAAAAAAAA
ABoAHABDb25maWd1cmF0aW9uczIvcG9wdXBtZW51L1VUCQADPCQDSDwkA0h1eAsAAQT0AQAABPQB
AABQSwMECgAAAAAA0luOOAAAAAAAAAAAAAAAABgAHABDb25maWd1cmF0aW9uczIvbWVudWJhci9V
VAkAAzwkA0g8JANIdXgLAAEE9AEAAAT0AQAAUEsDBAoAAAAAANJbjjgAAAAAAAAAAAAAAAAYABwA
Q29uZmlndXJhdGlvbnMyL3Rvb2xiYXIvVVQJAAM8JANIPCQDSHV4CwABBPQBAAAE9AEAAFBLAwQK
AAAAAACVVeU8AAAAAAAAAAAAAAAAFwAcAENvbmZpZ3VyYXRpb25zMi9pbWFnZXMvVVQJAAN5mzFM
eZsxTHV4CwABBPQBAAAE9AEAAFBLAwQKAAAAAADSW444AAAAAAAAAAAAAAAAHwAcAENvbmZpZ3Vy
YXRpb25zMi9pbWFnZXMvQml0bWFwcy9VVAkAAzwkA0g8JANIdXgLAAEE9AEAAAT0AQAAUEsDBAoA
AAAAANJbjjgAAAAAAAAAAAAAAAAaABwAQ29uZmlndXJhdGlvbnMyL3N0YXR1c2Jhci9VVAkAAzwk
A0g8JANIdXgLAAEE9AEAAAT0AQAAUEsDBBQAAAAIANJbjjhwNpakxgUAAGUgAAAMABwAc2V0dGlu
Z3MueG1sVVQJAAM8JANIPCQDSHV4CwABBPQBAAAE9AEAAM1aSXPiOBS+z69IcZ1KY0g6M1AJXQZC
OgmEHRJuwn6AgyypJJmlf/082ZBOs3SlHVQ1ubiwpLd/b5Fz/W0V0rMFSBVwdpPJfXEyZ8A87gds
epPp92rn/2a+lf665pNJ4EHR514UAtPnCrTGLeoMjzNVTJZvMpFkRU5UoIqMhKCK2ityAWx7rPh+
dzFmlrxZ0YDNbzIzrUUxm10ul1+WF1+4nGZzhUIhG69ut3qcTYLpR1klu9+z4py/MTIHEmFiZnnH
ucwmvzNnGyHfmSaXKW3tsFW/dL1hkDzOAw2hsc3Z5rUR7SaDLIuLAJZvVsscOvfrmQHudyWQHheZ
7YpeC1yhnE0zJec6u0/i42TrMNE26A4DX88OEs7nr/KFzxH/DsF0dljsXD7nXKWj3p3xZQd8jDGo
zAibgtrhMOacAmGZkpYRpONxz8qSLxU0uA/HqE8IVR8mfx4ScR4wH1bg7xvrcIDFZxAacv0xk9/7
O6IqLQNjbBPL+fSuPBp7l1//+Sc92WNIyTn5q1xasioYUzg9WGKyJ4d2TLVzFCMGgantG9Muc615
eBSAl+mIjzgPe0hqN9pmXOrU1jBEa8TTXB4mm3NSEr5XXaDgafBrEl+kQPOBl++heWx5g/bDG7Cy
fLwWJS8iSTRWtj8pSi3Ev24RAbImedgFHe1GcLps9isX109M25xMULaj2fgTHGI9DKpbxEq6j+l3
wPQOsJtETyZ/jyAirQjPNcZ3jctdpJ9C9Dq2cn3hE32oFm6x+QmrVDiiiFNbTgV5MOqJgqvLcsCI
XGdKg+n3v7NOIRyF9HXUF9SvzleNH+7/9q+dG7T7P0RrFI7ES37wOHpuf230GssDW4eu23DZz981
tzbq43M+brtuNywEnbua89J1VxVWXpPhV2f0fF/o5UchGT7Rbjhwmr3bHw1XLLyQ0jHrzPw7uhi/
5trjiwfHC2vCd8Xr+KIsRs+NQqMt9MvzA0M685ehyHkXHT1Cmq2eqxqV5bJedR9f8gWFZ+ej57JD
qs76yRVLL7+ifjhQuO/dutGtX0De7f5tpzrOG9lmty/PnVmFlmej/KBHngVtzvHs9w71pq6bsj5M
GZeA4FQu88uUsLlCKNVNd0moF9E46drKCbeh0GtLSS1RrBZIpY0291iOmL5nT1E4hrgvPL1O2I9L
rOEgKzwUEpSZxE7eKcSG66ICFB742Ea5SfKdKZk9CAVGwGlmgL2q2UJrdQXxUJcej8tDBaiNVIi8
blfoFkZoHYj/G+en57EZyTbVCB3/COvfpd3sB8QWgq77CmSVaHJ6ibtkAYPkuqDJKpQrG242kNBu
pHkSVHa0uKN8TGh1c5ViSra1LsxljOs4Jx7vB1ICu86J38Hw5IzuRc4pPEED4aq3FOUyD6UFfyhx
q6zRddzD2rBbLQDq2wyBSiQl+t2gxEDMPLs8kt6ee5L7gA8g7149YrZwVUBYK2KejmxVQZcGU4ap
r6u5aHEV/I5NegPFubXDl48ANgagGBg1snrany//xOR1MoY3EFsQs8qfuK4QoSMJVUmWzfGrajLT
fdiyCcjjJik146vZB9CF3EXKjIG1wYw9IHuw0kNJhLDU13CmAv8nmyZD22G42ug9FDSpv7FeA9BW
nq3ZCEu1ElirbXk/vtmyObHfoStmVuzzFlimc960aPZ6wDg9bbi4uquxY7DQA1LKl7HZsGuuEOYB
PT2TOMV0QIE2erlaSzNM4chR4/ZS2kOkdDBZG1epYaBnDcIiQssSyNwCSzMpdsCMhQvo8WSqshiA
mGgQotvSaCcMN9nG6GK+yJkWkqx5tKvWNnHPENfnON1xGhmZTtKz4MAYEuYfGBZRtNQdZZJMbU68
senKlHhzE+FWCgJbYSR4MALJcYizNr9t7oqnUEZlppJH7OhN6Mk61Y3XU/dMB/KnJcOYfim+dD85
+WakzdxchwXQFzMpqM/E69FvDdm9L+HZY/8jUPoPUEsDBAoAAAAAAJVV5TwAAAAAAAAAAAAAAAAJ
ABwATUVUQS1JTkYvVVQJAAN5mzFMeZsxTHV4CwABBPQBAAAE9AEAAFBLAwQUAAAACADSW4443XLo
nVQBAACtBwAAFQAcAE1FVEEtSU5GL21hbmlmZXN0LnhtbFVUCQADPCQDSDwkA0h1eAsAAQT0AQAA
BPQBAAC1lU1uwyAQRvc9hcXepu2qsuJEaqWeID3ABI8dJBgQDFF8+9pR89M2qprI7EAa3vuwgVms
9tYUOwxRO2rEU/UoCiTlWk19Iz7W7+WLWC0fFhZIdxi5Pg6KcR3F07QRKVDtIOpYE1iMNavaeaTW
qWSRuP5eX0+m5UNxBnfaYDkWhqE4y7DVUPLgsRHgvdEKeMwpd9RWB1d1qagY9yzOq7tkTOmBt42Q
Qt4km0hyTHydphzx5JsKbuNebmKjCcJw3WBgcIlLBWqLs0aPPBiMdyT/G2uR4Q7oddh6m+yGQJso
+TisPPVzw2fhvTnqdJ/C4Z/GZwlKocFx6oJUKYT7zsntriwCH1wfMMYNZBJ0xgFjrvTOJz8+DCkP
fiJn+zDsnMkG1xZ6jPJVswWf6R58ObKwIwOnew7lzx4SE02Xs0q6UpeO/8WY92FG5rHnnp7mhfzV
cpefUEsBAh4DCgAAAAAA0luOOF7GMgwnAAAAJwAAAAgAGAAAAAAAAQAAAKSBAAAAAG1pbWV0eXBl
<value> <string encoding="base64">UEsDBAoAAAAAANJbjjhexjIMJwAAACcAAAAIABwAbWltZXR5cGVVVAkAAzwkA0j1ek9PdXgLAAEE
9AEAAAT0AQAAYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0UEsDBAoAAAAA
AJVV5TwAAAAAAAAAAAAAAAAJABwATUVUQS1JTkYvVVQJAAN5mzFM9XpPT3V4CwABBPQBAAAE9AEA
AFBLAwQUAAAACADSW4443XLonVQBAACtBwAAFQAcAE1FVEEtSU5GL21hbmlmZXN0LnhtbFVUCQAD
PCQDSPV6T091eAsAAQT0AQAABPQBAAC1lU1uwyAQRvc9hcXepu2qsuJEaqWeID3ABI8dJBgQDFF8
+9pR89M2qprI7EAa3vuwgVms9tYUOwxRO2rEU/UoCiTlWk19Iz7W7+WLWC0fFhZIdxi5Pg6KcR3F
07QRKVDtIOpYE1iMNavaeaTWqWSRuP5eX0+m5UNxBnfaYDkWhqE4y7DVUPLgsRHgvdEKeMwpd9RW
B1d1qagY9yzOq7tkTOmBt42QQt4km0hyTHydphzx5JsKbuNebmKjCcJw3WBgcIlLBWqLs0aPPBiM
dyT/G2uR4Q7oddh6m+yGQJso+TisPPVzw2fhvTnqdJ/C4Z/GZwlKocFx6oJUKYT7zsntriwCH1wf
MMYNZBJ0xgFjrvTOJz8+DCkPfiJn+zDsnMkG1xZ6jPJVswWf6R58ObKwIwOnew7lzx4SE02Xs0q6
UpeO/8WY92FG5rHnnp7mhfzVcpefUEsDBAoAAAAAAJVV5TwAAAAAAAAAAAAAAAAQABwAQ29uZmln
dXJhdGlvbnMyL1VUCQADeZsxTPV6T091eAsAAQT0AQAABPQBAABQSwMECgAAAAAA0luOOAAAAAAA
AAAAAAAAABoAHABDb25maWd1cmF0aW9uczIvcG9wdXBtZW51L1VUCQADPCQDSPV6T091eAsAAQT0
AQAABPQBAABQSwMECgAAAAAA0luOOAAAAAAAAAAAAAAAABoAHABDb25maWd1cmF0aW9uczIvc3Rh
dHVzYmFyL1VUCQADPCQDSPV6T091eAsAAQT0AQAABPQBAABQSwMECgAAAAAAlVXlPAAAAAAAAAAA
AAAAABwAHABDb25maWd1cmF0aW9uczIvYWNjZWxlcmF0b3IvVVQJAAN5mzFM9XpPT3V4CwABBPQB
AAAE9AEAAFBLAwQKAAAAAADSW444AAAAAAAAAAAAAAAAJwAcAENvbmZpZ3VyYXRpb25zMi9hY2Nl
bGVyYXRvci9jdXJyZW50LnhtbFVUCQADPCQDSPV6T091eAsAAQT0AQAABPQBAABQSwMECgAAAAAA
0luOOAAAAAAAAAAAAAAAABwAHABDb25maWd1cmF0aW9uczIvcHJvZ3Jlc3NiYXIvVVQJAAM8JANI
9XpPT3V4CwABBPQBAAAE9AEAAFBLAwQKAAAAAADSW444AAAAAAAAAAAAAAAAGAAcAENvbmZpZ3Vy
YXRpb25zMi9mbG9hdGVyL1VUCQADPCQDSPV6T091eAsAAQT0AQAABPQBAABQSwMECgAAAAAAlVXl
PAAAAAAAAAAAAAAAABcAHABDb25maWd1cmF0aW9uczIvaW1hZ2VzL1VUCQADeZsxTPV6T091eAsA
AQT0AQAABPQBAABQSwMECgAAAAAA0luOOAAAAAAAAAAAAAAAAB8AHABDb25maWd1cmF0aW9uczIv
aW1hZ2VzL0JpdG1hcHMvVVQJAAM8JANI9XpPT3V4CwABBPQBAAAE9AEAAFBLAwQKAAAAAADSW444
AAAAAAAAAAAAAAAAGAAcAENvbmZpZ3VyYXRpb25zMi9tZW51YmFyL1VUCQADPCQDSPV6T091eAsA
AQT0AQAABPQBAABQSwMECgAAAAAA0luOOAAAAAAAAAAAAAAAABgAHABDb25maWd1cmF0aW9uczIv
dG9vbGJhci9VVAkAAzwkA0j1ek9PdXgLAAEE9AEAAAT0AQAAUEsDBBQAAAAIANJbjjhgjk+xZQcA
AMctAAALABwAY29udGVudC54bWxVVAkAAzwkA0j1ek9PdXgLAAEE9AEAAAT0AQAA7Vrbjts2EH3v
VxAOULRFZVnyXmw36yDZIEiBpAiabdG3gJZom1lKVEnKl35N3vsJfcuXdUhKsmzLWsnrJFs0WcS7
JGc4h4ejmSGtx09WEUMLIiTl8VXH6/Y6iMQBD2k8u+r8dvPCGXSejL95zKdTGpBRyIM0IrFyAh4r
+I1AO5YjO3rVSUU84lhSOYpxRORIBSOekDjXGpWlR8aW7ZFqzRqrG+GytiIr1VRZy27p4klzy0a4
rB0KvGyqrGWB1LL6lDdVXknmTDmwHiVY0R0UK0bj26vOXKlk5LrL5bK77He5mLnecDh0zWgBOCjk
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
AAgA0luOOLgQ7sm0AQAABAQAAAgAGAAAAAAAAQAAAKSBmA0AAG1ldGEueG1sVVQFAAM8JANIdXgL
AAEE9AEAAAT0AQAAUEsBAh4DFAAAAAgA73VhQFBC19cmDAAA7WEAAAoAGAAAAAAAAQAAAKSBjg8A
AHN0eWxlcy54bWxVVAUAA/F9T091eAsAAQT0AQAABPQBAABQSwECHgMUAAAACADSW444cDaWpMYF
AABlIAAADAAYAAAAAAABAAAApIH4GwAAc2V0dGluZ3MueG1sVVQFAAM8JANIdXgLAAEE9AEAAAT0
AQAAUEsBAh4DCgAAAAAAlVXlPAAAAAAAAAAAAAAAAAsAGAAAAAAAAAAQAO1BBCIAAFRodW1ibmFp
bHMvVVQFAAN5mzFMdXgLAAEE9AEAAAT0AQAAUEsBAh4DFAAAAAgA0luOOI/junJCDwAAjxAAABgA
GAAAAAAAAAAAAKSBhRYAAFRodW1ibmFpbHMvdGh1bWJuYWlsLnBuZ1VUBQADPCQDSHV4CwABBPQB
AAAE9AEAAFBLAQIeAwoAAAAAAJVV5TwAAAAAAAAAAAAAAAAQABgAAAAAAAAAEADtQRkmAABDb25m
aWd1cmF0aW9uczIvVVQFAAN5mzFMdXgLAAEE9AEAAAT0AQAAUEsBAh4DCgAAAAAAlVXlPAAAAAAA
AAAAAAAAABwAGAAAAAAAAAAQAO1BYyYAAENvbmZpZ3VyYXRpb25zMi9hY2NlbGVyYXRvci9VVAUA
A3mbMUx1eAsAAQT0AQAABPQBAABQSwECHgMKAAAAAADSW444AAAAAAAAAAAAAAAAJwAYAAAAAAAA
AAAApIG5JgAAQ29uZmlndXJhdGlvbnMyL2FjY2VsZXJhdG9yL2N1cnJlbnQueG1sVVQFAAM8JANI
dXgLAAEE9AEAAAT0AQAAUEsBAh4DCgAAAAAA0luOOAAAAAAAAAAAAAAAABwAGAAAAAAAAAAQAO1B
GicAAENvbmZpZ3VyYXRpb25zMi9wcm9ncmVzc2Jhci9VVAUAAzwkA0h1eAsAAQT0AQAABPQBAABQ
SwECHgMKAAAAAADSW444AAAAAAAAAAAAAAAAGAAYAAAAAAAAABAA7UFwJwAAQ29uZmlndXJhdGlv
bnMyL2Zsb2F0ZXIvVVQFAAM8JANIdXgLAAEE9AEAAAT0AQAAUEsBAh4DCgAAAAAA0luOOAAAAAAA
AAAAAAAAABoAGAAAAAAAAAAQAO1BwicAAENvbmZpZ3VyYXRpb25zMi9wb3B1cG1lbnUvVVQFAAM8
JANIdXgLAAEE9AEAAAT0AQAAUEsBAh4DCgAAAAAA0luOOAAAAAAAAAAAAAAAABgAGAAAAAAAAAAQ
AO1BFigAAENvbmZpZ3VyYXRpb25zMi9tZW51YmFyL1VUBQADPCQDSHV4CwABBPQBAAAE9AEAAFBL
AQIeAwoAAAAAANJbjjgAAAAAAAAAAAAAAAAYABgAAAAAAAAAEADtQWgoAABDb25maWd1cmF0aW9u
czIvdG9vbGJhci9VVAUAAzwkA0h1eAsAAQT0AQAABPQBAABQSwECHgMKAAAAAACVVeU8AAAAAAAA
AAAAAAAAFwAYAAAAAAAAABAA7UG6KAAAQ29uZmlndXJhdGlvbnMyL2ltYWdlcy9VVAUAA3mbMUx1
eAsAAQT0AQAABPQBAABQSwECHgMKAAAAAADSW444AAAAAAAAAAAAAAAAHwAYAAAAAAAAABAA7UEL
KQAAQ29uZmlndXJhdGlvbnMyL2ltYWdlcy9CaXRtYXBzL1VUBQADPCQDSHV4CwABBPQBAAAE9AEA
AFBLAQIeAwoAAAAAANJbjjgAAAAAAAAAAAAAAAAaABgAAAAAAAAAEADtQWQpAABDb25maWd1cmF0
aW9uczIvc3RhdHVzYmFyL1VUBQADPCQDSHV4CwABBPQBAAAE9AEAAFBLAQIeAxQAAAAIANJbjjhw
NpakxgUAAGUgAAAMABgAAAAAAAEAAACkgbgpAABzZXR0aW5ncy54bWxVVAUAAzwkA0h1eAsAAQT0
AQAABPQBAABQSwECHgMKAAAAAACVVeU8AAAAAAAAAAAAAAAACQAYAAAAAAAAABAA7UHELwAATUVU
QS1JTkYvVVQFAAN5mzFMdXgLAAEE9AEAAAT0AQAAUEsBAh4DFAAAAAgA0luOON1y6J1UAQAArQcA
ABUAGAAAAAAAAQAAAKSBBzAAAE1FVEEtSU5GL21hbmlmZXN0LnhtbFVUBQADPCQDSHV4CwABBPQB
AAAE9AEAAFBLBQYAAAAAFQAVAF0HAACqMQAAAAA=</string> </value>
GAAAAAAAAAAAAKSBSSIAAFRodW1ibmFpbHMvdGh1bWJuYWlsLnBuZ1VUBQADPCQDSHV4CwABBPQB
AAAE9AEAAFBLAQIeAwoAAAAAANJbjjh+HBYjEgAAABIAAAAMABgAAAAAAAAAAACkgd0xAABsYXlv
dXQtY2FjaGVVVAUAAzwkA0h1eAsAAQT0AQAABPQBAABQSwUGAAAAABUAFQBdBwAANTIAAAAA</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
......@@ -284,7 +286,7 @@ AAAE9AEAAFBLBQYAAAAAFQAVAF0HAACqMQAAAAA=</string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>14621</int> </value>
<value> <int>14760</int> </value>
</item>
<item>
<key> <string>title</string> </key>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="OOoTemplate" module="Products.ERP5OOo.OOoTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>OLE_documents_zipstring</string> </key>
<value> <string encoding="base64">UEsDBBQAAAAIAK9tYUAJB63McQEAAIcIAAAVAAAATUVUQS1JTkYvbWFuaWZlc3QueG1stZbBTsMw
DIbvPEWVK2oDO6Fq3SSQeILxAF7qdpFSJ0qcaX172oltBQZiY7klkfN/v93EzXy560y2RR+0pUo8
Fg8iQ1K21tRW4m31mj+J5eJu3gHpBgOXh0E27KNwnFYieiotBB1Kgg5Dyaq0Dqm2KnZIXH6OL0fS
4i47CTfaYD4E+j47wbDWkHPvsBLgnNEKePApt1QXe1YxRRSMOxan3ZOsZpPlJhqTO+BNJaSQF3kY
AXJI5LyassSjjTHgMt1pbmtN4PvzBAO9jZwrUBv8B8LXzf2PWRzWiiHqpuUJ3BsMV1Tnd9kOGa4Q
PS+22sRuTaBNkHwYFo7aW4vfRO/FUqPb6PcfNcwkKIUGh6n1UkXvrzuLl7OSAJy3rccQ1pAI0BgL
jKncWxfd0JNiGnm21jggNGnkR+PJ6j56TyauO2gxyGfNHbhE1+yDkUQ7MHC85sx//TuGSOPdL6Iu
1JTxNxu37fvIPLwmjp1/Lr89JhbvUEsBAhQDFAAAAAgAr21hQAkHrcxxAQAAhwgAABUAAAAAAAAA
AAAAAIABAAAAAE1FVEEtSU5GL21hbmlmZXN0LnhtbFBLBQYAAAAAAQABAEMAAACkAQAAAAA=</string> </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_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<?xml version=\'1.0\' encoding=\'utf-8\'?>\n
<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:ooo="http://openoffice.org/2004/office" xmlns:metal="http://xml.zope.org/namespaces/metal" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:i18n="http://xml.zope.org/namespaces/i18n" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:tal="http://xml.zope.org/namespaces/tal" office:version="1.2" tal:attributes="dummy python:request.RESPONSE.setHeader(\'Content-Type\', \'text/html;; charset=utf-8\')">\n
<office:meta i18n:domain="ui" tal:define="user context/ERP5Site_getAuthenticatedMemberPersonValue;\n
username python:(user is None) and context.getPortalObject().portal_membership.getAuthenticatedMember() or user.getTitle()">\n
<meta:generator>ERP5</meta:generator>\n
<meta:creation-date tal:content="python:modules[\'DateTime\'].DateTime().ISO8601()">2007-07-04T15:43:50</meta:creation-date>\n
<meta:initial-creator tal:content="username"/>\n
<dc:date>2012-03-01T13:44:50</dc:date>\n
<meta:editing-cycles>1</meta:editing-cycles>\n
<meta:editing-duration>PT16H44M42S</meta:editing-duration>\n
<dc:title tal:content="context/title_or_id" i18n:translate=""/>\n
<dc:creator tal:content="username"/>\n
<meta:document-statistic meta:table-count="2" meta:image-count="0" meta:object-count="0" meta:page-count="2" meta:paragraph-count="33" meta:word-count="141" meta:character-count="1187"/>\n
<meta:user-defined meta:name="Info 1"/>\n
<meta:user-defined meta:name="Info 2"/>\n
<meta:user-defined meta:name="Info 3"/>\n
<meta:user-defined meta:name="Info 4"/>\n
</office:meta>\n
</office:document-meta>
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/xml</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>filename</string> </key>
<value> <string>object/aq_parent/title_or_id</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Base_getODTMetaStyleSheet</string> </value>
</item>
<item>
<key> <string>ooo_script_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>ooo_stylesheet</string> </key>
<value> <string>Base_getODTStyleSheet</string> </value>
</item>
<item>
<key> <string>ooo_xml_file_id</string> </key>
<value> <string>meta.xml</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -8,7 +8,7 @@
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts78319162.03</string> </value>
<value> <string>ts30609831.57</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
......@@ -21,261 +21,263 @@
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">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
AAAAAAAAAAAAHAAcAENvbmZpZ3VyYXRpb25zMi9hY2NlbGVyYXRvci9VVAkAA5OZMUyTmTFMdXgL
AAEE9AEAAAT0AQAAUEsDBAoAAAAAAI9bjjgAAAAAAAAAAAAAAAAnABwAQ29uZmlndXJhdGlvbnMy
L2FjY2VsZXJhdG9yL2N1cnJlbnQueG1sVVQJAAO+IwNIviMDSHV4CwABBPQBAAAE9AEAAFBLAwQK
AAAAAACPW444AAAAAAAAAAAAAAAAHAAcAENvbmZpZ3VyYXRpb25zMi9wcm9ncmVzc2Jhci9VVAkA
A74jA0i+IwNIdXgLAAEE9AEAAAT0AQAAUEsDBAoAAAAAAI9bjjgAAAAAAAAAAAAAAAAYABwAQ29u
ZmlndXJhdGlvbnMyL2Zsb2F0ZXIvVVQJAAO+IwNIviMDSHV4CwABBPQBAAAE9AEAAFBLAwQKAAAA
AACPW444AAAAAAAAAAAAAAAAGgAcAENvbmZpZ3VyYXRpb25zMi9wb3B1cG1lbnUvVVQJAAO+IwNI
viMDSHV4CwABBPQBAAAE9AEAAFBLAwQKAAAAAACPW444AAAAAAAAAAAAAAAAGAAcAENvbmZpZ3Vy
YXRpb25zMi9tZW51YmFyL1VUCQADviMDSL4jA0h1eAsAAQT0AQAABPQBAABQSwMECgAAAAAAj1uO
OAAAAAAAAAAAAAAAABgAHABDb25maWd1cmF0aW9uczIvdG9vbGJhci9VVAkAA74jA0i+IwNIdXgL
AAEE9AEAAAT0AQAAUEsDBAoAAAAAAJJU5TwAAAAAAAAAAAAAAAAXABwAQ29uZmlndXJhdGlvbnMy
L2ltYWdlcy9VVAkAA5OZMUyTmTFMdXgLAAEE9AEAAAT0AQAAUEsDBAoAAAAAAI9bjjgAAAAAAAAA
AAAAAAAfABwAQ29uZmlndXJhdGlvbnMyL2ltYWdlcy9CaXRtYXBzL1VUCQADviMDSL4jA0h1eAsA
AQT0AQAABPQBAABQSwMECgAAAAAAj1uOOAAAAAAAAAAAAAAAABoAHABDb25maWd1cmF0aW9uczIv
c3RhdHVzYmFyL1VUCQADviMDSL4jA0h1eAsAAQT0AQAABPQBAABQSwMEFAAAAAgAj1uOOBuc7/TW
BAAAcx4AAAwAHABzZXR0aW5ncy54bWxVVAkAA74jA0i+IwNIdXgLAAEE9AEAAAT0AQAAtVldc9o6
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</string> </value>
9AEAAAT0AQAAYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0UEsDBAoAAAAA
ABl2YUAAAAAAAAAAAAAAAAAJABwATUVUQS1JTkYvVVQJAANBfk9PmX5PT3V4CwABBPQBAAAE9AEA
AFBLAwQUAAAACACPW4443XLonVQBAACtBwAAFQAcAE1FVEEtSU5GL21hbmlmZXN0LnhtbFVUCQAD
viMDSL4jA0h1eAsAAQT0AQAABPQBAAC1lU1uwyAQRvc9hcXepu2qsuJEaqWeID3ABI8dJBgQDFF8
+9pR89M2qprI7EAa3vuwgVms9tYUOwxRO2rEU/UoCiTlWk19Iz7W7+WLWC0fFhZIdxi5Pg6KcR3F
07QRKVDtIOpYE1iMNavaeaTWqWSRuP5eX0+m5UNxBnfaYDkWhqE4y7DVUPLgsRHgvdEKeMwpd9RW
B1d1qagY9yzOq7tkTOmBt42QQt4km0hyTHydphzx5JsKbuNebmKjCcJw3WBgcIlLBWqLs0aPPBiM
dyT/G2uR4Q7oddh6m+yGQJso+TisPPVzw2fhvTnqdJ/C4Z/GZwlKocFx6oJUKYT7zsntriwCH1wf
MMYNZBJ0xgFjrvTOJz8+DCkPfiJn+zDsnMkG1xZ6jPJVswWf6R58ObKwIwOnew7lzx4SE02Xs0q6
UpeO/8WY92FG5rHnnp7mhfzVcpefUEsDBAoAAAAAAJVV5TwAAAAAAAAAAAAAAAAQABwAQ29uZmln
dXJhdGlvbnMyL1VUCQADeZsxTPV6T091eAsAAQT0AQAABPQBAABQSwMECgAAAAAA0luOOAAAAAAA
AAAAAAAAABoAHABDb25maWd1cmF0aW9uczIvcG9wdXBtZW51L1VUCQADPCQDSPV6T091eAsAAQT0
AQAABPQBAABQSwMECgAAAAAA0luOOAAAAAAAAAAAAAAAABoAHABDb25maWd1cmF0aW9uczIvc3Rh
dHVzYmFyL1VUCQADPCQDSPV6T091eAsAAQT0AQAABPQBAABQSwMECgAAAAAAGXZhQAAAAAAAAAAA
AAAAABwAHABDb25maWd1cmF0aW9uczIvYWNjZWxlcmF0b3IvVVQJAANBfk9PmX5PT3V4CwABBPQB
AAAE9AEAAFBLAwQKAAAAAACPW444AAAAAAAAAAAAAAAAJwAcAENvbmZpZ3VyYXRpb25zMi9hY2Nl
bGVyYXRvci9jdXJyZW50LnhtbFVUCQADviMDSL4jA0h1eAsAAQT0AQAABPQBAABQSwMECgAAAAAA
0luOOAAAAAAAAAAAAAAAABwAHABDb25maWd1cmF0aW9uczIvcHJvZ3Jlc3NiYXIvVVQJAAM8JANI
9XpPT3V4CwABBPQBAAAE9AEAAFBLAwQKAAAAAADSW444AAAAAAAAAAAAAAAAGAAcAENvbmZpZ3Vy
YXRpb25zMi9mbG9hdGVyL1VUCQADPCQDSPV6T091eAsAAQT0AQAABPQBAABQSwMECgAAAAAAlVXl
PAAAAAAAAAAAAAAAABcAHABDb25maWd1cmF0aW9uczIvaW1hZ2VzL1VUCQADeZsxTPV6T091eAsA
AQT0AQAABPQBAABQSwMECgAAAAAA0luOOAAAAAAAAAAAAAAAAB8AHABDb25maWd1cmF0aW9uczIv
aW1hZ2VzL0JpdG1hcHMvVVQJAAM8JANI9XpPT3V4CwABBPQBAAAE9AEAAFBLAwQKAAAAAADSW444
AAAAAAAAAAAAAAAAGAAcAENvbmZpZ3VyYXRpb25zMi9tZW51YmFyL1VUCQADPCQDSPV6T091eAsA
AQT0AQAABPQBAABQSwMECgAAAAAA0luOOAAAAAAAAAAAAAAAABgAHABDb25maWd1cmF0aW9uczIv
dG9vbGJhci9VVAkAAzwkA0j1ek9PdXgLAAEE9AEAAAT0AQAAUEsDBBQAAAAIAI9bjjhZidW2fgcA
ALouAAALABwAY29udGVudC54bWxVVAkAA74jA0i+IwNIdXgLAAEE9AEAAAT0AQAA7VpRb9s2EH7f
ryBcYNiGybJkJ7G9xsXaouiAtijWbNhbQUu0zZYSNZKK7f2avu8n7K2/bEdSkmVbViTbbTOsDeqE
5B3v48fT3ZHyw0eriKFbIiTl8XXH6/Y6iMQBD2k8v+78dvPMGXYeTb55yGczGpBxyIM0IrFyAh4r
+I1AO5ZjO3rdSUU85lhSOY5xRORYBWOekDjXGpelx8aW7ZFqzRqrG+GytiIr1VRZy27p4mlzy0a4
rB0KvGyqrGWB1LL6jDdVXknmzDiwHiVY0R0UK0bj99edhVLJ2HWXy2V32e9yMXe90WjkmtECcFDI
JalgRioMXMKINiZdr+u5uWxEFG6KT8uWIcVpNCWiMTVY4b1dlbfzxh5xOz9ATbDAorFvGOHt7e2H
zbe3H5Z1I6wWB/Zk6L6EQfPx8sXGF0TU1JaW3aIqEDRpvEwrXdbnnBdQtYJ9QA1cv9cbuLZdkl7W
ii8FVUSUxINa8QCzoGCcR1WkgZzngoRDbrWbFo6viZAHFHzXDhfCMjw49R8vX7wJFiTCG2F6t7BD
Y6lwvGFmRgnLHaZYaLYXZJUQQfU2YAac6MXwcAZTAFU8GZcmsDuTKZcis9eZ5GHYbqF0i44ZhGNn
hgPihCRgcvLQPk5FN7JtDeW684pG01SilzzmCPwPnp5cMKJsfd35Fidc/rQlZbs6aGtaLe3MSQzr
gh2OeEhEvCWSUBXAQzCjKxJ23HpQT8k7/HuK3uBYHoRUkmkASPAIV+K5xYLqSN4CkncmTHJJpTwT
Jv9cmNZSkeguUO4hT8v6caqAb0UDx8xTuKD53FrCjZ4Sp15hMcNusmsn1zMtJ4FngwhFicyElzTU
cdUbdvsXfgCobU7GjM7hIYmwmNO4IDjCa2cqCH7vTIlaEhI7gi8hXswwk3ZRJYx3A+7+XAkZUg9L
o3gHue3cX0DWn61j1PWuLoOCfEGYsy3Q968ur344AuvjL4N1eAzWn6t9wQkIY7tQoasMdMbHUxy8
nwuexqHGw6HqeEAu9U9HjyY4tLVsr9sbXWn4WoULCFYOIzNlBnrgSkhyRkP0oGf+lcUEnS9ALuYx
KXcrnjRQnnKldFKrFswXV1oDjfCcbDisXHZ7bziJ4RoODy3sCCfw/7NOsNt5T/b8JELPR9mdckdw
2Na9qqlokWwGg4wCm2IyChxA5w+3Rzar7l8cm6CUSNvnJ/8T5KfLrjcY1cV83xsdE/P9T5CfAKs/
qMc6HPaOwfrkE2DtXXn1WC+HR+R9//y5dNrXP19z6cYbvgzDX3rZp+Xne5WBj4gA92TxXzSXvt5z
/AQLPBc4WeQD0KFvh03DsVrPONe3Qfm0hcoOR/pi1smyJInDfMJ3qVR0tnYk8AdTLmFBrc9vr/c2
rwluQRIulKOoKhUKTdBLhYVqhj/zG628PZ85ZUv6F+DwBonaOpzrbgdLiuNDg/oulJFVNtzc2/cD
GyDrNITZq4NZObiB2WsFc/9ZbAJzSewjNOUs3MJiB3Koh4YLsEZgD6x78BokG5jycF00NEZkXkWk
kjiSzwAxhGxbC+b1X+lyT0R6HSIqTT/jQVpcZWSDScLWTkgkuKGjr+NKnmaMSfJnSuLN1c1+pwUV
UpkwKE15qhiNCcSoW8IgfHTssN2GXxgD3xYAhsfVFlpMdpNfM502i/aDUyd5at/TmC0+zFpiVQ4H
jHIrmygBXXMYMJ/ZwWD3Tsz2luctxrbUs3qxRh6OA25blce7KnAe2ZkD0lutUW9zd41ZShy1TogO
ikKTepg9c/XtMDwlkFBLjQ137i6MdsAenwQse9+ZQ8uateDcWh7bE+vfV2JPAvaV2K/E/g+JLfcc
NvhG4TjEIiySWj1bYC02tfZ+XykFNVlcMdMz3SsRhayxIMi+TbJj9m+kj5wJWlJgfEpQlmFJiBh9
DyluQWUX3cAnmvIVgl96FmMJGeZ/NB14ym/J9qjB3rVgTa42pZE7eZJ97wSEbWlNSdhFd6+uYHLy
Co4jY/Tx748fjD+g5wTrw5n8+OHjPwiESkOZMTNiyzkE5wREoRKkAST2NYLyLdTFl/U2ib6DjlkK
XOi+zYn8+24bhDL7S6JAwn+GpdR1rOARIiK5eLtaqIi9tYUx1HcckRWVCi2IAD614fy9NFoStMC3
xPCaVUUJjvdtQ0kNPjNPRV6qaLGJXbOZUZ9SwZY+4JhvirRZj3tn2ePXlD1+y7LHb1/2+Ptlz90q
T3ZVFuBH+qDOl/KkuOkfXUIx8AJ4zDIkncl2+0zR897De/L54dWH93N6xpGJK1+L/qKVgzdrs+3z
ecbReVWHnp0QdAZP+PxsfcpE30pm8hyygclWWJO0IHkC09Hcnk2RJIE+vMvxTjBf7M+bJcm3fu+t
l52Wdw7RXk7ozm2GO/nVWntjraEbfSJGL7QW8jLLi0aW/WrLkCFqTPitTPSrTfRrTfRbmRhUmxjU
mhi0MnFRbeKi1sRFKxOX1SYua01ctjJxVW3iqtbEVSsTw2oTw1oTw1YmRtUmRrUmRq1MeL0Dj2Sv
1ojX27FyZMx57Z866pauRTcte2Oat3a/eT75F1BLAwQUAAAACACPW444c10jtLUBAAAFBAAACAAc
AG1ldGEueG1sVVQJAAO+IwNIviMDSHV4CwABBPQBAAAE9AEAAI2TS4+bMBSF9/0VyJotGPNIwQJG
6qJqF9VUamZdeWyHeAZsZJuS/vsaiBGJuojExud+597jB9Xzpe+CP1wboWQNUBSDgEuqmJBtDV6P
X8MCPDefKnU6CcoxU3TsubRhzy0JnFUavJZqMGqJFTHCYEl6brClWA1cegve03gZtCqXTsiPGpyt
HTCE0zRFUxop3UJUliVcqh5ldOOGUXcLxSjkHZ8nGIgiBD07J3w01MzuIymltkEzvoZexiVxnMF1
DYLrZnbHh0Djz2pu2lRL65ZLrolVunlx3V523aLs6VWKS3Cr/x60eufUwkMR9yh5+jKKjoVlUhwq
eNdwHUA1J9ZFCBmxvHEZP4fzlx1RjrMU5/HVd8tVjGJvKBwdImdIcVLgpKygL64TOBPWvYmQ/qUd
N03pO97ptzAb9TKu+XlEh29p/iPNf935NmR1jobrkPGTkJwFizLfWw2+y5MKEICPYMljWPoYlm3Y
9viNdZGNFXSFLXnreEjVKG0NErCKoiftJsZXUb3Nt3qvDjsy2TRNWk2Gsy+kvjIpzbyI8vSq0rMz
UOv24UvosCSHN68R/u8/bv4BUEsDBBQAAAAIAEN2YUB4EbHM5QwAAMFqAAAKABwAc3R5bGVzLnht
bFVUCQADjn5PT1F+T091eAsAAQT0AQAABPQBAADtXVmP4zYSfs+vMBws8iTb8tE+MD15yGJ2F8gs
Bju9+xrQEm0rI4kCRbXt+fUpkqJEna3L3W7MJkBmrCqSxfqqisUzH369eO7oGdPQIf7j2JzMxiPs
W8R2/OPj+L9Pn4zN+NePP30gh4Nj4Z1NrMjDPjNCdnVxOILCfriTxMdxRP0dQaET7nzk4XDHrB0J
sK8K7XTunWhKfhGVNS0umPXSDF9Y08KcN1MW7Zu3LJj10jZF56aFOS/oVC9+IE0LX0LXOBDDIl6A
mJOT4uI6/rfH8YmxYDedns/nyXkxIfQ4Nbfb7VRQE4GthC+IqCu4bGuKXcwbC6fmxJwqXg8z1FQ+
zquL5EfeHtPGqkEMFVANn4+NLeL5WKEa64RoY9sQzFl4F3ZzeBe2XtZD7FSByWb6GYjiP59/T22B
ek3b4rwZVVnUCRp3U3Lr5Qkhiai8gHRQIe58NltO5W+N+1zLfqYOw1Rjt2rZLeRaicaJV6Y04DOn
wGHgZ26m41EcQrSwZY4//jQaqTB1IBCiDsjCho0tN+QkIEobS2gj+Zvr6nH8b8fbR+HoM/HJCEAB
k1KMnuNeH8e/ZBh+GY8ylXEe44h9TB3orEdsTP0MS+AwC+zh4FywPZ42kOfv+E/0v2j0FflhmTQa
uV4WSjxUKsozog6PZ22lMXuJE56dMBxSnHk/ca4hw97L8nyYVhuWsjk5Imakt/EBRW48WKpGYiGP
FAUnxxrLAkmR+LMRUPAVyhwYY/nIsQtPyCZnA9oKMTMuj+PZZGGB5CXEa47IIKwZMApgIwyQBWOQ
cSLU+Q49QS5nnW9qmZ+5GFaRFQJL01oLrCV1xtpxoR9nh50MOaofkBsmNpEoKUAUCUXpapIkXsxA
ESO8KTAVx8ZEsiI3OCHVjpBmTzGCgTNkYAtMUXj04iJyJ34cu9Rg+4x9OL6NeVDlSZDeJyWrEjUR
FrIGMAAShGkvptXdyPVUdKfQySjEoCSfYy5ksohLYLRlNIIofSBS0ND5Dh0w5wET31zkHyN0hE8H
Kj5YJPIZBWP59J9MB3k5A0YR5KvSscriChTt++WiSHFViuITHxer5CO0iy8VlSbUkmoTmqhYBYhp
iY819r5E9Xn/KzUt0NbpGpywDxkG8Q0X2RDgDSEeFwrswHOSLjW0wCDyLRbJCs9AhnEPdAGG9LKJ
KosybAf81eeNmJP5ykzdKGvEASi44EMdLEtDtGSQ6mt3vEplQbkAf1PjFO0mJlbf8lA2rFsUVpEj
b2YUe8jxDZ6WKlubF5iCKDzlWAZxEDHXyTuH+KgbjZwR7Qnl/sCNDSI6mIyLgpBb8nCSGJScy6UB
Qs5Vv2EcGIwcMTvxOQh3xeaS6BJII/8KLmYjao8rQ4iC2kVhCPKCY+WymGKlT8D0x3z2x57YV1Ue
vDlw0dVIOUY6ubJd+JDMyI1ymXXRGgY8D1GIRqBHiEwzHlnSb3vCGE/UYew250DKKbeJUv+Jka3F
uj5983kg0xnKdNtXAZPlfFGvhMTyRPbii+wFuWd0DRuG3vK4ahYC6zKNPB3jZmkNrSMgr6U78hwg
s9zyY46R2cU6cobV2jiURHGAIBET47ALM0+IbWYhBuWgzGFlrv6W4nfGzvEEVrEnrl0NjiiiEWUp
RS4vm4JSUTphEOX7oTavR21+f6jNW6K2jFMX+Y2XgCwOpjUwW2sJZt7TZJ9iqqqyM9jltSf06vqH
NIdFvTks7s8cFn3MoRvu/XC9AWrLetSW94fash1qGz3y9vHhTS6iDurC5ZW/sgev6m1hdX+2sOph
C51A7wXqDSB7qIfs4f4ge2gH2bo1ZOs+kFUUHhKydT1k6/uDbP2jQ7aph2xzf5BtfnTItvWQbe8P
su2PDpk5e2EZYHZ/oIFMPyJqvzsh6wJGjbJdXmXz9bHC+n9H2+PnE9r3o2JZFcSlyb6Oh0KGqcH3
XOJSjRYcFYmXig/PiIVrbjV7ZH07UhL5drofg/xQCqjalXvAan9BnHOSFYldyjDZZBAUYcuqnVnN
nmVKKdCUyCR0mDyEsZw8rB/STSh2DaD3FsgI2p62qWm+nSz07SxZE+VGrFekQC+RNm5B05zjgW6H
24ItWuNssupjj9w/XHxg1cEQ05HO0Mpw+YY1LTXbJsb5Y1vTy7bSBu1PhLAbRJ97hXE7MYdB0dwA
ivN7QfGJ7z1yl/0N4oA8k1bmtoJtlOd5VdBfHj96mkWPGNtJ47nMrkzhPXYXK4EdcKwHSOQhEdc5
+vxwB6JJVP8zCplzuBp8/xyEOhNqJ3C0yxF+xg/839vmB9NXGXL7L8jLwblFQj1UyvwbCnj8eivX
z25ipzvVVZvY7ezipY3tiiNBZWvydTl+cYW8evm9+phOzQJ7B1yzGdWbwloFqTl76AxpG1X8CzRx
GVATjqhv+ISmxTGMIaaZTw5zcRe1vLR08TXaM73uWG3WCUINmGSHESjOx14eglo6/KZ9oN702jmt
KN07iudV/korUXcIad3ZiCpM256C6HTMoQOqBwe7tuGiPXZvlyp2ztGT/A2oAbLlhTwV7OWRy+xp
1kyGd18pW4dA0Hk5RaJqSUzeHFfdJyFlGNwh8xFvGB3yVdk9uRinzkul9zyPqjgjzL8TGpxgaszT
Bf7z7IBHJb+q7wCYqSaGWcC9L/fddp5wZc+5JxdUbnDMvY1Z8wunBupi1noNt1uSeQOI1zeNI0Lh
+/tV+P274O3xefOh8j59Ih/2fEI95N4AC+wF7ArRMCCUGZ1nG2Xlc7OJ3oNu/mZE+QKEui/xCkud
9+7KN8hxjxHtZB9DxdPOeW3HCZqRndC26XLJNG8g269eedO2G9uu19+HsYqvEV/jlJec+ceqm73D
Ttl6I52b+t0Ua/Ntgtx92MiAFsBPFr24uceZ+uztvXhzUElRkc2cmOe2tB1+YKNgPFRmEjPddhzx
okD8UVbNbcHIEDsH0qqOlej3BpvVnfVmvrXe+mZjT/3X6V8h2brH3Hs+f8Ulwy8U8zeVEGPY5m7y
pJ8AzbiIzjnS2d7GTWrTkPRmdpM4XvoMUm7xf1Zz9Tj/gFIVRrV3j1+oJN0TmHXck+uIWG4XP5Mw
t7nqz/+UQani+Iq69D/Kcg102LbD9fd4AJsst9u3DsafKPyR10jzZ5TEljDyrROhhjw8pmvz+bi7
KMHh79eCWylFzGcVo1KRok5d5L9rpy5mmUdb+CswXCjXTacq8fY2JwbYNhKZw+LLM5xHZL8korkk
Uz24ZASE2wEJCgTKz7WnxpBLotO3nWQN2Rxdo1ZVk9nEmpir3D7WbDKbwdA2Conr2KOfZ+KfLkby
Dwl8IX25sZ3oCNpXECXd0nwbAHsCV6d6oSB1IUIj5EnirkT8pIs8j6EeUUg1Y8jRVJuTJdDwlYq4
jjw6HvdHsSqQvoA0myw2ZmbIm1ZJ007c+fsSd/G+xF2+L3FX70vch/cl7vp9ibt5X+Ju35e46b2/
t5U3Ry+MhD5hOOSjtliUF9vVo4RgxJn3gRDGf5d1yYyPK8q3N5+RG2Fx4kB8VAVDI70KId7z08vI
FIM/+MfrU+/9JmN4czGxb1dJ6ZRLmWmDKyiVpaytyrOa8u1SbaZRrae4klQf8laUoDm+RcVb1jxU
Z59uFRVmXmzlcxOoGdK/lFa3StDpQar4vs89bas8FTpSNjF84SBgfiJfO8vvMnsX6+IwNQbHy0gf
eIVXuDTWnMSCcnZs/hj33IRJhpqKCcIpXlaabyfrSpuLmwCTZgaky4Avit2QUJj/O6xkyrdZr8qn
fOZkbi7LJpbmZLFalU4soch2VfW0Z+59WhkrDA9dkr7x6UkhZiacIVY3rWIlwUTM3KStqbhp7Pm6
l+AvbHAlPOjAN1rKWJDNLVj6pX6HESYdCTrpnWW1IZadBeqLi2Vw52xCHl3LDjx54kH4ZmZBDOZ0
SnNgLkuzdBGgdiWkMMmXAa3QizIBNXjay87bhoZ14LuJrtaay+UuCleCS0yQoZo/8I8zb3vGi40L
yE9jljQWxysC4qxY0nZS0VUVEBWBNZH0ndGUj8euj9MPU/1njsWDuHQaqrIrRrSmrqRsqoisgpjj
lSpoOSuo4EQiGjaXe1evBMePIC1oInoqYmZULRtD1fga77yWDK7anmymw/mVcd3TK6O/dAjNT0Qm
EKh05Zo5ia8NxSmv2N/JXCKVVTSvc/p/1puwFrGKU3sLRoyH+bgGtGycLY2wDeT4YpbJECC/yPqU
ZVXMjg8DNnINSEwRIzR76Xma1Nemla7lSqQTUvETtjw0qQGdn9bUy/JA/XG2nM7W/H/FsY5bzxS9
017xqFXZKx5dzdVuuch3iJcaoENxcEH7qf7XLzzoDddV7fhIXAa72GIitj6OrYjKHVxTuUfKfjPI
qjxRdzr1TRsJMuNKbuxIvuf+B1Qff/oLUEsDBBQAAAAIAI9bjjgbnO/01gQAAHMeAAAMABwAc2V0
dGluZ3MueG1sVVQJAAO+IwNIviMDSHV4CwABBPQBAAAE9AEAALVZXXPaOhB9v78i43fCR3qTwCR0
DCm9aUhggDRz+ybsBXQjaz2SHODfd2Wb3BRwhxr0xGDLu6vVnrNn7ZvPq0icvYHSHOWtVz+veWcg
Awy5nN96z5Ne5dr73P7rBmczHkArxCCJQJqKBmNoiT6jx6VuZbdvvUTJFjLNdUuyCHTLBC2MQW4e
a31c3UqdZVdWgsvXW29hTNyqVpfL5fny4hzVvFpvNpvV9O5maYByxueHuspWf3SFiO+O7ANZMKmz
Rq32qZr9987yID+kpu61N3nYbL99kzvIfircQGRzc5ZftqHdeuSy9cZh+Z41b99zvz7zndb7CtgE
Y29zx6xjuiNQzr12/frq4qa6a+Vwy32YmQLTjeMsv/DQLPaabjQuG83jjP8DfL4oCLxRr12Wsz5e
4HIEIRUadBdMzkFveZgiCmDSaxuVQDkf97KjcKnhEUMosj5jQh9svhKxuMJlCCsId5O1v8rSZwgf
an1Yyu/DrVC1Udwm2xb0EXVSXH31y6u/y9stxEu9Wb8qa1bzqQAXeEkNu4B4anhUiJRG47pWGoep
7Q4ag9H+uC+aVyVT/QMxmpCp7ZpboDJeu1beaI8FBtV+s/VaScP3egwCAgNhT9GFEpjec/EjQItu
55jfv4CazOFtKbuQKGaoyf1JfxoSC5ghi0H1FEZjMMl2EZfjtF+9+GGW2sFsRrEVcvIRHtJ9WGgP
mRPST+2PwMoI2KbSk8U/YYRIJ8GjofruodpG+ilC75Oqe45DZvZ1xA02j8hKFwlFKFwdKqi9Vc80
XH7qcMnU2qsewCFziQroALUvw45g8lVTuvtWhzARJCIFpqu6+RLFZu2o8LON9bjSxu7mnihLmnv5
lERTSBXE6fdEyk0Rz4PqYhQr0Fa4n7ybpIkb0wYEfMOpC0rKMGFpdQJRTBVwGrW4w6xDytY4ZgHt
ZYIphXRBuIAL+fqyomORTPSBhb85/PI+cvGeMxYd/AOsj4SmH8di/axB3THDTh/xmL3B92y6HMiu
QO3imC0kjJ8YzIrKzS6+CpwycZdP3pbWnXVqX0o0KScW94ySwO4jC0dUnijFTuWc4iQEj339TlG+
DChaCF8ULVU9sU51jou89TiI0GUJdBOl6NwtSizE7O8YExXsHE82OR7SFPUDsYWvOZPDRAYmcdUF
fcHnkqhvbDAeoua/c1M+QSm3jnD5AOBCJKfA6LHV0+4M8icp77MpvIPYQZh3+ISmy2KTKLhTbDmY
/qcH0qoPVzkBdVRKiPqt8gU1gZV5USyOHckWlJqH/7sZSEoNVaMLaaFhIMI8OY9AqQhcyWPqxDqm
VuzqcNOXGy6Htq90FAsn+XkvLCuMcwXmTuKl7JN78c3YkCBwIPGEwGWaNhLFXSYDEKd3kjLICDQY
uy/fGGVnJZooeuiOsb4l2vDZ2h6VfuFm8chkwkRHAXt14NIOgiOwU98bTDAbmhwWIBENQXTT+dyU
Yc42di/2+4xViGyNyfa2Nu+VF4TrCg1vKBIb00kkCc2DEZPhnlmQQistGDMydTnQpqnrCBa82gp3
0hDkiiohgB+gkGY0Z+NZ/rpwDh3azFxhIgtfhp1MiOanXrr/7+FPR4mxcih973py84PE2LG4D28g
/rWDgD6mXgtfN1d3votWi74Yt38CUEsDBAoAAAAAABl2YUAAAAAAAAAAAAAAAAALABwAVGh1bWJu
YWlscy9VVAkAA0F+T0+Zfk9PdXgLAAEE9AEAAAT0AQAAUEsDBBQAAAAIAI9bjjh1de8dGw8AAEUR
AAAYABwAVGh1bWJuYWlscy90aHVtYm5haWwucG5nVVQJAAO+IwNIviMDSHV4CwABBPQBAAAE9AEA
AO1YeTgUXqPWSkmSfY8plMakkiwzk2WSdZIiJqZihAn5MZisyS+KrCGyZNeVfZkxQpbIUophrNmN
ZQwzwzDGmG/u/f+797n3+b7/7nme85zzPuecf8553/e857y+bWUidFzmOB8fn5DpLeM7vLaOj+8A
n8BRXm8LoD3OxydywtTY4G5g5loW4rO8jVQXCQK+p0osdLgTIIK7aW6dW5Jp5qgcccbHPXr4XGLg
Gcu/BUT+EF8KGEQyW19GJiTcevB84uWdPGGxxOFCoNl5Q52199wNy+YmZsbolZptnaB1b25YdzfF
vmY4Y6uMlaM1lVHn+uOhGCzulPkJfwJfZK3sm4z3L/NUFj+WvNZR83h88v8Cl6StSR51akW2VzM3
QY5KK8oRKUCYRYa1KfFU6p5Tc3ADotrltay8PMY8TQODm/RHnIZcvTpPbeGGBqzVkYYVwvZoAj5f
q1G9E3mwGA9d4W6bmHtx5vg4xdPMN+Lqyo5xCO+mlLZ1mws4orpduV97e3vdeZsiY0T9U9M2Kn4u
zoU9E6WYh8KQM31PGmdF76fYOZm2SVy8z2dNWpgRlGxBIWO0xVQm/AYtrdIAEph7g7fibeyJpwD1
Vd8n0BVNi1ZQziYRLCUl9UzPn1ISo3g8Wf/Z0/F6T6HHKRumySpD9DbDhTMc816I1oNYc1AT0XOs
9jxG2LU/O4ugOP0naB3DIPfDQ9s5G+na3tnjWHJWVkullZq+ejny5O4kx/ycNbr14gN8pQS3sMuQ
2jr7LQZNQ7oqAAAAgwMrz16vd6U8a5ErCHNnDwrXJxQM+n0DgA3HjsEs+wysRX1vEzvkxLQ0+f+1
0NqBuE8YiIyVhKXVlhLveI9Utmb5dEpTh+yQlu3MyYCpzfeUOdxTjH7TFPwrM9QJfRuk4MCMOYWS
GTTLkzjgzF4uziHwpoFHw1gLabLG7AFz0LlxZBhH663JblpO6O75Md7GrjRL+XxXisJXNO9ecLzN
/XpIOBayuwTQxqzcVWWjflo3FP48zsCZKIb4VYsbbKPVLVcm+bkIyO42CRkG7MqkxCPMLXvaId0j
RjnP5XLhljkZUpEQLU2YHZsY6XeFohb3nxXMqwCKWnX+rRNtccq8wQCxZRu7KMjWf7+qEDbZLy8/
IPuLc+a/6GwW83yu821i6M3J1+TBJfGuZncEXbmpfXN5sGvR8y9OrIPxGIW1aW0in7IHWS5Inmhc
b/4AqbmZwdmegpqC2LBI7nwynPC3oGQqUHdZ1CxmTNIxkTwYmvH5yTDscJPn+DWc3/KdgO5zaXge
o1KAkOVDz38W71Nq+pPWxurQk5/ta3QfZFQ5MxZ/dEc7FDOWYGYxDnsy0gPvyOVhnC1Jh58Z0CKk
f2yLNOjLhuFfzd7NrM4szLD9Mqvw4n4DZvQspUsxzA89/NmHpw4DxB59ZS7XuZmDwHlh7BwxKQie
CMc9cZNJl1pO2GMip8Zx3gFpyFDsgLe0lJRAtvY72ygW1iXLvBi8+N45Dw5hdbAwItUtk6S6rLse
n749jJ1zbvQYuqCN6hHbHvdugf01oViTphkmvWoiMwqdDj8k17mLUqS1sKl6OyNC4rpBzKcBrUck
8ejyhqJcw8TibEQ4R8d38SxKVlraIPD0evqTbB/eGYdYzipnx8sxyPKUkSpAxqVHhkbBVYpYy2z9
Bol1k1O1YXvTL4XLe6egiqFGkVEKz90iPSfOV5TadDDIxrccOt7CMkfyGRv9R2QL5HTBh9eQdgew
vc1y67aP7E7XaTvlPOXuzMUTQs4479y4MFQRmceuBs9Einr0Q9hPL0HilmtHSAu0XlVUkt939X3y
m01Nz5cXYnqVf6qLgLw4I4bThFifUCF3Q4aiQhClykUwcQWvlpYtmhtv+qDKhP4rwpahLrOi5OfI
edZyYvL7+13ibr06d8jHBJQUstOx608S4m7Rsj4uXL7xnQZ1enxXr8e4h2eItDJ1B5yX4wqCRT3E
LBT/7fWa0kVLCmmYPDAxRoCNrIVHUOVSjIERR7FUo1cfTn8ZUbJ7kXBhc4JnCRn/XNIm5qIZPX0j
A97WUQOoH5Xoa3pljvkJ2Csbb1JZ1b0aMdnPV85bSHmowW11Pvz4ymavt8ir3Nb6UGbXqTEF8YyX
a78IBTdWLOn81Gf0ubm4dHAY/dDW9Lj9/fuxyjjinf70K6plh8WoPIb754Tt67j6FIrXuXQnufWD
t/2g3D3fy8YaMyZyPsZJtsIN8CxdcdEXMicy9QK8IoN9Tixv5IW7xoOZ0aE8p5ChO7SENuktvLOZ
4NEoKxPdmwr8bSQMnp8t47m5fYY23SA78JGSFTINmX55tfpR3hBuKhRhp60YvGGweycSaaK7lx1E
Ne0NXPlUfFMNOuJenDUx+iRnzSmY9o1AuE7/DrCRrQOPkFBJe6pWmdHulaZSTGHdpY/EPzMzM0tb
JGRF6UvffrA2uHj+RRmxbKRqtbxxuLAdYfGY+x/3SiMG72HAi6N3U+rxiqrZgY8vBxwCHtdIhc83
2QTuzESZIENZqOcWAoVHkioK2idOCzkJJ28Gyh4VB0gKkbeiprZYNalG6g6ungwWOSfnS7YEjii0
IDiUeJKENWNp3vPfWhmiNrOp6Os59dZpP0DJp3CZmEf2NZLxelT8K9+I7mRV55Pw5046XRqNlIHb
Ae8/LQH8X61outio1+pv1UoTMGKAWW7Pq02s760/wYwffYzlwBbufmMjvUd9kndPDlTixcsnQ9lr
GHdDsrdJujMp/+j2oY8pPXomCrpTeFSsa997kcx69R3U4FZKikpzPioVnmMzQsCglYKqy+eC1pu0
vUS/WGDEyvo2BjvK7MY9PWzhzj4/aQVJJYohm7+XCKvlgjLUADG/JwVuqoaiU8y8nXo7QlIiGRCv
P1vdY0q5Y0oM+INVdYo67i/X4S1YJl2sJzKSJ3ru8XAWyO9s5YODuiA8p6sttnL+oO4LPnc/hYPB
zsuXzHTmau9ZnAVboLYBpXN8Zwj44rcS9UpZEgWS2U8LATTuwQVTKSfxZKuP3HmjngMF7SV6BqlO
+me+lZxdaaQSSpc9wcSqUz6sLDWgbssgg5wTdtPIyKg7X2nyWN9qtKmqWr+lsv+nsx4iZqMH/r5Q
ViRAsCBcnGpSIyiG2/3+Re+9w499Cctt/ZD3UhXb9eZdrpv8wpBlqhCM/lY2/ZYCf2fA7MQXnPdU
NtH7Aag1cKT+r4Cysx7g6+GGHRove2W+Jxgc4OxZD+RP06fDqBMNr9Xz+a32DA7Ma/FSAiFwtneV
f3u2Mf8pvU+sGacQfuO9/mZaqzJYTUnd4pGWmsAKL7lYMVEfTehp+jUrqugN4x6+D8Pljh8WVRdS
9ERm5zjwzwBl1MYq8nB49Y/3mvlefH1QpFPLzfG0gLc+D8qFUpOMrh8t3bgot0X7Jom8OvKJ0Vnj
eRHG32hIC0YYHvoLe/d03c5vNqUmPojL2RYFhEMTErUezkBdujSPCcoPYruh0eu9/AOF6GiBfT5j
twTDn6rczCq2jbYAIFTvqOjDxpziepD3RkeF4imZwBvBXxIr2KcJ+1tjcmofvJMpaNqTLXRtCJZ0
n5QyH/ZN3A6PZSw2aP8JBNR4JUpcm6PWuf3Oe6j/iZQAhH06uxIDah4BczYHMaDpV99l5n8BjYLV
+/oA6/cVdmcXvgkKrURDT4pMCx/SDW3+qmiRsBNt47dhTILb2lt34vMnLvF/UwWFqDmVwPMYbrYB
9qTFvBiNHrB3Db3OOaEoqSQniNrgR8uo/p50/7J95/boG/3em3ITN432c/bKZ5NTtuBG7iFjmgki
U+Wjo0ADd+uYZ9OS33DFLgetl2yFpzZ4rggncX9BZLzUx+R/i6bX9pPZQWP8qdVLx8C7e5cbjkUr
lgyiuQ5Rq6Y3g8VGPtzdXTR3e3gkObbSDfAVGNQacWQZEv5R5AkvRnTX3ny7rv23SgffmnP3Yelp
dlFSsT5JAnq7mNT8bPgs4Hijtru7oajGLs+/UiNZq4Qmxk+91qsbmltAHW9lm8Rnp+iTHPLYGfTj
u38izw8E1V7N/WSmfs0pGTXSxgQVuS6LHOTF7zhNUS0JZufHvwuHoGWjLj8Uct+VGMHBxx/6nLdB
X9uKBMPYpoWIFZ4gIKPZPGEuexu0XfMcm/f6Qus8S2nlV/TjaT7gUnNOueiSL6LmkyPTb0DC8VVe
7XzotHGXQtDnRja1cTBZw+nLdemvUnJyFnG51Yd1XuGKaCwBC49EcrsdMgRzelgo5Um3ShV5Lh5q
1U6nNGy0CSZjQc1A7algXw/n4grrKw7MT6g8QUhsjdckgeAs5fKbuwDd2zCqnue74Lq7udxNnru0
evLMZ0Slqyjl2OjBP89XgQG9QFwBOz8/3wBx6cYQkHk1v7qEwx3mVwg8wxGa88bPvCrABM6+Vo2g
NYqgry2kwCnSMjJmLbiRNaZYYW1J7841Pty0V/GU58qRoJ7b7lT++txzpZsmmjTq9NevN0jxlJT0
KRGOycwCvlOGowmXL0/bbAutQAJuL3YjeiF1wW4DXDWV40qicRuPTHcwUfL+9+llLU5ZanfZ8VaS
AFizV/2j9lduLRxmb+bTYYpMtwmMVmX9ID9F3Y7AYpC1g9ur7EouegDNWL8K9tWKIFQ7K9BxgixN
Zav4Ue72Hr1cBLK1FyYnSiosA7zZU3PdHhQmldDND1ouvRa5kDt7y93O5quK7zXBQmNL3IvNg5mF
Jv8sz3uy4h6rL315M4/ww074XySP9zX7Dx9yVwTWEffv4HNRHjXNa6pdRqyepApdyz90fPXTdCfl
62jWZZFSDT3b7XfdG7n4pIqLsvq+ixbFaVLMlvRoVHihXJMutjTN3ZRo39sZ4TrFFASKF6X5bA3O
A+NXu0SqU0EMRlxeJxfY9Nm+U/XGAN3jNtM/RDjhbn7ZlDWxN2AhZBzkJ7fTi3cNEb6Exk4om/82
w8+/Tb26aWngmGrr4FA/MAeH+4uNN/hJw57EZ4tpKWH/Pe+c/4f/G5gcd0VXV0bo5MlhlxbbUphm
3Y8P2iaDRZbmbZXIq9A3GX6Zr0VVDWu9fmRo/e5Lv4IWVbG41RYP3d+5GifQdCtUTGv5urKtgMy4
fY3ruZlVUgVoQhet5jGA+ezUREh6f+R//EuYQ5bPRfvP870g8PGKKczKuNzwYcQ/AFBLAwQKAAAA
AACPW444fhwWIxIAAAASAAAADAAcAGxheW91dC1jYWNoZVVUCQADviMDSL4jA0h1eAsAAQT0AQAA
BPQBAAABAAEAcA4AAABQCQAABDkAAABQSwECHgMKAAAAAACPW444XsYyDCcAAAAnAAAACAAYAAAA
AAABAAAApIEAAAAAbWltZXR5cGVVVAUAA74jA0h1eAsAAQT0AQAABPQBAABQSwECHgMKAAAAAAAZ
dmFAAAAAAAAAAAAAAAAACQAYAAAAAAAAABAA7UFpAAAATUVUQS1JTkYvVVQFAANBfk9PdXgLAAEE
9AEAAAT0AQAAUEsBAh4DFAAAAAgAj1uOON1y6J1UAQAArQcAABUAGAAAAAAAAQAAAKSBrAAAAE1F
VEEtSU5GL21hbmlmZXN0LnhtbFVUBQADviMDSHV4CwABBPQBAAAE9AEAAFBLAQIeAwoAAAAAAJVV
5TwAAAAAAAAAAAAAAAAQABgAAAAAAAAAEADtQU8CAABDb25maWd1cmF0aW9uczIvVVQFAAN5mzFM
dXgLAAEE9AEAAAT0AQAAUEsBAh4DCgAAAAAA0luOOAAAAAAAAAAAAAAAABoAGAAAAAAAAAAQAO1B
mQIAAENvbmZpZ3VyYXRpb25zMi9wb3B1cG1lbnUvVVQFAAM8JANIdXgLAAEE9AEAAAT0AQAAUEsB
Ah4DCgAAAAAA0luOOAAAAAAAAAAAAAAAABoAGAAAAAAAAAAQAO1B7QIAAENvbmZpZ3VyYXRpb25z
Mi9zdGF0dXNiYXIvVVQFAAM8JANIdXgLAAEE9AEAAAT0AQAAUEsBAh4DCgAAAAAAGXZhQAAAAAAA
AAAAAAAAABwAGAAAAAAAAAAQAO1BQQMAAENvbmZpZ3VyYXRpb25zMi9hY2NlbGVyYXRvci9VVAUA
A0F+T091eAsAAQT0AQAABPQBAABQSwECHgMKAAAAAACPW444AAAAAAAAAAAAAAAAJwAYAAAAAAAA
AAAApIGXAwAAQ29uZmlndXJhdGlvbnMyL2FjY2VsZXJhdG9yL2N1cnJlbnQueG1sVVQFAAO+IwNI
dXgLAAEE9AEAAAT0AQAAUEsBAh4DCgAAAAAA0luOOAAAAAAAAAAAAAAAABwAGAAAAAAAAAAQAO1B
+AMAAENvbmZpZ3VyYXRpb25zMi9wcm9ncmVzc2Jhci9VVAUAAzwkA0h1eAsAAQT0AQAABPQBAABQ
SwECHgMKAAAAAADSW444AAAAAAAAAAAAAAAAGAAYAAAAAAAAABAA7UFOBAAAQ29uZmlndXJhdGlv
bnMyL2Zsb2F0ZXIvVVQFAAM8JANIdXgLAAEE9AEAAAT0AQAAUEsBAh4DCgAAAAAAlVXlPAAAAAAA
AAAAAAAAABcAGAAAAAAAAAAQAO1BoAQAAENvbmZpZ3VyYXRpb25zMi9pbWFnZXMvVVQFAAN5mzFM
dXgLAAEE9AEAAAT0AQAAUEsBAh4DCgAAAAAA0luOOAAAAAAAAAAAAAAAAB8AGAAAAAAAAAAQAO1B
8QQAAENvbmZpZ3VyYXRpb25zMi9pbWFnZXMvQml0bWFwcy9VVAUAAzwkA0h1eAsAAQT0AQAABPQB
AABQSwECHgMKAAAAAADSW444AAAAAAAAAAAAAAAAGAAYAAAAAAAAABAA7UFKBQAAQ29uZmlndXJh
dGlvbnMyL21lbnViYXIvVVQFAAM8JANIdXgLAAEE9AEAAAT0AQAAUEsBAh4DCgAAAAAA0luOOAAA
AAAAAAAAAAAAABgAGAAAAAAAAAAQAO1BnAUAAENvbmZpZ3VyYXRpb25zMi90b29sYmFyL1VUBQAD
PCQDSHV4CwABBPQBAAAE9AEAAFBLAQIeAxQAAAAIAI9bjjhZidW2fgcAALouAAALABgAAAAAAAEA
AACkge4FAABjb250ZW50LnhtbFVUBQADviMDSHV4CwABBPQBAAAE9AEAAFBLAQIeAxQAAAAIAI9b
jjhzXSO0tQEAAAUEAAAIABgAAAAAAAEAAACkgbENAABtZXRhLnhtbFVUBQADviMDSHV4CwABBPQB
AAAE9AEAAFBLAQIeAxQAAAAIAEN2YUB4EbHM5QwAAMFqAAAKABgAAAAAAAEAAACkgagPAABzdHls
ZXMueG1sVVQFAAOOfk9PdXgLAAEE9AEAAAT0AQAAUEsBAh4DFAAAAAgAj1uOOBuc7/TWBAAAcx4A
AAwAGAAAAAAAAQAAAKSB0RwAAHNldHRpbmdzLnhtbFVUBQADviMDSHV4CwABBPQBAAAE9AEAAFBL
AQIeAwoAAAAAABl2YUAAAAAAAAAAAAAAAAALABgAAAAAAAAAEADtQe0hAABUaHVtYm5haWxzL1VU
BQADQX5PT3V4CwABBPQBAAAE9AEAAFBLAQIeAxQAAAAIAI9bjjh1de8dGw8AAEURAAAYABgAAAAA
AAAAAACkgTIiAABUaHVtYm5haWxzL3RodW1ibmFpbC5wbmdVVAUAA74jA0h1eAsAAQT0AQAABPQB
AABQSwECHgMKAAAAAACPW444fhwWIxIAAAASAAAADAAYAAAAAAAAAAAApIGfMQAAbGF5b3V0LWNh
Y2hlVVQFAAO+IwNIdXgLAAEE9AEAAAT0AQAAUEsFBgAAAAAVABUAXQcAAPcxAAAAAA==</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
......@@ -283,7 +285,7 @@ AAEE9AEAAAT0AQAAUEsFBgAAAAAVABUAXQcAAHYxAAAAAA==</string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>14569</int> </value>
<value> <int>14698</int> </value>
</item>
<item>
<key> <string>title</string> </key>
......
......@@ -237,9 +237,17 @@ bWxQSwUGAAAAAAIAAgCeAAAAhwwAAAAA</string> </value>
<key> <string>id</string> </key>
<value> <string>form_list</string> </value>
</item>
<item>
<key> <string>ooo_script_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>ooo_stylesheet</string> </key>
<value> <string>Base_getODTStyleSheet</string> </value>
<value> <string>Base_getODTMetaStyleSheet</string> </value>
</item>
<item>
<key> <string>ooo_xml_file_id</string> </key>
<value> <string>content.xml</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
......@@ -247,7 +255,7 @@ bWxQSwUGAAAAAAIAAgCeAAAAhwwAAAAA</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
......
......@@ -440,9 +440,17 @@ bWxQSwUGAAAAAAIAAgCeAAAAhwwAAAAA</string> </value>
<key> <string>id</string> </key>
<value> <string>form_view</string> </value>
</item>
<item>
<key> <string>ooo_script_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>ooo_stylesheet</string> </key>
<value> <string>Base_getODTStyleSheet</string> </value>
<value> <string>Base_getODTMetaStyleSheet</string> </value>
</item>
<item>
<key> <string>ooo_xml_file_id</string> </key>
<value> <string>content.xml</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
......
......@@ -306,9 +306,17 @@ bWxQSwUGAAAAAAIAAgCeAAAAhwwAAAAA</string> </value>
<key> <string>id</string> </key>
<value> <string>report_view</string> </value>
</item>
<item>
<key> <string>ooo_script_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>ooo_stylesheet</string> </key>
<value> <string>Base_getODTStyleSheet</string> </value>
<value> <string>Base_getODTMetaStyleSheet</string> </value>
</item>
<item>
<key> <string>ooo_xml_file_id</string> </key>
<value> <string>content.xml</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
......@@ -316,7 +324,7 @@ bWxQSwUGAAAAAAIAAgCeAAAAhwwAAAAA</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
......
117
\ No newline at end of file
121
\ No newline at end of file
......@@ -60,6 +60,7 @@
<string>plan</string>
<string>order</string>
<string>validate</string>
<string>cancel</string>
</list>
</value>
</item>
......
105
\ No newline at end of file
107
\ No newline at end of file
......@@ -324,12 +324,12 @@ function queryStringToArray(query_string){\n
/*\n
Turn a query string into a "dictionary"\n
*/\n
var final ={};\n
var final_dict = {};\n
var b = query_string.split(\'&\');\n
$.each(b, function(x, y){\n
var temp = y.split(\'=\');\n
final[temp[0]] = temp[1];});\n
return final \n
final_dict[temp[0]] = temp[1];});\n
return final_dict;\n
}\n
\n
function submitLinkAsHtmlForm(event){\n
......
......@@ -15,6 +15,8 @@ import subprocess
import tempfile
import json
import time
import types
import re
class ERP5TestNode(TestCase):
......@@ -24,7 +26,7 @@ class ERP5TestNode(TestCase):
self.slapos_directory = os.path.join(self._temp_dir, 'slapos')
self.test_suite_directory = os.path.join(self._temp_dir,'test_suite')
self.environment = os.path.join(self._temp_dir,'environment')
self.log_directory = os.path.join(self._temp_dir,'var/log')
self.log_directory = os.path.join(self._temp_dir,'var/log/testnode')
self.log_file = os.path.join(self.log_directory,'test.log')
self.remote_repository0 = os.path.join(self._temp_dir, 'rep0')
self.remote_repository1 = os.path.join(self._temp_dir, 'rep1')
......@@ -496,3 +498,90 @@ branch = foo
self.assertEquals(True, os.path.exists(to_drop_path))
createFolder(folder, clean=True)
self.assertEquals(False, os.path.exists(to_drop_path))
def test_15_suite_log_directory(self):
def doNothing(self, *args, **kw):
pass
test_self = self
test_result_path_root = os.path.join(test_self._temp_dir,'test/results')
os.makedirs(test_result_path_root)
global counter
counter = 0
def patch_startTestSuite(self,test_node_title):
global counter
config_list = []
if counter == 0:
config_list.append(test_self.getTestSuiteData(reference='aa')[0])
if counter == 1:
config_list.append(test_self.getTestSuiteData(reference='bb')[0])
elif counter == 2:
raise StopIteration
counter += 1
return json.dumps(config_list)
def patch_createTestResult(self, revision, test_name_list, node_title,
allow_restart=False, test_title=None, project_title=None):
test_result_path = os.path.join(test_result_path_root, test_title)
result = TestResultProxy(self._proxy, self._retry_time,
self._logger, test_result_path, node_title, revision)
return result
def checkTestSuite(test_node):
test_node.node_test_suite_dict
rand_part_set = set()
for ref, suite in test_node.node_test_suite_dict.items():
assert(suite.suite_log is not None)
assert(isinstance(suite.suite_log, types.MethodType))
self.assertTrue('var/log/testnode/%s' % suite.reference in \
suite.suite_log_path,
"Incorrect suite log path : %r" % suite.suite_log_path)
assert(suite.suite_log_path.endswith('suite.log'))
m = re.match('.*\-(.*)\/suite.log', suite.suite_log_path)
rand_part = m.groups()[0]
assert(len(rand_part) == 32)
assert(rand_part not in rand_part_set)
rand_part_set.add(rand_part)
original_sleep = time.sleep
time.sleep = doNothing
self.generateTestRepositoryList()
original_startTestSuite = TaskDistributor.startTestSuite
TaskDistributor.startTestSuite = patch_startTestSuite
original_createTestResult = TaskDistributionTool.createTestResult
TaskDistributionTool.createTestResult = patch_createTestResult
test_node = self.getTestNode()
original_prepareSlapOS = test_node._prepareSlapOS
test_node._prepareSlapOS = doNothing
original_runTestSuite = test_node.runTestSuite
test_node.runTestSuite = doNothing
SlapOSControler.initializeSlapOSControler = doNothing
try:
test_node.run()
except Exception as e:
checkTestSuite(test_node)
self.assertEqual(type(e),StopIteration)
finally:
time.sleep = original_sleep
TaskDistributor.startTestSuite = original_startTestSuite
TaskDistributionTool.createTestResult = original_createTestResult
test_node._prepareSlapOS = original_prepareSlapOS
test_node.runTestSuite = original_runTestSuite
def test_16_cleanupLogDirectory(self):
# Make sure that we are able to cleanup old log folders
test_node = self.getTestNode()
def check(file_list):
log_directory_dir = os.listdir(self.log_directory)
self.assertTrue(set(file_list).issubset(
set(log_directory_dir)),
"%r not contained by %r" % (file_list, log_directory_dir))
check([])
os.mkdir(os.path.join(self.log_directory, 'ab-llzje'))
a_file = open(os.path.join(self.log_directory, 'a_file'), 'w')
a_file.close()
check(set(['ab-llzje', 'a_file']))
# default log file time is 15 days, so nothing is going to be deleted
test_node._cleanupLog()
check(set(['ab-llzje', 'a_file']))
# then we set keep time to 0, folder will be deleted
test_node.max_log_time = 0
test_node._cleanupLog()
check(set(['a_file']))
\ No newline at end of file
......@@ -347,6 +347,7 @@ class TestResultProxy(RPCRetry):
with cond:
self._watcher_can_run = False
cond.notify()
if self._watcher_thread is not None:
self._watcher_thread.join()
class ServerProxy(xmlrpclib.ServerProxy):
......
......@@ -142,6 +142,9 @@ class ProcessManager(object):
get_output = kw.pop('get_output', True)
log_prefix = kw.pop('log_prefix', '')
new_session = kw.pop('new_session', True)
log = kw.pop('log', None)
if log is None:
log = self.log
subprocess_kw = {}
cwd = kw.pop('cwd', None)
if cwd:
......@@ -151,15 +154,15 @@ class ProcessManager(object):
raise_error_if_fail = kw.pop('raise_error_if_fail', True)
env = kw and dict(os.environ, **kw) or None
command = format_command(*args, **kw)
self.log('subprocess_kw : %r' % (subprocess_kw,))
self.log('$ ' + command)
log('subprocess_kw : %r' % (subprocess_kw,))
log('$ ' + command)
sys.stdout.flush()
p = subprocess.Popen(args, stdin=self.stdin, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, env=env, **subprocess_kw)
self.process_pid_set.add(p.pid)
timer = threading.Timer(self.max_timeout, timeoutExpired, args=(p, self.log))
timer = threading.Timer(self.max_timeout, timeoutExpired, args=(p, log))
timer.start()
stdout, stderr = subprocess_capture(p, self.log, log_prefix,
stdout, stderr = subprocess_capture(p, log, log_prefix,
get_output=get_output)
timer.cancel()
result = dict(status_code=p.returncode, command=command,
......
......@@ -42,6 +42,10 @@ def createFolder(folder, clean=False):
if not(os.path.exists(folder)):
os.mkdir(folder)
def createFolders(folder):
if not(os.path.exists(folder)):
os.makedirs(folder)
class SlapOSControler(object):
def __init__(self, working_directory, config, log):
......
......@@ -75,7 +75,7 @@ def main(*args):
'git_binary','zip_binary','node_quantity','test_node_title',
'ipv4_address','ipv6_address','test_suite_master_url',
'slapgrid_partition_binary','slapgrid_software_binary',
'slapproxy_binary'):
'slapproxy_binary', 'httpd_ip', 'httpd_port'):
CONFIG[key] = config.get('testnode',key)
for key in ('slapos_directory', 'working_directory', 'test_suite_directory',
......@@ -85,6 +85,8 @@ def main(*args):
raise ValueError('Directory %r does not exists.' % d)
CONFIG['master_url'] = 'http://%s:%s' % (CONFIG['proxy_host'],
CONFIG['proxy_port'])
CONFIG['httpd_url'] = 'https://[%s]:%s' % (CONFIG['httpd_ip'],
CONFIG['httpd_port'])
# generate vcs_repository_list
if 'bot_environment' in config.sections():
......
......@@ -34,12 +34,17 @@ import SlapOSControler
import json
import time
import shutil
import logging
import string
import random
from ProcessManager import SubprocessError, ProcessManager, CancellationError
from subprocess import CalledProcessError
from Updater import Updater
from erp5.util import taskdistribution
DEFAULT_SLEEP_TIMEOUT = 120 # time in seconds to sleep
MAX_LOG_TIME = 15 # time in days we should keep logs that we can see through
# httd
supervisord_pid_file = None
PROFILE_PATH_KEY = 'profile_path'
......@@ -106,17 +111,49 @@ class NodeTestSuite(SlapOSInstance):
vcs_repository['repository_id'] = repository_id
vcs_repository['repository_path'] = repository_path
def createSuiteLog(self):
# /srv/slapgrid/slappartXX/srv/var/log/testnode/az-mlksjfmlk234Sljssdflkj23KSdfslj/suite.log
alphabets = string.digits + string.letters
rand_part = ''.join(random.choice(alphabets) for i in xrange(32))
random_suite_folder_id = '%s-%s' % (self.reference, rand_part)
suite_log_directory = os.path.join(self.log_directory,
random_suite_folder_id)
SlapOSControler.createFolders(suite_log_directory)
self.suite_log_path = os.path.join(suite_log_directory,
'suite.log')
self._initializeSuiteLog()
return self.getSuiteLogPath(), random_suite_folder_id
def getSuiteLogPath(self):
return getattr(self,"suite_log_path", None)
def getSuiteLog(self):
return getattr(self, "suite_log", None)
def _initializeSuiteLog(self):
logger_format = '%(asctime)s %(name)-13s: %(levelname)-8s %(message)s'
formatter = logging.Formatter(logger_format)
logging.basicConfig(level=logging.INFO, format=logger_format)
logger = logging.getLogger('testsuite')
file_handler = logging.FileHandler(filename=self.suite_log_path)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.info('Activated logfile %r output' % self.suite_log_path)
self.suite_log = logger.info
class TestNode(object):
def __init__(self, log, config):
def __init__(self, log, config, max_log_time=MAX_LOG_TIME):
self.testnode_log = log
self.log = log
self.config = config or {}
self.process_manager = ProcessManager(log)
self.node_test_suite_dict = {}
# hack until slapos.cookbook is updated
if self.config.get('working_directory', '').endswith("slapos/"):
if self.config.get('working_directory', '').endswith("slapos"):
self.config['working_directory'] = self.config[
'working_directory'][:-(len("slapos/"))] + "testnode"
'working_directory'][:-(len("slapos"))] + "testnode"
self.max_log_time = max_log_time
def checkOldTestSuite(self,test_suite_data):
config = self.config
......@@ -206,18 +243,26 @@ branch = %(branch)s
node_test_suite.revision = ','.join(full_revision_list)
return full_revision_list
def addWatcher(self,test_result):
config = self.config
if config.get('log_file'):
def registerSuiteLog(self, test_result, node_test_suite):
"""
Create a log dedicated for the test suite,
and register the url to master node.
"""
log_file_name, folder_id = node_test_suite.createSuiteLog()
if log_file_name is None and config.get('log_file'):
log_file_name = config['log_file']
log_file = open(log_file_name)
log_file.seek(0, 2)
log_file.seek(-min(5000, log_file.tell()), 2)
test_result.addWatch(log_file_name,log_file,max_history_bytes=10000)
# TODO make the path into url
test_result.reportStatus('LOG url', "%s/%s" % (self.config.get('httpd_url'),
folder_id), '')
self.log("going to switch to log %r" % log_file_name)
log = node_test_suite.getSuiteLog()
self.process_manager.log = self.log = log
return log_file_name
def checkRevision(self, test_result, node_test_suite):
config = self.config
log = node_test_suite.getSuiteLog()
if log is None:
log = self.log
if node_test_suite.revision != test_result.revision:
log('Disagreement on tested revision, checking out: %r' % (
......@@ -235,19 +280,19 @@ branch = %(branch)s
updater.checkout()
node_test_suite.revision = test_result.revision
def _prepareSlapOS(self, working_directory, slapos_instance,
def _prepareSlapOS(self, working_directory, slapos_instance, log,
create_partition=1, software_path_list=None, **kw):
"""
Launch slapos to build software and partitions
"""
slapproxy_log = os.path.join(self.config['log_directory'],
'slapproxy.log')
self.log('Configured slapproxy log to %r' % slapproxy_log)
log('Configured slapproxy log to %r' % slapproxy_log)
reset_software = slapos_instance.retry_software_count > 10
self.log('testnode, retry_software_count : %r' % \
log('testnode, retry_software_count : %r' % \
slapos_instance.retry_software_count)
self.slapos_controler = SlapOSControler.SlapOSControler(
working_directory, self.config, self.log)
working_directory, self.config, log)
self.slapos_controler.initializeSlapOSControler(slapproxy_log=slapproxy_log,
process_manager=self.process_manager, reset_software=reset_software,
software_path_list=software_path_list)
......@@ -275,12 +320,15 @@ branch = %(branch)s
like the building of selenium-runner by default
"""
return self._prepareSlapOS(self.config['slapos_directory'],
test_node_slapos, create_partition=0,
test_node_slapos, self.log, create_partition=0,
software_path_list=self.config.get("software_list"))
def prepareSlapOSForTestSuite(self, node_test_suite):
log = node_test_suite.getSuiteLog()
if log is None:
log = self.log
return self._prepareSlapOS(node_test_suite.working_directory,
node_test_suite,
node_test_suite, log,
software_path_list=[node_test_suite.custom_profile_path])
def _dealShebang(self,run_test_suite_path):
......@@ -290,7 +338,7 @@ branch = %(branch)s
invocation_list = line[2:].split()
return invocation_list
def runTestSuite(self, node_test_suite, portal_url):
def runTestSuite(self, node_test_suite, portal_url, log=None):
config = self.config
parameter_list = []
run_test_suite_path_list = glob.glob("%s/*/bin/runTestSuite" % \
......@@ -333,15 +381,22 @@ branch = %(branch)s
cwd=node_test_suite.test_suite_directory,
log_prefix='runTestSuite', get_output=False)
def _cleanupLog(self):
config = self.config
log_directory = self.config['log_directory']
now = time.time()
for log_folder in os.listdir(log_directory):
folder_path = os.path.join(log_directory, log_folder)
if os.path.isdir(folder_path):
if (now - os.stat(folder_path).st_mtime)/86400 > self.max_log_time:
self.log("deleting log directory %r" % (folder_path,))
shutil.rmtree(folder_path)
def cleanUp(self,test_result):
log = self.log
log('Testnode.cleanUp')
self.process_manager.killPreviousRun()
if test_result is not None:
try:
test_result.removeWatch(self.config['log_file'])
except KeyError:
log("KeyError, Watcher already deleted or not added correctly")
self._cleanupLog()
def run(self):
log = self.log
......@@ -355,6 +410,7 @@ branch = %(branch)s
try:
while True:
try:
self.log = self.process_manager.log = self.testnode_log
self.cleanUp(None)
remote_test_result_needs_cleanup = False
begin = time.time()
......@@ -373,7 +429,8 @@ branch = %(branch)s
node_test_suite = self.getNodeTestSuite(
test_suite["test_suite_reference"])
node_test_suite.edit(
working_directory=self.config['working_directory'])
working_directory=self.config['working_directory'],
log_directory=self.config['log_directory'])
node_test_suite.edit(**test_suite)
run_software = True
# Write our own software.cfg to use the local repository
......@@ -389,7 +446,7 @@ branch = %(branch)s
remote_test_result_needs_cleanup = True
log("testnode, test_result : %r" % (test_result, ))
if test_result is not None:
log_file_name = self.addWatcher(test_result)
self.registerSuiteLog(test_result, node_test_suite)
self.checkRevision(test_result,node_test_suite)
# Now prepare the installation of SlapOS and create instance
status_dict = self.prepareSlapOSForTestSuite(node_test_suite)
......@@ -398,7 +455,6 @@ branch = %(branch)s
# a reliable way to check if they are up or not ...
time.sleep(20)
self.runTestSuite(node_test_suite,portal_url)
test_result.removeWatch(log_file_name)
# break the loop to get latest priorities from master
break
self.cleanUp(test_result)
......@@ -430,6 +486,8 @@ branch = %(branch)s
sleep_time = 120 - (now-begin)
log("End of processing, going to sleep %s" % sleep_time)
time.sleep(sleep_time)
except:
log("Exception in error handling", exc_info=sys.exc_info())
finally:
# Nice way to kill *everything* generated by run process -- process
# groups working only in POSIX compilant systems
......
......@@ -729,11 +729,11 @@ class Amount(Base, VariatedMixin):
security.declareProtected(Permissions.AccessContentsInformation,
'getQuantityUnit')
def getQuantityUnit(self):
result = self._getDefaultCategoryMembership('quantity_unit')
def getQuantityUnit(self, checked_permission=None):
result = self._getDefaultCategoryMembership('quantity_unit', checked_permission=checked_permission)
if result is None:
resource = self.getResourceValue()
if resource is not None:
result = resource.getQuantityUnit()
result = resource.getQuantityUnit(checked_permission=checked_permission)
return result
......@@ -143,23 +143,23 @@ class BudgetCell(Predicate, MetaNode, Movement):
'setSourceCredit')
def setSourceCredit(self, source_credit):
"""Set the quantity.
Overloaded from movement, we always set the quantity, if not passed
Overloaded from movement, we always set the quantity, even if not passed
"""
try:
source_credit = float(source_credit)
except TypeError:
source_credit = 0.0
self.setQuantity(source_credit)
Movement.setSourceCredit(self, source_credit)
def setSourceDebit(self, source_debit):
"""Set the quantity.
Overloaded from movement, we always set the quantity, if not passed
Overloaded from movement, we always set the quantity, even if not passed
"""
try:
source_debit = float(source_debit)
except TypeError:
source_debit = 0.0
self.setQuantity(-source_debit)
Movement.setSourceDebit(self, source_debit)
security.declareProtected( Permissions.ModifyPortalContent,
'setDestinationDebit', 'setDestinationCredit' )
......
......@@ -181,7 +181,11 @@ class Delivery(XMLObject, ImmobilisationDelivery, SimulableMixin,
'getTotalNetPrice')
def getTotalNetPrice(self, fast=0, src__=0, **kw):
"""
Same as getTotalPrice, but including Tax and Discount.
Same as getTotalPrice, but including Tax and Discount (from legacy
simulation).
This method is deprecated because it uses deprecated Tax & Discount
portal types. You should use getTotalPrice(base_contribution=) instead.
"""
total_price = self.getTotalPrice(fast=fast, src__=src__, **kw)
kw['portal_type'] = self.getPortalTaxMovementTypeList()
......
......@@ -186,5 +186,5 @@ class DeliveryCell(MappedValue, Movement, ImmobilisationMovement):
security.declareProtected( Permissions.AccessContentsInformation,
'getQuantityUnit')
def getQuantityUnit(self):
return self.getParentValue().getQuantityUnit()
def getQuantityUnit(self, checked_permission=None):
return self.getParentValue().getQuantityUnit(checked_permission=checked_permission)
......@@ -128,7 +128,7 @@ class Image(TextConvertableMixin, File, OFSImage):
width, height = header[1:]
self.height = height
self.width = width
self._setContentType(content_type)
self._setContentType(content_type or 'application/unknown')
def _upradeImage(self):
"""
......@@ -150,9 +150,9 @@ class Image(TextConvertableMixin, File, OFSImage):
self.data = self._data
# Make sure size is defined
if (not hasattr(aq_base(self), 'size') or not self.size) and \
hasattr(aq_base(self), 'data'):
self.size = len(self.data)
size = len(self.data)
if getattr(aq_base(self), 'size', None) != size:
self.size = size
security.declareProtected(Permissions.AccessContentsInformation, 'getWidth')
def getWidth(self):
......
......@@ -291,7 +291,7 @@ class Resource(XMLObject, XMLMatrix, VariatedMixin):
if context is None:
transformation_list = self.portal_catalog(
portal_type="Transformation",
resource_relative_url=self.getRelativeUrl(),
default_resource_uid=self.getUid(),
sort_on=[('version', 'descending')],
limit=1
)
......
......@@ -221,11 +221,11 @@ class SubscriptionItem(Item, CompositionMixin, MovementGeneratorMixin,
return None
return open_order_line.getQuantity()
def getQuantityUnit(self):
def getQuantityUnit(self, checked_permission=None):
open_order_line = self.getAggregateRelatedValue(portal_type='Open Sale Order Line')
if open_order_line is None:
return None
return open_order_line.getQuantityUnit()
return open_order_line.getQuantityUnit(checked_permission=checked_permission)
def getPrice(self):
open_order_line = self.getAggregateRelatedValue(portal_type='Open Sale Order Line')
......
......@@ -76,5 +76,5 @@ class SupplyCell(Path):
security.declareProtected( Permissions.AccessContentsInformation,
'getQuantityUnit')
def getQuantityUnit(self):
return self.getParentValue().getQuantityUnit()
def getQuantityUnit(self, checked_permission=None):
return self.getParentValue().getQuantityUnit(checked_permission=checked_permission)
......@@ -282,6 +282,14 @@ class NotificationTool(BaseTool):
catalog_tool = getToolByName(self, 'portal_catalog')
if portal_type_list is None:
portal_type_list = ('Person',)
if notifier_list is None:
# XXX TODO: Use priority_level. Need to implement default notifier query system.
# XXX For now, we use 'Mail Message'.
notifier_list = ['Mail Message']
if not isinstance(notifier_list, (tuple, list)):
raise TypeError("Notifier list must be a list of portal types")
# Find "From" Person
from_person = None
if isinstance(sender, basestring):
......@@ -333,10 +341,6 @@ class NotificationTool(BaseTool):
# Make event
available_notifier_list = self.getNotifierList()
event_list = []
if notifier_list is None:
# XXX TODO: Use priority_level. Need to implement default notifier query system.
# XXX For now, we use 'Mail Message'.
notifier_list = ['Mail Message']
if event_keyword_argument_dict is None:
event_keyword_argument_dict = {}
for notifier in notifier_list:
......
......@@ -109,6 +109,9 @@ def initialize( context ):
ModuleSecurityInfo('Products.ERP5.Document.Image').declarePublic(
'getSizeFromImageDisplay')
# Make sure InteactionWorkflow is visible in UI
import Products.ERP5.InteractionWorkflow
# backward compatibility names
XML = None
UI = None
......@@ -39,7 +39,9 @@
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
<value>
<none/>
</value>
</item>
<item>
<key> <string>factory</string> </key>
......@@ -47,7 +49,7 @@
</item>
<item>
<key> <string>filter_content_types</string> </key>
<value> <int>1</int> </value>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>group_list</string> </key>
......@@ -61,11 +63,15 @@
</item>
<item>
<key> <string>init_script</string> </key>
<value> <string></string> </value>
<value>
<none/>
</value>
</item>
<item>
<key> <string>permission</string> </key>
<value> <string></string> </value>
<value>
<none/>
</value>
</item>
<item>
<key> <string>title</string> </key>
......@@ -75,6 +81,18 @@
<key> <string>type_class</string> </key>
<value> <string>SessionTool</string> </value>
</item>
<item>
<key> <string>type_interface</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>type_mixin</string> </key>
<value>
<tuple/>
</value>
</item>
</dictionary>
</pickle>
</record>
......
......@@ -63,6 +63,8 @@ def escape(data):\n
data = data.replace("<", "&lt;")\n
return data\n
\n
from pprint import pformat\n
\n
ret = \'<html><body><table width=100%>\\n\'\n
\n
dict = context.showDict().items()\n
......@@ -74,7 +76,7 @@ for k,v in dict:\n
else:\n
c = \'#dddd88\'\n
i += 1\n
ret += \'<tr bgcolor="%s"><td >%s</td><td>%s</td></tr>\\n\' % (escape(c), escape(k), escape(repr(v)))\n
ret += \'<tr bgcolor="%s"><td >%s</td><td><pre>%s</pre></td></tr>\\n\' % (escape(c), escape(k), escape(pformat(v)))\n
\n
ret += \'</table></body></html>\\n\'\n
\n
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="SQL" module="Products.ZSQLMethods.SQL"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Use_Database_Methods_Permission</string> </key>
<value>
<list>
<string>Member</string>
</list>
</value>
</item>
<item>
<key> <string>allow_simple_one_argument_traversal</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>arguments_src</string> </key>
<value> <string>query\r\n
resource_uid:list\r\n
from_date\r\n
at_date\r\n
to_date\r\n
omit_simulation\r\n
omit_input\r\n
omit_output\r\n
simulation_state:list\r\n
section_category\r\n
selection_domain\r\n
selection_report\r\n
closed_summary\r\n
where_expression\r\n
from_table_list\r\n
selection_uids:list</string> </value>
</item>
<item>
<key> <string>cache_time_</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>class_file_</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>class_name_</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>connection_hook</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>connection_id</string> </key>
<value> <string>erp5_sql_connection</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Resource_zStatInventory</string> </value>
</item>
<item>
<key> <string>max_cache_</string> </key>
<value> <int>100</int> </value>
</item>
<item>
<key> <string>max_rows_</string> </key>
<value> <int>1000</int> </value>
</item>
<item>
<key> <string>src</string> </key>
<value> <string encoding="cdata"><![CDATA[
SELECT\n
IFNULL(COUNT(DISTINCT stock.uid), 0) AS count,\n
IFNULL(SUM(stock.quantity), 0.00) AS quantity,\n
IFNULL(SUM(stock.total_price), 0.00) AS total_price\n
\n
FROM\n
<dtml-unless from_table_list>\n
catalog,\n
</dtml-unless>\n
catalog AS child,\n
stock,\n
catalog AS node\n
<dtml-if section_category>\n
, catalog AS section_c\n
, catalog AS section_bc\n
, category AS section_membership\n
, catalog AS section\n
</dtml-if>\n
<dtml-if query>\n
, category\n
</dtml-if>\n
<dtml-if from_table_list>\n
<dtml-in from_table_list>\n
, <dtml-var sequence-item> AS <dtml-var sequence-key>\n
</dtml-in>\n
</dtml-if>\n
<dtml-if selection_domain>, <dtml-var "portal_selections.buildSQLJoinExpressionFromDomainSelection(selection_domain)"> </dtml-if>\n
<dtml-if selection_report>, <dtml-var "portal_selections.buildSQLJoinExpressionFromDomainSelection(selection_report)"> </dtml-if>\n
\n
WHERE\n
child.uid = stock.uid\n
AND catalog.uid = stock.node_uid\n
<dtml-if where_expression> AND <dtml-var where_expression></dtml-if>\n
<dtml-if resource_uid>\n
AND\n
(\n
<dtml-in resource_uid>\n
stock.resource_uid = <dtml-sqlvar sequence-item type="int">\n
<dtml-if sequence-end><dtml-else> OR </dtml-if>\n
</dtml-in>\n
)\n
</dtml-if>\n
AND node.uid = stock.node_uid\n
<dtml-if from_date>\n
AND stock.date >= <dtml-sqlvar from_date type="datetime">\n
</dtml-if>\n
<dtml-if at_date>\n
AND stock.date <= <dtml-sqlvar at_date type="datetime">\n
</dtml-if>\n
<dtml-if to_date>\n
AND stock.date < <dtml-sqlvar to_date type="datetime">\n
</dtml-if>\n
<dtml-if omit_simulation>\n
AND catalog.portal_type != \'Simulation Movement\'\n
</dtml-if>\n
<dtml-if omit_input>\n
AND stock.quantity < 0\n
AND (stock.node_uid <> stock.mirror_node_uid\n
OR stock.section_uid <> stock.mirror_section_uid\n
OR stock.mirror_node_uid IS NULL\n
OR stock.mirror_section_uid IS NULL\n
OR stock.payment_uid IS NOT NULL\n
)\n
</dtml-if>\n
<dtml-if omit_output>\n
AND stock.quantity > 0\n
AND (stock.node_uid <> stock.mirror_node_uid\n
OR stock.section_uid <> stock.mirror_section_uid\n
OR stock.mirror_node_uid IS NULL\n
OR stock.mirror_section_uid IS NULL\n
OR stock.payment_uid IS NOT NULL\n
)\n
</dtml-if>\n
<dtml-if simulation_state>\n
AND\n
(\n
<dtml-in simulation_state>\n
stock.simulation_state = <dtml-sqlvar sequence-item type="string">\n
<dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>\n
)\n
</dtml-if>\n
<dtml-if section_category>\n
AND section.uid = stock.section_uid\n
AND section_c.relative_url = <dtml-sqlvar section_category type="string">\n
AND section_membership.category_uid = section_c.uid\n
AND section_membership.base_category_uid = section_bc.uid\n
AND section_membership.uid = section.uid\n
</dtml-if>\n
<dtml-if query>\n
AND category.uid = node.uid\n
AND <dtml-var query>\n
</dtml-if>\n
\n
<dtml-if selection_domain>\n
AND <dtml-var "portal_selections.buildSQLExpressionFromDomainSelection(selection_domain)">\n
</dtml-if>\n
<dtml-if selection_report>\n
AND <dtml-var "portal_selections.buildSQLExpressionFromDomainSelection(selection_report)">\n
</dtml-if>\n
<dtml-if selection_uids>\n
AND\n
(\n
<dtml-in selection_uids>\n
node.uid = <dtml-sqlvar sequence-item type="int">\n
<dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>\n
)\n
</dtml-if>\n
]]></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -474,6 +474,7 @@
<!-- Data cells -->\n
<tal:block tal:repeat="value render_result">\n
<td class="listbox-table-data-cell"\n
tal:attributes="class python: line.isSummary() and \'listbox-table-summary-cell\' or \'listbox-table-data-cell\'"\n
tal:define="html python: value[0];">\n
<input tal:condition="not: repeat/value/index"\n
type="hidden" value="1" name="listbox_uid:list"\n
......
......@@ -561,7 +561,8 @@ div.listbox-list-style-selection li a{\n
div.listbox-list-style-selection li a.selected,\n
.listbox-table-report-tree-selection-cell a.selected,\n
.listbox-table-domain-tree-cell a.selected,\n
.listbox-page-navigation-text a.selected{\n
.listbox-page-navigation-text a.selected,\n
table.listbox td.listbox-table-summary-cell {\n
font-weight: bold;\n
}\n
\n
......@@ -768,6 +769,11 @@ table.listbox input.listbox-select-action{\n
display:block;\n
}\n
\n
.listbox-table-summary-cell > .figure{\n
float:right;\n
display:block;\n
}\n
\n
table.listbox th button{\n
border-width:0;\n
cursor:pointer;\n
......
......@@ -1357,7 +1357,9 @@ class TestBudget(ERP5TypeTestCase):
self.assertEquals({
'from_date': None,
'simulation_state': ('delivered', 'stopped'),
'simulation_state': ('delivered', 'stopped', 'started'),
'transit_simulation_state': ('started', ),
'omit_transit': False,
# XXX order is reversed for some reason ...
'section_category': ['group/demo_group/sub2',
'group/demo_group/sub1'],
......
......@@ -328,12 +328,8 @@ class TestOrderMixin(SubcontentReindexingWrapper):
portal = self.getPortal()
order_module = portal.getDefaultModule(portal_type=self.order_portal_type)
order = order_module.newContent(portal_type=self.order_portal_type)
test_name = "%s.%s.%s" % (self.__class__.__module__,
self.__class__.__name__,
self._testMethodName)
order.edit(
title = "Order%s (%s)" % (order.getId(), test_name),
title = "Order%s (%s)" % (order.getId(), self.id()),
start_date = self.datetime + 10,
stop_date = self.datetime + 20,
specialise = self.business_process,
......
......@@ -887,7 +887,6 @@ class TestPackingListMixin(TestOrderMixin):
for line in packing_list.objectValues(
portal_type=self.packing_list_line_portal_type):
resource = line.getResourceValue()
tmp_kw={'movement.resource_uid':resource.getUid()}
container_line = \
container.newContent(portal_type=self.container_line_portal_type)
container_line.setResourceValue(resource)
......
......@@ -791,21 +791,26 @@ class TestERP5BankingMixin(ERP5TypeTestCase):
sql_connection.manage_test("DROP TABLE IF EXISTS movement")
# Delete also all ZSQL Methods related to movement table
catalog = self.portal.portal_catalog.getSQLCatalog()
catalog.manage_delObjects(ids=["z0_drop_movement",
"z0_uncatalog_movement",
"z_catalog_movement_list",
"z_create_movement",
])
for zsql in ["z0_drop_movement", "z0_uncatalog_movement",
"z_catalog_movement_list", "z_create_movement", ]:
if catalog._getOb(zsql, None) is not None:
catalog.manage_delObjects(ids=[zsql])
# Update properties of catalog
sql_catalog_object_list = list(catalog.sql_catalog_object_list)
sql_uncatalog_object = list(catalog.sql_uncatalog_object)
sql_clear_catalog = list(catalog.sql_clear_catalog)
sql_search_tables = list(catalog.sql_search_tables)
if "z_catalog_movement_list" in sql_catalog_object_list:
sql_catalog_object_list.remove("z_catalog_movement_list")
if "z0_uncatalog_movement" in sql_uncatalog_object:
sql_uncatalog_object.remove("z0_uncatalog_movement")
if "z0_drop_movement" in sql_clear_catalog:
sql_clear_catalog.remove("z0_drop_movement")
if "z_create_movement" in sql_clear_catalog:
sql_clear_catalog.remove("z_create_movement")
if "movement" in sql_search_tables:
sql_search_tables.remove("movement")
catalog.sql_catalog_object_list = tuple(sql_catalog_object_list)
......
......@@ -2378,12 +2378,10 @@ class ListBoxHTMLRendererLine(ListBoxRendererLine):
# If a field is editable, generate an input form.
# XXX why don't we generate an input form when a widget is not defined?
editable_field = None
if not self.isSummary():
editable_field = renderer.getEditableField(alias)
# Prepare link value - we now use it for both static and field rendering
no_link = False
no_link = self.isSummary()
url_method = None
url = None
......@@ -2488,7 +2486,8 @@ class ListBoxHTMLRendererLine(ListBoxRendererLine):
value=display_value,
REQUEST=request,
key=key,
editable=listbox_defines_column_as_editable and editable,
editable=(not self.isSummary()) \
and listbox_defines_column_as_editable and editable,
)
if isinstance(cell_html, str):
cell_html = unicode(cell_html, encoding)
......
......@@ -29,6 +29,7 @@
import unittest
from lxml import etree
import textwrap
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
from AccessControl.SecurityManagement import newSecurityManager
......@@ -162,11 +163,11 @@ class TestListBox(ERP5TypeTestCase):
portal.portal_skins.custom,
list_method_id,
'selection=None, sort_on=None, **kw',
r"""
if sort_on != [('title', 'ASC'), ('uid', 'ASC')]:
textwrap.dedent(r"""
if sort_on != [('title', 'ASC'), ('uid', 'ASC')]:
raise AssertionError('sort_on is %r' % sort_on)
return []
""")
return []
"""))
# set the listbox to use this as list method
listbox = portal.FooModule_viewFooList.listbox
......@@ -194,12 +195,13 @@ return []
portal.portal_skins.custom,
list_method_id,
'selection=None, dummy_default_param=None, **kw',
"""
if dummy_default_param != 'dummy value':
textwrap.dedent(
"""
if dummy_default_param != 'dummy value':
raise AssertionError('recieved wrong arguments: %s instead of "dummy value"'
% dummy_default_param )
return []
""")
return []
"""))
# set the listbox to use this as list method
listbox = portal.FooModule_viewFooList.listbox
......@@ -584,7 +586,8 @@ return []
renderer.getSelectedColumnList())
# default(no list_style)
self.assertEqual(getListBoxRenderer(listbox).getDefaultDisplayStyle(), getListBoxRenderer(listbox).getListboxDisplayStyle())
self.assertEqual(getListBoxRenderer(listbox).getDefaultDisplayStyle(),
getListBoxRenderer(listbox).getListboxDisplayStyle())
self.assertSameSet([('id', u'ID'), ('title', u'Title'), ('getQuantity', u'Quantity')],
getListBoxRenderer(listbox).getSelectedColumnList())
......
......@@ -436,12 +436,6 @@ class ERP5Conduit(XMLSyncUtilsMixin):
data = new_data
if isinstance(data, unicode):
data = data.encode(self.getEncoding())
if keyword == 'binary_data':
#LOG('ERP5Conduit.getFormatedArgs', DEBUG, 'binary_data keyword: %s' % str(keyword))
msg = MIMEBase('application','octet-stream')
encoders.encode_base64(msg)
msg.set_payload(data)
data = msg.get_payload(decode=True)
new_args[keyword] = data
return new_args
......
......@@ -2846,40 +2846,6 @@ class Base( CopyContainer,
"""
return []
security.declareProtected(Permissions.View, 'getBinaryData')
def getBinaryData(self):
"""
Return the binary data
"""
bin = None
if hasattr(self,'_original'):
bin = self._original._data()
elif hasattr(self,'_data'):
bin = self._data
elif hasattr(self,'data'):
bin = self.data
if bin is not None:
return StringIO(str(bin))
return None
security.declareProtected(Permissions.ModifyPortalContent, 'setBinaryData')
def setBinaryData(self, data):
"""
Set the binary data, data must be a cStringIO
"""
self.edit(file=data)
#LOG('Base.setBinaryData',0,'data: %s' % str(data))
#obj=''
#if hasattr(self,'_original'):
# LOG('Base.setBinaryData',0,'_original for : %s' % str(self))
# self._original.data = data
#elif hasattr(self,'_data'):
# LOG('Base.setBinaryData',0,'_data for : %s' % str(self))
# self._data = data
#elif hasattr(self,'data'):
# LOG('Base.setBinaryData',0,'data for : %s' % str(self))
# self.data = data
security.declareProtected(Permissions.AccessContentsInformation,
'getRedirectParameterDictAfterAdd')
def getRedirectParameterDictAfterAdd(self, container, **kw):
......
......@@ -636,7 +636,7 @@ class ERP5TypeInformation(XMLObject,
'getAvailablePropertySheetList')
def getAvailablePropertySheetList(self):
property_sheet_set = set([k for k in PropertySheet.__dict__
if not k.startswith('__')])
if not k.startswith('_')])
property_sheet_tool = self.getPortalObject().portal_property_sheets
property_sheet_set.update(property_sheet_tool.objectIds())
......@@ -647,7 +647,7 @@ class ERP5TypeInformation(XMLObject,
'getAvailableConstraintList')
def getAvailableConstraintList(self):
return sorted(k for k in Constraint.__dict__
if k != 'Constraint' and not k.startswith('__'))
if k != 'Constraint' and not k.startswith('_'))
security.declareProtected(Permissions.AccessContentsInformation,
'getAvailableGroupList')
......
......@@ -267,6 +267,9 @@ if allowClassTool():
def objectIds(self, spec=None):
return ('PropertySheet', 'Document', 'Constraint', 'Extensions', 'tests')
def __contains__(self, key):
return key in self.objectIds()
def _getOb(self, key, default=_MARKER):
from Products.ERP5Type.Utils import importLocalPropertySheet
from Products.ERP5Type.Utils import importLocalDocument
......
......@@ -33,6 +33,7 @@ from pprint import pformat
from AccessControl.SecurityManagement import newSecurityManager
from AccessControl.SecurityManagement import getSecurityManager
from AccessControl.SecurityManagement import setSecurityManager
from AccessControl import SpecialUsers
from Products.DCWorkflow.Transitions import TRIGGER_USER_ACTION
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
......@@ -128,7 +129,11 @@ class SecurityTestCase(ERP5TypeTestCase):
def _loginAsUser(self, username):
"""Login as a given username. The user must exist.
In case Username is None, we consider test as Anonymous.
"""
if username is None:
newSecurityManager(None, SpecialUsers.nobody)
else:
uf = self.getPortal().acl_users
user = uf.getUserById(username)
self.assertNotEquals(user, None, 'No user %s' % username)
......
import errno
import os
import subprocess
import shutil
import signal
import socket
......@@ -46,9 +47,8 @@ if save_mysql:
# faster, so this produce somewhat not nice to read sql
command = 'mysqldump %s > %s' % (getMySQLArguments(), dump_sql_path,)
if verbosity:
_print('Dumping MySQL database with %s...' % command)
ret = os.system(command)
assert not ret
_print('Dumping MySQL database with %s ...' % command)
subprocess.check_call(command, shell=True)
_print("Cleaning static files ... ")
for static_dir in static_dir_list:
......@@ -61,9 +61,9 @@ for static_dir in static_dir_list:
if load:
if save_mysql:
if os.path.exists(dump_sql_path):
_print("Restoring MySQL database ... ")
ret = os.system("mysql %s < %s" % (getMySQLArguments(), dump_sql_path))
assert not ret
command = "mysql %s < %s" % (getMySQLArguments(), dump_sql_path)
_print("Restoring MySQL database with %s ... " % command)
subprocess.check_call(command, shell=True)
else:
_print("Could not find MySQL dump (%r), will recreate catalog ... " % dump_sql_path)
os.environ['erp5_tests_recreate_catalog'] = '1'
......
......@@ -394,7 +394,7 @@ def runUnitTestList(test_list, verbosity=1, debug=0, run_only=None):
else:
products_home = os.path.join(instance_home, 'Products')
from Testing.ZopeTestCase import layer, PortalTestCase
from Testing.ZopeTestCase import layer, PortalTestCase, ZopeLite
_apply_patches = layer._deferred_setup.pop(0)[0]
assert _apply_patches.__name__ == '_apply_patches'
......@@ -469,6 +469,8 @@ def runUnitTestList(test_list, verbosity=1, debug=0, run_only=None):
def assertFalse():
assert False
layer.onsetup = assertFalse
ZopeLite._theApp._p_jar.close()
ZopeLite._theApp = None
from Products.ERP5Type.tests.utils import DbFactory
root_db_name, = cfg.dbtab.databases.keys()
......
......@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
import glob
import os
version = '0.4.22'
version = '0.4.24'
name = 'erp5.util'
long_description = open("README.erp5.util.txt").read() + "\n"
......
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