Commit 3ccb6d25 authored by Jérome Perrin's avatar Jérome Perrin

Repair Organisation jumps and enable them in ERP5JS

See merge request nexedi/erp5!1432
parents 80e215df 239cdf33
......@@ -16,13 +16,13 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_jump</string>
<string>action_type/object_jio_jump</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_jump</string> </value>
<value> <string>object_jio_jump</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
......
......@@ -16,13 +16,13 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_jump</string>
<string>action_type/object_jio_jump</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_jump</string> </value>
<value> <string>object_jio_jump</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
......
......@@ -16,13 +16,13 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_jump</string>
<string>action_type/object_jio_jump</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_jump</string> </value>
<value> <string>object_jio_jump</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
......
......@@ -2,14 +2,12 @@
Jump from Organisation to its related objects (but only if used as
source* or destination* categories) of the same portal type and
displayed using the module view
XXX: move this code to erp5_core if needed elsewhere?
"""
portal = context.getPortalObject()
# XXX: Seems there is no other better way to get the Arrow
# destination/section categories...
base_category_list = []
base_category_uid_list = []
for arrow_property in portal.portal_property_sheets.Arrow.contentValues():
if arrow_property.getPortalType() != 'Category Property':
continue
......@@ -17,12 +15,15 @@ for arrow_property in portal.portal_property_sheets.Arrow.contentValues():
arrow_property_title = arrow_property.getTitle()
if (arrow_property_title.startswith('source') or
arrow_property_title.startswith('destination')):
base_category_list.append(arrow_property_title)
base_category_uid_list.append(portal.portal_categories[arrow_property_title].getUid())
related_object_list = context.getRelatedValueList(
checked_permission='View',
base_category_list=base_category_list,
portal_type=portal_type)
related_object_list = context.getPortalObject().portal_catalog(
portal_type=portal_type,
**{
'category.category_uid': context.getUid(),
'category.base_category_uid': base_category_uid_list,
}
)
if not related_object_list:
return context.Base_redirect(form_id, keep_items=dict(
......@@ -45,7 +46,15 @@ elif len(related_object_list) == 1:
"that_title": context.getTitleOrId()}))))
else:
message = portal.Base_translateString(
# first, try to get a full translated message with portal types
"Documents related to %s." % context.getPortalType(),
# if not found, fallback to generic translation
default=portal.Base_translateString('Documents related to ${that_portal_type} : ${that_title}.',
mapping={"that_portal_type": context.getTranslatedPortalType(),
"that_title": context.getTitleOrId() }),)
# XXX: Use POST rather than GET because of GET URL length limitation?
return portal.getDefaultModule(portal_type).Base_redirect(
keep_items={'reset': 1,
'uid': [obj.getUid() for obj in related_object_list]})
'portal_status_message': message,
'uid': [obj.uid for obj in related_object_list]})
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Zuite" module="Products.Zelenium.zuite"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>renderjs_ui_pdm_zuite</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Global zuite for PDM</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>testOrganisationJumpToSupply</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<html>
<head><title>Test jump to supplies</title></head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="4">
Test jump to supplies
</td></tr>
</thead>
<tbody tal:define="init_method string:PdmZuite_createDelivery?state=draft; open_stock_browser python:False">
<!-- Setup {{{ -->
<tal:block metal:use-macro="here/PdmZuite_CommonTemplateForRenderjsUi/macros/init" />
<tal:block tal:repeat="supply_portal_type python:('Purchase Supply', 'Sale Supply', 'Internal Supply', )">
<tr>
<td>open</td>
<td>${base_url}/web_site_module/renderjs_runner/#/organisation_module/erp5_pdm_ui_test_source_node</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_app_loaded" />
<tal:block tal:define="click_configuration python: {'text': 'Views'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/click_on_header_link" />
</tal:block>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded" />
<tal:block tal:define="click_configuration python: {'text': supply_portal_type}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/click_on_page_link" />
</tal:block>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded" />
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_listbox_loaded" />
<tal:block tal:define="notification_configuration python: {'class': 'success',
'text': 'Documents related to Organisation : erp5_pdm_ui_test_source_node_title.'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_notification" />
</tal:block>
<tal:block tal:define="pagination_configuration python: {'header': '(2)', 'footer': '2 Records'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/check_listbox_pagination_text" />
</tal:block>
<tr>
<td>assertTextPresent</td>
<td>erp5_pdm_ui_test_supply_1</td>
<td></td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>erp5_pdm_ui_test_supply_2</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>${base_url}/Zuite_waitForActivities</td>
<td></td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>Done.</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>${base_url}/web_site_module/renderjs_runner/#/organisation_module/erp5_pdm_ui_test_destination_node</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_app_loaded" />
<tal:block tal:define="click_configuration python: {'text': 'Views'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/click_on_header_link" />
</tal:block>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded" />
<tal:block tal:define="click_configuration python: {'text': supply_portal_type}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/click_on_page_link" />
</tal:block>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded" />
<tal:block tal:define="notification_configuration python: {'class': 'success',
'text': supply_portal_type + ' related to Organisation : erp5_pdm_ui_test_destination_node_title.'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_notification" />
</tal:block>
<tr>
<td>waitForTextPresent</td>
<td>erp5_pdm_ui_test_supply_1</td>
<td></td>
</tr>
<tr>
<td>assertTextNotPresent</td>
<td>erp5_pdm_ui_test_supply_2</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>${base_url}/Zuite_waitForActivities</td>
<td></td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>Done.</td>
<td></td>
</tr>
</tal:block>
</tbody></table>
</body>
</html>
\ No newline at end of file
......@@ -2,7 +2,8 @@
xmlns:metal="http://xml.zope.org/namespaces/metal">
<tal:block metal:define-macro="init"
tal:define="resource_relative_url resource_relative_url | string:product_module/erp5_pdm_ui_test_product;
set_node_category_preference set_node_category_preference | python: False">
set_node_category_preference set_node_category_preference | python: False;
open_stock_browser open_stock_browser | python:True;">
<tal:block metal:use-macro="here/Zuite_CommonTemplate/macros/init" />
<tr>
<td>open</td>
......@@ -58,6 +59,7 @@
<td>Done.</td>
<td></td>
</tr>
<tal:block tal:condition="open_stock_browser">
<tr>
<td>open</td>
<td>${base_url}/web_site_module/renderjs_runner/#/<tal:block tal:replace="resource_relative_url"></tal:block></td>
......@@ -66,6 +68,7 @@
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_app_loaded" />
<tal:block metal:use-macro="here/PdmZuite_CommonTemplateForRenderjsUi/macros/go_to_stock_view" />
</tal:block>
</tal:block>
<tal:block metal:define-macro="go_to_stock_view">
<tr>
......
##############################################################################
#
# Copyright (c) 2021 Nexedi SA and Contributors. All Rights Reserved.
#
# 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 Products.ERP5Type.tests import ERP5TypeFunctionalTestCase
class TestRenderJSUIPDMZuite(ERP5TypeFunctionalTestCase.ERP5TypeFunctionalTestCase):
run_only = "renderjs_ui_pdm_zuite"
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Test Component" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>testFunctionalRJSPDM</string> </value>
</item>
<item>
<key> <string>default_source_reference</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>test.erp5.testFunctionalRJSPDM</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Test Component</string> </value>
</item>
<item>
<key> <string>sid</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>text_content_error_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>text_content_warning_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>erp5</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>component_validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
portal_tests/renderjs_ui_pdm_zuite
portal_tests/renderjs_ui_pdm_zuite/**
portal_tests/renderjs_ui_stock_browser_zuite
portal_tests/renderjs_ui_stock_browser_zuite/**
\ No newline at end of file
test.erp5.testFunctionalRJSStockBrowser
test.erp5.testFunctionalRJSPDM
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>testOrganisationJumpToSupply</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<html>
<head><title>Test jump to supplies</title></head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="4">
Test jump to supplies
</td></tr>
</thead>
<tbody tal:define="init_method string:PdmZuite_createDelivery?state=draft">
<tal:block metal:use-macro="here/PdmZuite_CommonTemplate/macros/init" />
<tal:block tal:repeat="supply_portal_type python:('Purchase Supply', 'Sale Supply', 'Internal Supply', )">
<tr>
<td>open</td>
<td>${base_url}/organisation_module/erp5_pdm_ui_test_source_node</td>
<td></td>
</tr>
<tr>
<td>selectAndWait</td>
<td>select_jump</td>
<td tal:content="supply_portal_type"></td>
</tr>
<tr>
<td>assertPortalStatusMessage</td>
<td>Documents related to Organisation : erp5_pdm_ui_test_source_node_title.</td>
<td></td>
</tr>
<tr>
<td>assertText</td>
<td>//span[@class="listbox-current-page-total-number"]</td>
<td>2 records</td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>erp5_pdm_ui_test_supply_1</td>
<td></td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>erp5_pdm_ui_test_supply_2</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>${base_url}/organisation_module/erp5_pdm_ui_test_destination_node</td>
<td></td>
</tr>
<tr>
<td>selectAndWait</td>
<td>select_jump</td>
<td tal:content="supply_portal_type"></td>
</tr>
<tr>
<td>assertPortalStatusMessage</td>
<td><tal:block tal:replace="supply_portal_type"/> related to Organisation : erp5_pdm_ui_test_destination_node_title.</td>
<td></td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>erp5_pdm_ui_test_supply_1</td>
<td></td>
</tr>
<tr>
<td>assertTextNotPresent</td>
<td>erp5_pdm_ui_test_supply_2</td>
<td></td>
</tr>
</tal:block>
</tbody></table>
</body>
</html>
\ No newline at end of file
......@@ -46,4 +46,11 @@ for delivery_type in ("Internal", "Purchase", "Sale"):
stool.manage_delObjects(delivery.getCausalityRelatedIdList(portal_type='Applied Rule'))
module.manage_delObjects([delivery_id])
# delete supplies
for supply_portal_type in ('Purchase Supply', 'Sale Supply', 'Internal Supply', ):
module = portal.getDefaultModule(supply_portal_type)
for supply_id in ('erp5_pdm_ui_test_supply_1', 'erp5_pdm_ui_test_supply_2', 'erp5_pdm_ui_test_supply_3'):
if getattr(module, supply_id, None) is not None:
module.manage_delObjects([supply_id])
return "Deleted Successfully."
......@@ -154,6 +154,28 @@ for node_id, node_title, site_url in ((source_node_id, source_node_title, source
site=site_url
)
# Create supplies
# for all type of supply, source_node_id has 2 related supplies and destination_node_id has 1
for supply_portal_type in ('Purchase Supply', 'Sale Supply', 'Internal Supply', ):
module = portal.getDefaultModule(supply_portal_type)
module.newContent(
portal_type=supply_portal_type,
id='erp5_pdm_ui_test_supply_1',
source_value=portal.organisation_module[source_node_id],
destination_value=portal.organisation_module[destination_node_id],
)
module.newContent(
portal_type=supply_portal_type,
id='erp5_pdm_ui_test_supply_2',
source_section_value=portal.organisation_module[source_node_id],
)
# an unrelated supply that should not be displayed
module.newContent(
portal_type=supply_portal_type,
id='erp5_pdm_ui_test_supply_3',
)
# Reset selections
stool = context.getPortalObject().portal_selections
stool.setSelectionFor('resource_current_inventory', None)
......
......@@ -16,13 +16,13 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_jump</string>
<string>action_type/object_jio_jump</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_jump</string> </value>
<value> <string>object_jio_jump</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
......
......@@ -8,7 +8,9 @@
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string></string> </value>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
......@@ -25,16 +27,14 @@
<item>
<key> <string>condition</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string encoding="cdata"><![CDATA[
string:${object_url}/Base_jumpToRelatedObject?base_category=source&portal_type=Purchase+Packing+List
]]></string> </value>
<value>
<none/>
</value>
</item>
<item>
<key> <string>icon</string> </key>
......@@ -68,6 +68,23 @@ string:${object_url}/Base_jumpToRelatedObject?base_category=source&portal_type=P
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Expression" module="Products.CMFCore.Expression"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string encoding="cdata"><![CDATA[
string:${object_url}/Base_jumpToRelatedObject?base_category=source&portal_type=Purchase+Packing+List
]]></string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="Expression" module="Products.CMFCore.Expression"/>
</pickle>
......
......@@ -16,13 +16,13 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_jump</string>
<string>action_type/object_jio_jump</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_jump</string> </value>
<value> <string>object_jio_jump</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
......
......@@ -16,13 +16,13 @@
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_jump</string>
<string>action_type/object_jio_jump</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_jump</string> </value>
<value> <string>object_jio_jump</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Zuite" module="Products.Zelenium.zuite"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>renderjs_ui_trade_zuite</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Trade Zuite</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>testOrganisationJumpToTradeCondition</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<html>
<head><title>Test Organisation jump to trade condition</title></head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="4">
Test Organisation jump to trade condition
</td></tr>
</thead>
<tbody>
<tal:block metal:use-macro="here/Zuite_CommonTemplate/macros/init" />
<tr>
<td>open</td>
<td>${base_url}/Zuite_deleteDataForTradeZuite</td>
<td></td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>Deleted Successfully.</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>${base_url}/Zuite_createOrganisationAndTradeConditionsForTradeZuite</td>
<td></td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>Data Created.</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>${base_url}/Zuite_waitForActivities</td>
<td></td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>Done.</td>
<td></td>
</tr>
<tal:block tal:repeat="trade_condition_portal_type python:('Purchase Trade Condition', 'Sale Trade Condition', 'Internal Trade Condition', )">
<tr>
<td>open</td>
<td>${base_url}/web_site_module/renderjs_runner/#/organisation_module/erp5_trade_ui_test_organisation_1</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_app_loaded" />
<tal:block tal:define="click_configuration python: {'text': 'Views'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/click_on_header_link" />
</tal:block>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded" />
<tal:block tal:define="click_configuration python: {'text': trade_condition_portal_type}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/click_on_page_link" />
</tal:block>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded" />
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_listbox_loaded" />
<tal:block tal:define="notification_configuration python: {'class': 'success',
'text': 'Documents related to Organisation : erp5_trade_ui_test_organisation_1_title.'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_notification" />
</tal:block>
<tal:block tal:define="pagination_configuration python: {'header': '(2)', 'footer': '2 Records'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/check_listbox_pagination_text" />
</tal:block>
<tr>
<td>assertTextPresent</td>
<td>erp5_trade_ui_test_trade_condition_1</td>
<td></td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>erp5_trade_ui_test_trade_condition_2</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>${base_url}/Zuite_waitForActivities</td>
<td></td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>Done.</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>${base_url}/web_site_module/renderjs_runner/#/organisation_module/erp5_trade_ui_test_organisation_2</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_app_loaded" />
<tal:block tal:define="click_configuration python: {'text': 'Views'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/click_on_header_link" />
</tal:block>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded" />
<tal:block tal:define="click_configuration python: {'text': trade_condition_portal_type}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/click_on_page_link" />
</tal:block>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_content_loaded" />
<tal:block tal:define="notification_configuration python: {'class': 'success',
'text': trade_condition_portal_type + ' related to Organisation : erp5_trade_ui_test_organisation_2_title.'}">
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_notification" />
</tal:block>
<tr>
<td>waitForTextPresent</td>
<td>erp5_trade_ui_test_trade_condition_1</td>
<td></td>
</tr>
<tr>
<td>assertTextNotPresent</td>
<td>erp5_trade_ui_test_trade_condition_2</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>${base_url}/Zuite_waitForActivities</td>
<td></td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>Done.</td>
<td></td>
</tr>
</tal:block>
</tbody></table>
</body>
</html>
\ No newline at end of file
......@@ -21,7 +21,7 @@
</tr>
<tr>
<td>open</td>
<td>${base_url}/TradeRJSZuite_deleteData</td>
<td>${base_url}/Zuite_deleteDataForTradeRenderjsUi</td>
<td></td>
</tr>
<tr>
......@@ -42,7 +42,7 @@
</tr>
<tr>
<td>open</td>
<td>${base_url}/TradeRJSZuite_createSaleOrder</td>
<td>${base_url}/Zuite_createSaleOrderForTradeRenderjsUi</td>
<td></td>
</tr>
<tr>
......@@ -64,7 +64,7 @@
</tr>
<tr>
<td>open</td>
<td>${base_url}/TradeRJSZuite_createPackingList</td>
<td>${base_url}/Zuite_createPackingListForTradeRenderjsUi</td>
<td></td>
</tr>
<tr>
......
......@@ -54,7 +54,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>TradeRJSZuite_createSaleOrder</string> </value>
<value> <string>Zuite_createPackingListForTradeRenderjsUi</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -8,10 +8,9 @@ delivery_id = "erp5_trade_renderjs_ui_test_order"
source_value = portal.restrictedTraverse('organisation_module/erp5_trade_renderjs_ui_test_source_node')
destination_value = portal.restrictedTraverse('organisation_module/erp5_trade_renderjs_ui_test_destination_node')
specialise_value = portal.restrictedTraverse('business_process_module/erp5_trade_renderjs_ui_test_business_process')
resource_value = portal.restrictedTraverse('product_module/erp5_trade_renderjs_ui_test_product')
module = portal.getDefaultModule(delivery_portal_type)
delivery = module.newContent(
module.newContent(
portal_type=delivery_portal_type,
id=delivery_id,
title='%s_title' % delivery_id,
......
......@@ -54,7 +54,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>TradeRJSZuite_createPackingList</string> </value>
<value> <string>Zuite_createSaleOrderForTradeRenderjsUi</string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -54,7 +54,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>TradeRJSZuite_deleteData</string> </value>
<value> <string>Zuite_deleteDataForTradeRenderjsUi</string> </value>
</item>
</dictionary>
</pickle>
......
##############################################################################
#
# Copyright (c) 2021 Nexedi SA and Contributors. All Rights Reserved.
#
# 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 Products.ERP5Type.tests import ERP5TypeFunctionalTestCase
class TestRenderJSUITradeZuite(ERP5TypeFunctionalTestCase.ERP5TypeFunctionalTestCase):
run_only = "renderjs_ui_trade_zuite"
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Test Component" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>testFunctionalRJSTrade</string> </value>
</item>
<item>
<key> <string>default_source_reference</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>test.erp5.testFunctionalRJSTrade</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Test Component</string> </value>
</item>
<item>
<key> <string>sid</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>text_content_error_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>text_content_warning_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>erp5</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>component_validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
erp5_trade
erp5_trade_ui_test
erp5_configurator_standard_solver
erp5_web_renderjs_ui_test
\ No newline at end of file
......@@ -18,5 +18,7 @@ portal_rules/erp5_trade_renderjs_ui_test_order_root_rule
portal_rules/erp5_trade_renderjs_ui_test_order_root_rule/**
portal_tests/renderjs_ui_trade_action_zuite
portal_tests/renderjs_ui_trade_action_zuite/**
portal_tests/renderjs_ui_trade_zuite
portal_tests/renderjs_ui_trade_zuite/**
product_module/erp5_trade_renderjs_ui_test_product
product_module/erp5_trade_renderjs_ui_test_product/**
\ No newline at end of file
test.erp5.testFunctionalRJSTradeAction
test.erp5.testFunctionalRJSTrade
\ No newline at end of file
......@@ -11,6 +11,11 @@ Test MultiRelationStringField on a sale order line inside the other sale order l
<!-- Setup {{{ -->
<tal:block metal:use-macro="here/Zuite_CommonTemplateForTradeZuite/macros/init" />
<tr>
<td>open</td>
<td>${base_url}/sale_order_module/erp5_trade_ui_test_sale_order_1</td>
<td></td>
</tr>
<!-- }}} -->
<tr>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>testOrganisationJumpToTradeCondition</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<html>
<head><title>Test Organisation jump to trade condition</title></head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="4">
Test Organisation jump to trade condition
</td></tr>
</thead>
<tbody tal:define="init_method string:Zuite_createOrganisationAndTradeConditionsForTradeZuite;">
<!-- Setup {{{ -->
<tal:block metal:use-macro="here/Zuite_CommonTemplateForTradeZuite/macros/init" />
<!-- }}} -->
<tal:block tal:repeat="trade_condition_portal_type python: ('Sale Trade Condition', 'Purchase Trade Condition', 'Internal Trade Condition', )">
<tr>
<td>open</td>
<td>${base_url}/organisation_module/erp5_trade_ui_test_organisation_1</td>
<td></td>
</tr>
<tr>
<td>selectAndWait</td>
<td>select_jump</td>
<td tal:content="trade_condition_portal_type"></td>
</tr>
<tr>
<td>assertPortalStatusMessage</td>
<td>Documents related to Organisation : erp5_trade_ui_test_organisation_1_title.</td>
<td></td>
</tr>
<tr>
<td>assertText</td>
<td>//span[@class="listbox-current-page-total-number"]</td>
<td>2 records</td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>erp5_trade_ui_test_trade_condition_1</td>
<td></td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>erp5_trade_ui_test_trade_condition_2</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>${base_url}/organisation_module/erp5_trade_ui_test_organisation_2</td>
<td></td>
</tr>
<tr>
<td>selectAndWait</td>
<td>select_jump</td>
<td tal:content="trade_condition_portal_type"></td>
</tr>
<tr>
<td>assertPortalStatusMessage</td>
<td><tal:block tal:replace="trade_condition_portal_type"/> related to Organisation : erp5_trade_ui_test_organisation_2_title.</td>
<td></td>
</tr>
<tr>
<td>assertTextPresent</td>
<td>erp5_trade_ui_test_trade_condition_1</td>
<td></td>
</tr>
<tr>
<td>assertTextNotPresent</td>
<td>erp5_trade_ui_test_trade_condition_2</td>
<td></td>
</tr>
</tal:block>
</tbody></table>
</body>
</html>
\ No newline at end of file
......@@ -46,7 +46,7 @@
</tr>
<tr>
<td>assertTextPresent</td>
<td>Sale Order Created.</td>
<td>Data Created.</td>
<td></td>
</tr>
......@@ -60,11 +60,6 @@
<td>Done.</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>${base_url}/sale_order_module/erp5_trade_ui_test_sale_order_1</td>
<td></td>
</tr>
</tal:block>
<tal:block metal:define-macro="toggleSupplyLineBasePricePerSlice">
<tr>
......
portal = context.getPortalObject()
# Create organisations
erp5_trade_ui_test_organisation_1 = portal.organisation_module.newContent(
portal_type='Organisation',
id='erp5_trade_ui_test_organisation_1',
title='erp5_trade_ui_test_organisation_1_title',
)
erp5_trade_ui_test_organisation_2 = portal.organisation_module.newContent(
portal_type='Organisation',
id='erp5_trade_ui_test_organisation_2',
title='erp5_trade_ui_test_organisation_2_title',
)
# Create trade conditions
# for all type of trade condition, erp5_trade_ui_test_organisation_1 has 2 related supplies
# and erp5_trade_ui_test_organisation_2 has 1
for trade_condition_portal_type in (
'Purchase Trade Condition',
'Sale Trade Condition',
'Internal Trade Condition', ):
module = portal.getDefaultModule(trade_condition_portal_type)
module.newContent(
portal_type=trade_condition_portal_type,
id='erp5_trade_ui_test_trade_condition_1',
source_value=erp5_trade_ui_test_organisation_1,
destination_value=erp5_trade_ui_test_organisation_2,
)
module.newContent(
portal_type=trade_condition_portal_type,
id='erp5_trade_ui_test_trade_condition_2',
source_section_value=erp5_trade_ui_test_organisation_1,
)
# an unrelated trade_condition that should not be displayed
module.newContent(
portal_type=trade_condition_portal_type,
id='erp5_trade_ui_test_trade_condition_3',
)
return "Data Created."
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Zuite_createOrganisationAndTradeConditionsForTradeZuite</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
context.sale_order_module.newContent(portal_type='Sale Order', id='erp5_trade_ui_test_sale_order_1')
return "Sale Order Created."
return "Data Created."
portal = context.getPortalObject()
object_value_list = [
getattr(context.sale_order_module, 'erp5_trade_ui_test_sale_order_1', None)
getattr(portal.sale_order_module, 'erp5_trade_ui_test_sale_order_1', None),
getattr(portal.organisation_module, 'erp5_trade_ui_test_organisation_1', None),
getattr(portal.organisation_module, 'erp5_trade_ui_test_organisation_2', None),
] + [
getattr(portal.getDefaultModule(portal_type), "erp5_trade_ui_test_trade_condition", None)
getattr(portal.getDefaultModule(portal_type), "erp5_trade_ui_test_trade_condition" + suffix, None)
for portal_type in ("Internal Trade Condition", "Purchase Trade Condition", "Sale Trade Condition")
for suffix in ('', '_1', '_2', '_3')
]
for object_value in object_value_list:
......
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