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> <allowed_content_type_list>
<portal_type id="Accounting Transaction Root Simulation Rule"> <portal_type id="Accounting Transaction Root Simulation Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
<portal_type id="Invoice Root Simulation Rule"> <portal_type id="Invoice Root Simulation Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
<portal_type id="Invoice Rule"> <portal_type id="Invoice Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
<portal_type id="Payment Rule"> <portal_type id="Payment Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
<portal_type id="Payment Simulation Rule"> <portal_type id="Payment Simulation Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
<portal_type id="Rule Tool"> <portal_type id="Rule Tool">
......
Accounting Transaction Root Simulation Rule | Category Divergence Tester 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 | Property Divergence Tester
Accounting Transaction Root Simulation Rule | Quantity Divergence Tester Accounting Transaction Root Simulation Rule | Quantity Divergence Tester
Invoice Root Simulation Rule | Category 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 | Property Divergence Tester
Invoice Root Simulation Rule | Quantity Divergence Tester Invoice Root Simulation Rule | Quantity Divergence Tester
Invoice Rule | Category Divergence Tester Invoice Rule | Category Divergence Tester
Invoice Rule | Composed Divergence Tester
Invoice Rule | Property Divergence Tester Invoice Rule | Property Divergence Tester
Invoice Rule | Quantity Divergence Tester Invoice Rule | Quantity Divergence Tester
Payment Rule | Category Divergence Tester Payment Rule | Category Divergence Tester
Payment Rule | Composed Divergence Tester
Payment Rule | Property Divergence Tester Payment Rule | Property Divergence Tester
Payment Rule | Quantity Divergence Tester Payment Rule | Quantity Divergence Tester
Payment Simulation Rule | Category Divergence Tester Payment Simulation Rule | Category Divergence Tester
Payment Simulation Rule | Property Divergence Tester Payment Simulation Rule | Property Divergence Tester
Payment Simulation Rule | Composed Divergence Tester
Payment Simulation Rule | Quantity Divergence Tester Payment Simulation Rule | Quantity Divergence Tester
Rule Tool | Invoice Rule Rule Tool | Invoice Rule
Rule Tool | Payment 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 @@ ...@@ -5,8 +5,10 @@
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
<portal_type id="Invoice Transaction Rule"> <portal_type id="Invoice Transaction Rule">
<item>Composed Divergence Tester</item>
<item>Accounting Rule Cell</item> <item>Accounting Rule Cell</item>
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Predicate</item> <item>Predicate</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
...@@ -14,10 +16,12 @@ ...@@ -14,10 +16,12 @@
<portal_type id="Invoice Transaction Simulation Rule"> <portal_type id="Invoice Transaction Simulation Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
<portal_type id="Invoicing Rule"> <portal_type id="Invoicing Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
...@@ -28,11 +32,13 @@ ...@@ -28,11 +32,13 @@
</portal_type> </portal_type>
<portal_type id="Trade Model Rule"> <portal_type id="Trade Model Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
<portal_type id="Trade Model Simulation Rule"> <portal_type id="Trade Model Simulation Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
......
Invoice Simulation Rule | Category Divergence Tester Invoice Simulation Rule | Category Divergence Tester
Invoice Simulation Rule | Property Divergence Tester Invoice Simulation Rule | Property Divergence Tester
Invoice Simulation Rule | Quantity Divergence Tester Invoice Simulation Rule | Quantity Divergence Tester
Invoice Simulation Rule | Composed Divergence Tester
Invoice Transaction Rule | Accounting Rule Cell Invoice Transaction Rule | Accounting Rule Cell
Invoice Transaction Rule | Category Divergence Tester Invoice Transaction Rule | Category Divergence Tester
Invoice Transaction Rule | Composed Divergence Tester
Invoice Transaction Rule | Predicate Invoice Transaction Rule | Predicate
Invoice Transaction Rule | Property Divergence Tester Invoice Transaction Rule | Property Divergence Tester
Invoice Transaction Rule | Quantity Divergence Tester Invoice Transaction Rule | Quantity Divergence Tester
Invoice Transaction Simulation Rule | Category Divergence Tester Invoice Transaction Simulation Rule | Category Divergence Tester
Invoice Transaction Simulation Rule | Property Divergence Tester Invoice Transaction Simulation Rule | Property Divergence Tester
Invoice Transaction Simulation Rule | Composed Divergence Tester
Invoice Transaction Simulation Rule | Quantity Divergence Tester Invoice Transaction Simulation Rule | Quantity Divergence Tester
Invoicing Rule | Category Divergence Tester Invoicing Rule | Category Divergence Tester
Invoicing Rule | Composed Divergence Tester
Invoicing Rule | Property Divergence Tester Invoicing Rule | Property Divergence Tester
Invoicing Rule | Quantity Divergence Tester Invoicing Rule | Quantity Divergence Tester
Rule Tool | Invoice Transaction Rule Rule Tool | Invoice Transaction Rule
Rule Tool | Invoicing Rule Rule Tool | Invoicing Rule
Rule Tool | Trade Model Rule Rule Tool | Trade Model Rule
Trade Model Rule | Category Divergence Tester Trade Model Rule | Category Divergence Tester
Trade Model Rule | Composed Divergence Tester
Trade Model Rule | Property Divergence Tester Trade Model Rule | Property Divergence Tester
Trade Model Rule | Quantity Divergence Tester Trade Model Rule | Quantity Divergence Tester
Trade Model Simulation Rule | Category 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 | Property Divergence Tester
Trade Model Simulation Rule | Quantity Divergence Tester Trade Model Simulation Rule | Quantity Divergence Tester
\ No newline at end of file
...@@ -8,11 +8,13 @@ ...@@ -8,11 +8,13 @@
</portal_type> </portal_type>
<portal_type id="Production Order Model Root Simulation Rule"> <portal_type id="Production Order Model Root Simulation Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
<portal_type id="Production Order Model Rule"> <portal_type id="Production Order Model Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
...@@ -21,11 +23,13 @@ ...@@ -21,11 +23,13 @@
</portal_type> </portal_type>
<portal_type id="Production Order Root Simulation Rule"> <portal_type id="Production Order Root Simulation Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
<portal_type id="Production Order Rule"> <portal_type id="Production Order Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
...@@ -66,21 +70,25 @@ ...@@ -66,21 +70,25 @@
</portal_type> </portal_type>
<portal_type id="Transformation Model Rule"> <portal_type id="Transformation Model Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
<portal_type id="Transformation Rule"> <portal_type id="Transformation Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
<portal_type id="Transformation Sourcing Model Rule"> <portal_type id="Transformation Sourcing Model Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
<portal_type id="Transformation Sourcing Rule"> <portal_type id="Transformation Sourcing Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
......
446 447
\ No newline at end of file \ No newline at end of file
Production Order Line | Production Order Cell Production Order Line | Production Order Cell
Production Order Model Root Simulation Rule | Category Divergence Tester 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 | Property Divergence Tester
Production Order Model Root Simulation Rule | Quantity Divergence Tester Production Order Model Root Simulation Rule | Quantity Divergence Tester
Production Order Model Rule | Category 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 | Property Divergence Tester
Production Order Model Rule | Quantity Divergence Tester Production Order Model Rule | Quantity Divergence Tester
Production Order Module | Production Order Production Order Module | Production Order
Production Order Root Simulation Rule | Category Divergence Tester 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 | Property Divergence Tester
Production Order Root Simulation Rule | Quantity Divergence Tester Production Order Root Simulation Rule | Quantity Divergence Tester
Production Order Rule | Category Divergence Tester Production Order Rule | Category Divergence Tester
Production Order Rule | Composed Divergence Tester
Production Order Rule | Property Divergence Tester Production Order Rule | Property Divergence Tester
Production Order Rule | Quantity Divergence Tester Production Order Rule | Quantity Divergence Tester
Production Order | Payment Condition Production Order | Payment Condition
...@@ -32,14 +36,18 @@ Supply Chain Module | Supply Chain ...@@ -32,14 +36,18 @@ Supply Chain Module | Supply Chain
Supply Chain | Supply Link Supply Chain | Supply Link
Supply Chain | Supply Node Supply Chain | Supply Node
Transformation Model Rule | Category Divergence Tester Transformation Model Rule | Category Divergence Tester
Transformation Model Rule | Composed Divergence Tester
Transformation Model Rule | Property Divergence Tester Transformation Model Rule | Property Divergence Tester
Transformation Model Rule | Quantity Divergence Tester Transformation Model Rule | Quantity Divergence Tester
Transformation Rule | Category Divergence Tester Transformation Rule | Category Divergence Tester
Transformation Rule | Composed Divergence Tester
Transformation Rule | Property Divergence Tester Transformation Rule | Property Divergence Tester
Transformation Rule | Quantity Divergence Tester Transformation Rule | Quantity Divergence Tester
Transformation Sourcing Model Rule | Category 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 | Property Divergence Tester
Transformation Sourcing Model Rule | Quantity Divergence Tester Transformation Sourcing Model Rule | Quantity Divergence Tester
Transformation Sourcing Rule | Category Divergence Tester Transformation Sourcing Rule | Category Divergence Tester
Transformation Sourcing Rule | Composed Divergence Tester
Transformation Sourcing Rule | Property Divergence Tester Transformation Sourcing Rule | Property Divergence Tester
Transformation Sourcing Rule | Quantity 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 @@ ...@@ -3,6 +3,10 @@
<type>Category Divergence Tester</type> <type>Category Divergence Tester</type>
<workflow>edit_workflow</workflow> <workflow>edit_workflow</workflow>
</chain> </chain>
<chain>
<type>Composed Divergence Tester</type>
<workflow>edit_workflow</workflow>
</chain>
<chain> <chain>
<type>Property Divergence Tester</type> <type>Property Divergence Tester</type>
<workflow>edit_workflow</workflow> <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 Category Divergence Tester | view
Composed Divergence Tester | view
Property Divergence Tester | view Property Divergence Tester | view
Quantity 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 Category Divergence Tester
Composed Divergence Tester
Property Divergence Tester Property Divergence Tester
Quantity Divergence Tester Quantity Divergence Tester
\ No newline at end of file
Category Divergence Tester | edit_workflow Category Divergence Tester | edit_workflow
Composed Divergence Tester | edit_workflow
Property Divergence Tester | edit_workflow Property Divergence Tester | edit_workflow
Quantity Divergence Tester | edit_workflow Quantity Divergence Tester | edit_workflow
\ No newline at end of file
...@@ -61,8 +61,10 @@ order = context\n ...@@ -61,8 +61,10 @@ order = context\n
category_list = [\n category_list = [\n
\'source\', \'source_section\', \'source_decision\',\n \'source\', \'source_section\', \'source_decision\',\n
\'source_administration\', \'source_payment\', \'source_project\',\n \'source_administration\', \'source_payment\', \'source_project\',\n
\'source_carrier\', \'source_referral\', \'source_function\',\n
\'destination\', \'destination_section\', \'destination_decision\',\n \'destination\', \'destination_section\', \'destination_decision\',\n
\'destination_administration\', \'destination_payment\', \'destination_project\',\n \'destination_administration\', \'destination_payment\', \'destination_project\',\n
\'destination_carrier\', \'destination_referral\', \'destination_function\',\n
\'price_currency\', \'incoterm\', \'delivery_mode\',\n \'price_currency\', \'incoterm\', \'delivery_mode\',\n
]\n ]\n
new_category_dict = {}\n new_category_dict = {}\n
......
2010-08-07 JPS 2010-08-07 JPS
* make the terms match payment condition and capacity property sheets in TradeModelPath_view * 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 2010-06-22 JPS
* Business Path now split into Business Link and Trade Model Path * Business Path now split into Business Link and Trade Model Path
......
...@@ -5,26 +5,31 @@ ...@@ -5,26 +5,31 @@
</portal_type> </portal_type>
<portal_type id="Delivery Root Simulation Rule"> <portal_type id="Delivery Root Simulation Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
<portal_type id="Delivery Rule"> <portal_type id="Delivery Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
<portal_type id="Delivery Simulation Rule"> <portal_type id="Delivery Simulation Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
<portal_type id="Order Root Simulation Rule"> <portal_type id="Order Root Simulation Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
<portal_type id="Order Rule"> <portal_type id="Order Rule">
<item>Category Divergence Tester</item> <item>Category Divergence Tester</item>
<item>Composed Divergence Tester</item>
<item>Property Divergence Tester</item> <item>Property Divergence Tester</item>
<item>Quantity Divergence Tester</item> <item>Quantity Divergence Tester</item>
</portal_type> </portal_type>
......
Business Process | Business Path Business Process | Business Path
Business Process | Business State Business Process | Business State
Delivery Root Simulation Rule | Category Divergence Tester 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 | Property Divergence Tester
Delivery Root Simulation Rule | Quantity Divergence Tester Delivery Root Simulation Rule | Quantity Divergence Tester
Delivery Rule | Category Divergence Tester Delivery Rule | Category Divergence Tester
Delivery Rule | Composed Divergence Tester
Delivery Rule | Property Divergence Tester Delivery Rule | Property Divergence Tester
Delivery Rule | Quantity Divergence Tester Delivery Rule | Quantity Divergence Tester
Delivery Simulation Rule | Category Divergence Tester Delivery Simulation Rule | Category Divergence Tester
Delivery Simulation Rule | Composed Divergence Tester
Delivery Simulation Rule | Property Divergence Tester Delivery Simulation Rule | Property Divergence Tester
Delivery Simulation Rule | Quantity Divergence Tester Delivery Simulation Rule | Quantity Divergence Tester
Order Root Simulation Rule | Category 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 | Property Divergence Tester
Order Root Simulation Rule | Quantity Divergence Tester Order Root Simulation Rule | Quantity Divergence Tester
Order Rule | Category Divergence Tester Order Rule | Category Divergence Tester
Order Rule | Composed Divergence Tester
Order Rule | Property Divergence Tester Order Rule | Property Divergence Tester
Order Rule | Quantity Divergence Tester Order Rule | Quantity Divergence Tester
Purchase Order | Trade Model Line Purchase Order | Trade Model Line
......
...@@ -26,7 +26,6 @@ libSDL_gfx-devel ...@@ -26,7 +26,6 @@ libSDL_gfx-devel
libSDL_image-devel libSDL_image-devel
libboost-devel libboost-devel
libbzip2-devel libbzip2-devel
libgc-devel
libgdbm-devel libgdbm-devel
libglib2-devel libglib2-devel
libgomp-devel libgomp-devel
......
...@@ -11,6 +11,12 @@ find-links = ...@@ -11,6 +11,12 @@ find-links =
http://www.nexedi.org/static/packages/source/ http://www.nexedi.org/static/packages/source/
http://ibid.omnia.za.net/eggs/ 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] [create-directories]
recipe = plone.recipe.command recipe = plone.recipe.command
command = command =
......
...@@ -21,9 +21,6 @@ development_site_products = ...@@ -21,9 +21,6 @@ development_site_products =
development_site_instancehome = ${buildout:var-directory}/development-site development_site_instancehome = ${buildout:var-directory}/development-site
[software_definition]
software_home = ${buildout:directory}
[runUnitTest] [runUnitTest]
<= test-runner-template <= test-runner-template
products = ${configuration:development_site_products} products = ${configuration:development_site_products}
......
[buildout] [buildout]
software_home = ${:directory} software_home = ${:directory}
extensions +=
mr.developer
buildout.dumppickedversions
extends = extends =
../profiles/versions-2.12.cfg ../profiles/versions-2.12.cfg
......
...@@ -3,8 +3,6 @@ ...@@ -3,8 +3,6 @@
# mysql, frontend, load balancer, etc.) # mysql, frontend, load balancer, etc.)
[buildout] [buildout]
software_home = ${:directory} software_home = ${:directory}
extensions +=
buildout.dumppickedversions
extends = extends =
../profiles/versions.cfg ../profiles/versions.cfg
......
...@@ -16,6 +16,7 @@ ipython = 0.10 ...@@ -16,6 +16,7 @@ ipython = 0.10
numpy = 1.3.0 numpy = 1.3.0
plone.recipe.zope2instance = 3.6 plone.recipe.zope2instance = 3.6
erp5.recipe.standaloneinstance >= 0.4 erp5.recipe.standaloneinstance >= 0.4
erp5.recipe.mysqlserver >= 1.1.3
rdiff-backup = 1.0.5 rdiff-backup = 1.0.5
pysvn = 1.7.2 pysvn = 1.7.2
xml-marshaller >= 0.9.2 xml-marshaller >= 0.9.2
......
...@@ -8,7 +8,7 @@ itools = 0.20.8 ...@@ -8,7 +8,7 @@ itools = 0.20.8
numpy = 1.3.0 numpy = 1.3.0
plone.recipe.zope2instance = 3.6 plone.recipe.zope2instance = 3.6
erp5.recipe.standaloneinstance >= 0.4 erp5.recipe.standaloneinstance >= 0.4
erp5.recipe.mysqlserver >= 1.1.1 erp5.recipe.mysqlserver >= 1.1.3
pysvn = 1.7.2 pysvn = 1.7.2
xml-marshaller >= 0.9.2 xml-marshaller >= 0.9.2
rdiff-backup = 1.0.5 rdiff-backup = 1.0.5
......
...@@ -59,6 +59,7 @@ from Products.ERP5.mixin.cached_convertable import CachedConvertableMixin ...@@ -59,6 +59,7 @@ from Products.ERP5.mixin.cached_convertable import CachedConvertableMixin
from Products.ERP5.mixin.text_convertable import TextConvertableMixin from Products.ERP5.mixin.text_convertable import TextConvertableMixin
from Products.ERP5.mixin.downloadable import DownloadableMixin from Products.ERP5.mixin.downloadable import DownloadableMixin
from Products.ERP5.mixin.document import DocumentMixin from Products.ERP5.mixin.document import DocumentMixin
from Products.ERP5.mixin.extensible_traversable import DocumentExtensibleTraversableMixIn
_MARKER = [] _MARKER = []
VALID_ORDER_KEY_LIST = ('user_login', 'content', 'file_name', 'input') VALID_ORDER_KEY_LIST = ('user_login', 'content', 'file_name', 'input')
...@@ -128,129 +129,6 @@ class DocumentProxyError(Exception):pass ...@@ -128,129 +129,6 @@ class DocumentProxyError(Exception):pass
class NotConvertedError(Exception):pass class NotConvertedError(Exception):pass
allow_class(NotConvertedError) 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: class DocumentProxyMixin:
""" """
Provides access to documents referenced by the follow_up field Provides access to documents referenced by the follow_up field
...@@ -329,7 +207,7 @@ class UpdateMixIn: ...@@ -329,7 +207,7 @@ class UpdateMixIn:
return method() return method()
class Document(PermanentURLMixIn, XMLObject, UrlMixIn, CachedConvertableMixin, class Document(DocumentExtensibleTraversableMixIn, XMLObject, UrlMixIn, CachedConvertableMixin,
SnapshotMixin, UpdateMixIn, TextConvertableMixin, SnapshotMixin, UpdateMixIn, TextConvertableMixin,
DownloadableMixin, DocumentMixin): DownloadableMixin, DocumentMixin):
"""Document is an abstract class with all methods related to document """Document is an abstract class with all methods related to document
......
...@@ -570,6 +570,9 @@ class SimulationMovement(PropertyRecordableMixin, Movement, ExplainableMixin): ...@@ -570,6 +570,9 @@ class SimulationMovement(PropertyRecordableMixin, Movement, ExplainableMixin):
if business_link is None or explanation_value is None: if business_link is None or explanation_value is None:
return True 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() predecessor_state = business_link.getPredecessorValue()
if predecessor_state is None: if predecessor_state is None:
# first one, can be built # first one, can be built
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions, PropertySheet from Products.ERP5Type import Permissions, PropertySheet
from Products.ERP5.Document.Domain import Domain from Products.ERP5.Document.Domain import Domain
from Products.ERP5.Document.Document import PermanentURLMixIn from Products.ERP5.mixin.extensible_traversable import DocumentExtensibleTraversableMixIn as PermanentURLMixIn
from Acquisition import aq_base, aq_inner from Acquisition import aq_base, aq_inner
from Products.ERP5Type.UnrestrictedMethod import unrestricted_apply from Products.ERP5Type.UnrestrictedMethod import unrestricted_apply
from AccessControl import Unauthorized from AccessControl import Unauthorized
......
...@@ -550,7 +550,9 @@ class TemplateTool (BaseTool): ...@@ -550,7 +550,9 @@ class TemplateTool (BaseTool):
""" """
# XXX: should check for file presence before trying to execute. # XXX: should check for file presence before trying to execute.
# XXX: should check if the unit test file is configured in the BT # XXX: should check if the unit test file is configured in the BT
site_configuration = getConfiguration()
from Products.ERP5Type.tests.runUnitTest import getUnitTestFile from Products.ERP5Type.tests.runUnitTest import getUnitTestFile
import Products.ERP5
if RESPONSE is not None: if RESPONSE is not None:
outfile = RESPONSE outfile = RESPONSE
elif REQUEST is not None: elif REQUEST is not None:
...@@ -559,9 +561,42 @@ class TemplateTool (BaseTool): ...@@ -559,9 +561,42 @@ class TemplateTool (BaseTool):
outfile = StringIO() outfile = StringIO()
if RESPONSE is not None: if RESPONSE is not None:
RESPONSE.setHeader('Content-type', 'text/plain') 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 = [sys.executable, getUnitTestFile()]
test_cmd_args += ['--erp5_sql_connection_string', sql_connection_string] 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 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, process = subprocess.Popen(test_cmd_args,
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT) stderr=subprocess.STDOUT)
......
1628 1631
\ No newline at end of file \ 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,\ ...@@ -45,7 +45,7 @@ from Products.CMFCore.utils import getToolByName, _setCacheHeaders,\
from Products.ERP5Type import Permissions, PropertySheet, Constraint from Products.ERP5Type import Permissions, PropertySheet, Constraint
from Products.ERP5Type.Cache import CachingMethod from Products.ERP5Type.Cache import CachingMethod
from Products.ERP5.Document.File import File 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 VALID_IMAGE_FORMAT_LIST, ConversionError, NotConvertedError
from AccessControl.SecurityManagement import setSecurityManager from AccessControl.SecurityManagement import setSecurityManager
from Products.ERP5Type.Utils import fill_args_from_request from Products.ERP5Type.Utils import fill_args_from_request
...@@ -54,6 +54,7 @@ from zLOG import LOG, ERROR ...@@ -54,6 +54,7 @@ from zLOG import LOG, ERROR
# Mixin Import # Mixin Import
from Products.ERP5.mixin.base_convertable import BaseConvertableFileMixin from Products.ERP5.mixin.base_convertable import BaseConvertableFileMixin
from Products.ERP5.mixin.text_convertable import TextConvertableMixin from Products.ERP5.mixin.text_convertable import TextConvertableMixin
from Products.ERP5.mixin.extensible_traversable import OOoDocumentExtensibleTraversableMixIn
enc=base64.encodestring enc=base64.encodestring
dec=base64.decodestring dec=base64.decodestring
...@@ -90,7 +91,7 @@ class TimeoutTransport(SafeTransport): ...@@ -90,7 +91,7 @@ class TimeoutTransport(SafeTransport):
return SafeTransport.make_connection(self, h) return SafeTransport.make_connection(self, h)
class OOoDocument(PermanentURLMixIn, BaseConvertableFileMixin, File, class OOoDocument(OOoDocumentExtensibleTraversableMixIn, BaseConvertableFileMixin, File,
TextConvertableMixin, Document): TextConvertableMixin, Document):
""" """
A file document able to convert OOo compatible files to A file document able to convert OOo compatible files to
...@@ -441,24 +442,6 @@ class OOoDocument(PermanentURLMixIn, BaseConvertableFileMixin, File, ...@@ -441,24 +442,6 @@ class OOoDocument(PermanentURLMixIn, BaseConvertableFileMixin, File,
zip_file.close() zip_file.close()
archive_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') security.declarePrivate('_convertToBaseFormat')
def _convertToBaseFormat(self): def _convertToBaseFormat(self):
""" """
......
...@@ -115,7 +115,10 @@ Options: ...@@ -115,7 +115,10 @@ Options:
Make ZServer listen on given host:port Make ZServer listen on given host:port
If used with --activity_node=, this can be a If used with --activity_node=, this can be a
comma-separated list of addresses. 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. When no unit test is specified, only activities are processed.
""" """
...@@ -392,6 +395,8 @@ def runUnitTestList(test_list, verbosity=1, debug=0): ...@@ -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 # On Zope 2.12, import_products() is called by ERP5TestCase before it is
# patched by the layer.setUp() call. # patched by the layer.setUp() call.
import OFS.Application 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 import_products = OFS.Application.import_products
from Testing import ZopeTestCase # Zope 2.8: this will import custom_zodb.py from Testing import ZopeTestCase # Zope 2.8: this will import custom_zodb.py
OFS.Application.import_products = import_products OFS.Application.import_products = import_products
...@@ -613,6 +618,8 @@ def main(): ...@@ -613,6 +618,8 @@ def main():
"zeo_client=", "zeo_client=",
"zeo_server=", "zeo_server=",
"zserver=", "zserver=",
"products_path=",
"sys_path="
]) ])
except getopt.GetoptError, msg: except getopt.GetoptError, msg:
usage(sys.stderr, msg) usage(sys.stderr, msg)
...@@ -702,6 +709,10 @@ def main(): ...@@ -702,6 +709,10 @@ def main():
os.environ["zeo_server"] = arg os.environ["zeo_server"] = arg
elif opt == "--zserver": elif opt == "--zserver":
os.environ["zserver"] = arg 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) 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