diff --git a/master/bt5/slapos_crm/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml b/master/bt5/slapos_crm/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml index e6770c795d96560355d33d831cea53ed51fa8bd1..78636ca96967d3f50074fc4b0ad197e255b6ac10 100644 --- a/master/bt5/slapos_crm/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml +++ b/master/bt5/slapos_crm/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml @@ -7,4 +7,8 @@ <type>Regularisation Request</type> <workflow>edit_workflow, pricing_interaction_workflow, ticket_interaction_workflow, ticket_workflow</workflow> </chain> + <chain> + <type>Support Request</type> + <workflow>ticket_slap_interface_workflow</workflow> + </chain> </workflow_chain> \ No newline at end of file diff --git a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/Base_generateSupportRequestForSlapOS.py b/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/Base_generateSupportRequestForSlapOS.py deleted file mode 100644 index d9eca0ba5747ccc98651433176618291404b27d7..0000000000000000000000000000000000000000 --- a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/Base_generateSupportRequestForSlapOS.py +++ /dev/null @@ -1,59 +0,0 @@ -from DateTime import DateTime - -portal = context.getPortalObject() -aggregate_value = portal.restrictedTraverse(source_relative_url) - -if aggregate_value.getPortalType() == "Compute Node": - destination_decision = aggregate_value.getSourceAdministration() -elif aggregate_value.getPortalType() == "Software Instance": - destination_decision = aggregate_value.getSpecialiseValue().getDestinationSection() -elif aggregate_value.getPortalType() == "Instance Tree": - destination_decision = aggregate_value.getDestinationSection() -elif aggregate_value.getPortalType() == "Software Installation": - destination_decision = aggregate_value.getDestinationSection() -else: - destination_decision = None - -if portal.ERP5Site_isSupportRequestCreationClosed(destination_decision): - # Stop ticket creation - return - -support_request_in_progress = portal.portal_catalog.getResultValue( - portal_type = 'Support Request', - title = title, - simulation_state = ["validated", "submitted", "suspended"], - default_aggregate_uid = aggregate_value.getUid(), -) - -if support_request_in_progress is not None: - return support_request_in_progress - -support_request_in_progress = context.REQUEST.get("support_request_in_progress", None) - -if support_request_in_progress is not None: - support_request = portal.restrictedTraverse(support_request_in_progress, None) - if support_request and support_request.getTitle() == title and \ - support_request.getAggregateUid() == aggregate_value.getUid(): - return portal.restrictedTraverse(support_request_in_progress) - -# Ensure resoure is Monitoring -resource = portal.service_module.\ - slapos_crm_monitoring.getRelativeUrl() - -support_request = portal.restrictedTraverse( - portal.portal_preferences.getPreferredSupportRequestTemplate())\ - .Base_createCloneDocument(batch_mode=1) - -support_request.edit( - title = title, - description = description, - start_date = DateTime(), - destination_decision=destination_decision, - aggregate_value = aggregate_value, - resource=resource - ) -support_request.validate() - -context.REQUEST.set("support_request_in_progress", support_request.getRelativeUrl()) - -return support_request diff --git a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkAndUpdateAllocationScope.py b/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkAndUpdateAllocationScope.py index aeeadfb914c667e5252a6599e6c5bf2a40494757..59a78845f142acf77f6e98ed87dd13613870044c 100644 --- a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkAndUpdateAllocationScope.py +++ b/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkAndUpdateAllocationScope.py @@ -29,11 +29,12 @@ request_title = 'Allocation scope of %s changed to %s' % (compute_node_reference request_description = 'Allocation scope has been changed to ' \ '%s for %s' % (target_allocation_scope, compute_node_reference) -support_request = context.Base_generateSupportRequestForSlapOS( - request_title, - request_description, - compute_node.getRelativeUrl() - ) +person.notify(support_request_title=request_title, + support_request_description=request_description, + aggregate=context.getRelativeUrl()) + +support_request_relative_url = context.REQUEST.get("support_request_relative_url") +support_request = portal.restrictedTraverse(support_request_relative_url) if support_request is not None: if support_request.getSimulationState() != "validated": @@ -53,8 +54,8 @@ if support_request is not None: message = notification_message.asText( substitution_method_parameter_dict={'mapping_dict': mapping_dict}) - event = support_request.SupportRequest_trySendNotificationMessage( - request_title, message, person.getRelativeUrl()) + support_request.notify(message_title=request_title, message=message) + event = support_request.REQUEST.get("ticket_notified_item") if event is not None: # event added, suspend ticket diff --git a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkSoftwareInstallationState.py b/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkSoftwareInstallationState.py index 2940a6a28afea1428b4c6a5e47da08f666bb6fd7..9e92a74ac6e6dc2eb35d93ad917feba5e5425378 100644 --- a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkSoftwareInstallationState.py +++ b/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkSoftwareInstallationState.py @@ -1,12 +1,11 @@ from DateTime import DateTime portal = context.getPortalObject() -if portal.ERP5Site_isSupportRequestCreationClosed(): - # Stop ticket creation - return - -if context.getMonitorScope() == "disabled": - return +person = context.getSourceAdministrationValue(portal_type="Person") +if not person or \ + context.getMonitorScope() == "disabled" or \ + portal.ERP5Site_isSupportRequestCreationClosed(): + return software_installation_list = portal.portal_catalog( portal_type='Software Installation', @@ -50,15 +49,13 @@ for software_installation in software_installation_list: (software_installation.getUrlString(), compute_node_title, software_installation.getCreationDate()) if should_notify: - support_request = context.Base_generateSupportRequestForSlapOS( - ticket_title, - description, - software_installation.getRelativeUrl() - ) + person.notify(support_request_title=ticket_title, + support_request_description=description, + aggregate=software_installation.getRelativeUrl()) - person = context.getSourceAdministrationValue(portal_type="Person") - if not person: - return support_request + support_request = context.REQUEST.get("support_request_relative_url") + if support_request is None: + return # Send Notification message notification_reference = 'slapos-crm-compute_node_software_installation_state.notification' @@ -75,10 +72,7 @@ for software_installation in software_installation_list: message = notification_message.asText( substitution_method_parameter_dict={'mapping_dict':mapping_dict}) - support_request.SupportRequest_trySendNotificationMessage( - ticket_title, - message, person.getRelativeUrl()) - + support_request.notify(message_title=ticket_title, message=message) support_request_list.append(support_request) return support_request_list diff --git a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkState.py b/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkState.py index 0b6887dcdcdf1576a07852717f632544f7091391..519caaf5f84cbf531091f45602a8e4e5c9fa6a08 100644 --- a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkState.py +++ b/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkState.py @@ -1,12 +1,11 @@ from DateTime import DateTime portal = context.getPortalObject() -if portal.ERP5Site_isSupportRequestCreationClosed(): - # Stop ticket creation - return - -if context.getMonitorScope() == "disabled": - return +person = context.getSourceAdministrationValue(portal_type="Person") +if not person or \ + context.getMonitorScope() == "disabled" or \ + portal.ERP5Site_isSupportRequestCreationClosed(): + return if context.getAllocationScope("open").startswith("close"): context.setMonitorScope("disabled") @@ -18,7 +17,6 @@ ticket_title = "[MONITORING] Lost contact with compute_node %s" % reference description = "" last_contact = "No Contact Information" - d = context.getAccessStatus() # Ignore if data isn't present. if d.get("no_data") == 1: @@ -33,20 +31,19 @@ else: # Nothing to notify. return -support_request = context.Base_generateSupportRequestForSlapOS( - ticket_title, - description, - context.getRelativeUrl() -) +person.notify(support_request_title=ticket_title, + support_request_description=description, + aggregate=context.getRelativeUrl()) -person = context.getSourceAdministrationValue(portal_type="Person") -if not person: - return support_request +support_request_relative_url = context.REQUEST.get("support_request_relative_url") +if support_request_relative_url is None: + return + +support_request = portal.restrictedTraverse(support_request_relative_url) # Send Notification message -notification_reference = 'slapos-crm-compute_node_check_state.notification' notification_message = portal.portal_notifications.getDocumentValue( - reference=notification_reference) + reference='slapos-crm-compute_node_check_state.notification') if notification_message is None: message = """%s""" % description @@ -55,10 +52,8 @@ else: 'compute_node_id':reference, 'last_contact':last_contact} message = notification_message.asText( - substitution_method_parameter_dict={'mapping_dict':mapping_dict}) + substitution_method_parameter_dict={'mapping_dict': mapping_dict}) + +support_request.notify(message_title=ticket_title, message=message) -support_request.SupportRequest_trySendNotificationMessage( - ticket_title, - message, person.getRelativeUrl()) - return support_request diff --git a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/InstanceTree_createSupportRequestEvent.py b/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/InstanceTree_createSupportRequestEvent.py index b5f36c59657ac86ab21bf04d55f0b53b6f476b3c..10037b2ca9ca552a006250f37eface165b499272 100644 --- a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/InstanceTree_createSupportRequestEvent.py +++ b/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/InstanceTree_createSupportRequestEvent.py @@ -1,5 +1,11 @@ portal = context.getPortalObject() + +person = context.getDestinationSectionValue() +if person is None or portal.ERP5Site_isSupportRequestCreationClosed(person.getRelativeUrl()): + # Stop ticket creation + return + ticket_title = "Instance Tree %s is failing." % context.getTitle() error_message = instance.SoftwareInstance_hasReportedError(include_message=True) @@ -10,27 +16,23 @@ if error_message: else: error_message = "No message!" -support_request = context.Base_generateSupportRequestForSlapOS( - ticket_title, - description, - context.getRelativeUrl()) +person.notify(support_request_title=ticket_title, + support_request_description=description, + aggregate=context.getRelativeUrl()) -if support_request is None: +support_request_relative_url = context.REQUEST.get("support_request_relative_url") +if support_request_relative_url is None: return -person = context.getDestinationSectionValue(portal_type="Person") -if not person: - return +support_request = portal.restrictedTraverse(support_request_relative_url) if support_request.getSimulationState() not in ["validated", "suspended"]: support_request.validate() # Send Notification message message = description - -notification_reference = notification_message_reference notification_message = portal.portal_notifications.getDocumentValue( - reference=notification_reference) + reference=notification_message_reference) if notification_message is not None: mapping_dict = {'instance_tree_title':context.getTitle(), 'instance': instance.getTitle(), @@ -39,5 +41,5 @@ if notification_message is not None: message = notification_message.asText( substitution_method_parameter_dict={'mapping_dict':mapping_dict}) -return support_request.SupportRequest_trySendNotificationMessage( - ticket_title, message, person.getRelativeUrl()) +support_request.notify(message_title=ticket_title, message=message) +return context.REQUEST.get("ticket_notified_item") diff --git a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_trySendNotificationMessage.py b/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_trySendNotificationMessage.py deleted file mode 100644 index 1359ecde5aac327bd8672e19b3503a4a15f01eaf..0000000000000000000000000000000000000000 --- a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_trySendNotificationMessage.py +++ /dev/null @@ -1,41 +0,0 @@ -support_request = context -portal = context.getPortalObject() - -resource = portal.service_module.slapos_crm_information.getRelativeUrl() -# create Web message if needed for this ticket -last_event = context.portal_catalog.getResultValue( - title=message_title, - follow_up_uid=support_request.getUid(), - sort_on=[('delivery.start_date', 'DESC')], -) -if last_event: - # User has already been notified for this problem. - return last_event - -transactional_event = context.REQUEST.get("support_request_notified_item", None) - -if transactional_event is not None: - if (transactional_event.getFollowUpUid() == support_request.getUid()) and \ - (transactional_event.getTitle() == message_title): - return transactional_event - -template = portal.restrictedTraverse( - portal.portal_preferences.getPreferredWebMessageTemplate()) - -event = template.Base_createCloneDocument(batch_mode=1) -event.edit( - title=message_title, - text_content=message, - start_date = DateTime(), - resource = resource, - source=support_request.getSource(), - destination=destination_relative_url, - follow_up=support_request.getRelativeUrl(), -) -event.stop() -event.deliver() - -support_request.serialize() -context.REQUEST.set("support_request_notified_item", event) - -return event diff --git a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_updateMonitoringDestroyRequestedState.py b/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_updateMonitoringDestroyRequestedState.py index 1396f2619520760fa48bc70c1b6b21c5bf2b999e..639f01feca73300a9f0cf4afe971d9e3d3201f83 100644 --- a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_updateMonitoringDestroyRequestedState.py +++ b/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_updateMonitoringDestroyRequestedState.py @@ -1,35 +1,31 @@ """ Close Support Request which are related to a Destroy Requested Instance. """ - +portal = context.getPortalObject() if context.getSimulationState() == "invalidated": return document = context.getAggregateValue() - if document is not None and document.getSlapState() == "destroy_requested": person = context.getDestinationDecision(portal_type="Person") if not person: return - if context.getSimulationState() != "invalidated": - context.invalidate() - # Send Notification message message = """ Closing this ticket as the Instance Tree was destroyed by the user. """ - notification_reference = "slapos-crm-support-request-close-destroyed-notification" - portal = context.getPortalObject() - notification_message = portal.portal_notifications.getDocumentValue( - reference=notification_reference) + reference="slapos-crm-support-request-close-destroyed-notification") if notification_message is not None: - mapping_dict = {'instance_tree_title':document.getTitle()} + mapping_dict = {'instance_tree_title': document.getTitle()} message = notification_message.asText( substitution_method_parameter_dict={'mapping_dict':mapping_dict}) - - return context.SupportRequest_trySendNotificationMessage( - "Instance Tree was destroyed was destroyed by the user", message, person) + + context.notify(message_title="Instance Tree was destroyed was destroyed by the user", + message=message) + + context.invalidate() + return context.REQUEST.get("ticket_notified_item") diff --git a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_updateMonitoringState.py b/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_updateMonitoringState.py index ead0556970d690a9c40269e50334080866819fff..dfa470efd547e9ba7b5c7a91ab18c5905b6864af 100644 --- a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_updateMonitoringState.py +++ b/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_updateMonitoringState.py @@ -2,7 +2,6 @@ if context.getSimulationState() == "invalidated": return document = context.getAggregateValue(portal_type="Instance Tree") - if document is None: return diff --git a/master/bt5/slapos_crm/TestTemplateItem/portal_components/test.erp5.testSlapOSCRMSkins.py b/master/bt5/slapos_crm/TestTemplateItem/portal_components/test.erp5.testSlapOSCRMSkins.py index a2417d393f57035e546aef90e2b540d3245d3dd6..7a6f685e719ce442822be9d3145e1f5d5b572211 100644 --- a/master/bt5/slapos_crm/TestTemplateItem/portal_components/test.erp5.testSlapOSCRMSkins.py +++ b/master/bt5/slapos_crm/TestTemplateItem/portal_components/test.erp5.testSlapOSCRMSkins.py @@ -27,8 +27,6 @@ from erp5.component.test.SlapOSTestCaseMixin import \ from DateTime import DateTime from App.Common import rfc1123_date from Products.ERP5Type.Cache import DEFAULT_CACHE_SCOPE - -from Products.ERP5Type.tests.utils import createZODBPythonScript import json import feedparser @@ -655,13 +653,6 @@ class TestSlapOSComputeNode_notifyWrongAllocationScope(TestCRMSkinsMixin): 'assert reference == "slapos-crm-compute_node_allocation_scope.notification"\n' \ 'return context.restrictedTraverse(' \ 'context.REQUEST["test_ComputeNodeNotAllowedAllocationScope_OpenPublic"])') - @simulate('SupportRequest_trySendNotificationMessage', - 'message_title, message, destination_relative_url', - 'context.portal_workflow.doActionFor(' \ - 'context, action="edit_action", ' \ - 'comment="Visited by SupportRequest_trySendNotificationMessage ' \ - '%s %s %s" % (message_title, message, destination_relative_url))\n' \ - 'return 1') def test_ComputeNodeNotAllowedAllocationScope_OpenPublic(self): compute_node = self._makeComputeNode(owner=self.makePerson(user=0))[0] person = compute_node.getSourceAdministrationValue() @@ -677,13 +668,14 @@ class TestSlapOSComputeNode_notifyWrongAllocationScope(TestCRMSkinsMixin): self.assertNotEqual(None, ticket) self.assertEqual(ticket.getSimulationState(), 'suspended') - self.assertEqual('Visited by SupportRequest_trySendNotificationMessage ' \ - '%s %s %s' % \ - ('Allocation scope of %s changed to %s' % (compute_node.getReference(), - 'open/personal'), - 'Test NM content\n%s\n' % compute_node.getReference(), person.getRelativeUrl()), - ticket.workflow_history['edit_workflow'][-1]['comment']) + event_list = ticket.getFollowUpRelatedValueList() + self.assertEqual(len(event_list), 1) + event = event_list[0] + self.assertEqual(event.getTitle(), + 'Allocation scope of %s changed to %s' % (compute_node.getReference(), 'open/personal')) + self.assertIn(compute_node.getReference(), event.getTextContent()) + self.assertEqual(event.getDestination(), person.getRelativeUrl()) @simulate('ERP5Site_isSupportRequestCreationClosed', '*args, **kwargs','return 0') @simulate('NotificationTool_getDocumentValue', @@ -691,13 +683,6 @@ class TestSlapOSComputeNode_notifyWrongAllocationScope(TestCRMSkinsMixin): 'assert reference == "slapos-crm-compute_node_allocation_scope.notification"\n' \ 'return context.restrictedTraverse(' \ 'context.REQUEST["test_ComputeNodeNotAllowedAllocationScope_OpenFriend"])') - @simulate('SupportRequest_trySendNotificationMessage', - 'message_title, message, destination_relative_url', - 'context.portal_workflow.doActionFor(' \ - 'context, action="edit_action", ' \ - 'comment="Visited by SupportRequest_trySendNotificationMessage ' \ - '%s %s %s" % (message_title, message, destination_relative_url))\n' \ - 'return 1') def test_ComputeNodeNotAllowedAllocationScope_OpenFriend(self): compute_node = self._makeComputeNode(owner=self.makePerson(user=0))[0] person = compute_node.getSourceAdministrationValue() @@ -712,12 +697,15 @@ class TestSlapOSComputeNode_notifyWrongAllocationScope(TestCRMSkinsMixin): self.tic() self.assertEqual(compute_node.getAllocationScope(), 'open/personal') self.assertEqual(ticket.getSimulationState(), 'suspended') - self.assertEqual('Visited by SupportRequest_trySendNotificationMessage ' \ - '%s %s %s' % \ - ('Allocation scope of %s changed to %s' % (compute_node.getReference(), - 'open/personal'), - 'Test NM content\n%s\n' % compute_node.getReference(), person.getRelativeUrl()), - ticket.workflow_history['edit_workflow'][-1]['comment']) + + event_list = ticket.getFollowUpRelatedValueList() + self.assertEqual(len(event_list), 1) + event = event_list[0] + + self.assertEqual(event.getTitle(), + 'Allocation scope of %s changed to %s' % (compute_node.getReference(), 'open/personal')) + self.assertIn(compute_node.getReference(), event.getTextContent()) + self.assertEqual(event.getDestination(), person.getRelativeUrl()) @simulate('ERP5Site_isSupportRequestCreationClosed', '*args, **kwargs','return 0') @simulate('ComputeNode_hasContactedRecently', '*args, **kwargs','return False') @@ -726,13 +714,6 @@ class TestSlapOSComputeNode_notifyWrongAllocationScope(TestCRMSkinsMixin): 'assert reference == "slapos-crm-compute-node-allocation-scope-closed.notification"\n' \ 'return context.restrictedTraverse(' \ 'context.REQUEST["test_ComputeNodeToCloseAllocationScope_OpenPersonal"])') - @simulate('SupportRequest_trySendNotificationMessage', - 'message_title, message, destination_relative_url', - 'context.portal_workflow.doActionFor(' \ - 'context, action="edit_action", ' \ - 'comment="Visited by SupportRequest_trySendNotificationMessage ' \ - '%s %s %s" % (message_title, message, destination_relative_url))\n' \ - 'return 1') def test_ComputeNodeToCloseAllocationScope_OpenPersonal(self): compute_node = self._makeComputeNode(owner=self.makePerson(user=0))[0] person = compute_node.getSourceAdministrationValue() @@ -747,12 +728,16 @@ class TestSlapOSComputeNode_notifyWrongAllocationScope(TestCRMSkinsMixin): self.assertEqual('suspended', support_request.getSimulationState()) self.assertEqual(compute_node.getAllocationScope(), target_allocation_scope) - self.assertEqual('Visited by SupportRequest_trySendNotificationMessage ' \ - '%s %s %s' % \ - ('Allocation scope of %s changed to %s' % (compute_node.getReference(), - target_allocation_scope), - 'Test NM content\n%s\n' % compute_node.getReference(), person.getRelativeUrl()), - support_request.workflow_history['edit_workflow'][-1]['comment']) + + event_list = support_request.getFollowUpRelatedValueList() + self.assertEqual(len(event_list), 1) + event = event_list[0] + + self.assertEqual(event.getTitle(), + 'Allocation scope of %s changed to %s' % \ + (compute_node.getReference(), target_allocation_scope)) + self.assertIn(compute_node.getReference(), event.getTextContent()) + self.assertEqual(event.getDestination(), person.getRelativeUrl()) def test_ComputeNodeNormalAllocationScope_OpenPersonal(self): compute_node = self._makeComputeNode(owner=self.makePerson(user=0))[0] @@ -988,189 +973,6 @@ class TestSlapOSisSupportRequestCreationClosed(TestCRMSkinsMixin): self.assertFalse(self.portal.ERP5Site_isSupportRequestCreationClosed()) -class TestSlapOSGenerateSupportRequestForSlapOS(TestCRMSkinsMixin): - - def afterSetUp(self): - TestCRMSkinsMixin.afterSetUp(self) - self.tic() - self._cancelTestSupportRequestList() - - def test_compute_node_Base_generateSupportRequestForSlapOS(self): - self._makeComputeNode() - title = "Test Support Request %s" % self.compute_node.getReference() - support_request = self.compute_node.Base_generateSupportRequestForSlapOS( - title, title, self.compute_node.getRelativeUrl() - ) - self.tic() - - self.assertNotEqual(support_request, None) - - self.assertEqual(support_request.getSimulationState(), "validated") - self.assertEqual(support_request.getRelativeUrl(), - self.portal.REQUEST.get("support_request_in_progress", None)) - - # The support request is added to compute_node owner. - self.assertEqual(support_request.getDestinationDecision(), - self.compute_node.getSourceAdministration()) - self.assertEqual(support_request.getTitle(), title) - self.assertEqual(support_request.getDescription(), title) - self.assertEqual(support_request.getAggregateValue(), - self.compute_node) - - def test_software_instance_Base_generateSupportRequestForSlapOS(self): - instance_tree = self._makeInstanceTree() - self._makeSoftwareInstance(instance_tree, - self.generateNewSoftwareReleaseUrl()) - - instance = instance_tree.getSuccessorValue() - title = "Test Support Request %s" % instance.getReference() - support_request = instance.Base_generateSupportRequestForSlapOS( - title, title, instance.getRelativeUrl() - ) - self.tic() - - self.assertNotEqual(support_request, None) - - self.assertEqual(support_request.getSimulationState(), "validated") - self.assertEqual(support_request.getRelativeUrl(), - self.portal.REQUEST.get("support_request_in_progress", None)) - - # The support request is added to compute_node owner. - self.assertEqual(support_request.getDestinationDecision(), - instance_tree.getDestinationSection()) - self.assertEqual(support_request.getTitle(), title) - self.assertEqual(support_request.getDescription(), title) - self.assertEqual(support_request.getAggregateValue(), - instance) - - def test_instance_tree_Base_generateSupportRequestForSlapOS(self): - instance_tree = self._makeInstanceTree() - - title = "Test Support Request %s" % instance_tree.getReference() - support_request = instance_tree.Base_generateSupportRequestForSlapOS( - title, title, instance_tree.getRelativeUrl() - ) - self.tic() - - self.assertNotEqual(support_request, None) - - self.assertEqual(support_request.getSimulationState(), "validated") - self.assertEqual(support_request.getRelativeUrl(), - self.portal.REQUEST.get("support_request_in_progress", None)) - - # The support request is added to compute_node owner. - self.assertEqual(support_request.getDestinationDecision(), - instance_tree.getDestinationSection()) - - self.assertEqual(support_request.getTitle(), title) - self.assertEqual(support_request.getDescription(), title) - self.assertEqual(support_request.getAggregateValue(), - instance_tree) - - def test_software_installation_Base_generateSupportRequestForSlapOS(self): - software_installation = self._makeSoftwareInstallation() - - title = "Test Support Request %s" % software_installation.generateNewId() - support_request = software_installation.Base_generateSupportRequestForSlapOS( - title, title, software_installation.getRelativeUrl() - ) - self.tic() - - self.assertNotEqual(support_request, None) - - self.assertEqual(support_request.getSimulationState(), "validated") - self.assertEqual(support_request.getRelativeUrl(), - self.portal.REQUEST.get("support_request_in_progress", None)) - - # The support request is added to compute_node owner. - self.assertEqual(support_request.getDestinationDecision(), - software_installation.getDestinationSection()) - - self.assertEqual(support_request.getTitle(), title) - self.assertEqual(support_request.getDescription(), title) - self.assertEqual(support_request.getAggregateValue(), - software_installation) - - - def test_Base_generateSupportRequestForSlapOS_do_not_recreate_if_open(self): - self._makeComputeNode(owner=self.makePerson(user=0)) - title = "Test Support Request %s" % self.compute_node.getReference() - support_request = self.compute_node.Base_generateSupportRequestForSlapOS( - title, title, self.compute_node.getRelativeUrl() - ) - self.tic() - self.portal.REQUEST.set("support_request_in_progress", None) - - same_support_request = self.compute_node.Base_generateSupportRequestForSlapOS( - title, title, self.compute_node.getRelativeUrl() - ) - - self.assertEqual(support_request, same_support_request) - - - def test_Base_generateSupportRequestForSlapOS_do_not_recreate_if_suspended(self): - self._makeComputeNode(owner=self.makePerson(user=0)) - title = "Test Support Request %s" % self.compute_node.getReference() - support_request = self.compute_node.Base_generateSupportRequestForSlapOS( - title, title, self.compute_node.getRelativeUrl() - ) - - support_request.suspend() - self.tic() - self.portal.REQUEST.set("support_request_in_progress", None) - - same_support_request = self.compute_node.Base_generateSupportRequestForSlapOS( - title, title, self.compute_node.getRelativeUrl() - ) - - self.assertEqual(support_request, same_support_request) - - def test_Base_generateSupportRequestForSlapOS_recreate_if_closed(self): - self._makeComputeNode(owner=self.makePerson(user=0)) - title = "Test Support Request %s" % self.compute_node.getReference() - support_request = self.compute_node.Base_generateSupportRequestForSlapOS( - title, title, self.compute_node.getRelativeUrl()) - self.tic() - - support_request.invalidate() - self.tic() - - self.portal.REQUEST.set("support_request_in_progress", None) - - support_request = self.compute_node.Base_generateSupportRequestForSlapOS( - title, title, self.compute_node.getRelativeUrl() - ) - self.tic() - - self.assertNotEqual(support_request, None) - - def test_Base_generateSupportRequestForSlapOS_recreate(self): - self._makeComputeNode(owner=self.makePerson(user=0)) - title = "Test Support Request %s" % self.compute_node.getRelativeUrl() - support_request = self.compute_node.Base_generateSupportRequestForSlapOS( - title, title, self.compute_node.getRelativeUrl()) - - same_support_request = self.compute_node.Base_generateSupportRequestForSlapOS( - title, title, self.compute_node.getRelativeUrl() - ) - - self.assertEqual(support_request, same_support_request) - - def test_Base_generateSupportRequestForSlapOS_inprogress(self): - self._makeComputeNode(owner=self.makePerson(user=0)) - title = "Test Support Request %s" % self.compute_node.getRelativeUrl() - support_request = self.compute_node.Base_generateSupportRequestForSlapOS( - title, title, self.compute_node.getRelativeUrl()) - - in_progress = support_request.getRelativeUrl() - self.portal.REQUEST.set("support_request_in_progress", in_progress) - - title = "Test Support Request %s" % self.compute_node.getRelativeUrl() - support_request = self.compute_node.Base_generateSupportRequestForSlapOS( - title, title, self.compute_node.getRelativeUrl()) - - self.assertEqual(support_request.getRelativeUrl(), in_progress) - class TestSlapOSComputeNode_CheckState(TestCRMSkinsMixin): def beforeTearDown(self): @@ -1181,11 +983,6 @@ class TestSlapOSComputeNode_CheckState(TestCRMSkinsMixin): TestCRMSkinsMixin.afterSetUp(self) self._cancelTestSupportRequestList("% TESTCOMPT-%") - def _makeSupportRequest(self): - return self.portal.restrictedTraverse( - self.portal.portal_preferences.getPreferredSupportRequestTemplate()).\ - Base_createCloneDocument(batch_mode=1) - def _makeNotificationMessage(self, reference): notification_message = self.portal.notification_message_module.newContent( portal_type="Notification Message", @@ -1205,56 +1002,36 @@ class TestSlapOSComputeNode_CheckState(TestCRMSkinsMixin): ) return support_request - def _simulateBase_generateSupportRequestForSlapOS(self): - script_name = 'Base_generateSupportRequestForSlapOS' - if script_name in self.portal.portal_skins.custom.objectIds(): - raise ValueError('Precondition failed: %s exists in custom' % script_name) - createZODBPythonScript(self.portal.portal_skins.custom, - script_name, - '*args, **kw', - '# Script body\n' -"""return context.getPortalObject().REQUEST['_simulateBase_generateSupportRequestForSlapOS']""") - transaction.commit() - @simulate('ERP5Site_isSupportRequestCreationClosed', '*args, **kwargs','return 0') def test_ComputeNode_checkState_call_support_request(self): compute_node = self._makeComputeNode(owner=self.makePerson(user=0))[0] try: - self.pinDateTime(DateTime()-1.1) + d = DateTime() - 1.1 + self.pinDateTime(d) compute_node.setAccessStatus("#access ") finally: self.unpinDateTime() - self._simulateBase_generateSupportRequestForSlapOS() - support_request = self._makeSupportRequest() - self.portal.REQUEST.set('_simulateBase_generateSupportRequestForSlapOS', - support_request) - - try: - compute_node_support_request = compute_node.ComputeNode_checkState() - finally: - self._dropScript("Base_generateSupportRequestForSlapOS") - - self.assertEqual(support_request, - compute_node_support_request) - + compute_node_support_request = compute_node.ComputeNode_checkState() + self.assertNotEqual(compute_node_support_request, None) + self.assertIn("[MONITORING] Lost contact with compute_node", + compute_node_support_request.getTitle()) + self.assertIn("has not contacted the server for more than 30 minutes", + compute_node_support_request.getDescription()) + self.assertIn(d.strftime("%Y/%m/%d %H:%M:%S"), + compute_node_support_request.getDescription()) @simulate('ERP5Site_isSupportRequestCreationClosed', '*args, **kwargs','return 0') def test_ComputeNode_checkState_empty_cache(self): compute_node = self._makeComputeNode(owner=self.makePerson(user=0))[0] - - self._simulateBase_generateSupportRequestForSlapOS() - support_request = self._makeSupportRequest() - self.portal.REQUEST.set('_simulateBase_generateSupportRequestForSlapOS', - support_request) - - try: - compute_node_support_request = compute_node.ComputeNode_checkState() - finally: - self._dropScript("Base_generateSupportRequestForSlapOS") - - self.assertEqual(support_request, - compute_node_support_request) + compute_node_support_request = compute_node.ComputeNode_checkState() + + compute_node_support_request = compute_node.ComputeNode_checkState() + self.assertNotEqual(compute_node_support_request, None) + self.assertIn("[MONITORING] Lost contact with compute_node", + compute_node_support_request.getTitle()) + self.assertIn("has not contacted the server (No Contact Information)", + compute_node_support_request.getDescription()) @simulate('ERP5Site_isSupportRequestCreationClosed', '*args, **kwargs','return 0') @simulate('NotificationTool_getDocumentValue', @@ -1262,12 +1039,6 @@ class TestSlapOSComputeNode_CheckState(TestCRMSkinsMixin): 'assert reference == "slapos-crm-compute_node_check_state.notification"\n' \ 'return context.restrictedTraverse(' \ 'context.REQUEST["test_ComputeNode_checkState_notify"])') - @simulate('SupportRequest_trySendNotificationMessage', - 'message_title, message, destination_relative_url', - 'context.portal_workflow.doActionFor(' \ - 'context, action="edit_action", ' \ - 'comment="Visited by SupportRequest_trySendNotificationMessage ' \ - '%s %s %s" % (message_title, message, destination_relative_url))') def test_ComputeNode_checkState_notify(self): compute_node = self._makeComputeNode(owner=self.makePerson(user=0))[0] person = compute_node.getSourceAdministrationValue() @@ -1286,14 +1057,15 @@ class TestSlapOSComputeNode_CheckState(TestCRMSkinsMixin): ticket_title = "[MONITORING] Lost contact with compute_node %s" % compute_node.getReference() ticket = self._getGeneratedSupportRequest(compute_node.getUid(), ticket_title) + self.assertNotEqual(ticket, None) - self.assertEqual('Visited by SupportRequest_trySendNotificationMessage ' \ - '%s %s %s' % ( \ - ticket_title, - 'Test NM content\n%s\n' % compute_node.getReference(), - person.getRelativeUrl()), - ticket.workflow_history['edit_workflow'][-1]['comment']) + event_list = ticket.getFollowUpRelatedValueList() + self.assertEqual(len(event_list), 1) + event = event_list[0] + self.assertEqual(event.getTitle(), ticket.getTitle()) + self.assertIn(compute_node.getReference(), event.getTextContent()) + self.assertEqual(event.getDestination(), person.getRelativeUrl()) @simulate('ERP5Site_isSupportRequestCreationClosed', '*args, **kwargs','return 0') @simulate('NotificationTool_getDocumentValue', @@ -1301,12 +1073,6 @@ class TestSlapOSComputeNode_CheckState(TestCRMSkinsMixin): 'assert reference == "slapos-crm-compute_node_check_state.notification"\n' \ 'return context.restrictedTraverse(' \ 'context.REQUEST["test_ComputeNode_checkState_empty_cache_notify"])') - @simulate('SupportRequest_trySendNotificationMessage', - 'message_title, message, destination_relative_url', - 'context.portal_workflow.doActionFor(' \ - 'context, action="edit_action", ' \ - 'comment="Visited by SupportRequest_trySendNotificationMessage ' \ - '%s %s %s" % (message_title, message, destination_relative_url))') def test_ComputeNode_checkState_empty_cache_notify(self): compute_node = self._makeComputeNode(owner=self.makePerson(user=0))[0] person = compute_node.getSourceAdministrationValue() @@ -1320,13 +1086,13 @@ class TestSlapOSComputeNode_CheckState(TestCRMSkinsMixin): ticket_title = "[MONITORING] Lost contact with compute_node %s" % compute_node.getReference() ticket = self._getGeneratedSupportRequest(compute_node.getUid(), ticket_title) self.assertNotEqual(ticket, None) - self.assertEqual('Visited by SupportRequest_trySendNotificationMessage ' \ - '%s %s %s' % ( \ - ticket_title, - 'Test NM content\n%s\n' % compute_node.getReference(), - person.getRelativeUrl()), - ticket.workflow_history['edit_workflow'][-1]['comment']) + event_list = ticket.getFollowUpRelatedValueList() + self.assertEqual(len(event_list), 1) + event = event_list[0] + self.assertEqual(event.getTitle(), ticket.getTitle()) + self.assertIn(compute_node.getReference(), event.getTextContent()) + self.assertEqual(event.getDestination(), person.getRelativeUrl()) class TestSlapOSInstanceTree_createSupportRequestEvent(SlapOSTestCaseMixin): @@ -1341,8 +1107,7 @@ class TestSlapOSInstanceTree_createSupportRequestEvent(SlapOSTestCaseMixin): return notification_message.getRelativeUrl() def _makeInstanceTree(self): - person = self.portal.person_module.template_member\ - .Base_createCloneDocument(batch_mode=1) + person = self.makePerson(user=1) instance_tree = self.portal\ .instance_tree_module.template_instance_tree\ .Base_createCloneDocument(batch_mode=1) @@ -1371,12 +1136,6 @@ class TestSlapOSInstanceTree_createSupportRequestEvent(SlapOSTestCaseMixin): 'assert reference == "test-slapos-crm-check.notification"\n' \ 'return context.restrictedTraverse(' \ 'context.REQUEST["testInstanceTree_createSupportRequestEvent"])') - @simulate('SupportRequest_trySendNotificationMessage', - 'message_title, message, destination_relative_url', - 'context.portal_workflow.doActionFor(' \ - 'context, action="edit_action", ' \ - 'comment="Visited by SupportRequest_trySendNotificationMessage ' \ - '%s %s %s" % (message_title, message, destination_relative_url))') def testInstanceTree_createSupportRequestEvent(self): instance_tree = self._makeInstanceTree() person = instance_tree.getDestinationSectionValue() @@ -1392,12 +1151,14 @@ class TestSlapOSInstanceTree_createSupportRequestEvent(SlapOSTestCaseMixin): instance_tree.getUid()) self.assertNotEqual(ticket, None) self.assertEqual(ticket.getSimulationState(), "validated") - self.assertEqual('Visited by SupportRequest_trySendNotificationMessage ' \ - '%s %s %s' % ( \ - ticket_title, - 'Test NM content\n%s\n' % instance_tree.getReference(), - person.getRelativeUrl()), - ticket.workflow_history['edit_workflow'][-1]['comment']) + self.assertNotEqual(ticket, None) + event_list = ticket.getFollowUpRelatedValueList() + self.assertEqual(len(event_list), 1) + event = event_list[0] + + self.assertEqual(event.getTitle(), ticket_title) + self.assertIn(instance_tree.getReference(), event.getTextContent()) + self.assertEqual(event.getDestination(), person.getRelativeUrl()) ticket.suspend() self.tic() @@ -1734,95 +1495,6 @@ class TestSlapOSHasError(SlapOSTestCaseMixin): None, instance_tree.InstanceTree_checkSoftwareInstanceState()) -class TestSupportRequestTrySendNotificationMessage(SlapOSTestCaseMixin): - - def test_SupportRequest_trySendNotificationMessage(self): - self._makeComputeNode(owner=self.makePerson(user=0)) - person = self.compute_node.getSourceAdministrationValue() - title = "Test Support Request %s" % self.compute_node.getReference() - text_content='Test NM content<br/>%s<br/>' % self.compute_node.getReference() - - support_request = self.portal.support_request_module.newContent(\ - title=title, description=title, - destination_decision=self.compute_node.getSourceAdministration(), - aggregate_value=self.compute_node.getRelativeUrl()) - support_request.validate() - self.tic() - - first_event = support_request.SupportRequest_trySendNotificationMessage( - message_title=title, message=text_content, - destination_relative_url=person.getRelativeUrl() - ) - self.assertNotEqual(first_event, None) - - self.tic() - self.assertEqual( - support_request.getFollowUpRelatedList(), - [first_event.getRelativeUrl()]) - - self.assertEqual(title, first_event.getTitle()) - self.assertEqual(text_content, first_event.getTextContent()) - self.assertNotEqual(None, first_event.getStartDate()) - self.assertEqual("service_module/slapos_crm_information", - first_event.getResource()) - self.assertEqual(first_event.getDestination(), person.getRelativeUrl()) - self.assertEqual(first_event.getFollowUp(), support_request.getRelativeUrl()) - - event = support_request.SupportRequest_trySendNotificationMessage( - message_title=title, message=text_content, - destination_relative_url=person.getRelativeUrl() - ) - self.assertEqual(event, first_event) - - self.assertEqual(title, event.getTitle()) - self.assertEqual(text_content, event.getTextContent()) - self.assertNotEqual(None, event.getStartDate()) - self.assertEqual("service_module/slapos_crm_information", - event.getResource()) - self.assertEqual(event.getDestination(), person.getRelativeUrl()) - - title += "__zz" - event = support_request.SupportRequest_trySendNotificationMessage( - message_title=title, message=text_content, - destination_relative_url=person.getRelativeUrl(), - ) - - self.assertEqual(event.getTitle(), title) - self.assertEqual(text_content, event.getTextContent()) - self.assertNotEqual(None, event.getStartDate()) - self.assertEqual("service_module/slapos_crm_information", - event.getResource()) - self.assertEqual(event.getDestination(), person.getRelativeUrl()) - - another_support_request = self.portal.support_request_module.newContent(\ - title=title, description=title, - destination_decision=self.compute_node.getSourceAdministration(), - aggregate_value=self.compute_node.getRelativeUrl()) - another_support_request.validate() - self.tic() - - another_first_event = \ - another_support_request.SupportRequest_trySendNotificationMessage( - message_title=title, message=text_content, - destination_relative_url=person.getRelativeUrl()) - - self.assertNotEqual(another_first_event, None) - - self.tic() - self.assertEqual( - another_support_request.getFollowUpRelatedList(), - [another_first_event.getRelativeUrl()]) - - self.assertEqual(title, another_first_event.getTitle()) - self.assertEqual(text_content, another_first_event.getTextContent()) - self.assertNotEqual(None, another_first_event.getStartDate()) - self.assertEqual("service_module/slapos_crm_information", - another_first_event.getResource()) - self.assertEqual(another_first_event.getDestination(), person.getRelativeUrl()) - self.assertEqual(another_first_event.getFollowUp(), - another_support_request.getRelativeUrl()) - - class TestSupportRequestUpdateMonitoringState(SlapOSTestCaseMixin): def _makeInstanceTree(self): @@ -1873,10 +1545,6 @@ class TestSupportRequestUpdateMonitoringState(SlapOSTestCaseMixin): support_request.SupportRequest_updateMonitoringState()) @simulate('ERP5Site_isSupportRequestCreationClosed', '','return 0') - @simulate('SupportRequest_trySendNotificationMessage', - "message_title, message, source_relative_url", - """assert "destroyed" in message -return "Visited by SupportRequest_trySendNotificationMessage %s %s" % (message_title, source_relative_url)""") def testSupportRequest_updateMonitoringDestroyRequestedState(self): support_request = self._makeSupportRequest() self.assertEqual(None, @@ -1887,20 +1555,29 @@ return "Visited by SupportRequest_trySendNotificationMessage %s %s" % (message_t support_request.setAggregateValue( self._makeComputeNode(owner=self.makePerson(user=0))[0]) + support_request.setDestinationDecisionValue(self.makePerson(user=0)) self.assertEqual(None, support_request.SupportRequest_updateMonitoringDestroyRequestedState()) hs = self._makeInstanceTree() support_request.setAggregateValue(hs) + self.tic() + hs.getSlapState = getFakeSlapState self.commit() - support_request.setDestinationDecisionValue(self.makePerson(user=0)) - expected_text = """Visited by SupportRequest_trySendNotificationMessage Instance Tree was destroyed was destroyed by the user %s""" % support_request.getDestinationDecision() - self.assertEqual(expected_text, + self.assertNotEqual(None, support_request.SupportRequest_updateMonitoringDestroyRequestedState()) + self.tic() + event_list = support_request.getFollowUpRelatedValueList() + self.assertEqual(len(event_list), 1) + event = event_list[0] + + self.assertEqual(event.getTitle(), 'Instance Tree was destroyed was destroyed by the user') + self.assertEqual(event.getDestination(), support_request.getDestinationDecision()) + self.assertEqual("invalidated", support_request.getSimulationState()) diff --git a/master/bt5/slapos_crm/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudTicketSlapInterfaceWorkflow.py b/master/bt5/slapos_crm/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudTicketSlapInterfaceWorkflow.py new file mode 100644 index 0000000000000000000000000000000000000000..77dbb3953e5726ebafd1f521bddc53be2c177d60 --- /dev/null +++ b/master/bt5/slapos_crm/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudTicketSlapInterfaceWorkflow.py @@ -0,0 +1,212 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (c) 2002-2012 Nexedi SA and Contributors. All Rights Reserved. +# +# 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 erp5.component.test.SlapOSTestCaseMixin import SlapOSTestCaseMixin #, simulate +import transaction + +class TestSlapOSCoreTicketSlapInterfaceWorkflow(SlapOSTestCaseMixin): + + def afterSetUp(self): + SlapOSTestCaseMixin.afterSetUp(self) + portal = self.getPortalObject() + + self.ticket_trade_condition = portal.sale_trade_condition_module.slapos_ticket_trade_condition + + person_user = self.makePerson() + self.tic() + + # Login as new user + self.login(person_user.getUserId()) + + new_person = self.portal.portal_membership.getAuthenticatedMember().getUserValue() + self.assertEqual(person_user.getRelativeUrl(), new_person.getRelativeUrl()) + + self.support_request = portal.support_request_module.newContent( + portal_type="Support Request", + destination_decision=person_user.getRelativeUrl(), + specialise=self.ticket_trade_condition.getRelativeUrl() + ) + + # Value set by the init + self.assertTrue(self.support_request.getReference().startswith("SR-"), + "Reference don't start with SR- : %s" % self.support_request.getReference()) + + def beforeTearDown(self): + transaction.abort() + + def test_SupportRequest_approveRegistration_no_reference(self): + self.support_request.setReference(None) + self.assertRaises(ValueError, self.support_request.approveRegistration) + + def test_SupportRequest_approveRegistration_already_validated(self): + + # Login as admin since user cannot re-approve a validated project + self.login() + self.support_request.validate() + # Don't raise if support request is validated + self.assertEqual(self.support_request.approveRegistration(), None) + + def test_SupportRequest_approveRegistration(self): + person = self.portal.portal_membership.getAuthenticatedMember().getUserValue() + + self.support_request.approveRegistration() + self.tic() + + self.logout() + self.login(person.getUserId()) + + self.assertEqual(self.support_request.getSimulationState(), + 'validated') + + self.assertEqual(self.support_request.getSourceSection(), + self.ticket_trade_condition.getSourceSection()) + self.assertEqual(self.support_request.getSourceTrade(), + self.ticket_trade_condition.getSourceSection()) + self.assertEqual(self.support_request.getSource(), + self.ticket_trade_condition.getSource()) + + self.assertNotEqual(self.support_request.getStartDate(), + None) + + event = self.support_request.getCausalityValue() + self.assertNotEqual(event, None) + + event_relative_url = self.support_request.REQUEST.get("event_relative_url") + self.assertEqual(event.getRelativeUrl(), event_relative_url) + + self.assertEqual(event.getTitle(), self.support_request.getTitle()) + + def test_SupportRequest_requestEvent_noParameter(self): + self.assertRaises(TypeError, self.support_request.requestEvent) + self.assertRaises(TypeError, self.support_request.requestEvent, event_title="A") + self.assertRaises(TypeError, self.support_request.requestEvent, event_content="A") + + def test_SupportRequest_requestEvent(self): + person = self.portal.portal_membership.getAuthenticatedMember().getUserValue() + + self.support_request.approveRegistration() + self.tic() + + self.logout() + self.login(person.getUserId()) + + self.support_request.requestEvent( + event_title="A", + event_content="B" + ) + self.tic() + + event_relative_url = self.support_request.REQUEST.get("event_relative_url") + event = self.portal.restrictedTraverse(event_relative_url) + + self.assertEqual(event.getSimulationState(), "stopped") + self.assertEqual(self.support_request.getSimulationState(), + 'validated') + self.assertEqual(self.support_request.getDestinationDecision(), + event.getSource()) + self.assertEqual(person, event.getSourceValue()) + + self.assertEqual(self.support_request.getResource(), + event.getResource()) + self.assertEqual(self.support_request, + event.getFollowUpValue()) + + self.assertEqual(event.getTitle(), "A") + self.assertEqual(event.getTextContent(), "B") + self.assertEqual(event.getContentType(), "text/plain") + self.assertEqual(event.getPortalType(), "Web Message") + self.assertEqual(event.getDestination(), + self.support_request.getSource()) + + def test_SupportRequest_notify_noParameter(self): + self.assertRaises(TypeError, self.support_request.notify) + self.assertRaises(TypeError, self.support_request.notify, message_title="A") + self.assertRaises(TypeError, self.support_request.notify, message="A") + self.assertRaises(TypeError, self.support_request.notify, destination_relative_url="A") + + def test_SupportRequest_notify(self): + person = self.portal.portal_membership.getAuthenticatedMember().getUserValue() + + self.support_request.approveRegistration() + self.tic() + + self.logout() + self.login() + + self.support_request.notify( + message_title="A", + message="B") + + event = self.support_request.REQUEST.get("ticket_notified_item") + + self.assertEqual(event.getSimulationState(), "delivered") + self.assertEqual(self.support_request.getSimulationState(), + 'validated') + + self.assertEqual(self.support_request.getDestinationDecision(), + event.getDestination()) + self.assertEqual(person, event.getDestinationValue()) + + self.assertEqual("service_module/slapos_crm_information", + event.getResource()) + self.assertEqual(self.support_request, + event.getFollowUpValue()) + + self.assertEqual(event.getTitle(), "A") + self.assertEqual(event.getTextContent(), "B") + self.assertEqual(event.getContentType(), "text/html") + self.assertEqual(event.getPortalType(), "Web Message") + self.assertEqual(event.getSource(), + self.support_request.getSource()) + + # Retry now to see if doesn't create a new message + self.support_request.notify( + message_title="A", + message="B") + self.tic() + + self.assertEqual(event, + self.support_request.REQUEST.get("ticket_notified_item")) + + # Retry, now it must create a new one + self.support_request.notify( + message_title="C", + message="B") + self.tic() + + self.assertNotEqual(event, + self.support_request.REQUEST.get("ticket_notified_item")) + + # Remove completly the ticket_notified_item and try to create a new one + # It should find it anyway from catalog. + self.support_request.REQUEST.set("ticket_notified_item", None) + self.commit() + + # Retry, now it must create a new one + self.support_request.notify( + message_title="A", + message="B") + self.tic() + + self.assertEqual(event, + self.support_request.REQUEST.get("ticket_notified_item")) + + + diff --git a/master/bt5/slapos_crm/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudTicketSlapInterfaceWorkflow.xml b/master/bt5/slapos_crm/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudTicketSlapInterfaceWorkflow.xml new file mode 100644 index 0000000000000000000000000000000000000000..7ad833f122330c8f75158349c35cfb2313a8cc57 --- /dev/null +++ b/master/bt5/slapos_crm/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudTicketSlapInterfaceWorkflow.xml @@ -0,0 +1,133 @@ +<?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>testSlapOSCloudTicketSlapInterfaceWorkflow</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.testSlapOSCloudTicketSlapInterfaceWorkflow</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> diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow.xml b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow.xml new file mode 100644 index 0000000000000000000000000000000000000000..37bc46cbde3b8b4f363b7f194397d52c085e2014 --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow.xml @@ -0,0 +1,108 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Workflow" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_count</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>_mt_index</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>_tree</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>source/portal_workflow/ticket_slap_interface_workflow/state_draft</string> + </tuple> + </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>person_slap_interface_workflow</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>ticket_slap_interface_workflow</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>manager_bypass</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Workflow</string> </value> + </item> + <item> + <key> <string>state_variable</string> </key> + <value> <string>slap_state</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Ticket Slap Interface Workflow</string> </value> + </item> + <item> + <key> <string>workflow_managed_permission</string> </key> + <value> + <tuple/> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="Length" module="BTrees.Length"/> + </pickle> + <pickle> <int>0</int> </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="OOBTree" module="BTrees.OOBTree"/> + </pickle> + <pickle> + <none/> + </pickle> + </record> +</ZopeData> diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_approveRegistration.py b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_approveRegistration.py new file mode 100644 index 0000000000000000000000000000000000000000..f0133c3d0bcd3b885ac3ba00fcb9d353f3ece577 --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_approveRegistration.py @@ -0,0 +1,43 @@ +ticket = state_change["object"] +from DateTime import DateTime + +portal = context.getPortalObject() + +if ticket.getSimulationState() != "draft": + return + +if ticket.getReference() in [None, ""]: + raise ValueError("Reference is missing on the Ticket") + +# Get the user id of the context owner. +local_role_list = ticket.get_local_roles() +for group, role_list in local_role_list: + if 'Owner' in role_list: + user_id = group + break + +person = portal.portal_catalog.getResultValue(user_id=user_id) +if person is None: + # Value was created by super user, so there isn't a point on continue + return + +# XXX unhardcode the trade condition, by adding a preference +if ticket.getSpecialise() != "sale_trade_condition_module/slapos_ticket_trade_condition": + return + +trade_condition = portal.sale_trade_condition_module.slapos_ticket_trade_condition + +ticket.edit( + source_section=trade_condition.getSourceSection(), + source_trade=trade_condition.getSourceSection(), + source=trade_condition.getSource()) + +ticket.setStartDate(DateTime()) + +ticket.requestEvent( + event_title=ticket.getTitle(), + event_content=ticket.getDescription() +) + +event_relative_url = context.REQUEST.get("event_relative_url") +ticket.setCausality(event_relative_url) diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_approveRegistration.xml b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_approveRegistration.xml new file mode 100644 index 0000000000000000000000000000000000000000..c0e92fe7548a3a216be14d930b736f8e8977ec3c --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_approveRegistration.xml @@ -0,0 +1,85 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Workflow Script" module="erp5.portal_type"/> + </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>state_change</string> </value> + </item> + <item> + <key> <string>_proxy_roles</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>script_Ticket_approveRegistration</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Workflow Script</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Ticket_approveRegistration</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_checkConsistency.py b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_checkConsistency.py new file mode 100644 index 0000000000000000000000000000000000000000..9687ff0729284eccfa4c877aa13b09add3666d58 --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_checkConsistency.py @@ -0,0 +1,2 @@ +ticket = state_change['object'] +ticket.Base_checkConsistency() diff --git a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/Base_generateSupportRequestForSlapOS.xml b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_checkConsistency.xml similarity index 76% rename from master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/Base_generateSupportRequestForSlapOS.xml rename to master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_checkConsistency.xml index 3629c9852601b025ff7e818452e8b586cb86a867..cbb5b3a7322486242560ea4ce01390f267a07bc3 100644 --- a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/Base_generateSupportRequestForSlapOS.xml +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_checkConsistency.xml @@ -2,7 +2,7 @@ <ZopeData> <record id="1" aka="AAAAAAAAAAE="> <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> + <global name="Workflow Script" module="erp5.portal_type"/> </pickle> <pickle> <dictionary> @@ -50,11 +50,27 @@ </item> <item> <key> <string>_params</string> </key> - <value> <string>title, description, source_relative_url</string> </value> + <value> <string>state_change</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> </item> <item> <key> <string>id</string> </key> - <value> <string>Base_generateSupportRequestForSlapOS</string> </value> + <value> <string>script_Ticket_checkConsistency</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Workflow Script</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> + <none/> + </value> </item> </dictionary> </pickle> diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_notify.py b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_notify.py new file mode 100644 index 0000000000000000000000000000000000000000..36fc4f5c75542f6b774aa556caf1fe9e76ac7137 --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_notify.py @@ -0,0 +1,54 @@ +ticket = state_change["object"] +from DateTime import DateTime +portal = ticket.getPortalObject() + +# Get required arguments +kwargs = state_change.kwargs + +# Required args +# Raise TypeError if all parameters are not provided +try: + message_title = kwargs['message_title'] + message = kwargs['message'] +except KeyError: + raise TypeError("Ticket_notify takes exactly 2 arguments") + +resource = portal.service_module.slapos_crm_information.getRelativeUrl() + +# create Web message if needed for this ticket +last_event = ticket.portal_catalog.getResultValue( + title=message_title, + follow_up_uid=ticket.getUid(), + sort_on=[('delivery.start_date', 'DESC')], +) +if last_event: + # User has already been notified for this problem. + ticket.REQUEST.set("ticket_notified_item", last_event) + return + +transactional_event = ticket.REQUEST.get("ticket_notified_item", None) + +if transactional_event is not None: + if (transactional_event.getFollowUpUid() == ticket.getUid()) and \ + (transactional_event.getTitle() == message_title): + ticket.REQUEST.set("ticket_notified_item", transactional_event) + return + +template = portal.restrictedTraverse( + portal.portal_preferences.getPreferredWebMessageTemplate()) + +event = template.Base_createCloneDocument(batch_mode=1) +event.edit( + title=message_title, + text_content=message, + start_date = DateTime(), + resource = resource, + source=ticket.getSource(), + destination=ticket.getDestinationDecision(), + follow_up=ticket.getRelativeUrl(), +) +event.stop() +event.deliver() + +ticket.serialize() +ticket.REQUEST.set("ticket_notified_item", event) diff --git a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_trySendNotificationMessage.xml b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_notify.xml similarity index 71% rename from master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_trySendNotificationMessage.xml rename to master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_notify.xml index d619e79b71b9331b2a5888de43ab78d5fd48b318..accc3738ae218c21bd56687d1dcd5e1644619f56 100644 --- a/master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_trySendNotificationMessage.xml +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_notify.xml @@ -2,7 +2,7 @@ <ZopeData> <record id="1" aka="AAAAAAAAAAE="> <pickle> - <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> + <global name="Workflow Script" module="erp5.portal_type"/> </pickle> <pickle> <dictionary> @@ -50,11 +50,33 @@ </item> <item> <key> <string>_params</string> </key> - <value> <string>message_title, message, destination_relative_url</string> </value> + <value> <string>state_change</string> </value> + </item> + <item> + <key> <string>_proxy_roles</string> </key> + <value> + <tuple> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> </item> <item> <key> <string>id</string> </key> - <value> <string>SupportRequest_trySendNotificationMessage</string> </value> + <value> <string>script_Ticket_notify</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Workflow Script</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Ticket_notify</string> </value> </item> </dictionary> </pickle> diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_requestEvent.py b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_requestEvent.py new file mode 100644 index 0000000000000000000000000000000000000000..03a851c69170002e520c9493829ae879571f8aed --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_requestEvent.py @@ -0,0 +1,30 @@ +ticket = state_change["object"] +from DateTime import DateTime +portal = context.getPortalObject() +# Get required arguments +kwargs = state_change.kwargs + +# Required args +# Raise TypeError if all parameters are not provided +try: + title = kwargs['event_title'] + text_content = kwargs['event_content'] +except KeyError: + raise TypeError, "Ticket_requestEvent takes exactly 2 argument" + +web_message = portal.event_module.newContent( + portal_type="Web Message", + title=title, + text_content=text_content, + source=ticket.getDestinationDecision(), + content_type="text/plain", + destination=ticket.getSource(), + resource=ticket.getResource(), + follow_up=ticket.getRelativeUrl() +) + +web_message.stop(comment="Submitted from the renderjs app") +if portal.portal_workflow.isTransitionPossible(ticket, "validate"): + ticket.validate(comment="See %s" % web_message.getRelativeUrl()) + +ticket.REQUEST.set("event_relative_url", web_message.getRelativeUrl()) diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_requestEvent.xml b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_requestEvent.xml new file mode 100644 index 0000000000000000000000000000000000000000..97c83b569fe935ef8772784ce147fdaddd9abad8 --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_requestEvent.xml @@ -0,0 +1,85 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Workflow Script" module="erp5.portal_type"/> + </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>state_change</string> </value> + </item> + <item> + <key> <string>_proxy_roles</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>script_Ticket_requestEvent</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Workflow Script</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Ticket_requestEvent</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/state_draft.xml b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/state_draft.xml new file mode 100644 index 0000000000000000000000000000000000000000..3dae19866338152c4358819be906e10dbeba8b0c --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/state_draft.xml @@ -0,0 +1,79 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Workflow State" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>acquire_permission</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>destination/portal_workflow/ticket_slap_interface_workflow/transition_approve_registration</string> + <string>destination/portal_workflow/ticket_slap_interface_workflow/transition_notify</string> + <string>destination/portal_workflow/ticket_slap_interface_workflow/transition_request_event</string> + </tuple> + </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>state_draft</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Workflow State</string> </value> + </item> + <item> + <key> <string>state_permission_role_list_dict</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>state_type</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Draft</string> </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> +</ZopeData> diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/transition_approve_registration.xml b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/transition_approve_registration.xml new file mode 100644 index 0000000000000000000000000000000000000000..3aef7a3be5eb48756e6c0183e93344c0e00ade81 --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/transition_approve_registration.xml @@ -0,0 +1,68 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Workflow Transition" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>action_name</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>action_type/workflow</string> + <string>before_script/portal_workflow/ticket_slap_interface_workflow/script_Ticket_checkConsistency</string> + <string>after_script/portal_workflow/ticket_slap_interface_workflow/script_Ticket_approveRegistration</string> + </tuple> + </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>guard_permission</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>icon</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>transition_approve_registration</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Workflow Transition</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Approve Registration</string> </value> + </item> + <item> + <key> <string>trigger_type</string> </key> + <value> <int>2</int> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/transition_notify.xml b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/transition_notify.xml new file mode 100644 index 0000000000000000000000000000000000000000..fe69b3928252a6801b3e3ac7f2501c3fdc8b4277 --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/transition_notify.xml @@ -0,0 +1,68 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Workflow Transition" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>action_name</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>action_type/workflow</string> + <string>before_script/portal_workflow/ticket_slap_interface_workflow/script_Ticket_checkConsistency</string> + <string>after_script/portal_workflow/ticket_slap_interface_workflow/script_Ticket_notify</string> + </tuple> + </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>guard_permission</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>icon</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>transition_notify</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Workflow Transition</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Notify</string> </value> + </item> + <item> + <key> <string>trigger_type</string> </key> + <value> <int>2</int> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/transition_request_event.xml b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/transition_request_event.xml new file mode 100644 index 0000000000000000000000000000000000000000..c2461cd29db2461907ae70f9df52c47b6815066e --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/transition_request_event.xml @@ -0,0 +1,68 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Workflow Transition" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>action_name</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>action_type/workflow</string> + <string>before_script/portal_workflow/ticket_slap_interface_workflow/script_Ticket_checkConsistency</string> + <string>after_script/portal_workflow/ticket_slap_interface_workflow/script_Ticket_requestEvent</string> + </tuple> + </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>guard_permission</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>icon</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>transition_request_event</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Workflow Transition</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Request Event</string> </value> + </item> + <item> + <key> <string>trigger_type</string> </key> + <value> <int>2</int> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_action.xml b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_action.xml new file mode 100644 index 0000000000000000000000000000000000000000..ba0016f3d69b0273369ad6802eb18c8313ea614e --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_action.xml @@ -0,0 +1,46 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Workflow Variable" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>automatic_update</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> <string>The last transition</string> </value> + </item> + <item> + <key> <string>for_catalog</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>variable_action</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Workflow Variable</string> </value> + </item> + <item> + <key> <string>status_included</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>variable_default_expression</string> </key> + <value> <string>transition/getReference|nothing</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_actor.xml b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_actor.xml new file mode 100644 index 0000000000000000000000000000000000000000..028d9db6a333f0cda3309140372c927214decf31 --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_actor.xml @@ -0,0 +1,46 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Workflow Variable" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>automatic_update</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> <string>The name of the user who performed the last transition</string> </value> + </item> + <item> + <key> <string>for_catalog</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>variable_actor</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Workflow Variable</string> </value> + </item> + <item> + <key> <string>status_included</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>variable_default_expression</string> </key> + <value> <string>user/getUserName</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_comment.xml b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_comment.xml new file mode 100644 index 0000000000000000000000000000000000000000..b41853beaf1d6aea72c0e4eb3cbdcaa4969ebfc8 --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_comment.xml @@ -0,0 +1,46 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Workflow Variable" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>automatic_update</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> <string>Comments about the last transition</string> </value> + </item> + <item> + <key> <string>for_catalog</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>variable_comment</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Workflow Variable</string> </value> + </item> + <item> + <key> <string>status_included</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>variable_default_expression</string> </key> + <value> <string>python:state_change.kwargs.get(\'comment\', \'\')</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_error_message.xml b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_error_message.xml new file mode 100644 index 0000000000000000000000000000000000000000..2b761c20e6aaa4fc8708edf2ce7109154b8427d5 --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_error_message.xml @@ -0,0 +1,42 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Workflow Variable" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>automatic_update</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> <string>Error message if validation failed</string> </value> + </item> + <item> + <key> <string>for_catalog</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>variable_error_message</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Workflow Variable</string> </value> + </item> + <item> + <key> <string>status_included</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> + <none/> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_history.xml b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_history.xml new file mode 100644 index 0000000000000000000000000000000000000000..95a08300b717c82a90e3a2906285f051479b38a2 --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_history.xml @@ -0,0 +1,46 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Workflow Variable" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>automatic_update</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> <string>Provides access to workflow history</string> </value> + </item> + <item> + <key> <string>for_catalog</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>variable_history</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Workflow Variable</string> </value> + </item> + <item> + <key> <string>status_included</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>variable_default_expression</string> </key> + <value> <string>state_change/getHistory</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_portal_type.xml b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_portal_type.xml new file mode 100644 index 0000000000000000000000000000000000000000..3609f65ad5051b7649d2b055bca6dd2d0fd70551 --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_portal_type.xml @@ -0,0 +1,42 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Workflow Variable" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>automatic_update</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> <string>portal type (use as filter for worklists)</string> </value> + </item> + <item> + <key> <string>for_catalog</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>variable_portal_type</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Workflow Variable</string> </value> + </item> + <item> + <key> <string>status_included</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> + <none/> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_time.xml b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_time.xml new file mode 100644 index 0000000000000000000000000000000000000000..4e488bde05a81a4b25e955b22ea25ba4e6c56d9c --- /dev/null +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_time.xml @@ -0,0 +1,46 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Workflow Variable" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>automatic_update</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> <string>Time of the last transition</string> </value> + </item> + <item> + <key> <string>for_catalog</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>variable_time</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Workflow Variable</string> </value> + </item> + <item> + <key> <string>status_included</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>variable_default_expression</string> </key> + <value> <string>state_change/getDateTime</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_workflow.xml b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_workflow.xml index 8f704f6eb66a68d46e5797ae5b96a447121936d8..f52d62131d7eae943bbca240fd3adbc278ec8046 100644 --- a/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_workflow.xml +++ b/master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_workflow.xml @@ -32,6 +32,12 @@ </tuple> </value> </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> <item> <key> <string>default_reference</string> </key> <value> <string>ticket_workflow</string> </value> diff --git a/master/bt5/slapos_crm/bt/template_portal_type_workflow_chain_list b/master/bt5/slapos_crm/bt/template_portal_type_workflow_chain_list index 1a98d85d893d342cc80c09a4d323eb1de43050a1..8a7e562332dd8351cea701baf11c178de37e3017 100644 --- a/master/bt5/slapos_crm/bt/template_portal_type_workflow_chain_list +++ b/master/bt5/slapos_crm/bt/template_portal_type_workflow_chain_list @@ -3,4 +3,5 @@ Incident Response | ticket_workflow Regularisation Request | edit_workflow Regularisation Request | pricing_interaction_workflow Regularisation Request | ticket_interaction_workflow -Regularisation Request | ticket_workflow \ No newline at end of file +Regularisation Request | ticket_workflow +Support Request | ticket_slap_interface_workflow \ No newline at end of file diff --git a/master/bt5/slapos_crm/bt/template_test_id_list b/master/bt5/slapos_crm/bt/template_test_id_list index df561755f6326ac62b2e81b8f55c1b2af3242fde..d6db53b15808e50d870e829d053b6b728e345064 100644 --- a/master/bt5/slapos_crm/bt/template_test_id_list +++ b/master/bt5/slapos_crm/bt/template_test_id_list @@ -1,3 +1,4 @@ test.erp5.testSlapOSCRMSkins test.erp5.testSlapOSCRMRegularisationRequestSkins -test.erp5.testSlapOSCRMAlarm \ No newline at end of file +test.erp5.testSlapOSCRMAlarm +test.erp5.testSlapOSCloudTicketSlapInterfaceWorkflow \ No newline at end of file diff --git a/master/bt5/slapos_crm/bt/template_workflow_id_list b/master/bt5/slapos_crm/bt/template_workflow_id_list index 4b3b1db595479f0bad108c71e14e8fa16fc4eec8..c356d787f5d4df3af90a687ddd00d3e016d56b92 100644 --- a/master/bt5/slapos_crm/bt/template_workflow_id_list +++ b/master/bt5/slapos_crm/bt/template_workflow_id_list @@ -1 +1,2 @@ +ticket_slap_interface_workflow ticket_workflow \ No newline at end of file