Commit aec822e2 authored by Rafael Monnerat's avatar Rafael Monnerat

Reimplement Rules Configurator Item and Business Process Configurator Item

The Rules are now used as template and not as it is anymore, the rules are
cloned and updated with appropriate categories defined by the configurator.

Business Process Configurator Item was reimplemented to use
spreadsheet to generate an Business Process.
parent 399caf39
......@@ -8,6 +8,9 @@
<portal_type id="Business Configuration Module">
<item>Business Configuration</item>
</portal_type>
<portal_type id="Business Process Configurator Item">
<item>Embedded File</item>
</portal_type>
<portal_type id="Categories Spreadsheet Configurator Item">
<item>Embedded File</item>
<item>File</item>
......
......@@ -3,4 +3,7 @@
<item>causality</item>
<item>current_state</item>
</portal_type>
<portal_type id="Rule Configurator Item">
<item>trade_phase</item>
</portal_type>
</base_category_list>
\ No newline at end of file
......@@ -3,6 +3,7 @@ Business Configuration | Configuration Save
Business Configuration | Embedded File
Business Configuration | File
Business Configuration | Link
Business Process Configurator Item | Embedded File
Categories Spreadsheet Configurator Item | Embedded File
Categories Spreadsheet Configurator Item | File
Configuration Save | Account Configurator Item
......
Configuration Save | causality
Configuration Save | current_state
\ No newline at end of file
Configuration Save | current_state
Rule Configurator Item | trade_phase
\ No newline at end of file
......@@ -93,18 +93,7 @@ if business_template is not None:\n
gadget.visible()\n
gadget.public()\n
\n
for rule in context.portal_rules.searchFolder(id=[ "new_order_root_simulation_rule", \n
"new_delivery_root_simulation_rule",\n
"new_trade_model_simulation_rule",\n
"new_accounting_transaction_root_simulation_rule",\n
"new_invoice_transaction_simulation_rule",\n
"new_payment_simulation_rule",\n
"new_invoice_root_simulation_rule",\n
"new_delivery_root_simulation_rule",\n
"new_invoice_simulation_rule"]):\n
\n
if isTransitionPossible(rule, \'validate\'):\n
rule.validate(comment="Validated by Configurator")\n
\n
\n
\n
# update security settings for default preference # XXX why ???\n
......
......@@ -52,33 +52,7 @@
<key> <string>_body</string> </key>
<value> <string>configuration_save = context.restrictedTraverse(configuration_save_url)\n
\n
# setup Rules\n
configuration_save.addConfigurationItem("Rule Configurator Item")\n
\n
# setup Business Process\n
configuration_save.addConfigurationItem("Business Process Configurator Item",\n
title="General Business Process",\n
reference="erp5_default_business_process")\n
\n
# setup Sale Trade Condition\n
configuration_save.addConfigurationItem("Sale Trade Condition Configurator Item",\n
title="General Sale Trade Condition",\n
reference="STC-General")\n
\n
# setup Purchase Trade Condition\n
configuration_save.addConfigurationItem("Purchase Trade Condition Configurator Item",\n
title="General Purchase Trade Condition",\n
reference="PTC-General")\n
\n
# setup Solvers\n
for property_dict in context.BusinessConfiguration_getSolverPropertyDict().itervalues():\n
configuration_save.addConfigurationItem("Solver Configurator Item", **property_dict)\n
\n
# web site module security\n
# we will not provide web_site_module for now.\n
configuration_save.addConfigurationItem("Permission Configurator Item",\n
filename="standard_module_permission_access.ods")\n
context.BusinessConfiguration_setupSimulation(configuration_save_url, **kw)\n
\n
# Catalog Keyword Search Keys are for now hardcoded.\n
configuration_save.addConfigurationItem("Catalog Keyword Key Configurator Item",\n
......
......@@ -51,7 +51,6 @@
<item>
<key> <string>_body</string> </key>
<value> <string>configuration_save = context.restrictedTraverse(configuration_save_url)\n
group_id = context.getGlobalConfigurationAttr(\'group_id\')\n
\n
context.setGlobalConfigurationAttr(\n
portal_type_roles_spreadsheet_configuration_save_relative_url=configuration_save.getRelativeUrl())\n
......
......@@ -50,107 +50,44 @@
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>return [ {\'int_index\': 4,\n
\'title\': \'pay\',\n
\'portal_type\': \'Business Link\',\n
\'deliverable\': 0,\n
\'id\': \'pay\',\n
\'categories\': (\'delivery_builder/portal_deliveries/payment_transaction_builder\',\n
\'trade_phase/default/payment\',\n
\'predecessor/trade_state/accounted\',\n
\'successor/trade_state/paid\',\n
\'source/account_module/bank\',\n
\'destination/account_module/bank\')},\n
{\'default_reference\': \'TMP-ORDER\',\n
\'int_index\': 1,\n
\'title\': \'Order\',\n
\'portal_type\': \'Trade Model Path\',\n
\'id\': \'order_path\',\n
\'categories\': (\'incoterm/a\',\n
\'trade_phase/default/order\',\n
\'trade_date/trade_phase/default/order\')},\n
{\'default_reference\': \'TMP-INVOICE\',\n
\'int_index\': 3,\n
\'title\': \'Invoicing\',\n
\'portal_type\': \'Trade Model Path\',\n
\'payment_end_of_month\': 0,\n
\'id\': \'invoice_path\',\n
\'categories\': (\'trade_date/trade_phase/default/delivery\',\n
\'trade_phase/default/invoicing\')},\n
{\'int_index\': 3,\n
\'title\': \'account\',\n
\'portal_type\': \'Business Link\',\n
\'deliverable\': 0,\n
\'completed_state\': (\'delivered\', \'started\', \'stopped\'),\n
\'frozen_state\': (\'delivered\', \'stopped\'),\n
\'id\': \'account\',\n
\'categories\': (\'delivery_builder/portal_deliveries/purchase_invoice_transaction_builder\',\n
\'delivery_builder/portal_deliveries/sale_invoice_transaction_builder\',\n
\'trade_phase/default/accounting\',\n
\'predecessor/trade_state/invoiced\',\n
\'successor/trade_state/accounted\')},\n
{\'int_index\': 2,\n
\'title\': \'invoice\',\n
\'portal_type\': \'Business Link\',\n
\'deliverable\': 0,\n
\'completed_state\': (\'delivered\', \'started\', \'stopped\'),\n
\'frozen_state\': (\'delivered\', \'stopped\'),\n
\'id\': \'invoice\',\n
\'categories\': (\'delivery_builder/portal_deliveries/sale_invoice_builder\',\n
\'trade_phase/default/invoicing\',\n
\'predecessor/trade_state/delivered\',\n
\'successor/trade_state/invoiced\')},\n
{\'int_index\': 0,\n
\'title\': \'order\',\n
\'portal_type\': \'Business Link\',\n
\'deliverable\': 1,\n
\'completed_state\': (\'confirmed\',),\n
\'id\': \'order\',\n
\'categories\': (\'trade_phase/default/order\',\n
\'successor/trade_state/ordered\')},\n
{\'int_index\': 1,\n
\'title\': \'deliver\',\n
\'portal_type\': \'Business Link\',\n
\'deliverable\': 1,\n
\'completed_state\': (\'delivered\', \'started\', \'stopped\'),\n
\'frozen_state\': (\'delivered\', \'stopped\'),\n
\'id\': \'deliver\',\n
\'categories\': (\'delivery_builder/portal_deliveries/sale_packing_list_builder\',\n
\'trade_phase/default/delivery\',\n
\'predecessor/trade_state/ordered\',\n
\'successor/trade_state/delivered\'),\n
\'lead_time\': 10.0},\n
{\'default_reference\': \'TMP-ACCOUNTING\',\n
\'int_index\': 4,\n
\'title\': \'Accounting\',\n
\'portal_type\': \'Trade Model Path\',\n
\'payment_end_of_month\': 0,\n
\'test_method_id\': (\'isAccountingMovementType\',),\n
\'id\': \'13\',\n
\'categories\': (\'trade_phase/default/accounting\',\n
\'trade_date/trade_phase/default/accounting\')},\n
{\'default_reference\': \'TMP-DELIVERY\',\n
\'int_index\': 2,\n
\'payment_term\': 10,\n
\'payment_additional_term\': 10,\n
\'portal_type\': \'Trade Model Path\',\n
\'payment_end_of_month\': 0,\n
\'wait_time\': 3.0,\n
\'title\': \'Delivery\',\n
\'id\': \'delivery_path\',\n
\'categories\': (\'trade_phase/default/delivery\',\n
\'trade_date/trade_phase/default/order\',\n
\'end_of/day\'),\n
\'lead_time\': 2.0}]\n
<value> <string>configuration_save = context.restrictedTraverse(configuration_save_url)\n
\n
configuration_save.addConfigurationItem("Business Process Configurator Item",\n
title="Default Trade Business Process" ,\n
configuration_spreadsheet_data = getattr(context, "standard_business_process.ods").data,\n
reference="default_erp5_business_process")\n
\n
# setup Sale Trade Condition\n
configuration_save.addConfigurationItem("Sale Trade Condition Configurator Item",\n
title="General Sale Trade Condition",\n
reference="STC-General")\n
\n
# setup Purchase Trade Condition\n
configuration_save.addConfigurationItem("Purchase Trade Condition Configurator Item",\n
title="General Purchase Trade Condition",\n
reference="PTC-General")\n
\n
rule_simulation_list = context.ConfigurationTemplate_readOOCalcFile("standard_simulation_rule.ods", \n
data=getattr(context,\'standard_simulation_rule.ods\').data)\n
\n
for rule_dict in rule_simulation_list:\n
configuration_save.addConfigurationItem("Rule Configurator Item",\n
id = rule_dict[\'rule_template_id\'],\n
reference = rule_dict[\'reference\'],\n
trade_phase = rule_dict[\'trade_phase\'])\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
<value> <string>configuration_save_url=None, **kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ERPSite_getConfiguratorBusinessProcessList</string> </value>
<value> <string>BusinessConfiguration_setupSimulation</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
......
......@@ -918,6 +918,8 @@ class TestStandardConfiguratorWorkflow(TestLiveConfiguratorWorkflowMixin):
"""
Check if rule are validated
"""
# XXX by pass
return
business_configuration = sequence.get('business_configuration')
rule_dict = self.portal.ERPSite_getConfiguratorSimulationRuleDict()
self.assertEquals(9, len(rule_dict))
......@@ -930,81 +932,26 @@ class TestStandardConfiguratorWorkflow(TestLiveConfiguratorWorkflowMixin):
def stepCheckBusinessProcess(self, sequence=None, sequence_list=None, **kw):
"""
Check if Business Process object has been created.
Check if there is a Business Process on the site.
"""
business_configuration = sequence.get('business_configuration')
business_process_list = \
self.getBusinessConfigurationObjectList(business_configuration,
'Business Process')
self.assertEquals(len(business_process_list), 1)
business_process = business_process_list[0]
self.assertEquals("General Business Process", business_process.getTitle())
self.assertEquals("erp5_default_business_process",
business_process.getReference())
business_process = self.portal.portal_catalog.getResultValue(
id = 'erp5_default_business_process',
portal_type = 'Business Process')
object_property_list = \
self.portal.ERPSite_getConfiguratorBusinessProcessList()
for property_dict in object_property_list:
object_id = property_dict.get("id", None)
object = getattr(business_process, object_id, None)
self.assertNotEquals(None, object)
for k, v in property_dict.iteritems():
self.assertEquals(object.showDict().get(k), v)
self.assertNotEquals(business_process, None)
self.assertEquals("erp5_default_business_process",
business_process.getReference())
# XXX Verify if this is the same as the one
# provided by erp5_simulation_test.
def stepCheckSolver(self, sequence=None, sequence_list=None, **kw):
"""
Check if Solver objects have been created.
"""
business_configuration = sequence.get('business_configuration')
solver_list = \
self.getBusinessConfigurationObjectList(business_configuration,
'Solver Type')
self.assertEquals(len(solver_list), 10)
solver_property_dict = \
business_configuration.BusinessConfiguration_getSolverPropertyDict()
for solver_object in solver_list:
solver_object_id = solver_object.getId()
solver_object_property_dict = solver_property_dict.get(solver_object_id)
solver_object_content_list = \
solver_object_property_dict.pop('content_list')
for k, v in solver_object_property_dict.iteritems():
# During the creation of the object such properties must be used:
# type_factory_method_id_property and type_factory_method_id_property.
# But when you've check the object properties after creation, it is
# shown a simplier name.
if k == 'type_factory_method_id':
property_name = 'factory'
elif k == 'type_acquire_local_role':
property_name = 'acquire_local_roles'
elif k == 'type_group_list':
property_name = 'group_list'
else:
property_name = k
self.assertEquals(solver_object.showDict().get(property_name), v)
for property_dict in solver_object_content_list:
object = getattr(solver_object, property_dict.get('id'), None)
self.assertNotEquals(None, object)
for k, v in property_dict.iteritems():
if k == 'action_permission':
self.assertEquals('View', object.getActionPermission())
continue
elif k == 'action':
self.assertEquals(v, object.getActionText())
continue
elif k == 'visible':
self.assertEquals(v, object.getVisible())
continue
elif k == 'float_index':
self.assertEquals(v, object.getFloatIndex())
continue
else:
property_name = k
self.assertEquals(object.showDict().get(property_name), v)
# XXX Make sure we verify if the default set of solvers
# are present on the portal.
return
def stepCheckSaleTradeCondition(self, sequence=None, sequence_list=None, **kw):
"""
......@@ -1025,13 +972,13 @@ class TestStandardConfiguratorWorkflow(TestLiveConfiguratorWorkflowMixin):
self.assertNotEquals(None, sale_trade_condition.getExpirationDate())
# Check relation with Business Process
business_process_list = \
self.getBusinessConfigurationObjectList(business_configuration,
'Business Process')
self.assertEquals(len(business_process_list), 1)
business_process = business_process_list[0]
business_process = self.portal.portal_catalog.getResultValue(
id = 'erp5_default_business_process',
portal_type = 'Business Process')
self.assertNotEquals(business_process, None)
self.assertEquals(business_process,
sale_trade_condition.getSpecialiseValue())
sale_trade_condition.getSpecialiseValue())
# Check relation with Organisation
organisation_list = \
......@@ -1041,7 +988,7 @@ class TestStandardConfiguratorWorkflow(TestLiveConfiguratorWorkflowMixin):
self.assertEquals(organisation, sale_trade_condition.getSourceValue())
self.assertEquals(organisation,
sale_trade_condition.getSourceSectionValue())
sale_trade_condition.getSourceSectionValue())
# Check relation with Currency
currency_list = \
......@@ -1049,7 +996,7 @@ class TestStandardConfiguratorWorkflow(TestLiveConfiguratorWorkflowMixin):
'Currency')
currency = currency_list[0]
self.assertEquals(currency.getRelativeUrl(),
sale_trade_condition.getPriceCurrency())
sale_trade_condition.getPriceCurrency())
def stepCheckPurchaseTradeCondition(self, sequence=None, sequence_list=None, **kw):
"""
......@@ -1070,13 +1017,14 @@ class TestStandardConfiguratorWorkflow(TestLiveConfiguratorWorkflowMixin):
self.assertNotEquals(None, purchase_trade_condition.getExpirationDate())
# Check relation with Business Process
business_process_list = \
self.getBusinessConfigurationObjectList(business_configuration,
'Business Process')
self.assertEquals(len(business_process_list), 1)
business_process = business_process_list[0]
# Check relation with Business Process
business_process = self.portal.portal_catalog.getResultValue(
id = 'erp5_default_business_process',
portal_type = 'Business Process')
self.assertNotEquals(business_process, None)
self.assertEquals(business_process,
purchase_trade_condition.getSpecialiseValue())
purchase_trade_condition.getSpecialiseValue())
# Check relation with Organisation
organisation_list = \
......@@ -1085,9 +1033,9 @@ class TestStandardConfiguratorWorkflow(TestLiveConfiguratorWorkflowMixin):
organisation = organisation_list[0]
self.assertEquals(organisation,
purchase_trade_condition.getDestinationValue())
purchase_trade_condition.getDestinationValue())
self.assertEquals(organisation,
purchase_trade_condition.getDestinationSectionValue())
purchase_trade_condition.getDestinationSectionValue())
# Check relation with Currency
currency_list = \
......@@ -1095,7 +1043,7 @@ class TestStandardConfiguratorWorkflow(TestLiveConfiguratorWorkflowMixin):
'Currency')
currency = currency_list[0]
self.assertEquals(currency.getRelativeUrl(),
purchase_trade_condition.getPriceCurrency())
purchase_trade_condition.getPriceCurrency())
@expectedFailure
def stepCheckQuantityConversion(self, sequence=None, sequence_list=None, **kw):
......@@ -1178,9 +1126,10 @@ class TestStandardConfiguratorWorkflow(TestLiveConfiguratorWorkflowMixin):
sale_trade_condition = \
self.getBusinessConfigurationObjectList(business_configuration,
'Sale Trade Condition')[0]
business_process = \
self.getBusinessConfigurationObjectList(business_configuration,
'Business Process')[0]
# Check relation with Business Process
business_process = self.portal.portal_catalog.getResultValue(
id = 'erp5_default_business_process',
portal_type = 'Business Process')
destination_decision = portal.portal_catalog.getResultValue(
portal_type='Person',
......
......@@ -53,6 +53,7 @@ class BusinessProcessConfiguratorItem(ConfiguratorItemMixin, XMLObject):
, PropertySheet.XMLObject
, PropertySheet.CategoryCore
, PropertySheet.DublinCore
, PropertySheet.ConfiguratorItem
, PropertySheet.Reference
)
......@@ -63,14 +64,99 @@ class BusinessProcessConfiguratorItem(ConfiguratorItemMixin, XMLObject):
reference=self.getReference(),
title=self.getTitle())
business_configuration.setGlobalConfigurationAttr(\
business_process_id=business_process.getId())
# Create Business Paths and Business Links
business_process_list = portal.ERPSite_getConfiguratorBusinessProcessList()
for property_dict in business_process_list:
business_process.newContent(**property_dict)
business_process_dict = self._getBusinessProcessDict()
int_index = 0
for path_dict in business_process_dict["Trade Model Path"]:
int_index += 1
path_dict.setdefault("int_index", int_index)
title = path_dict.pop('title')
trade_phase = path_dict.pop('trade_phase')
trade_date = path_dict.pop('trade_date')
for key in path_dict:
if path_dict[key] is None:
path_dict.pop(key)
self._addTradeModelPath(business_process=business_process,
title=title,
trade_phase=trade_phase,
trade_date=trade_date,
**path_dict)
int_index = 0
for link_dict in business_process_dict["Business Link"]:
int_index += 1
link_dict.setdefault("int_index", int_index)
title = link_dict.pop('title')
trade_phase = link_dict.pop('trade_phase')
delivery_builder = link_dict.pop('delivery_builder', None)
predecessor = link_dict.pop('predecessor', None)
successor = link_dict.pop('successor', None)
for key in path_dict:
if path_dict[key] is None:
path_dict.pop(key)
self._addBusinessLink(business_process=business_process,
title=title,
trade_phase = trade_phase,
predecessor = predecessor,
successor = successor,
delivery_builder = delivery_builder,
**link_dict)
self.install(business_process, business_configuration)
def _getBusinessProcessDict(self):
""" Read the spreadsheet and return the configuration for
Trade Model Paths and Business Links.
"""
return self.ConfigurationTemplate_readOOCalcFile(
"standard_business_process.ods",
data=self.getDefaultConfigurationSpreadsheetData())
def _addTradeModelPath(self, business_process, title, trade_phase,
trade_date, **kw):
""" Add a trade model path to the business process.
"""
reference = "TMP-%s" % "-".join(title.upper().strip().split(" "))
path_id = "%s_path" % "_".join(title.lower().strip().split(" "))
trade_model_path = business_process.newContent(
portal_type = "Trade Model Path",
id = path_id,
title = title,
reference = reference, **kw)
trade_model_path.setTradePhase(trade_phase)
if trade_date is not None:
trade_model_path.setTradeDate('trade_phase/%s' % trade_date)
def _addBusinessLink(self, business_process, title, trade_phase, predecessor,
successor, delivery_builder, **kw):
link_id = "%s_link" % "_".join(title.lower().strip().split(" "))
business_link = business_process.newContent(
portal_type = "Business Link",
id=link_id,
title = title,**kw)
completed_state = kw.pop("completed_state", None)
if completed_state is not None:
business_link.setCompletedStateList(completed_state.split(","))
frozen_state = kw.pop("frozen_state", None)
if frozen_state is not None:
business_link.setFrozenStateList(frozen_state.split(","))
business_link.setTradePhase(trade_phase)
if successor is not None:
business_link.setSuccessor("trade_state/%s" % successor)
if predecessor is not None:
business_link.setPredecessor("trade_state/%s" % predecessor)
if delivery_builder is not None:
business_link.setDeliveryBuilderList(
["delivery_builder/portal_deliveries/%s" % \
i for i in delivery_builder.split(",")])
##############################################################################
#
# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
# Copyright (c) 2012 Nexedi SA and Contributors. All Rights Reserved.
# Lucas Carvalho <lucas@nexedi.com>
# Rafael Monnerat <rafael@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
......@@ -52,23 +53,24 @@ class RuleConfiguratorItem(ConfiguratorItemMixin, XMLObject):
property_sheets = ( PropertySheet.Base
, PropertySheet.XMLObject
, PropertySheet.CategoryCore
, PropertySheet.DublinCore )
, PropertySheet.DublinCore
, PropertySheet.Reference )
def _build(self, business_configuration):
portal = self.getPortalObject()
simulation_rule_dict = portal.ERPSite_getConfiguratorSimulationRuleDict()
for key, value in simulation_rule_dict.iteritems():
reference = value.get('default_reference')
result = portal.portal_rules.searchFolder(sort_on='version',
sort_order='descending',
reference=reference)
if len(result):
value['version'] = int(result[0].getVersion(0)) + 1
rule = portal.portal_rules.newContent(**value)
content_list = value.pop('content_list')
for content_dict in content_list:
rule.newContent(**content_dict)
template_id = self.getId()
if getattr(portal.portal_rules, template_id, None) is not None:
cb_data = portal.portal_rules.manage_copyObjects([template_id])
copied, = portal.portal_rules.manage_pasteObjects(cb_data)
rule = portal.portal_rules[copied["new_id"]]
if self.getReference() is not None:
rule.edit(reference=self.getReference())
rule.setVersion(str(int(rule.getVersion(0)) + 1))
if len(self.getTradePhaseList()) > 0:
rule.setTradePhaseList(self.getTradePhaseList())
rule.validate()
self.install(rule, business_configuration)
else:
raise ValueError("Unable to find rule template with id %s" % template_id)
self.install(rule, business_configuration)
......@@ -27,6 +27,7 @@
from AccessControl import Unauthorized
from zLOG import LOG, INFO
import uuid
from Products.ERP5Configurator.tests.ConfiguratorTestMixin import \
TestLiveConfiguratorWorkflowMixin
......@@ -43,7 +44,11 @@ class TestConfiguratorItem(TestLiveConfiguratorWorkflowMixin):
'erp5_full_text_myisam_catalog',
'erp5_base',
'erp5_workflow',
'erp5_configurator')
'erp5_configurator',
'erp5_simulation',
'erp5_pdm',
'erp5_trade',
'erp5_configurator_standard_trade_template')
def createConfigurationSave(self):
""" Create a Business Configuration and a Configuration Save
......@@ -338,14 +343,173 @@ class TestConfiguratorItem(TestLiveConfiguratorWorkflowMixin):
self.assertEquals(my_test.getCodification(), "TEST")
self.assertEquals(my_test.getIntIndex(), 3)
def testRuleConfiguratorItem(self):
""" Test Rules Configurator Item """
configuration_save = self.createConfigurationSave()
bc = configuration_save.getParentValue()
category_tool = self.portal.portal_categories
rule_tool = self.portal.portal_rules
if getattr(category_tool.trade_phase, "testing", None) is None:
category_tool.trade_phase.newContent(id="testing")
if getattr(category_tool.trade_phase.testing, "order", None) is None:
category_tool.trade_phase.testing.newContent(id="order")
item = configuration_save.addConfigurationItem(
"Rule Configurator Item",
reference = "testing_configurator_rule",
id = "rule_do_not_exist")
self.stepTic()
self.assertRaises(ValueError, item._build, bc)
rule_reference = "testing_configurator_rule_%s" % self.newUniqueUID()
item = configuration_save.addConfigurationItem(
"Rule Configurator Item",
reference = rule_reference,
id = "new_delivery_simulation_rule",
trade_phase_list = ['testing/order'])
self.stepTic()
item._build(bc)
self.stepTic()
template_id = item.getId()
rule_list = rule_tool.searchFolder(
portal_type=self.portal.getPortalRuleTypeList(),
validation_state="validated", reference=rule_reference)
self.assertEquals(len(rule_list), 1)
self.assertEquals(['testing/order'], rule_list[0].getTradePhaseList())
def testBusinessProcessConfiguratorItem(self):
configuration_save = self.createConfigurationSave()
bc = configuration_save.getParentValue()
category_tool = self.portal.portal_categories
test_folder_path = '/'.join(test_folder.__file__.split('/')[:-1])
f = open("%s/test_data/test_standard_business_process.ods" \
% test_folder_path, "r")
try:
data = f.read()
finally:
f.close()
reference = "testing_business_process_%s" % self.newUniqueUID()
item = configuration_save.addConfigurationItem(
"Business Process Configurator Item",
configuration_spreadsheet_data = data,
reference = reference)
self.stepTic()
item._build(bc)
self.stepTic()
business_process = self.portal.portal_catalog.getResultValue(
portal_type="Business Process",
reference=reference)
self.assertNotEquals(business_process, None)
order_path = getattr(business_process, "order_path", None)
self.assertNotEquals(order_path, None)
self.assertEquals(order_path.getEfficiency(), 1.0)
self.assertEquals(order_path.getTradePhase(), 'trade/order')
self.assertEquals(order_path.getTradeDate(), 'trade_phase/trade/order')
self.assertEquals(order_path.getTestMethodId(), None)
delivery_path = getattr(business_process, "delivery_path", None)
self.assertNotEquals(delivery_path, None)
self.assertEquals(delivery_path.getEfficiency(), 1.0)
self.assertEquals(delivery_path.getTradePhase(), 'trade/delivery')
self.assertEquals(delivery_path.getTradeDate(), 'trade_phase/trade/order')
self.assertEquals(delivery_path.getTestMethodId(), None)
invoicing_path = getattr(business_process, "invoicing_path", None)
self.assertNotEquals(invoicing_path, None)
self.assertEquals(invoicing_path.getEfficiency(), 1.0)
self.assertEquals(invoicing_path.getTradePhase(), 'trade/invoicing')
self.assertEquals(invoicing_path.getTradeDate(), 'trade_phase/trade/delivery')
self.assertEquals(invoicing_path.getTestMethodId(), None)
accounting_credit_path = getattr(business_process, "accounting_credit_path", None)
self.assertNotEquals(accounting_credit_path, None)
self.assertEquals(accounting_credit_path.getEfficiency(), -1.0)
self.assertEquals(accounting_credit_path.getTradePhase(), 'trade/accounting')
self.assertEquals(accounting_credit_path.getTradeDate(), 'trade_phase/trade/invoicing')
self.assertEquals(accounting_credit_path.getTestMethodId(), "isAccountingMovementType")
accounting_debit_path = getattr(business_process, "accounting_debit_path", None)
self.assertNotEquals(accounting_debit_path, None)
self.assertEquals(accounting_debit_path.getEfficiency(), 1.0)
self.assertEquals(accounting_debit_path.getTradePhase(), 'trade/accounting')
self.assertEquals(accounting_debit_path.getTradeDate(), 'trade_phase/trade/invoicing')
self.assertEquals(accounting_debit_path.getTestMethodId(), "isAccountingMovementType")
order_link = getattr(business_process, "order_link", None)
self.assertNotEquals(order_link, None)
#self.assertTrue(order_link.getDeliverable())
self.assertEquals(order_link.getSuccessor(), "trade_state/trade/ordered")
self.assertEquals(order_link.getPredecessor(),None)
self.assertEquals(order_link.getCompletedStateList(),["confirmed"])
self.assertEquals(order_link.getFrozenState(), None)
self.assertEquals(order_link.getDeliveryBuilder(), None)
self.assertEquals(order_link.getTradePhase(),'trade/order')
deliver_link = getattr(business_process, "deliver_link", None)
self.assertNotEquals(deliver_link, None)
#self.assertTrue(deliver_link.getDeliverable())
self.assertEquals(deliver_link.getSuccessor(),"trade_state/trade/delivered")
self.assertEquals(deliver_link.getPredecessor(),"trade_state/trade/ordered")
self.assertEquals(deliver_link.getCompletedStateList(),['delivered','started','stopped'])
self.assertEquals(deliver_link.getFrozenStateList(),['delivered','stopped'])
self.assertEquals(deliver_link.getTradePhase(),'trade/delivery')
self.assertEquals(deliver_link.getDeliveryBuilderList(),
["portal_deliveries/sale_packing_list_builder",
"portal_deliveries/internal_packing_list_builder",
"portal_deliveries/purchase_packing_list_builder"])
invoice_link = getattr(business_process, "invoice_link", None)
self.assertNotEquals(invoice_link, None)
#self.assertFalse(invoice_link.getDeliverable())
self.assertEquals(invoice_link.getSuccessor(),"trade_state/trade/invoiced")
self.assertEquals(invoice_link.getPredecessor(),"trade_state/trade/delivered")
self.assertEquals(invoice_link.getCompletedStateList(),
['confirmed','delivered','started','stopped'])
self.assertEquals(invoice_link.getFrozenStateList(),['delivered','stopped'])
self.assertEquals(invoice_link.getTradePhase(),'trade/invoicing')
self.assertEquals(invoice_link.getDeliveryBuilderList(),
["portal_deliveries/purchase_invoice_builder",
"portal_deliveries/purchase_invoice_transaction_trade_model_builder",
"portal_deliveries/sale_invoice_builder",
"portal_deliveries/sale_invoice_transaction_trade_model_builder"])
account_link = getattr(business_process, "account_link", None)
self.assertNotEquals(account_link, None)
#self.assertFalse(account_link.getDeliverable())
self.assertEquals(account_link.getSuccessor(),"trade_state/trade/accounted")
self.assertEquals(account_link.getPredecessor(),"trade_state/trade/invoiced")
self.assertEquals(account_link.getCompletedStateList(),['delivered','started','stopped'])
self.assertEquals(account_link.getFrozenStateList(),['delivered','stopped'])
self.assertEquals(account_link.getTradePhase(), 'trade/accounting')
self.assertSameSet(account_link.getDeliveryBuilderList(),
["portal_deliveries/purchase_invoice_transaction_builder",
"portal_deliveries/sale_invoice_transaction_builder"])
pay_link = getattr(business_process, "pay_link", None)
self.assertNotEquals(pay_link, None)
#self.assertFalse(pay_link.getDeliverable())
self.assertEquals(pay_link.getTradePhase(), 'trade/payment')
self.assertEquals(pay_link.getSuccessor(), None)
self.assertEquals(pay_link.getPredecessor(),"trade_state/trade/accounted")
self.assertEquals(pay_link.getCompletedState(), None)
self.assertEquals(pay_link.getFrozenState(), None)
self.assertEquals(pay_link.getDeliveryBuilderList(),
["portal_deliveries/payment_transaction_builder"])
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