Commit 0e3d3043 authored by Julien Muchembled's avatar Julien Muchembled

Sync with trunk@37148

Conflicts:
	bt5/erp5_accounting/PortalTypeAllowedContentTypeTemplateItem/allowed_content_types.xml
	bt5/erp5_accounting/bt/revision
	bt5/erp5_accounting/bt/template_portal_type_allowed_content_type_list
	bt5/erp5_base/bt/revision
	bt5/erp5_invoicing/PortalTypeAllowedContentTypeTemplateItem/allowed_content_types.xml
	bt5/erp5_invoicing/bt/template_portal_type_allowed_content_type_list
	bt5/erp5_trade/PortalTypeAllowedContentTypeTemplateItem/allowed_content_types.xml
	bt5/erp5_trade/bt/change_log
	bt5/erp5_trade/bt/revision
	bt5/erp5_trade/bt/template_portal_type_allowed_content_type_list
	products/ERP5/Document/SimulationMovement.py
	products/ERP5Legacy/Document/BusinessPath.py

git-svn-id: https://svn.erp5.org/repos/public/erp5/sandbox/amount_generator@38067 20353a03-c40f-0410-a6d1-a30d3c3de9de
parents 9257af54 7e0e7645
<allowed_content_type_list>
<portal_type id="Accounting Transaction Root Simulation Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
<portal_type id="Invoice Root Simulation Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
<portal_type id="Invoice Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
<portal_type id="Payment Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
<portal_type id="Payment Simulation Rule">
<item>Category Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
<portal_type id="Rule Tool">
......
Accounting Transaction Root Simulation Rule | Category Divergence Tester
Accounting Transaction Root Simulation Rule | Composed Divergence Tester
Accounting Transaction Root Simulation Rule | Property Divergence Tester
Accounting Transaction Root Simulation Rule | Quantity Divergence Tester
Invoice Root Simulation Rule | Category Divergence Tester
Invoice Root Simulation Rule | Composed Divergence Tester
Invoice Root Simulation Rule | Property Divergence Tester
Invoice Root Simulation Rule | Quantity Divergence Tester
Invoice Rule | Category Divergence Tester
Invoice Rule | Composed Divergence Tester
Invoice Rule | Property Divergence Tester
Invoice Rule | Quantity Divergence Tester
Payment Rule | Category Divergence Tester
Payment Rule | Composed Divergence Tester
Payment Rule | Property Divergence Tester
Payment Rule | Quantity Divergence Tester
Payment Simulation Rule | Category Divergence Tester
Payment Simulation Rule | Property Divergence Tester
Payment Simulation Rule | Composed Divergence Tester
Payment Simulation Rule | Quantity Divergence Tester
Rule Tool | Invoice Rule
Rule Tool | Payment Rule
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="SQL" module="Products.ZSQLMethods.SQL"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_arg</string> </key>
<value>
<object>
<klass>
<global name="Args" module="Shared.DC.ZRDB.Aqueduct"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_data</string> </key>
<value>
<dictionary>
<item>
<key> <string>business_path_uid</string> </key>
<value>
<dictionary/>
</value>
</item>
<item>
<key> <string>from_table_list</string> </key>
<value>
<dictionary/>
</value>
</item>
<item>
<key> <string>where_expression</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>_keys</string> </key>
<value>
<list>
<string>from_table_list</string>
<string>where_expression</string>
<string>business_path_uid</string>
</list>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>arguments_src</string> </key>
<value> <string>from_table_list\r\n
where_expression\r\n
business_path_uid</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>BusinessPath_zSelectBuildableMovementList</string> </value>
</item>
<item>
<key> <string>src</string> </key>
<value> <string encoding="cdata"><![CDATA[
SELECT\n
catalog.uid,\n
catalog.path,\n
catalog.relative_url,\n
catalog.id\n
\n
FROM\n
movement\n
, catalog\n
, LEFT JOIN category as delivery\n
ON (\n
catalog.uid = delivery.uid\n
AND <dtml-sqltest "portal_categories.delivery.getUid()" column="delivery.base_category_uid" type="int">\n
)\n
, category as causality\n
<dtml-in prefix="table" expr="from_table_list">\n
<dtml-if expr="table_key not in (\'catalog\', \'movement\')">\n
, <dtml-var table_item> AS <dtml-var table_key>\n
</dtml-if>\n
</dtml-in>\n
\n
WHERE\n
delivery.category_uid is NULL\n
\n
AND catalog.uid = causality.uid\n
AND <dtml-sqltest "portal_categories.causality.getUid()" column="causality.base_category_uid" type="int">\n
AND <dtml-sqltest business_path_uid column="causality.category_uid" type="int">\n
\n
AND catalog.uid = movement.uid\n
AND movement.resource_uid is not NULL\n
\n
<dtml-if where_expression>AND <dtml-var where_expression></dtml-if>
]]></string> </value>
</item>
<item>
<key> <string>template</string> </key>
<value>
<object>
<klass>
<global name="__newobj__" module="copy_reg"/>
</klass>
<tuple>
<global name="SQL" module="Shared.DC.ZRDB.DA"/>
</tuple>
<state>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string encoding="cdata"><![CDATA[
<string>
]]></string> </value>
</item>
<item>
<key> <string>_vars</string> </key>
<value>
<dictionary/>
</value>
</item>
<item>
<key> <string>globals</string> </key>
<value>
<dictionary/>
</value>
</item>
<item>
<key> <string>raw</string> </key>
<value> <string encoding="cdata"><![CDATA[
SELECT\n
catalog.uid,\n
catalog.path,\n
catalog.relative_url,\n
catalog.id\n
\n
FROM\n
movement\n
, catalog\n
, LEFT JOIN category as delivery\n
ON (\n
catalog.uid = delivery.uid\n
AND <dtml-sqltest "portal_categories.delivery.getUid()" column="delivery.base_category_uid" type="int">\n
)\n
, category as causality\n
<dtml-in prefix="table" expr="from_table_list">\n
<dtml-if expr="table_key not in (\'catalog\', \'movement\')">\n
, <dtml-var table_item> AS <dtml-var table_key>\n
</dtml-if>\n
</dtml-in>\n
\n
WHERE\n
delivery.category_uid is NULL\n
\n
AND catalog.uid = causality.uid\n
AND <dtml-sqltest "portal_categories.causality.getUid()" column="causality.base_category_uid" type="int">\n
AND <dtml-sqltest business_path_uid column="causality.category_uid" type="int">\n
\n
AND catalog.uid = movement.uid\n
AND movement.resource_uid is not NULL\n
\n
<dtml-if where_expression>AND <dtml-var where_expression></dtml-if>
]]></string> </value>
</item>
</dictionary>
</state>
</object>
</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>
<tuple>
<global name="ERP5Form" module="Products.ERP5Form.Form"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string>Base_edit</string> </value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string>multipart/form-data</string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>left</string>
<string>right</string>
<string>center</string>
<string>bottom</string>
<string>hidden</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>bottom</string> </key>
<value>
<list>
<string>listbox</string>
</list>
</value>
</item>
<item>
<key> <string>center</string> </key>
<value>
<list>
<string>my_description</string>
</list>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value>
<list>
<string>listbox_tested_property_list</string>
</list>
</value>
</item>
<item>
<key> <string>left</string> </key>
<value>
<list>
<string>my_title</string>
</list>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list>
<string>my_solver_list</string>
</list>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ComposedDivergenceTester_view</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>ComposedDivergenceTester_view</string> </value>
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>form_view</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Divergence Tester</string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_action</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -5,8 +5,10 @@
<item>Quantity Divergence Tester</item>
</portal_type>
<portal_type id="Invoice Transaction Rule">
<item>Composed Divergence Tester</item>
<item>Accounting Rule Cell</item>
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Predicate</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
......@@ -14,10 +16,12 @@
<portal_type id="Invoice Transaction Simulation Rule">
<item>Category Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
<portal_type id="Invoicing Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
......@@ -28,11 +32,13 @@
</portal_type>
<portal_type id="Trade Model Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
<portal_type id="Trade Model Simulation Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
......
Invoice Simulation Rule | Category Divergence Tester
Invoice Simulation Rule | Property Divergence Tester
Invoice Simulation Rule | Quantity Divergence Tester
Invoice Simulation Rule | Composed Divergence Tester
Invoice Transaction Rule | Accounting Rule Cell
Invoice Transaction Rule | Category Divergence Tester
Invoice Transaction Rule | Composed Divergence Tester
Invoice Transaction Rule | Predicate
Invoice Transaction Rule | Property Divergence Tester
Invoice Transaction Rule | Quantity Divergence Tester
Invoice Transaction Simulation Rule | Category Divergence Tester
Invoice Transaction Simulation Rule | Property Divergence Tester
Invoice Transaction Simulation Rule | Composed Divergence Tester
Invoice Transaction Simulation Rule | Quantity Divergence Tester
Invoicing Rule | Category Divergence Tester
Invoicing Rule | Composed Divergence Tester
Invoicing Rule | Property Divergence Tester
Invoicing Rule | Quantity Divergence Tester
Rule Tool | Invoice Transaction Rule
Rule Tool | Invoicing Rule
Rule Tool | Trade Model Rule
Trade Model Rule | Category Divergence Tester
Trade Model Rule | Composed Divergence Tester
Trade Model Rule | Property Divergence Tester
Trade Model Rule | Quantity Divergence Tester
Trade Model Simulation Rule | Category Divergence Tester
Trade Model Simulation Rule | Composed Divergence Tester
Trade Model Simulation Rule | Property Divergence Tester
Trade Model Simulation Rule | Quantity Divergence Tester
\ No newline at end of file
......@@ -8,11 +8,13 @@
</portal_type>
<portal_type id="Production Order Model Root Simulation Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
<portal_type id="Production Order Model Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
......@@ -21,11 +23,13 @@
</portal_type>
<portal_type id="Production Order Root Simulation Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
<portal_type id="Production Order Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
......@@ -66,21 +70,25 @@
</portal_type>
<portal_type id="Transformation Model Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
<portal_type id="Transformation Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
<portal_type id="Transformation Sourcing Model Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
<portal_type id="Transformation Sourcing Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
......
446
\ No newline at end of file
447
\ No newline at end of file
Production Order Line | Production Order Cell
Production Order Model Root Simulation Rule | Category Divergence Tester
Production Order Model Root Simulation Rule | Composed Divergence Tester
Production Order Model Root Simulation Rule | Property Divergence Tester
Production Order Model Root Simulation Rule | Quantity Divergence Tester
Production Order Model Rule | Category Divergence Tester
Production Order Model Rule | Composed Divergence Tester
Production Order Model Rule | Property Divergence Tester
Production Order Model Rule | Quantity Divergence Tester
Production Order Module | Production Order
Production Order Root Simulation Rule | Category Divergence Tester
Production Order Root Simulation Rule | Composed Divergence Tester
Production Order Root Simulation Rule | Property Divergence Tester
Production Order Root Simulation Rule | Quantity Divergence Tester
Production Order Rule | Category Divergence Tester
Production Order Rule | Composed Divergence Tester
Production Order Rule | Property Divergence Tester
Production Order Rule | Quantity Divergence Tester
Production Order | Payment Condition
......@@ -32,14 +36,18 @@ Supply Chain Module | Supply Chain
Supply Chain | Supply Link
Supply Chain | Supply Node
Transformation Model Rule | Category Divergence Tester
Transformation Model Rule | Composed Divergence Tester
Transformation Model Rule | Property Divergence Tester
Transformation Model Rule | Quantity Divergence Tester
Transformation Rule | Category Divergence Tester
Transformation Rule | Composed Divergence Tester
Transformation Rule | Property Divergence Tester
Transformation Rule | Quantity Divergence Tester
Transformation Sourcing Model Rule | Category Divergence Tester
Transformation Sourcing Model Rule | Composed Divergence Tester
Transformation Sourcing Model Rule | Property Divergence Tester
Transformation Sourcing Model Rule | Quantity Divergence Tester
Transformation Sourcing Rule | Category Divergence Tester
Transformation Sourcing Rule | Composed Divergence Tester
Transformation Sourcing Rule | Property Divergence Tester
Transformation Sourcing Rule | Quantity Divergence Tester
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>action</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_view</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_view</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>view</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>1.0</float> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>View</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
<value> <int>1</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<global name="Expression" module="Products.CMFCore.Expression"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/ComposedDivergenceTester_view</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<portal_type id="Composed Divergence Tester">
<item>Category Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="ERP5TypeInformation" module="Products.ERP5Type.ERP5Type"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_property_domain_dict</string> </key>
<value>
<dictionary>
<item>
<key> <string>short_title</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>acquire_local_roles</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>content_icon</string> </key>
<value> <string>document.gif</string> </value>
</item>
<item>
<key> <string>content_meta_type</string> </key>
<value> <string>ERP5 Composed Divergence Tester</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>A container of testers that acts as a single tester.</string> </value>
</item>
<item>
<key> <string>factory</string> </key>
<value> <string>addComposedDivergenceTester</string> </value>
</item>
<item>
<key> <string>filter_content_types</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<tuple>
<string>divergence_tester</string>
</tuple>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Composed Divergence Tester</string> </value>
</item>
<item>
<key> <string>init_script</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<global name="TranslationInformation" module="Products.ERP5Type.TranslationProviderBase"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>domain_name</string> </key>
<value> <string>erp5_content</string> </value>
</item>
<item>
<key> <string>property_name</string> </key>
<value> <string>short_title</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<tuple>
<global name="TranslationInformation" module="Products.ERP5Type.TranslationProviderBase"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>domain_name</string> </key>
<value> <string>erp5_content</string> </value>
</item>
<item>
<key> <string>property_name</string> </key>
<value> <string>title</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -3,6 +3,10 @@
<type>Category Divergence Tester</type>
<workflow>edit_workflow</workflow>
</chain>
<chain>
<type>Composed Divergence Tester</type>
<workflow>edit_workflow</workflow>
</chain>
<chain>
<type>Property Divergence Tester</type>
<workflow>edit_workflow</workflow>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>title</string>
<string>columns</string>
<string>selection_name</string>
<string>portal_types</string>
<string>editable_columns</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>listbox</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_types</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>columns</string> </key>
<value>
<list>
<tuple>
<string>title</string>
<string>Title</string>
</tuple>
<tuple>
<string>tested_property_list</string>
<string>Tested properties</string>
</tuple>
<tuple>
<string>translated_portal_type</string>
<string>Portal Type</string>
</tuple>
<tuple>
<string>description</string>
<string>Description</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>editable_columns</string> </key>
<value>
<list>
<tuple>
<string>tested_property_list</string>
<string>tested_property_list</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_view_mode_listbox</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>portal_types</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>selection_name</string> </key>
<value> <string>divergence_tester_selection</string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Divergence Testers</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: [(x, x) for x in here.getPortalDivergenceTesterTypeList()]</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
<tuple/>
</tuple>
</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_tested_property_list</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_lines_field</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>
<tuple>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>height</string>
<string>width</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>my_description</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_description</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>7</int> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>50</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>items</string>
<string>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>my_solver_list</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
<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>field_id</string> </key>
<value> <string>my_multi_list_field</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Solvers</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python:map(lambda x: (x, \'portal_solvers/%s\' % x), here.getPortalTargetSolverTypeList())</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>title</string>
<string>default</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>my_tested_property_list</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</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>field_id</string> </key>
<value> <string>my_lines_field</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>
<item>
<key> <string>title</string> </key>
<value> <string>Property</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: [str(x) for x in here.getTestedPropertyList([])]</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>display_width</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>my_title</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>display_width</string> </key>
<value> <int>20</int> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_title</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>
Category Divergence Tester | view
Composed Divergence Tester | view
Property Divergence Tester | view
Quantity Divergence Tester | view
\ No newline at end of file
Composed Divergence Tester | Category Divergence Tester
Composed Divergence Tester | Property Divergence Tester
Composed Divergence Tester | Quantity Divergence Tester
\ No newline at end of file
Category Divergence Tester
Composed Divergence Tester
Property Divergence Tester
Quantity Divergence Tester
\ No newline at end of file
Category Divergence Tester | edit_workflow
Composed Divergence Tester | edit_workflow
Property Divergence Tester | edit_workflow
Quantity Divergence Tester | edit_workflow
\ No newline at end of file
......@@ -61,8 +61,10 @@ order = context\n
category_list = [\n
\'source\', \'source_section\', \'source_decision\',\n
\'source_administration\', \'source_payment\', \'source_project\',\n
\'source_carrier\', \'source_referral\', \'source_function\',\n
\'destination\', \'destination_section\', \'destination_decision\',\n
\'destination_administration\', \'destination_payment\', \'destination_project\',\n
\'destination_carrier\', \'destination_referral\', \'destination_function\',\n
\'price_currency\', \'incoterm\', \'delivery_mode\',\n
]\n
new_category_dict = {}\n
......
2010-08-07 JPS
* make the terms match payment condition and capacity property sheets in TradeModelPath_view
2010-07-15 yusei
* Add source_carrier, source_referral, source_function, destination_carrier, destination_referral, destination_function to copied category list of trade condition.
2010-06-22 JPS
* Business Path now split into Business Link and Trade Model Path
......
......@@ -5,26 +5,31 @@
</portal_type>
<portal_type id="Delivery Root Simulation Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
<portal_type id="Delivery Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
<portal_type id="Delivery Simulation Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
<portal_type id="Order Root Simulation Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
<portal_type id="Order Rule">
<item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item>
</portal_type>
......
Business Process | Business Path
Business Process | Business State
Delivery Root Simulation Rule | Category Divergence Tester
Delivery Root Simulation Rule | Composed Divergence Tester
Delivery Root Simulation Rule | Property Divergence Tester
Delivery Root Simulation Rule | Quantity Divergence Tester
Delivery Rule | Category Divergence Tester
Delivery Rule | Composed Divergence Tester
Delivery Rule | Property Divergence Tester
Delivery Rule | Quantity Divergence Tester
Delivery Simulation Rule | Category Divergence Tester
Delivery Simulation Rule | Composed Divergence Tester
Delivery Simulation Rule | Property Divergence Tester
Delivery Simulation Rule | Quantity Divergence Tester
Order Root Simulation Rule | Category Divergence Tester
Order Root Simulation Rule | Composed Divergence Tester
Order Root Simulation Rule | Property Divergence Tester
Order Root Simulation Rule | Quantity Divergence Tester
Order Rule | Category Divergence Tester
Order Rule | Composed Divergence Tester
Order Rule | Property Divergence Tester
Order Rule | Quantity Divergence Tester
Purchase Order | Trade Model Line
......
......@@ -26,7 +26,6 @@ libSDL_gfx-devel
libSDL_image-devel
libboost-devel
libbzip2-devel
libgc-devel
libgdbm-devel
libglib2-devel
libgomp-devel
......
......@@ -11,6 +11,12 @@ find-links =
http://www.nexedi.org/static/packages/source/
http://ibid.omnia.za.net/eggs/
extensions =
mr.developer
buildout.dumppickedversions
dump-picked-versions-file = dumped-versions.cfg
overwrite-picked-versions-file = true
[create-directories]
recipe = plone.recipe.command
command =
......
......@@ -21,9 +21,6 @@ development_site_products =
development_site_instancehome = ${buildout:var-directory}/development-site
[software_definition]
software_home = ${buildout:directory}
[runUnitTest]
<= test-runner-template
products = ${configuration:development_site_products}
......
[buildout]
software_home = ${:directory}
extensions +=
mr.developer
buildout.dumppickedversions
extends =
../profiles/versions-2.12.cfg
......
......@@ -3,8 +3,6 @@
# mysql, frontend, load balancer, etc.)
[buildout]
software_home = ${:directory}
extensions +=
buildout.dumppickedversions
extends =
../profiles/versions.cfg
......
......@@ -16,6 +16,7 @@ ipython = 0.10
numpy = 1.3.0
plone.recipe.zope2instance = 3.6
erp5.recipe.standaloneinstance >= 0.4
erp5.recipe.mysqlserver >= 1.1.3
rdiff-backup = 1.0.5
pysvn = 1.7.2
xml-marshaller >= 0.9.2
......
......@@ -8,7 +8,7 @@ itools = 0.20.8
numpy = 1.3.0
plone.recipe.zope2instance = 3.6
erp5.recipe.standaloneinstance >= 0.4
erp5.recipe.mysqlserver >= 1.1.1
erp5.recipe.mysqlserver >= 1.1.3
pysvn = 1.7.2
xml-marshaller >= 0.9.2
rdiff-backup = 1.0.5
......
......@@ -59,6 +59,7 @@ from Products.ERP5.mixin.cached_convertable import CachedConvertableMixin
from Products.ERP5.mixin.text_convertable import TextConvertableMixin
from Products.ERP5.mixin.downloadable import DownloadableMixin
from Products.ERP5.mixin.document import DocumentMixin
from Products.ERP5.mixin.extensible_traversable import DocumentExtensibleTraversableMixIn
_MARKER = []
VALID_ORDER_KEY_LIST = ('user_login', 'content', 'file_name', 'input')
......@@ -128,129 +129,6 @@ class DocumentProxyError(Exception):pass
class NotConvertedError(Exception):pass
allow_class(NotConvertedError)
class PermanentURLMixIn(ExtensibleTraversableMixIn):
"""
Provides access to documents through their permanent URL.
This class must be inherited by all document classes so
that documents displayed outside a Web Site / Web Section
can also use the permanent URL principle.
"""
# Declarative security
security = ClassSecurityInfo()
def _forceIdentification(self, request):
# force identification (usable for extensible content)
cache = getReadOnlyTransactionCache(self)
if cache is not None:
key = ('__bobo_traverse__', self, 'user')
try:
user = cache[key]
except KeyError:
user = _MARKER
else:
user = _MARKER
old_user = getSecurityManager().getUser()
if user is _MARKER:
user = None # By default, do nothing
if old_user is None or old_user.getUserName() == 'Anonymous User':
user_folder = getattr(self.getPortalObject(), 'acl_users', None)
if user_folder is not None:
try:
if request.get('PUBLISHED', _MARKER) is _MARKER:
# request['PUBLISHED'] is required by validate
request['PUBLISHED'] = self
has_published = False
else:
has_published = True
try:
user = user_folder.validate(request)
except AttributeError:
# This kind of error happens with unrestrictedTraverse,
# because the request object is a fake, and it is just
# a dict object.
user = None
if not has_published:
try:
del request.other['PUBLISHED']
except AttributeError:
# The same here as above. unrestrictedTraverse provides
# just a plain dict, so request.other does not exist.
del request['PUBLISHED']
except:
LOG("ERP5 WARNING",0,
"Failed to retrieve user in __bobo_traverse__ of WebSection %s" % self.getPath(),
error=sys.exc_info())
user = None
if user is not None and user.getUserName() == 'Anonymous User':
user = None # If the user which is connected is anonymous,
# do not try to change SecurityManager
if cache is not None:
cache[key] = user
old_manager = None
if user is not None:
# We need to perform identification
old_manager = getSecurityManager()
newSecurityManager(get_request(), user)
return old_manager, user
### Extensible content
def _getExtensibleContent(self, request, name):
# Permanent URL traversal
old_manager, user = self._forceIdentification(request)
# Next get the document per name
portal = self.getPortalObject()
document = self.getDocumentValue(name=name, portal=portal)
# restore original security context if there's a logged in user
if user is not None:
setSecurityManager(old_manager)
if document is not None:
document = aq_base(document.asContext(id=name, # Hide some properties to permit locating the original
original_container=document.getParentValue(),
original_id=document.getId(),
editable_absolute_url=document.absolute_url()))
return document.__of__(self)
# no document found for current user, still such document may exists
# in some cases user (like Anonymous) can not view document according to portal catalog
# but we may ask him to login if such a document exists
isAuthorizationForced = getattr(self, 'isAuthorizationForced', None)
if isAuthorizationForced is not None and isAuthorizationForced():
if unrestricted_apply(self.getDocumentValue, (name, portal)) is not None:
# force user to login as specified in Web Section
raise Unauthorized
security.declareProtected(Permissions.View, 'getDocumentValue')
def getDocumentValue(self, name=None, portal=None, **kw):
"""
Return the default document with the given
name. The name parameter may represent anything
such as a document reference, an identifier,
etc.
If name is not provided, the method defaults
to returning the default document by calling
getDefaultDocumentValue.
kw parameters can be useful to filter content
(ex. force a given validation state)
This method must be implemented through a
portal type dependent script:
WebSection_getDocumentValue
"""
if name is None:
return self.getDefaultDocumentValue()
method = self._getTypeBasedMethod('getDocumentValue',
fallback_script_id='WebSection_getDocumentValue')
document = method(name, portal=portal, **kw)
if document is not None:
return document.__of__(self)
class DocumentProxyMixin:
"""
Provides access to documents referenced by the follow_up field
......@@ -329,7 +207,7 @@ class UpdateMixIn:
return method()
class Document(PermanentURLMixIn, XMLObject, UrlMixIn, CachedConvertableMixin,
class Document(DocumentExtensibleTraversableMixIn, XMLObject, UrlMixIn, CachedConvertableMixin,
SnapshotMixin, UpdateMixIn, TextConvertableMixin,
DownloadableMixin, DocumentMixin):
"""Document is an abstract class with all methods related to document
......
......@@ -570,6 +570,9 @@ class SimulationMovement(PropertyRecordableMixin, Movement, ExplainableMixin):
if business_link is None or explanation_value is None:
return True
## XXX Code below following line has been moved to BusinessPath (cf r37116)
#return len(business_path.filterBuildableMovementList([self])) == 1
predecessor_state = business_link.getPredecessorValue()
if predecessor_state is None:
# first one, can be built
......
......@@ -30,8 +30,8 @@
from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions, PropertySheet
from Products.ERP5.Document.Domain import Domain
from Products.ERP5.Document.Document import PermanentURLMixIn
from Acquisition import aq_base, aq_inner
from Products.ERP5.mixin.extensible_traversable import DocumentExtensibleTraversableMixIn as PermanentURLMixIn
from Acquisition import aq_base, aq_inner
from Products.ERP5Type.UnrestrictedMethod import unrestricted_apply
from AccessControl import Unauthorized
from OFS.Traversable import NotFound
......
......@@ -550,7 +550,9 @@ class TemplateTool (BaseTool):
"""
# XXX: should check for file presence before trying to execute.
# XXX: should check if the unit test file is configured in the BT
site_configuration = getConfiguration()
from Products.ERP5Type.tests.runUnitTest import getUnitTestFile
import Products.ERP5
if RESPONSE is not None:
outfile = RESPONSE
elif REQUEST is not None:
......@@ -559,9 +561,42 @@ class TemplateTool (BaseTool):
outfile = StringIO()
if RESPONSE is not None:
RESPONSE.setHeader('Content-type', 'text/plain')
current_sys_path = sys.path
# add path with tests
current_sys_path.append(os.path.join(site_configuration.instancehome,
'tests'))
test_cmd_args = [sys.executable, getUnitTestFile()]
test_cmd_args += ['--erp5_sql_connection_string', sql_connection_string]
# pass currently used product path to test runner
products_path_list = site_configuration.products
# add products from Zope, as some sites are not providing it
zope_products_path = os.path.join(site_configuration.softwarehome, 'Products')
if zope_products_path not in products_path_list:
products_path_list.append(zope_products_path)
test_cmd_args += ['--products_path', ','.join(products_path_list)]
test_cmd_args += ['--sys_path', ','.join(current_sys_path)]
# to find erp5_core, erp5_xhtml_style and similar
bt5_path_list = [os.path.join(os.path.split(Products.ERP5.__file__)[0],
'bootstrap')]
## XXX-TODO: requires that asRepository works without security, maybe
## with special key?
# bt5_path_list.append(self.absolute_url() + '/asRepository/')
bt5_path_list.append(os.path.join(site_configuration.instancehome, 'bt5'))
# add locally saved Business Templates, not perfect, but helps some
# people doing strict TTW development
bt5_path_list.append(site_configuration.clienthome)
test_cmd_args += ['--bt5_path', ','.join(bt5_path_list)]
test_cmd_args += test_list
# prepare message - intentionally without any additional formatting, as
# only developer will read it, and they will have to understand issues in
# case of test failures
invoke_command_message = 'Running tests using command: %r'% test_cmd_args
# as it is like using external interface, log what is send there
LOG('TemplateTool.runUnitTestList', INFO, invoke_command_message)
# inform developer how test are invoked
outfile.write(invoke_command_message + '\n')
outfile.flush()
process = subprocess.Popen(test_cmd_args,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
......
1628
\ No newline at end of file
1631
\ No newline at end of file
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2009 Nexedi SA and Contributors. All Rights Reserved.
# Ivan Tyagov <ivan@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from zope.interface import Interface
class ILegacyExtensibleTraversable(Interface):
"""
Extensible Traversable legacy interface specification
"""
def _getExtensibleContent(request, name):
"""
Return extensible subcontent of context document during traversal.
"""
class IExtensibleTraversable(ILegacyExtensibleTraversable):
"""
Extensible Traversable interface specification
IExtensibleTraversable provides methods so a document may become a container for extensible content
during traversal.
"""
def getExtensibleContent(request, name):
"""
Return extensible subcontent of context document during traversal.
"""
\ No newline at end of file
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2009 Nexedi SA and Contributors. All Rights Reserved.
# Ivan Tyagov <ivan@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from zLOG import LOG
from Acquisition import aq_base
from Products.ERP5Type.Globals import get_request
from AccessControl import Unauthorized
from Products.ERP5Type.ExtensibleTraversable import ExtensibleTraversableMixIn
from Products.ERP5Type.Cache import getReadOnlyTransactionCache
from AccessControl import ClassSecurityInfo, getSecurityManager
from AccessControl.SecurityManagement import newSecurityManager, setSecurityManager
from Products.ERP5Type import Permissions
from Products.CMFCore.utils import getToolByName, _setCacheHeaders, _ViewEmulator
from OFS.Image import File as OFSFile
from warnings import warn
# XXX: these duplicate ones in ERP5.Document
_MARKER = []
EMBEDDED_FORMAT = '_embedded'
class ConversionError(Exception):pass
class DocumentProxyError(Exception):pass
class NotConvertedError(Exception):pass
class BaseExtensibleTraversableMixIn(ExtensibleTraversableMixIn):
"""
This class provides a generic base mixin implementation of IExtensibleTraversable.
Provides access to documents through their permanent URL.
This class shoulf be used as a base mixin class using which can be used create
"extensible" mixin classes.
"""
def _getExtensibleContent(self, request, name):
"""
Legacy API
"""
warn("_getExtensibleContent() function is deprecated. Use getExtensibleContent() instead.", \
DeprecationWarning, stacklevel=2)
return self.getExtensibleContent(request, name)
# Declarative security
security = ClassSecurityInfo()
def _forceIdentification(self, request):
# force identification (usable for extensible content)
cache = getReadOnlyTransactionCache(self)
if cache is not None:
key = ('__bobo_traverse__', self, 'user')
try:
user = cache[key]
except KeyError:
user = _MARKER
else:
user = _MARKER
old_user = getSecurityManager().getUser()
if user is _MARKER:
user = None # By default, do nothing
if old_user is None or old_user.getUserName() == 'Anonymous User':
user_folder = getattr(self.getPortalObject(), 'acl_users', None)
if user_folder is not None:
try:
if request.get('PUBLISHED', _MARKER) is _MARKER:
# request['PUBLISHED'] is required by validate
request['PUBLISHED'] = self
has_published = False
else:
has_published = True
try:
user = user_folder.validate(request)
except AttributeError:
# This kind of error happens with unrestrictedTraverse,
# because the request object is a fake, and it is just
# a dict object.
user = None
if not has_published:
try:
del request.other['PUBLISHED']
except AttributeError:
# The same here as above. unrestrictedTraverse provides
# just a plain dict, so request.other does not exist.
del request['PUBLISHED']
except:
LOG("ERP5 WARNING",0,
"Failed to retrieve user in __bobo_traverse__ of WebSection %s" % self.getPath(),
error=sys.exc_info())
user = None
if user is not None and user.getUserName() == 'Anonymous User':
user = None # If the user which is connected is anonymous,
# do not try to change SecurityManager
if cache is not None:
cache[key] = user
old_manager = None
if user is not None:
# We need to perform identification
old_manager = getSecurityManager()
newSecurityManager(get_request(), user)
return old_manager, user
security.declareProtected(Permissions.View, 'getDocumentValue')
def getDocumentValue(self, name=None, portal=None, **kw):
"""
Return the default document with the given
name. The name parameter may represent anything
such as a document reference, an identifier,
etc.
If name is not provided, the method defaults
to returning the default document by calling
getDefaultDocumentValue.
kw parameters can be useful to filter content
(ex. force a given validation state)
This method must be implemented through a
portal type dependent script:
WebSection_getDocumentValue
"""
if name is None:
return self.getDefaultDocumentValue()
method = self._getTypeBasedMethod('getDocumentValue',
fallback_script_id='WebSection_getDocumentValue')
document = method(name, portal=portal, **kw)
if document is not None:
return document.__of__(self)
class DocumentExtensibleTraversableMixIn(BaseExtensibleTraversableMixIn):
"""
This class provides a implementation of IExtensibleTraversable for Document classed based documents.
"""
def getExtensibleContent(self, request, name):
old_manager, user = self._forceIdentification(request)
# Next get the document per name
portal = self.getPortalObject()
document = self.getDocumentValue(name=name, portal=portal)
# restore original security context if there's a logged in user
if user is not None:
setSecurityManager(old_manager)
if document is not None:
document = aq_base(document.asContext(id=name, # Hide some properties to permit locating the original
original_container=document.getParentValue(),
original_id=document.getId(),
editable_absolute_url=document.absolute_url()))
return document.__of__(self)
# no document found for current user, still such document may exists
# in some cases user (like Anonymous) can not view document according to portal catalog
# but we may ask him to login if such a document exists
isAuthorizationForced = getattr(self, 'isAuthorizationForced', None)
if isAuthorizationForced is not None and isAuthorizationForced():
if unrestricted_apply(self.getDocumentValue, (name, portal)) is not None:
# force user to login as specified in Web Section
raise Unauthorized
class OOoDocumentExtensibleTraversableMixIn(BaseExtensibleTraversableMixIn):
"""
This class provides a implementation of IExtensibleTraversable for OOoDocument classed based documents.
"""
def getExtensibleContent(self, request, name):
# Be sure that html conversion is done,
# as it is required to extract extensible content
old_manager, user = self._forceIdentification(request)
web_cache_kw = {'name': name,
'format': EMBEDDED_FORMAT}
try:
self._convert(format='html')
_setCacheHeaders(_ViewEmulator().__of__(self), web_cache_kw)
mime, data = self.getConversion(format=EMBEDDED_FORMAT, file_name=name)
document = OFSFile(name, name, data, content_type=mime).__of__(self.aq_parent)
except (NotConvertedError, ConversionError, KeyError):
document = DocumentExtensibleTraversableMixIn._getExtensibleContent(self, request, name)
# restore original security context if there's a logged in user
if user is not None:
setSecurityManager(old_manager)
return document
\ No newline at end of file
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsibility of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# guarantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
##############################################################################
from AccessControl import ClassSecurityInfo
from Products.ERP5Type.XMLObject import XMLObject
from Products.ERP5Type import Permissions, PropertySheet
class ComposedDivergenceTester(XMLObject):
"""
The purpose of this divergence tester is to group several testes to
make a tester atomic per a target solver.
"""
meta_type = 'ERP5 Composed Divergence Tester'
portal_type = 'Composed Divergence Tester'
add_permission = Permissions.AddPortalContent
# Declarative security
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
# Declarative properties
property_sheets = ( PropertySheet.Base
, PropertySheet.XMLObject
, PropertySheet.CategoryCore
, PropertySheet.DublinCore
, PropertySheet.DivergenceTester
, PropertySheet.SolverSelection
)
def test(self, simulation_movement):
"""
If one of inside testers says divergent, then this method returns
False, otherwise it returns True.
"""
for tester in self.objectValues():
if not tester.test(simulation_movement):
return False
return True
def explain(self, simulation_movement):
"""
Returns a list of messages which come from inside testers.
"""
message_list = []
for tester in self.objectValues():
message = tester.explain(simulation_movement)
message_list.extend(message)
return message_list
def getTestedPropertyList(self, default=None):
"""
Returns all tested properties in inside testers.
"""
return sum([x.getTestedPropertyList() for x in self.objectValues()], [])
......@@ -45,7 +45,7 @@ from Products.CMFCore.utils import getToolByName, _setCacheHeaders,\
from Products.ERP5Type import Permissions, PropertySheet, Constraint
from Products.ERP5Type.Cache import CachingMethod
from Products.ERP5.Document.File import File
from Products.ERP5.Document.Document import Document, PermanentURLMixIn,\
from Products.ERP5.Document.Document import Document,\
VALID_IMAGE_FORMAT_LIST, ConversionError, NotConvertedError
from AccessControl.SecurityManagement import setSecurityManager
from Products.ERP5Type.Utils import fill_args_from_request
......@@ -54,6 +54,7 @@ from zLOG import LOG, ERROR
# Mixin Import
from Products.ERP5.mixin.base_convertable import BaseConvertableFileMixin
from Products.ERP5.mixin.text_convertable import TextConvertableMixin
from Products.ERP5.mixin.extensible_traversable import OOoDocumentExtensibleTraversableMixIn
enc=base64.encodestring
dec=base64.decodestring
......@@ -90,7 +91,7 @@ class TimeoutTransport(SafeTransport):
return SafeTransport.make_connection(self, h)
class OOoDocument(PermanentURLMixIn, BaseConvertableFileMixin, File,
class OOoDocument(OOoDocumentExtensibleTraversableMixIn, BaseConvertableFileMixin, File,
TextConvertableMixin, Document):
"""
A file document able to convert OOo compatible files to
......@@ -441,24 +442,6 @@ class OOoDocument(PermanentURLMixIn, BaseConvertableFileMixin, File,
zip_file.close()
archive_file.close()
def _getExtensibleContent(self, request, name):
# Be sure that html conversion is done,
# as it is required to extract extensible content
old_manager, user = self._forceIdentification(request)
web_cache_kw = {'name': name,
'format': EMBEDDED_FORMAT}
try:
self._convert(format='html')
_setCacheHeaders(_ViewEmulator().__of__(self), web_cache_kw)
mime, data = self.getConversion(format=EMBEDDED_FORMAT, file_name=name)
document = OFSFile(name, name, data, content_type=mime).__of__(self.aq_parent)
except (NotConvertedError, ConversionError, KeyError):
document = PermanentURLMixIn._getExtensibleContent(self, request, name)
# restore original security context if there's a logged in user
if user is not None:
setSecurityManager(old_manager)
return document
security.declarePrivate('_convertToBaseFormat')
def _convertToBaseFormat(self):
"""
......
......@@ -115,7 +115,10 @@ Options:
Make ZServer listen on given host:port
If used with --activity_node=, this can be a
comma-separated list of addresses.
--products_path=path,path Comma-separated list of products paths locations
which shall be used in test environment.
--sys_path=path,path Comma-separated list of paths which will be used to
extend sys.path
When no unit test is specified, only activities are processed.
"""
......@@ -392,6 +395,8 @@ def runUnitTestList(test_list, verbosity=1, debug=0):
# On Zope 2.12, import_products() is called by ERP5TestCase before it is
# patched by the layer.setUp() call.
import OFS.Application
if os.environ.get('products_path'):
OFS.Application.Products.__path__ = os.environ.get('products_path').split(',')
import_products = OFS.Application.import_products
from Testing import ZopeTestCase # Zope 2.8: this will import custom_zodb.py
OFS.Application.import_products = import_products
......@@ -613,6 +618,8 @@ def main():
"zeo_client=",
"zeo_server=",
"zserver=",
"products_path=",
"sys_path="
])
except getopt.GetoptError, msg:
usage(sys.stderr, msg)
......@@ -702,6 +709,10 @@ def main():
os.environ["zeo_server"] = arg
elif opt == "--zserver":
os.environ["zserver"] = arg
elif opt == "--products_path":
os.environ["products_path"] = arg
elif opt == "--sys_path":
sys.path.extend(arg.split(','))
initializeInstanceHome(tests_framework_home, real_instance_home, instance_home)
......
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