Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
slapos.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Léo-Paul Géneau
slapos.core
Commits
df2f22d0
Commit
df2f22d0
authored
Mar 15, 2022
by
Rafael Monnerat
Browse files
Options
Browse Files
Download
Plain Diff
extend *slap-interface-workflow API to CRM/PDM
See merge request
nexedi/slapos.core!360
parents
1d1bcf8b
4eeac9b7
Changes
105
Hide whitespace changes
Inline
Side-by-side
Showing
105 changed files
with
5087 additions
and
1215 deletions
+5087
-1215
master/bt5/slapos_cloud/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudPersonSlapInterfaceWorkflow.py
...s/test.erp5.testSlapOSCloudPersonSlapInterfaceWorkflow.py
+205
-0
master/bt5/slapos_cloud/WorkflowTemplateItem/portal_workflow/person_slap_interface_workflow/script_Person_notify.py
...ow/person_slap_interface_workflow/script_Person_notify.py
+60
-0
master/bt5/slapos_cloud/WorkflowTemplateItem/portal_workflow/person_slap_interface_workflow/script_Person_notify.xml
...w/person_slap_interface_workflow/script_Person_notify.xml
+17
-3
master/bt5/slapos_cloud/WorkflowTemplateItem/portal_workflow/person_slap_interface_workflow/script_Person_requestSupportRequest.py
...interface_workflow/script_Person_requestSupportRequest.py
+39
-0
master/bt5/slapos_cloud/WorkflowTemplateItem/portal_workflow/person_slap_interface_workflow/script_Person_requestSupportRequest.xml
...nterface_workflow/script_Person_requestSupportRequest.xml
+17
-3
master/bt5/slapos_cloud/WorkflowTemplateItem/portal_workflow/person_slap_interface_workflow/state_draft.xml
...l_workflow/person_slap_interface_workflow/state_draft.xml
+3
-1
master/bt5/slapos_cloud/WorkflowTemplateItem/portal_workflow/person_slap_interface_workflow/state_open_order_created.xml
...rson_slap_interface_workflow/state_open_order_created.xml
+4
-0
master/bt5/slapos_cloud/WorkflowTemplateItem/portal_workflow/person_slap_interface_workflow/transition_notify.xml
...flow/person_slap_interface_workflow/transition_notify.xml
+26
-26
master/bt5/slapos_cloud/WorkflowTemplateItem/portal_workflow/person_slap_interface_workflow/transition_request_support.xml
...on_slap_interface_workflow/transition_request_support.xml
+26
-26
master/bt5/slapos_crm/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml
...rtalTypeWorkflowChainTemplateItem/workflow_chain_type.xml
+4
-0
master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkAndUpdateAllocationScope.py
...m_monitoring/ComputeNode_checkAndUpdateAllocationScope.py
+8
-7
master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkSoftwareInstallationState.py
..._monitoring/ComputeNode_checkSoftwareInstallationState.py
+12
-18
master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkState.py
...tal_skins/slapos_crm_monitoring/ComputeNode_checkState.py
+17
-22
master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/InstanceTree_createSupportRequestEvent.py
..._crm_monitoring/InstanceTree_createSupportRequestEvent.py
+15
-13
master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_updateMonitoringDestroyRequestedState.py
...g/SupportRequest_updateMonitoringDestroyRequestedState.py
+9
-13
master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_updateMonitoringState.py
...os_crm_monitoring/SupportRequest_updateMonitoringState.py
+0
-1
master/bt5/slapos_crm/TestTemplateItem/portal_components/test.erp5.testSlapOSCRMSkins.py
...ateItem/portal_components/test.erp5.testSlapOSCRMSkins.py
+78
-401
master/bt5/slapos_crm/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudTicketSlapInterfaceWorkflow.py
...s/test.erp5.testSlapOSCloudTicketSlapInterfaceWorkflow.py
+212
-0
master/bt5/slapos_crm/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudTicketSlapInterfaceWorkflow.xml
.../test.erp5.testSlapOSCloudTicketSlapInterfaceWorkflow.xml
+133
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow.xml
...teItem/portal_workflow/ticket_slap_interface_workflow.xml
+108
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_approveRegistration.py
...p_interface_workflow/script_Ticket_approveRegistration.py
+43
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_approveRegistration.xml
..._interface_workflow/script_Ticket_approveRegistration.xml
+85
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_checkConsistency.py
...slap_interface_workflow/script_Ticket_checkConsistency.py
+2
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_checkConsistency.xml
...lap_interface_workflow/script_Ticket_checkConsistency.xml
+2
-2
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_notify.py
...ow/ticket_slap_interface_workflow/script_Ticket_notify.py
+54
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_notify.xml
...w/ticket_slap_interface_workflow/script_Ticket_notify.xml
+84
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_requestEvent.py
...ket_slap_interface_workflow/script_Ticket_requestEvent.py
+30
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_requestEvent.xml
...et_slap_interface_workflow/script_Ticket_requestEvent.xml
+4
-5
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/state_draft.xml
...l_workflow/ticket_slap_interface_workflow/state_draft.xml
+79
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/transition_approve_registration.xml
...ap_interface_workflow/transition_approve_registration.xml
+68
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/transition_notify.xml
...flow/ticket_slap_interface_workflow/transition_notify.xml
+68
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/transition_request_event.xml
...cket_slap_interface_workflow/transition_request_event.xml
+68
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_action.xml
...rkflow/ticket_slap_interface_workflow/variable_action.xml
+46
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_actor.xml
...orkflow/ticket_slap_interface_workflow/variable_actor.xml
+46
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_comment.xml
...kflow/ticket_slap_interface_workflow/variable_comment.xml
+46
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_error_message.xml
...ticket_slap_interface_workflow/variable_error_message.xml
+42
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_history.xml
...kflow/ticket_slap_interface_workflow/variable_history.xml
+46
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_portal_type.xml
...w/ticket_slap_interface_workflow/variable_portal_type.xml
+42
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_time.xml
...workflow/ticket_slap_interface_workflow/variable_time.xml
+46
-0
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_workflow.xml
.../WorkflowTemplateItem/portal_workflow/ticket_workflow.xml
+6
-0
master/bt5/slapos_crm/bt/template_portal_type_workflow_chain_list
...t5/slapos_crm/bt/template_portal_type_workflow_chain_list
+2
-1
master/bt5/slapos_crm/bt/template_test_id_list
master/bt5/slapos_crm/bt/template_test_id_list
+2
-1
master/bt5/slapos_crm/bt/template_workflow_id_list
master/bt5/slapos_crm/bt/template_workflow_id_list
+1
-0
master/bt5/slapos_erp5/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml
...rtalTypeWorkflowChainTemplateItem/workflow_chain_type.xml
+0
-8
master/bt5/slapos_erp5/WorkflowTemplateItem/portal_workflow/slapos_erp5_interaction_workflow/script_Ticket_createInitialEvent.py
..._interaction_workflow/script_Ticket_createInitialEvent.py
+0
-6
master/bt5/slapos_erp5/WorkflowTemplateItem/portal_workflow/slapos_erp5_interaction_workflow/script_WebMessage_stopAndReopenTicket.py
...raction_workflow/script_WebMessage_stopAndReopenTicket.py
+0
-38
master/bt5/slapos_erp5/bt/template_portal_type_workflow_chain_list
...5/slapos_erp5/bt/template_portal_type_workflow_chain_list
+0
-2
master/bt5/slapos_jio/PathTemplateItem/web_page_module/rjs_gadget_erp5_page_slap_add_ticket_js.js
...eb_page_module/rjs_gadget_erp5_page_slap_add_ticket_js.js
+30
-72
master/bt5/slapos_jio/PathTemplateItem/web_page_module/rjs_gadget_erp5_page_slap_add_ticket_js.xml
...b_page_module/rjs_gadget_erp5_page_slap_add_ticket_js.xml
+2
-2
master/bt5/slapos_jio/SkinTemplateItem/portal_skins/slapos_hal_json_style/Person_requestSupport.py
...rtal_skins/slapos_hal_json_style/Person_requestSupport.py
+21
-0
master/bt5/slapos_jio/SkinTemplateItem/portal_skins/slapos_hal_json_style/Person_requestSupport.xml
...tal_skins/slapos_hal_json_style/Person_requestSupport.xml
+2
-2
master/bt5/slapos_jio_ui_test/PathTemplateItem/portal_tests/slaposjs_zuite/testSlapOSJSServerTicketRelated.xml
..._tests/slaposjs_zuite/testSlapOSJSServerTicketRelated.xml
+16
-20
master/bt5/slapos_jio_ui_test/PathTemplateItem/portal_tests/slaposjs_zuite/testSlapOSJSServerTicketRelated.zpt
..._tests/slaposjs_zuite/testSlapOSJSServerTicketRelated.zpt
+381
-0
master/bt5/slapos_jio_ui_test/PathTemplateItem/portal_tests/slaposjs_zuite/testSlapOSJSServiceTicketRelated.xml
...tests/slaposjs_zuite/testSlapOSJSServiceTicketRelated.xml
+16
-20
master/bt5/slapos_jio_ui_test/PathTemplateItem/portal_tests/slaposjs_zuite/testSlapOSJSServiceTicketRelated.zpt
...tests/slaposjs_zuite/testSlapOSJSServiceTicketRelated.zpt
+500
-0
master/bt5/slapos_pdm/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml
...rtalTypeWorkflowChainTemplateItem/workflow_chain_type.xml
+1
-1
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/Alarm_cancelUpgradeDecision.py
...em/portal_skins/slapos_pdm/Alarm_cancelUpgradeDecision.py
+0
-2
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/ComputeNode_checkAndCreateUpgradeDecision.py
...s/slapos_pdm/ComputeNode_checkAndCreateUpgradeDecision.py
+7
-11
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/InstanceTree_createUpgradeDecision.py
...al_skins/slapos_pdm/InstanceTree_createUpgradeDecision.py
+8
-13
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecisionLine_cancel.py
...tem/portal_skins/slapos_pdm/UpgradeDecisionLine_cancel.py
+1
-41
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_getAggregateValue.py
...tal_skins/slapos_pdm/UpgradeDecision_getAggregateValue.py
+15
-0
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_getAggregateValue.xml
...al_skins/slapos_pdm/UpgradeDecision_getAggregateValue.xml
+2
-2
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_getComputeNode.py
...portal_skins/slapos_pdm/UpgradeDecision_getComputeNode.py
+0
-13
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_getInstanceTree.py
...ortal_skins/slapos_pdm/UpgradeDecision_getInstanceTree.py
+0
-13
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_getSoftwareRelease.py
...al_skins/slapos_pdm/UpgradeDecision_getSoftwareRelease.py
+0
-13
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_isUpgradeFinished.py
...tal_skins/slapos_pdm/UpgradeDecision_isUpgradeFinished.py
+3
-3
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_notify.py
...ateItem/portal_skins/slapos_pdm/UpgradeDecision_notify.py
+12
-10
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_notifyDelivered.py
...ortal_skins/slapos_pdm/UpgradeDecision_notifyDelivered.py
+8
-5
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_processUpgrade.py
...portal_skins/slapos_pdm/UpgradeDecision_processUpgrade.py
+1
-7
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_processUpgrade.xml
...ortal_skins/slapos_pdm/UpgradeDecision_processUpgrade.xml
+1
-1
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_tryToCancel.xml
...m/portal_skins/slapos_pdm/UpgradeDecision_tryToCancel.xml
+0
-62
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_upgradeComputeNode.py
...al_skins/slapos_pdm/UpgradeDecision_upgradeComputeNode.py
+0
-22
master/bt5/slapos_pdm/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudUpgradeSlapInterfaceWorkflow.py
.../test.erp5.testSlapOSCloudUpgradeSlapInterfaceWorkflow.py
+557
-0
master/bt5/slapos_pdm/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudUpgradeSlapInterfaceWorkflow.xml
...test.erp5.testSlapOSCloudUpgradeSlapInterfaceWorkflow.xml
+133
-0
master/bt5/slapos_pdm/TestTemplateItem/portal_components/test.erp5.testSlapOSPDMCreateUpgradeDecisionSkins.py
...ents/test.erp5.testSlapOSPDMCreateUpgradeDecisionSkins.py
+6
-5
master/bt5/slapos_pdm/TestTemplateItem/portal_components/test.erp5.testSlapOSPDMSkins.py
...ateItem/portal_components/test.erp5.testSlapOSPDMSkins.py
+24
-266
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow.xml
...eItem/portal_workflow/upgrade_slap_interface_workflow.xml
+108
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_approveRegistration.py
...ce_workflow/script_UpgradeDecision_approveRegistration.py
+38
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_approveRegistration.xml
...e_workflow/script_UpgradeDecision_approveRegistration.xml
+84
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_checkConsistency.py
...rface_workflow/script_UpgradeDecision_checkConsistency.py
+2
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_checkConsistency.xml
...face_workflow/script_UpgradeDecision_checkConsistency.xml
+4
-6
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_notify.py
..._slap_interface_workflow/script_UpgradeDecision_notify.py
+53
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_notify.xml
...slap_interface_workflow/script_UpgradeDecision_notify.xml
+84
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_requestUpgrade.py
...terface_workflow/script_UpgradeDecision_requestUpgrade.py
+56
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_requestUpgrade.xml
...erface_workflow/script_UpgradeDecision_requestUpgrade.xml
+84
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_reviewRegistration.py
...ace_workflow/script_UpgradeDecision_reviewRegistration.py
+37
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_reviewRegistration.xml
...ce_workflow/script_UpgradeDecision_reviewRegistration.xml
+25
-3
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_reviewUpgrade.py
...nterface_workflow/script_UpgradeDecision_reviewUpgrade.py
+43
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_reviewUpgrade.xml
...terface_workflow/script_UpgradeDecision_reviewUpgrade.xml
+84
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/state_draft.xml
..._workflow/upgrade_slap_interface_workflow/state_draft.xml
+81
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/transition_approve_registration.xml
...ap_interface_workflow/transition_approve_registration.xml
+68
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/transition_notify.xml
...low/upgrade_slap_interface_workflow/transition_notify.xml
+66
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/transition_request_upgrade.xml
...de_slap_interface_workflow/transition_request_upgrade.xml
+66
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/transition_review_registration.xml
...lap_interface_workflow/transition_review_registration.xml
+66
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/transition_review_upgrade.xml
...ade_slap_interface_workflow/transition_review_upgrade.xml
+66
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/variable_action.xml
...kflow/upgrade_slap_interface_workflow/variable_action.xml
+46
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/variable_actor.xml
...rkflow/upgrade_slap_interface_workflow/variable_actor.xml
+46
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/variable_comment.xml
...flow/upgrade_slap_interface_workflow/variable_comment.xml
+46
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/variable_error_message.xml
...pgrade_slap_interface_workflow/variable_error_message.xml
+42
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/variable_history.xml
...flow/upgrade_slap_interface_workflow/variable_history.xml
+46
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/variable_portal_type.xml
.../upgrade_slap_interface_workflow/variable_portal_type.xml
+42
-0
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/variable_time.xml
...orkflow/upgrade_slap_interface_workflow/variable_time.xml
+46
-0
master/bt5/slapos_pdm/bt/template_portal_type_workflow_chain_list
...t5/slapos_pdm/bt/template_portal_type_workflow_chain_list
+2
-1
master/bt5/slapos_pdm/bt/template_test_id_list
master/bt5/slapos_pdm/bt/template_test_id_list
+2
-1
master/bt5/slapos_pdm/bt/template_workflow_id_list
master/bt5/slapos_pdm/bt/template_workflow_id_list
+2
-1
No files found.
master/bt5/slapos_cloud/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudPersonSlapInterfaceWorkflow.py
View file @
df2f22d0
...
...
@@ -1253,3 +1253,208 @@ class TestSlapOSCorePersonRequestToken(SlapOSTestCaseMixin):
self
.
assertEqual
(
token
.
getPortalType
(),
"One Time Restricted Access Token"
)
self
.
assertEqual
(
token
.
getUrlMethod
(),
"POST"
)
class
TestSlapOSCorePersonNotify
(
SlapOSTestCaseMixin
):
def
afterSetUp
(
self
):
SlapOSTestCaseMixin
.
afterSetUp
(
self
)
self
.
person
=
self
.
makePerson
()
self
.
tic
()
def
beforeTearDown
(
self
):
pass
def
test_Person_notify_mandatory_argument
(
self
):
self
.
assertRaises
(
TypeError
,
self
.
person
.
notify
)
self
.
assertRaises
(
TypeError
,
self
.
person
.
notify
,
support_request_title
=
"a"
)
self
.
assertRaises
(
TypeError
,
self
.
person
.
notify
,
support_request_title
=
"a"
,
support_request_description
=
"b"
)
def
test_Person_notify_unknown_aggregate
(
self
):
self
.
assertRaises
(
KeyError
,
self
.
person
.
notify
,
support_request_title
=
"a"
,
support_request_description
=
"b"
,
aggregate
=
"c"
)
def
test_Person_notify_computer_node
(
self
):
compute_node
,
_
=
self
.
_makeComputeNode
()
self
.
_test_Person_notify
(
compute_node
)
def
test_Person_notify_instance_tree
(
self
):
person
=
self
.
portal
.
person_module
.
template_member
\
.
Base_createCloneDocument
(
batch_mode
=
1
)
instance_tree
=
self
.
portal
\
.
instance_tree_module
.
template_instance_tree
\
.
Base_createCloneDocument
(
batch_mode
=
1
)
instance_tree
.
validate
()
new_id
=
self
.
generateNewId
()
instance_tree
.
edit
(
title
=
"Test hosting sub ticket %s"
%
new_id
,
reference
=
"TESTHST-%s"
%
new_id
,
destination_section_value
=
person
)
self
.
_test_Person_notify
(
instance_tree
)
def
test_Person_notify_software_installation
(
self
):
self
.
_makeComputeNode
()
software_installation
=
self
.
portal
\
.
software_installation_module
.
template_software_installation
\
.
Base_createCloneDocument
(
batch_mode
=
1
)
software_installation
.
edit
(
url_string
=
self
.
generateNewSoftwareReleaseUrl
(),
aggregate
=
self
.
compute_node
.
getRelativeUrl
(),
reference
=
'TESTSOFTINSTS-%s'
%
self
.
generateNewId
(),
title
=
'Start requested for %s'
%
self
.
compute_node
.
getUid
()
)
software_installation
.
validate
()
software_installation
.
requestStart
()
self
.
_test_Person_notify
(
software_installation
)
def
_test_Person_notify
(
self
,
aggregate_value
):
# Step 1: Notify
self
.
person
.
notify
(
support_request_title
=
"A"
,
support_request_description
=
"B"
,
aggregate
=
aggregate_value
.
getRelativeUrl
()
)
# Step 2: Check return
support_request_relative_url
=
self
.
person
.
REQUEST
.
get
(
"support_request_relative_url"
,
None
)
self
.
assertNotEqual
(
None
,
support_request_relative_url
)
support_request_in_progress
=
self
.
person
.
REQUEST
.
get
(
"support_request_in_progress"
,
None
)
self
.
assertEqual
(
support_request_in_progress
,
support_request_relative_url
)
support_request
=
self
.
portal
.
restrictedTraverse
(
support_request_in_progress
)
self
.
assertEqual
(
support_request
.
getSimulationState
(),
"validated"
)
self
.
assertEqual
(
support_request
.
getTitle
(),
"A"
)
self
.
assertEqual
(
support_request
.
getDescription
(),
"B"
)
self
.
assertNotEqual
(
support_request
.
getStartDate
(),
None
)
self
.
assertEqual
(
support_request
.
getDestinationDecision
(),
self
.
person
.
getRelativeUrl
())
self
.
assertEqual
(
support_request
.
getAggregateValue
(),
aggregate_value
)
self
.
assertEqual
(
support_request
.
getResource
(),
"service_module/slapos_crm_monitoring"
)
# Step 3: Reset REQUEST and check in progress before catalog
self
.
person
.
REQUEST
.
set
(
"support_request_relative_url"
,
None
)
support_request_relative_url
=
self
.
person
.
REQUEST
.
get
(
"support_request_relative_url"
,
None
)
self
.
assertEqual
(
None
,
support_request_relative_url
)
self
.
person
.
notify
(
support_request_title
=
"A"
,
support_request_description
=
"B"
,
aggregate
=
aggregate_value
.
getRelativeUrl
()
)
support_request_relative_url
=
self
.
person
.
REQUEST
.
get
(
"support_request_relative_url"
,
None
)
self
.
assertNotEqual
(
None
,
support_request_relative_url
)
self
.
assertEqual
(
support_request_in_progress
,
support_request_relative_url
)
self
.
tic
()
# Step 4: Reset parameters and check if the support request is got again.
self
.
person
.
REQUEST
.
set
(
"support_request_relative_url"
,
None
)
support_request_relative_url
=
self
.
person
.
REQUEST
.
get
(
"support_request_relative_url"
,
None
)
self
.
assertEqual
(
None
,
support_request_relative_url
)
support_request_in_progress
=
self
.
person
.
REQUEST
.
set
(
"support_request_in_progress"
,
None
)
support_request_in_progress
=
self
.
person
.
REQUEST
.
set
(
"support_request_in_progress"
,
None
)
self
.
assertEqual
(
support_request_in_progress
,
None
)
self
.
commit
()
self
.
person
.
notify
(
support_request_title
=
"A"
,
support_request_description
=
"B"
,
aggregate
=
aggregate_value
.
getRelativeUrl
()
)
support_request_relative_url
=
self
.
person
.
REQUEST
.
get
(
"support_request_relative_url"
,
None
)
self
.
assertNotEqual
(
None
,
support_request_relative_url
)
support_request_in_progress
=
self
.
person
.
REQUEST
.
get
(
"support_request_in_progress"
,
None
)
self
.
assertEqual
(
support_request_in_progress
,
support_request_relative_url
)
# Check if it is the same Support Request as before
self
.
assertEqual
(
support_request
.
getRelativeUrl
(),
support_request_relative_url
)
# Step 5: Retry the same thing, but now on suspended state
support_request
.
suspend
()
self
.
tic
()
self
.
person
.
REQUEST
.
set
(
"support_request_relative_url"
,
None
)
support_request_relative_url
=
self
.
person
.
REQUEST
.
get
(
"support_request_relative_url"
,
None
)
self
.
assertEqual
(
None
,
support_request_relative_url
)
support_request_in_progress
=
self
.
person
.
REQUEST
.
set
(
"support_request_in_progress"
,
None
)
support_request_in_progress
=
self
.
person
.
REQUEST
.
set
(
"support_request_in_progress"
,
None
)
self
.
assertEqual
(
support_request_in_progress
,
None
)
self
.
commit
()
self
.
person
.
notify
(
support_request_title
=
"A"
,
support_request_description
=
"B"
,
aggregate
=
aggregate_value
.
getRelativeUrl
()
)
support_request_relative_url
=
self
.
person
.
REQUEST
.
get
(
"support_request_relative_url"
,
None
)
self
.
assertNotEqual
(
None
,
support_request_relative_url
)
support_request_in_progress
=
self
.
person
.
REQUEST
.
get
(
"support_request_in_progress"
,
None
)
self
.
assertEqual
(
support_request_in_progress
,
support_request_relative_url
)
# Check if it is the same Support Request as before and still suspended
self
.
assertEqual
(
support_request
.
getRelativeUrl
(),
support_request_relative_url
)
self
.
assertEqual
(
support_request
.
getSimulationState
(),
"suspended"
)
# Step 6: If the support request is closed, create indeed a new one.
support_request
.
invalidate
()
self
.
tic
()
self
.
person
.
REQUEST
.
set
(
"support_request_relative_url"
,
None
)
support_request_relative_url
=
self
.
person
.
REQUEST
.
get
(
"support_request_relative_url"
,
None
)
self
.
assertEqual
(
None
,
support_request_relative_url
)
support_request_in_progress
=
self
.
person
.
REQUEST
.
set
(
"support_request_in_progress"
,
None
)
support_request_in_progress
=
self
.
person
.
REQUEST
.
set
(
"support_request_in_progress"
,
None
)
self
.
assertEqual
(
support_request_in_progress
,
None
)
self
.
commit
()
self
.
person
.
notify
(
support_request_title
=
"A"
,
support_request_description
=
"B"
,
aggregate
=
aggregate_value
.
getRelativeUrl
()
)
support_request_relative_url
=
self
.
person
.
REQUEST
.
get
(
"support_request_relative_url"
,
None
)
self
.
assertNotEqual
(
None
,
support_request_relative_url
)
support_request_in_progress
=
self
.
person
.
REQUEST
.
get
(
"support_request_in_progress"
,
None
)
self
.
assertEqual
(
support_request_in_progress
,
support_request_relative_url
)
# Check if it is the another Support Request
self
.
assertEqual
(
support_request
.
getSimulationState
(),
"invalidated"
)
self
.
assertNotEqual
(
support_request
.
getRelativeUrl
(),
support_request_relative_url
)
master/bt5/slapos_c
rm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/Base_generateSupportRequestForSlapOS
.py
→
master/bt5/slapos_c
loud/WorkflowTemplateItem/portal_workflow/person_slap_interface_workflow/script_Person_notify
.py
View file @
df2f22d0
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
person
=
state_change
[
'object'
]
portal
=
person
.
getPortalObject
()
# Get required arguments
kwargs
=
state_change
.
kwargs
# Required args
# Raise TypeError if all parameters are not provided
try
:
support_request_title
=
kwargs
[
'support_request_title'
]
description
=
kwargs
[
'support_request_description'
]
# Aggregate can be None, so it isn't included on the kwargs
aggregate
=
kwargs
[
"aggregate"
]
except
KeyError
:
raise
TypeError
,
"Person_requestSupportRequest takes exactly 3 arguments"
aggregate_value
=
portal
.
restrictedTraverse
(
aggregate
)
support_request_in_progress
=
portal
.
portal_catalog
.
getResultValue
(
portal_type
=
'Support Request'
,
title
=
title
,
title
=
support_request_
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
context
.
REQUEST
.
set
(
"support_request_relative_url"
,
support_request_in_progress
.
getRelativeUrl
())
context
.
REQUEST
.
set
(
"support_request_in_progress"
,
support_request_in_progress
.
getRelativeUrl
())
return
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
\
if
support_request
and
support_request
.
getTitle
()
==
support_request_
title
and
\
support_request
.
getAggregateUid
()
==
aggregate_value
.
getUid
():
return
portal
.
restrictedTraverse
(
support_request_in_progress
)
context
.
REQUEST
.
set
(
"support_request_relative_url"
,
support_request_in_progress
)
return
# Ensure resoure is Monitoring
resource
=
portal
.
service_module
.
\
...
...
@@ -45,15 +47,14 @@ support_request = portal.restrictedTraverse(
.
Base_createCloneDocument
(
batch_mode
=
1
)
support_request
.
edit
(
title
=
title
,
title
=
support_request_
title
,
description
=
description
,
start_date
=
DateTime
(),
destination_decision
=
destination_decision
,
aggregate_value
=
aggregate_value
,
destination_decision
=
person
.
getRelativeUrl
()
,
aggregate_value
=
aggregate_value
,
resource
=
resource
)
support_request
.
validate
()
context
.
REQUEST
.
set
(
"support_request_relative_url"
,
support_request
.
getRelativeUrl
())
context
.
REQUEST
.
set
(
"support_request_in_progress"
,
support_request
.
getRelativeUrl
())
return
support_request
master/bt5/slapos_c
rm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_trySendNotificationMessage
.xml
→
master/bt5/slapos_c
loud/WorkflowTemplateItem/portal_workflow/person_slap_interface_workflow/script_Person_notify
.xml
View file @
df2f22d0
...
...
@@ -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,25 @@
</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>
description
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
SupportRequest_trySendNotificationMessage
</string>
</value>
<value>
<string>
script_Person_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>
Person_notify
</string>
</value>
</item>
</dictionary>
</pickle>
...
...
master/bt5/slapos_cloud/WorkflowTemplateItem/portal_workflow/person_slap_interface_workflow/script_Person_requestSupportRequest.py
0 → 100644
View file @
df2f22d0
person
=
state_change
[
'object'
]
portal
=
person
.
getPortalObject
()
# Get required arguments
kwargs
=
state_change
.
kwargs
# Required args
# Raise TypeError if all parameters are not provided
try
:
support_request_title
=
kwargs
[
'support_request_title'
]
resource
=
kwargs
[
'support_request_resource'
]
description
=
kwargs
[
'support_request_description'
]
# Aggregate can be None, so it isn't included on the kwargs
aggregate
=
kwargs
.
get
(
"support_request_aggregate"
,
None
)
except
KeyError
:
raise
TypeError
,
"Person_requestSupportRequest takes exactly 4 arguments"
tag
=
"%s_%s_SupportRequestInProgress"
%
(
person
.
getUid
(),
support_request_title
)
if
(
portal
.
portal_activities
.
countMessageWithTag
(
tag
)
>
0
):
# The software instance is already under creation but can not be fetched from catalog
# As it is not possible to fetch informations, it is better to raise an error
raise
NotImplementedError
(
tag
)
support_request_portal_type
=
"Support Request"
module
=
portal
.
getDefaultModule
(
portal_type
=
support_request_portal_type
)
support_request
=
module
.
newContent
(
portal_type
=
support_request_portal_type
,
title
=
support_request_title
,
description
=
description
,
resource
=
resource
,
destination_decision_value
=
person
,
aggregate
=
aggregate
,
specialise
=
"sale_trade_condition_module/slapos_ticket_trade_condition"
,
activate_kw
=
{
'tag'
:
tag
}
)
context
.
REQUEST
.
set
(
"support_request_relative_url"
,
support_request
.
getRelativeUrl
())
support_request
.
approveRegistration
()
master/bt5/slapos_
pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_upgradeInstanceTree
.xml
→
master/bt5/slapos_
cloud/WorkflowTemplateItem/portal_workflow/person_slap_interface_workflow/script_Person_requestSupportRequest
.xml
View file @
df2f22d0
...
...
@@ -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,25 @@
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string></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>
UpgradeDecision_upgradeInstanceTree
</string>
</value>
<value>
<string>
script_Person_requestSupportRequest
</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>
Person_requestSupportRequest
</string>
</value>
</item>
</dictionary>
</pickle>
...
...
master/bt5/slapos_cloud/WorkflowTemplateItem/portal_workflow/person_slap_interface_workflow/state_draft.xml
View file @
df2f22d0
...
...
@@ -16,12 +16,14 @@
<key>
<string>
categories
</string>
</key>
<value>
<tuple>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_
request_network
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_
notify
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_request_compute_node
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_request_network
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_request_organisation
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_request_project
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_request_site
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_request_software_instance
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_request_support
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_request_token
</string>
</tuple>
</value>
...
...
master/bt5/slapos_cloud/WorkflowTemplateItem/portal_workflow/person_slap_interface_workflow/state_open_order_created.xml
View file @
df2f22d0
...
...
@@ -17,10 +17,14 @@
<value>
<tuple>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_draft
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_notify
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_request_compute_node
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_request_network
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_request_organisation
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_request_project
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_request_site
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_request_software_instance
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_request_support
</string>
<string>
destination/portal_workflow/person_slap_interface_workflow/transition_request_token
</string>
</tuple>
</value>
...
...
master/bt5/slapos_
erp5/WorkflowTemplateItem/portal_workflow/slapos_erp5_interaction_workflow/interaction_WebMessage_setFollowUp
.xml
→
master/bt5/slapos_
cloud/WorkflowTemplateItem/portal_workflow/person_slap_interface_workflow/transition_notify
.xml
View file @
df2f22d0
...
...
@@ -2,61 +2,61 @@
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"
Interaction Workflow Interac
tion"
module=
"erp5.portal_type"
/>
<global
name=
"
Workflow Transi
tion"
module=
"erp5.portal_type"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
categories
</string>
</key>
<key>
<string>
action
</string>
</key>
<value>
<tuple>
<string>
before_commit_script/portal_workflow/slapos_erp5_interaction_workflow/script_WebMessage_stopAndReopenTicket
</string>
</tuple>
<none/>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
<key>
<string>
action_name
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
interaction_WebMessage_setFollowUp
</string>
</value>
</item>
<item>
<key>
<string>
portal_type
</string>
</key>
<value>
<string>
Interaction Workflow Interaction
</string>
</value>
</item>
<item>
<key>
<string>
portal_type_filter
</string>
</key>
<key>
<string>
categories
</string>
</key>
<value>
<tuple>
<string>
Web Message
</string>
<string>
action_type/workflow
</string>
<string>
before_script/portal_workflow/person_slap_interface_workflow/script_Person_checkConsistency
</string>
<string>
after_script/portal_workflow/person_slap_interface_workflow/script_Person_notify
</string>
</tuple>
</value>
</item>
<item>
<key>
<string>
portal_type_group_filter
</string>
</key>
<key>
<string>
description
</string>
</key>
<value>
<
tupl
e/>
<
non
e/>
</value>
</item>
<item>
<key>
<string>
temporary_document_disallowed
</string>
</key>
<value>
<int>
0
</int>
</value>
<key>
<string>
guard_permission
</string>
</key>
<value>
<tuple/>
</value>
</item>
<item>
<key>
<string>
trigger_method_id
</string>
</key>
<key>
<string>
icon
</string>
</key>
<value>
<tuple>
<string>
_setFollowUp*
</string>
</tuple>
<none/>
</value>
</item>
<item>
<key>
<string>
trigger_once_per_transaction
</string>
</key>
<value>
<int>
1
</int>
</value>
<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>
...
...
master/bt5/slapos_
erp5/WorkflowTemplateItem/portal_workflow/slapos_erp5_interaction_workflow/interaction_SupportRequest_setSpecialise
.xml
→
master/bt5/slapos_
cloud/WorkflowTemplateItem/portal_workflow/person_slap_interface_workflow/transition_request_support
.xml
View file @
df2f22d0
...
...
@@ -2,61 +2,61 @@
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"
Interaction Workflow Interac
tion"
module=
"erp5.portal_type"
/>
<global
name=
"
Workflow Transi
tion"
module=
"erp5.portal_type"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
categories
</string>
</key>
<key>
<string>
action
</string>
</key>
<value>
<tuple>
<string>
before_commit_script/portal_workflow/slapos_erp5_interaction_workflow/script_SupportRequest_createInitialWebMessage
</string>
</tuple>
<none/>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
<key>
<string>
action_name
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
interaction_SupportRequest_setSpecialise
</string>
</value>
</item>
<item>
<key>
<string>
portal_type
</string>
</key>
<value>
<string>
Interaction Workflow Interaction
</string>
</value>
</item>
<item>
<key>
<string>
portal_type_filter
</string>
</key>
<key>
<string>
categories
</string>
</key>
<value>
<tuple>
<string>
Support Request
</string>
<string>
action_type/workflow
</string>
<string>
before_script/portal_workflow/person_slap_interface_workflow/script_Person_checkConsistency
</string>
<string>
after_script/portal_workflow/person_slap_interface_workflow/script_Person_requestSupportRequest
</string>
</tuple>
</value>
</item>
<item>
<key>
<string>
portal_type_group_filter
</string>
</key>
<key>
<string>
description
</string>
</key>
<value>
<
tupl
e/>
<
non
e/>
</value>
</item>
<item>
<key>
<string>
temporary_document_disallowed
</string>
</key>
<value>
<int>
0
</int>
</value>
<key>
<string>
guard_permission
</string>
</key>
<value>
<tuple/>
</value>
</item>
<item>
<key>
<string>
trigger_method_id
</string>
</key>
<key>
<string>
icon
</string>
</key>
<value>
<tuple>
<string>
_setSpecialise*
</string>
</tuple>
<none/>
</value>
</item>
<item>
<key>
<string>
trigger_once_per_transaction
</string>
</key>
<value>
<int>
1
</int>
</value>
<key>
<string>
id
</string>
</key>
<value>
<string>
transition_request_support
</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 Support
</string>
</value>
</item>
<item>
<key>
<string>
trigger_type
</string>
</key>
...
...
master/bt5/slapos_crm/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml
View file @
df2f22d0
...
...
@@ -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
master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkAndUpdateAllocationScope.py
View file @
df2f22d0
...
...
@@ -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
...
...
master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkSoftwareInstallationState.py
View file @
df2f22d0
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
master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/ComputeNode_checkState.py
View file @
df2f22d0
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
master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/InstanceTree_createSupportRequestEvent.py
View file @
df2f22d0
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"
)
master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_updateMonitoringDestroyRequestedState.py
View file @
df2f22d0
""" 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"
)
master/bt5/slapos_crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_updateMonitoringState.py
View file @
df2f22d0
...
...
@@ -2,7 +2,6 @@ if context.getSimulationState() == "invalidated":
return
document
=
context
.
getAggregateValue
(
portal_type
=
"Instance Tree"
)
if
document
is
None
:
return
...
...
master/bt5/slapos_crm/TestTemplateItem/portal_components/test.erp5.testSlapOSCRMSkins.py
View file @
df2f22d0
...
...
@@ -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
())
...
...
master/bt5/slapos_crm/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudTicketSlapInterfaceWorkflow.py
0 → 100644
View file @
df2f22d0
# -*- 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"
))
master/bt5/slapos_crm/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudTicketSlapInterfaceWorkflow.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_
erp5/WorkflowTemplateItem/portal_workflow/slapos_erp5_interaction_workflow/script_SupportRequest_createInitialWebMessage
.py
→
master/bt5/slapos_
crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_approveRegistration
.py
View file @
df2f22d0
ticket
=
state_object
[
"object"
]
ticket
=
state_change
[
"object"
]
from
DateTime
import
DateTime
portal
=
context
.
getPortalObject
()
# XXX unhardcode the trade condition, by adding a preference
if
ticket
.
getSpecialise
()
!=
"sale_trade_condition_module/slapos_ticket_trade_condition"
:
if
ticket
.
getSimulationState
()
!=
"draft"
:
return
if
ticket
.
getSimulationState
()
!=
"draft"
:
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
ticket
.
validate
()
# 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
web_message
=
context
.
Ticket_createInitialEvent
(
state_object
)
ticket
.
edit
(
source_section
=
trade_condition
.
getSourceSection
(),
source_section
=
trade_condition
.
getSourceSection
(),
source_trade
=
trade_condition
.
getSourceSection
(),
source
=
trade_condition
.
getSource
(),
causality_value
=
web_message
)
source
=
trade_condition
.
getSource
())
ticket
.
setStartDate
(
DateTime
())
# Copy original post into the original message.
web_message
.
edit
(
title
=
ticket
.
getTitle
(),
# content_type="text/plain",
text_content
=
ticket
.
getDescription
(),
source
=
ticket
.
getDestinationDecision
(),
# destination=trade_condition.getSource(),
# resource=ticket.getResource(),
# start_date=DateTime(),
follow_up_value
=
ticket
,
ticket
.
requestEvent
(
event_title
=
ticket
.
getTitle
(),
event_content
=
ticket
.
getDescription
()
)
event_relative_url
=
context
.
REQUEST
.
get
(
"event_relative_url"
)
ticket
.
setCausality
(
event_relative_url
)
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_approveRegistration.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_checkConsistency.py
0 → 100644
View file @
df2f22d0
ticket
=
state_change
[
'object'
]
ticket
.
Base_checkConsistency
()
master/bt5/slapos_
erp5/WorkflowTemplateItem/portal_workflow/slapos_erp5_interaction_workflow/script_Ticket_createInitialEvent
.xml
→
master/bt5/slapos_
crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_checkConsistency
.xml
View file @
df2f22d0
...
...
@@ -50,7 +50,7 @@
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
state_
object
</string>
</value>
<value>
<string>
state_
change
</string>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
...
...
@@ -60,7 +60,7 @@
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
script_Ticket_c
reateInitialEvent
</string>
</value>
<value>
<string>
script_Ticket_c
heckConsistency
</string>
</value>
</item>
<item>
<key>
<string>
portal_type
</string>
</key>
...
...
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_notify.py
0 → 100644
View file @
df2f22d0
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
)
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_notify.xml
0 → 100644
View file @
df2f22d0
<?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>
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_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>
</record>
</ZopeData>
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_requestEvent.py
0 → 100644
View file @
df2f22d0
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
())
master/bt5/slapos_
erp5/WorkflowTemplateItem/portal_workflow/slapos_erp5_interaction_workflow/script_SupportRequest_createInitialWebMessage
.xml
→
master/bt5/slapos_
crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/script_Ticket_requestEvent
.xml
View file @
df2f22d0
...
...
@@ -50,13 +50,14 @@
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
state_
object
</string>
</value>
<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>
...
...
@@ -68,7 +69,7 @@
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
script_
SupportRequest_createInitialWebMessage
</string>
</value>
<value>
<string>
script_
Ticket_requestEvent
</string>
</value>
</item>
<item>
<key>
<string>
portal_type
</string>
</key>
...
...
@@ -76,9 +77,7 @@
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<none/>
</value>
<value>
<string>
Ticket_requestEvent
</string>
</value>
</item>
</dictionary>
</pickle>
...
...
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/state_draft.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/transition_approve_registration.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/transition_notify.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/transition_request_event.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_action.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_actor.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_comment.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_error_message.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_history.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_portal_type.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_slap_interface_workflow/variable_time.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_crm/WorkflowTemplateItem/portal_workflow/ticket_workflow.xml
View file @
df2f22d0
...
...
@@ -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>
...
...
master/bt5/slapos_crm/bt/template_portal_type_workflow_chain_list
View file @
df2f22d0
...
...
@@ -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
master/bt5/slapos_crm/bt/template_test_id_list
View file @
df2f22d0
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
master/bt5/slapos_crm/bt/template_workflow_id_list
View file @
df2f22d0
ticket_slap_interface_workflow
ticket_workflow
\ No newline at end of file
master/bt5/slapos_erp5/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml
View file @
df2f22d0
...
...
@@ -123,14 +123,6 @@
<type>
Software Instance
</type>
<workflow>
local_permission_slapos_interaction_workflow
</workflow>
</chain>
<chain>
<type>
Support Request
</type>
<workflow>
slapos_erp5_interaction_workflow
</workflow>
</chain>
<chain>
<type>
Web Message
</type>
<workflow>
slapos_erp5_interaction_workflow
</workflow>
</chain>
<chain>
<type>
Wechat Event
</type>
<workflow>
local_permission_slapos_interaction_workflow
</workflow>
...
...
master/bt5/slapos_erp5/WorkflowTemplateItem/portal_workflow/slapos_erp5_interaction_workflow/script_Ticket_createInitialEvent.py
deleted
100644 → 0
View file @
1d1bcf8b
# Added this script to be running as Owner
portal
=
context
.
getPortalObject
()
return
portal
.
event_module
.
newContent
(
portal_type
=
"Web Message"
,
)
master/bt5/slapos_erp5/WorkflowTemplateItem/portal_workflow/slapos_erp5_interaction_workflow/script_WebMessage_stopAndReopenTicket.py
deleted
100644 → 0
View file @
1d1bcf8b
web_message
=
state_object
[
"object"
]
portal
=
context
.
getPortalObject
()
person
=
portal
.
portal_membership
.
getAuthenticatedMember
().
getUserValue
()
if
person
is
None
:
return
if
web_message
.
getSimulationState
()
!=
"draft"
:
return
if
not
web_message
.
hasStartDate
():
web_message
.
setStartDate
(
DateTime
())
# The user isn't the customer, so it is not comming from the user
# interface.
ticket
=
web_message
.
getFollowUpValue
()
if
ticket
.
getDestinationDecision
()
!=
person
.
getRelativeUrl
():
return
# The user isn't the sender, so it is not comming from UI, but from
# an alarm.
source
=
web_message
.
getSource
()
if
source
!=
person
.
getRelativeUrl
():
return
edit_kw
=
{
"content_type"
:
"text/plain"
}
# Copy destination and resource from ticket.
if
web_message
.
getDestination
()
is
None
:
edit_kw
[
"destination"
]
=
ticket
.
getSource
()
if
web_message
.
getResource
()
is
None
:
edit_kw
[
"resource"
]
=
ticket
.
getResource
()
web_message
.
edit
(
**
edit_kw
)
web_message
.
stop
(
comment
=
"Submitted from the renderjs app"
)
if
portal
.
portal_workflow
.
isTransitionPossible
(
ticket
,
"validate"
):
ticket
.
validate
(
comment
=
"See %s"
%
web_message
.
getRelativeUrl
())
master/bt5/slapos_erp5/bt/template_portal_type_workflow_chain_list
View file @
df2f22d0
...
...
@@ -34,6 +34,4 @@ Sale Packing List | local_permission_slapos_interaction_workflow
Slave Instance | local_permission_slapos_interaction_workflow
Software Installation | local_permission_slapos_interaction_workflow
Software Instance | local_permission_slapos_interaction_workflow
Support Request | slapos_erp5_interaction_workflow
Web Message | slapos_erp5_interaction_workflow
Wechat Event | local_permission_slapos_interaction_workflow
\ No newline at end of file
master/bt5/slapos_jio/PathTemplateItem/web_page_module/rjs_gadget_erp5_page_slap_add_ticket_js.js
View file @
df2f22d0
...
...
@@ -11,9 +11,10 @@
.
declareAcquiredMethod
(
"
updatePanel
"
,
"
updatePanel
"
)
.
declareAcquiredMethod
(
"
jio_getAttachment
"
,
"
jio_getAttachment
"
)
.
declareAcquiredMethod
(
"
getSetting
"
,
"
getSetting
"
)
.
declareAcquiredMethod
(
"
getSettingList
"
,
"
getSettingList
"
)
.
declareAcquiredMethod
(
"
getUrlFor
"
,
"
getUrlFor
"
)
.
declareAcquiredMethod
(
"
redirect
"
,
"
redirect
"
)
.
declareAcquiredMethod
(
"
jio_p
ost
"
,
"
jio_pos
t
"
)
.
declareAcquiredMethod
(
"
jio_p
utAttachment
"
,
"
jio_putAttachmen
t
"
)
.
declareAcquiredMethod
(
"
jio_get
"
,
"
jio_get
"
)
.
declareAcquiredMethod
(
"
notifySubmitting
"
,
"
notifySubmitting
"
)
.
declareAcquiredMethod
(
"
notifySubmitted
"
,
'
notifySubmitted
'
)
...
...
@@ -26,6 +27,7 @@
return
this
.
triggerSubmit
();
})
.
onEvent
(
'
submit
'
,
function
()
{
var
gadget
=
this
;
return
gadget
.
notifySubmitting
()
...
...
@@ -33,28 +35,31 @@
return
gadget
.
getDeclaredGadget
(
'
form_view
'
);
})
.
push
(
function
(
form_gadget
)
{
return
form_gadget
.
getContent
();
return
RSVP
.
all
([
form_gadget
.
getContent
(),
gadget
.
getSettingList
([
'
me
'
,
'
hateoas_url
'
])]);
})
.
push
(
function
(
content
)
{
var
property
,
doc
=
{};
for
(
property
in
content
)
{
if
((
content
.
hasOwnProperty
(
property
))
&&
// Remove undefined keys added by Gadget fields
(
property
!==
"
undefined
"
)
&&
// Remove default_*:int keys added by ListField
!
(
property
.
endsWith
(
"
:int
"
)
&&
property
.
startsWith
(
"
default_
"
)))
{
doc
[
property
]
=
content
[
property
];
}
}
return
gadget
.
jio_post
(
doc
);
.
push
(
function
(
result
)
{
var
doc
=
result
[
0
],
me
=
result
[
1
][
0
],
url
=
result
[
1
][
1
];
return
gadget
.
jio_putAttachment
(
me
,
url
+
me
+
"
/Person_requestSupport
"
,
{
title
:
doc
.
title
,
description
:
doc
.
description
,
resource
:
doc
.
resource
});
})
.
push
(
function
(
key
)
{
.
push
(
function
(
attachment
)
{
return
jIO
.
util
.
readBlobAsText
(
attachment
.
target
.
response
);
})
.
push
(
function
(
response
)
{
return
JSON
.
parse
(
response
.
target
.
result
);
})
.
push
(
function
(
result
)
{
return
gadget
.
notifySubmitted
({
message
:
gadget
.
message_translation
,
status
:
'
success
'
})
.
push
(
function
()
{
// Workaround, find a way to open document without break gadget.
return
gadget
.
redirect
({
"
command
"
:
"
change
"
,
"
options
"
:
{
"
jio_key
"
:
key
,
"
page
"
:
"
slap_controller
"
}});
"
options
"
:
{
"
jio_key
"
:
result
.
relative_url
,
"
page
"
:
"
slap_controller
"
}});
});
});
})
...
...
@@ -88,20 +93,19 @@
gadget
.
getDeclaredGadget
(
'
form_view
'
),
gadget
.
jio_getAttachment
(
"
ticket_resource_list
"
,
hateoas_url
+
"
Ticket_getResourceItemListAsJSON
"
),
window
.
getSettingMe
(
gadget
),
gadget
.
getTranslationList
(
translation_list
)
]);
})
.
push
(
function
(
result
)
{
gadget
.
message_translation
=
result
[
3
][
0
];
page_title_translation
=
result
[
3
][
10
];
gadget
.
message_translation
=
result
[
2
][
0
];
page_title_translation
=
result
[
2
][
10
];
return
result
[
0
].
render
({
erp5_document
:
{
"
_embedded
"
:
{
"
_view
"
:
{
"
my_title
"
:
{
"
description
"
:
result
[
3
][
1
],
"
title
"
:
result
[
3
][
2
],
"
description
"
:
result
[
2
][
1
],
"
title
"
:
result
[
2
][
2
],
"
default
"
:
""
,
"
css_class
"
:
""
,
"
required
"
:
1
,
...
...
@@ -112,7 +116,7 @@
},
"
my_description
"
:
{
"
description
"
:
""
,
"
title
"
:
result
[
3
][
3
],
"
title
"
:
result
[
2
][
3
],
"
default
"
:
""
,
"
css_class
"
:
""
,
"
required
"
:
1
,
...
...
@@ -122,8 +126,8 @@
"
type
"
:
"
TextAreaField
"
},
"
my_resource
"
:
{
"
description
"
:
result
[
3
][
0
],
"
title
"
:
result
[
3
][
4
],
"
description
"
:
result
[
2
][
0
],
"
title
"
:
result
[
2
][
4
],
"
default
"
:
""
,
"
items
"
:
result
[
1
],
"
css_class
"
:
""
,
...
...
@@ -132,52 +136,6 @@
"
key
"
:
"
resource
"
,
"
hidden
"
:
0
,
"
type
"
:
"
ListField
"
},
"
my_destination_decision
"
:
{
"
description
"
:
result
[
3
][
0
],
"
title
"
:
result
[
3
][
5
],
"
default
"
:
result
[
2
],
"
css_class
"
:
""
,
"
required
"
:
1
,
"
editable
"
:
1
,
"
key
"
:
"
destination_decision
"
,
"
hidden
"
:
1
,
"
type
"
:
"
StringField
"
},
"
my_specialise
"
:
{
"
description
"
:
""
,
"
title
"
:
result
[
3
][
6
],
// Auto Set a hardcoded trade Condition
// Please replace it by a getSetting.
"
default
"
:
"
sale_trade_condition_module/slapos_ticket_trade_condition
"
,
"
css_class
"
:
""
,
"
required
"
:
1
,
"
editable
"
:
1
,
"
key
"
:
"
specialise
"
,
"
hidden
"
:
1
,
"
type
"
:
"
StringField
"
},
"
my_portal_type
"
:
{
"
description
"
:
result
[
3
][
0
],
"
title
"
:
result
[
3
][
7
],
"
default
"
:
"
Support Request
"
,
"
css_class
"
:
""
,
"
required
"
:
1
,
"
editable
"
:
1
,
"
key
"
:
"
portal_type
"
,
"
hidden
"
:
1
,
"
type
"
:
"
StringField
"
},
"
my_parent_relative_url
"
:
{
"
description
"
:
""
,
"
title
"
:
result
[
3
][
9
],
"
default
"
:
"
support_request_module
"
,
"
css_class
"
:
""
,
"
required
"
:
1
,
"
editable
"
:
1
,
"
key
"
:
"
parent_relative_url
"
,
"
hidden
"
:
1
,
"
type
"
:
"
StringField
"
}
}},
"
_links
"
:
{
...
...
@@ -193,7 +151,7 @@
[[
"
my_resource
"
]]
],
[
"
center
"
,
[[
"
my_title
"
],
[
"
my_description
"
]
,
[
"
my_specialise
"
],
[
"
my_destination_decision
"
],
[
"
my_portal_type
"
],
[
"
my_parent_relative_url
"
]
]
[[
"
my_title
"
],
[
"
my_description
"
]]
]]
}
});
...
...
master/bt5/slapos_jio/PathTemplateItem/web_page_module/rjs_gadget_erp5_page_slap_add_ticket_js.xml
View file @
df2f22d0
...
...
@@ -279,7 +279,7 @@
</item>
<item>
<key>
<string>
serial
</string>
</key>
<value>
<string>
9
87.11835.35244.22135
</string>
</value>
<value>
<string>
9
97.18055.28455.10120
</string>
</value>
</item>
<item>
<key>
<string>
state
</string>
</key>
...
...
@@ -297,7 +297,7 @@
</tuple>
<state>
<tuple>
<float>
16
02260862.83
</float>
<float>
16
41264462.37
</float>
<string>
UTC
</string>
</tuple>
</state>
...
...
master/bt5/slapos_jio/SkinTemplateItem/portal_skins/slapos_hal_json_style/Person_requestSupport.py
0 → 100644
View file @
df2f22d0
import
json
portal
=
context
.
getPortalObject
()
person
=
portal
.
portal_membership
.
getAuthenticatedMember
().
getUserValue
()
request
=
context
.
REQUEST
response
=
request
.
RESPONSE
if
person
is
None
:
response
.
setStatus
(
403
)
else
:
request_kw
=
{
"support_request_title"
:
title
,
"support_request_description"
:
description
,
"support_request_resource"
:
resource
,
"support_request_aggregate"
:
aggregate
}
person
.
requestSupport
(
**
request_kw
)
support_relative_url
=
request
.
get
(
'support_request_relative_url'
)
response
.
setHeader
(
'Content-Type'
,
"application/json"
)
return
json
.
dumps
({
"relative_url"
:
support_relative_url
})
master/bt5/slapos_
pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_getComputeNode
.xml
→
master/bt5/slapos_
jio/SkinTemplateItem/portal_skins/slapos_hal_json_style/Person_requestSupport
.xml
View file @
df2f22d0
...
...
@@ -50,11 +50,11 @@
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string></string>
</value>
<value>
<string>
title, description, resource, aggregate=None
</string>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
UpgradeDecision_getComputeNode
</string>
</value>
<value>
<string>
Person_requestSupport
</string>
</value>
</item>
</dictionary>
</pickle>
...
...
master/bt5/slapos_
pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_getInstanceTree
.xml
→
master/bt5/slapos_
jio_ui_test/PathTemplateItem/portal_tests/slaposjs_zuite/testSlapOSJSServerTicketRelated
.xml
View file @
df2f22d0
...
...
@@ -2,14 +2,10 @@
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"
PythonScript"
module=
"Products.PythonScripts.PythonScript
"
/>
<global
name=
"
ZopePageTemplate"
module=
"Products.PageTemplates.ZopePageTemplate
"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
Script_magic
</string>
</key>
<value>
<int>
3
</int>
</value>
</item>
<item>
<key>
<string>
_bind_names
</string>
</key>
<value>
...
...
@@ -24,18 +20,6 @@
<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>
...
...
@@ -49,12 +33,24 @@
</value>
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string></string>
</value>
<key>
<string>
content_type
</string>
</key>
<value>
<string>
text/html
</string>
</value>
</item>
<item>
<key>
<string>
expand
</string>
</key>
<value>
<int>
0
</int>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
UpgradeDecision_getInstanceTree
</string>
</value>
<value>
<string>
testSlapOSJSServerTicketRelated
</string>
</value>
</item>
<item>
<key>
<string>
output_encoding
</string>
</key>
<value>
<string>
utf-8
</string>
</value>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<unicode></unicode>
</value>
</item>
</dictionary>
</pickle>
...
...
master/bt5/slapos_jio_ui_test/PathTemplateItem/portal_tests/slaposjs_zuite/testSlapOSJSServerTicketRelated.zpt
0 → 100644
View file @
df2f22d0
<html
xmlns:tal=
"http://xml.zope.org/namespaces/tal"
xmlns:metal=
"http://xml.zope.org/namespaces/metal"
>
<head>
<meta
http-equiv=
"Content-Type"
content=
"text/html; charset=UTF-8"
>
<title>
Test SlapOS JS Server
</title>
</head>
<body>
<table
cellpadding=
"1"
cellspacing=
"1"
border=
"1"
>
<thead>
<tr>
<td
rowspan=
"1"
colspan=
"3"
>
Test SlapOS JS Server Add related Ticket
</td>
</tr>
</thead>
<tbody>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_init"
/>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/set_default_available_language"
/>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_login"
/>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_wait_for_front_page"
/>
<tal:block
define=
"document_title python: 'TEST-SLAPOSJS-COMPUTER 0';"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/create_simple_compute_node"
/>
</tal:block>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_wait_for_activities_and_front_page"
/>
<tal:block
define=
"menu_item python: 'Servers'; header menu_item"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/access_menu_item"
/>
</tal:block>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(1)', 'footer': '${count} Records'};
dummy python: context.REQUEST.set('mapping', {'count': '1'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-COMPUTER 0"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-COMPUTER 0"]
</td>
<td></td>
</tr>
<tr>
<td>
click
</td>
<td>
//a[text()="TEST-SLAPOSJS-COMPUTER 0"]
</td>
<td></td>
</tr>
<tal:block
tal:define=
"header python: 'Compute Node: ${title}';
dummy python: context.REQUEST.set('mapping', {'title': 'TEST-SLAPOSJS-COMPUTER 0'}) "
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/assert_page_header"
/>
</tal:block>
<tr>
<td
colspan=
"3"
><b
tal:content=
"python: 'Add an Support Request'"
>
Menu Item
</b></td>
</tr>
<tal:block
define=
"menu_action python: 'Add Ticket'"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/click_submenu_action"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//input[@id="title"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//input[@id="title"]
</td>
<td></td>
</tr>
<tr>
<td>
type
</td>
<td>
//input[@id="title"]
</td>
<td>
TEST-SLAPOSJS-SUPPORT-REQUEST-SERVER-RELATED 0
</td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//textarea[@id="description"]
</td>
<td></td>
</tr>
<tr>
<td>
type
</td>
<td>
//textarea[@id="description"]
</td>
<td>
TEST-SLAPOSJS-SUPPORT-REQUEST-SERVER-RELATED DESCRIPTION
</td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//select[@id="resource"]
</td>
<td></td>
</tr>
<tr>
<td>
select
</td>
<td>
//select[@id="resource"]
</td>
<td>
Complaint
</td>
</tr>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/click_proceed"
/>
<tal:block
tal:define=
"notification_configuration python: {'class': 'success',
'text': 'New Ticket created.'}"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/wait_for_notification"
/>
</tal:block>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/wait_for_content_loaded"
/>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_wait_for_activities_and_front_page"
/>
<tal:block
define=
"menu_item python: 'Servers'; header menu_item"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/access_menu_item"
/>
</tal:block>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(1)', 'footer': '${count} Records'};
dummy python: context.REQUEST.set('mapping', {'count': '1'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-COMPUTER 0"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-COMPUTER 0"]
</td>
<td></td>
</tr>
<tr>
<td>
click
</td>
<td>
//a[text()="TEST-SLAPOSJS-COMPUTER 0"]
</td>
<td></td>
</tr>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(1)', 'footer': '${count} Records'};
dummy python: context.REQUEST.set('mapping', {'count': '1'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-SUPPORT-REQUEST-SERVER-RELATED 0"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-SUPPORT-REQUEST-SERVER-RELATED 0"]
</td>
<td></td>
</tr>
<tr>
<td>
click
</td>
<td>
//a[text()="TEST-SLAPOSJS-SUPPORT-REQUEST-SERVER-RELATED 0"]
</td>
<td></td>
</tr>
<tal:block
tal:define=
"header python: 'Support Request : ${title}';
dummy python: context.REQUEST.set('mapping', {'title': 'TEST-SLAPOSJS-SUPPORT-REQUEST-SERVER-RELATED 0'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/assert_page_header"
/>
</tal:block>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(1)', 'footer': '${count} Records'};
dummy python: context.REQUEST.set('mapping', {'count': '1'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//div[contains(@data-gadget-url, 'gadget_slapos_event_discussion_entry.html')]//div[@class="slapos-event-discussion-message-header"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//div[contains(@data-gadget-url, 'gadget_slapos_event_discussion_entry.html')]//div[@class="slapos-event-discussion-message-header"]
</td>
<td></td>
</tr>
<tr>
<td>
verifyTextPresent
</td>
<td>
Demo User Functional
</td>
<td></td>
</tr>
<tr>
<td>
verifyTextPresent
</td>
<td>
TEST-SLAPOSJS-SUPPORT-REQUEST-SERVER-RELATED 0
</td>
<td></td>
</tr>
<tr>
<td>
verifyTextPresent
</td>
<td>
TEST-SLAPOSJS-SUPPORT-REQUEST-SERVER-RELATED DESCRIPTION
</td>
<td></td>
</tr>
<tal:block
tal:define=
"menu_action python: 'Add'"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/click_submenu_action"
/>
</tal:block>
<tal:block
tal:define=
"header python: 'New Message'"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/assert_page_header"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//textarea[@id="text_content"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//textarea[@id="text_content"]
</td>
<td></td>
</tr>
<tr>
<td>
type
</td>
<td>
//textarea[@id="text_content"]
</td>
<td>
TEST-SLAPOSJS-SUPPORT-REQUEST-SERVER-RELATED NEW MESSAGE
</td>
</tr>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/click_proceed"
/>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/wait_for_content_loaded"
/>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_wait_for_activities_and_front_page"
/>
<tal:block
define=
"menu_item python: 'Servers'; header menu_item"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/access_menu_item"
/>
</tal:block>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(1)', 'footer': '${count} Records'};
dummy python: context.REQUEST.set('mapping', {'count': '1'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-COMPUTER 0"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-COMPUTER 0"]
</td>
<td></td>
</tr>
<tr>
<td>
click
</td>
<td>
//a[text()="TEST-SLAPOSJS-COMPUTER 0"]
</td>
<td></td>
</tr>
<tal:block
tal:define=
"header python: 'Compute Node: ${title}';
dummy python: context.REQUEST.set('mapping', {'title': 'TEST-SLAPOSJS-COMPUTER 0'}) "
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/assert_page_header"
/>
</tal:block>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(1)', 'footer': '${count} Records'};
dummy python: context.REQUEST.set('mapping', {'count': '1'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-SUPPORT-REQUEST-SERVER-RELATED 0"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-SUPPORT-REQUEST-SERVER-RELATED 0"]
</td>
<td></td>
</tr>
<tr>
<td>
click
</td>
<td>
//a[text()="TEST-SLAPOSJS-SUPPORT-REQUEST-SERVER-RELATED 0"]
</td>
<td></td>
</tr>
<tal:block
tal:define=
"header python: 'Support Request : ${title}';
dummy python: context.REQUEST.set('mapping', {'title': 'TEST-SLAPOSJS-SUPPORT-REQUEST-SERVER-RELATED 0'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/assert_page_header"
/>
</tal:block>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(2)', 'footer': '${count} Records'};
dummy python: context.REQUEST.set('mapping', {'count': '2'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//div[contains(@data-gadget-url, 'gadget_slapos_event_discussion_entry.html')]//div[@class="slapos-event-discussion-message-header"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//div[contains(@data-gadget-url, 'gadget_slapos_event_discussion_entry.html')]//div[@class="slapos-event-discussion-message-header"]
</td>
<td></td>
</tr>
<tr>
<td>
verifyTextPresent
</td>
<td>
TEST-SLAPOSJS-SUPPORT-REQUEST-SERVER-RELATED NEW MESSAGE
</td>
<td></td>
</tr>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_wait_for_activities_and_front_page"
/>
<tal:block
define=
"menu_item python: 'Servers'; header menu_item"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/access_menu_item"
/>
</tal:block>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(1)', 'footer': '${count} Records'};
dummy python: context.REQUEST.set('mapping', {'count': '1'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-COMPUTER 0"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-COMPUTER 0"]
</td>
<td></td>
</tr>
<tr>
<td>
click
</td>
<td>
//a[text()="TEST-SLAPOSJS-COMPUTER 0"]
</td>
<td></td>
</tr>
<tal:block
tal:define=
"header python: 'Compute Node: ${title}';
dummy python: context.REQUEST.set('mapping', {'title': 'TEST-SLAPOSJS-COMPUTER 0'}) "
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/assert_page_header"
/>
</tal:block>
<tr>
<td
colspan=
"3"
><b>
Update Allocation Scope
</b></td>
</tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
//select[@id="allocation_scope"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//select[@id="allocation_scope"]
</td>
<td></td>
</tr>
<tr>
<td>
select
</td>
<td>
//select[@id="allocation_scope"]
</td>
<td
tal:content=
"python: '%s' % (here.Base_translateString('Closed forever', lang=lang))"
></td>
</tr>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/save"
/>
<tal:block
define=
"menu_item python: 'Servers'; header menu_item"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/access_menu_item"
/>
</tal:block>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_wait_for_activities_and_front_page"
/>
<tal:block
define=
"menu_item python: 'Servers'; header menu_item"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/access_menu_item"
/>
</tal:block>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(0)', 'footer': 'No records'}"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_logout"
/>
</tbody>
</table>
</body>
</html>
\ No newline at end of file
master/bt5/slapos_
pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_upgradeComputeNode
.xml
→
master/bt5/slapos_
jio_ui_test/PathTemplateItem/portal_tests/slaposjs_zuite/testSlapOSJSServiceTicketRelated
.xml
View file @
df2f22d0
...
...
@@ -2,14 +2,10 @@
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"
PythonScript"
module=
"Products.PythonScripts.PythonScript
"
/>
<global
name=
"
ZopePageTemplate"
module=
"Products.PageTemplates.ZopePageTemplate
"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
Script_magic
</string>
</key>
<value>
<int>
3
</int>
</value>
</item>
<item>
<key>
<string>
_bind_names
</string>
</key>
<value>
...
...
@@ -24,18 +20,6 @@
<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>
...
...
@@ -49,12 +33,24 @@
</value>
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string></string>
</value>
<key>
<string>
content_type
</string>
</key>
<value>
<string>
text/html
</string>
</value>
</item>
<item>
<key>
<string>
expand
</string>
</key>
<value>
<int>
0
</int>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
UpgradeDecision_upgradeComputeNode
</string>
</value>
<value>
<string>
testSlapOSJSServiceTicketRelated
</string>
</value>
</item>
<item>
<key>
<string>
output_encoding
</string>
</key>
<value>
<string>
utf-8
</string>
</value>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<unicode></unicode>
</value>
</item>
</dictionary>
</pickle>
...
...
master/bt5/slapos_jio_ui_test/PathTemplateItem/portal_tests/slaposjs_zuite/testSlapOSJSServiceTicketRelated.zpt
0 → 100644
View file @
df2f22d0
<html
xmlns:tal=
"http://xml.zope.org/namespaces/tal"
xmlns:metal=
"http://xml.zope.org/namespaces/metal"
>
<head>
<meta
http-equiv=
"Content-Type"
content=
"text/html; charset=UTF-8"
>
<title>
Test SlapOS JS Service
</title>
</head>
<body>
<table
cellpadding=
"1"
cellspacing=
"1"
border=
"1"
>
<thead>
<tr>
<td
rowspan=
"1"
colspan=
"3"
>
Test SlapOS JS Service
</td>
</tr>
</thead>
<tbody>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_init"
/>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/set_default_available_language"
/>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_login"
/>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_wait_for_front_page"
/>
<tal:block
define=
"menu_item python: 'Services'; header menu_item"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/access_menu_item"
/>
</tal:block>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(0)', 'footer': 'No records'}"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tal:block
define=
"menu_action python: 'Add'"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/click_submenu_action"
/>
</tal:block>
<tr>
<td
colspan=
"3"
><b>
Request a Software
</b></td>
</tr>
<tal:block
define=
"software_product python: 'Frontend'"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/select_software_product"
/>
</tal:block>
<tal:block
define=
"software_release python: 'Frontend'"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/select_software_release"
/>
</tal:block>
<tr>
<td
colspan=
"3"
><b>
Fill Request form
</b></td>
</tr>
<tal:block
tal:define=
"header python: '3/3 Request Service: ${title}';
dummy python: context.REQUEST.set('mapping', {'title': 'Frontend'}) "
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/assert_page_header"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//input[@id="title"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//input[@id="title"]
</td>
<td></td>
</tr>
<tr>
<td>
type
</td>
<td>
//input[@id="title"]
</td>
<td>
TEST-SLAPOSJS-SERVICE-FRONTEND 0
</td>
</tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
//div[contains(@data-gadget-url,
'gadget_erp5_page_slap_parameter_form.html')]//select[@name="software_type"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//div[contains(@data-gadget-url,
'gadget_erp5_page_slap_parameter_form.html')]//select[@name="software_type"]
</td>
<td></td>
</tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
//div[contains(@data-gadget-url,
'gadget_erp5_page_slap_parameter_form.html')]//select[@name="software_type"]//option[text()="Custom Personal"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//div[contains(@data-gadget-url,
'gadget_erp5_page_slap_parameter_form.html')]//select[@name="software_type"]//option[text()="Custom Personal"]
</td>
<td></td>
</tr>
<tr>
<td>
select
</td>
<td>
//div[contains(@data-gadget-url,
'gadget_erp5_page_slap_parameter_form.html')]//select[@name="software_type"]
</td>
<td>
Custom Personal
</td>
</tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
//input[@name="//domain"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//input[@name="//domain"]
</td>
<td></td>
</tr>
<tr>
<td>
type
</td>
<td>
//input[@name="//domain"]
</td>
<td>
www.erp5.com
</td>
</tr>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/click_proceed"
/>
<tal:block
tal:define=
"notification_configuration python: {'class': 'success',
'text': 'New service created.'}"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/wait_for_notification"
/>
</tal:block>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_wait_for_activities_and_front_page"
/>
<tal:block
define=
"menu_item python: 'Services'; header menu_item"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/access_menu_item"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//div[contains(@data-gadget-url,
'gadget_slapos_panel.html')]//img[contains(@src, 'gadget_slapos_panel.png?format=png')]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//div[contains(@data-gadget-url,
'gadget_slapos_panel.html')]//img[contains(@src, 'gadget_slapos_panel.png?format=png')]
</td>
<td></td>
</tr>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(1)', 'footer': '${count} Records'};
dummy python: context.REQUEST.set('mapping', {'count': '1'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-SERVICE-FRONTEND 0"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-SERVICE-FRONTEND 0"]
</td>
<td></td>
</tr>
<tr>
<td>
click
</td>
<td>
//a[text()="TEST-SLAPOSJS-SERVICE-FRONTEND 0"]
</td>
<td></td>
</tr>
<tr
tal:define=
"dummy python: context.REQUEST.set('mapping', {'title': 'TEST-SLAPOSJS-SERVICE-FRONTEND 0'})"
>
<td>
waitForElementPresent
</td>
<td
tal:content=
"python: '//a[@data-i18n= \'%s\']' % (here.Base_translateString('Instance Tree: ${title}', mapping=context.REQUEST.get('mapping', {}), lang=lang))"
></td>
<td></td>
</tr>
<tr
tal:define=
"dummy python: context.REQUEST.set('mapping', {'title': 'TEST-SLAPOSJS-SERVICE-FRONTEND 0'})"
>
<td>
assertElementPresent
</td>
<td
tal:content=
"python: '//a[@data-i18n= \'%s\']' % (here.Base_translateString('Instance Tree: ${title}', mapping=context.REQUEST.get('mapping', {}), lang=lang))"
></td>
<td></td>
</tr>
<tr>
<td
colspan=
"3"
><b
tal:content=
"python: 'Add an Support Request'"
>
Menu Item
</b></td>
</tr>
<tal:block
define=
"menu_action python: 'Add Ticket'"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/click_submenu_action"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//input[@id="title"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//input[@id="title"]
</td>
<td></td>
</tr>
<tr>
<td>
type
</td>
<td>
//input[@id="title"]
</td>
<td>
TEST-SLAPOSJS-SUPPORT-REQUEST-SERVICE-RELATED 0
</td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//textarea[@id="description"]
</td>
<td></td>
</tr>
<tr>
<td>
type
</td>
<td>
//textarea[@id="description"]
</td>
<td>
TEST-SLAPOSJS-SUPPORT-REQUEST-SERVICE-RELATED DESCRIPTION
</td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//select[@id="resource"]
</td>
<td></td>
</tr>
<tr>
<td>
select
</td>
<td>
//select[@id="resource"]
</td>
<td>
Complaint
</td>
</tr>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/click_proceed"
/>
<tal:block
tal:define=
"notification_configuration python: {'class': 'success',
'text': 'New Ticket created.'}"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/wait_for_notification"
/>
</tal:block>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/wait_for_content_loaded"
/>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_wait_for_activities_and_front_page"
/>
<tal:block
define=
"menu_item python: 'Services'; header menu_item"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/access_menu_item"
/>
</tal:block>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(1)', 'footer': '${count} Records'};
dummy python: context.REQUEST.set('mapping', {'count': '1'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-SERVICE-FRONTEND 0"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-SERVICE-FRONTEND 0"]
</td>
<td></td>
</tr>
<tr>
<td>
click
</td>
<td>
//a[text()="TEST-SLAPOSJS-SERVICE-FRONTEND 0"]
</td>
<td></td>
</tr>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(1)', 'footer': '${count} Records'};
dummy python: context.REQUEST.set('mapping', {'count': '1'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-SUPPORT-REQUEST-SERVICE-RELATED 0"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-SUPPORT-REQUEST-SERVICE-RELATED 0"]
</td>
<td></td>
</tr>
<tr>
<td>
click
</td>
<td>
//a[text()="TEST-SLAPOSJS-SUPPORT-REQUEST-SERVICE-RELATED 0"]
</td>
<td></td>
</tr>
<tal:block
tal:define=
"header python: 'Support Request : ${title}';
dummy python: context.REQUEST.set('mapping', {'title': 'TEST-SLAPOSJS-SUPPORT-REQUEST-SERVICE-RELATED 0'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/assert_page_header"
/>
</tal:block>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(1)', 'footer': '${count} Records'};
dummy python: context.REQUEST.set('mapping', {'count': '1'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//div[contains(@data-gadget-url, 'gadget_slapos_event_discussion_entry.html')]//div[@class="slapos-event-discussion-message-header"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//div[contains(@data-gadget-url, 'gadget_slapos_event_discussion_entry.html')]//div[@class="slapos-event-discussion-message-header"]
</td>
<td></td>
</tr>
<tr>
<td>
verifyTextPresent
</td>
<td>
Demo User Functional
</td>
<td></td>
</tr>
<tr>
<td>
verifyTextPresent
</td>
<td>
TEST-SLAPOSJS-SUPPORT-REQUEST-SERVICE-RELATED 0
</td>
<td></td>
</tr>
<tr>
<td>
verifyTextPresent
</td>
<td>
TEST-SLAPOSJS-SUPPORT-REQUEST-SERVICE-RELATED DESCRIPTION
</td>
<td></td>
</tr>
<tal:block
tal:define=
"menu_action python: 'Add'"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/click_submenu_action"
/>
</tal:block>
<tal:block
tal:define=
"header python: 'New Message'"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/assert_page_header"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//textarea[@id="text_content"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//textarea[@id="text_content"]
</td>
<td></td>
</tr>
<tr>
<td>
type
</td>
<td>
//textarea[@id="text_content"]
</td>
<td>
TEST-SLAPOSJS-SUPPORT-REQUEST-SERVICE-RELATED NEW MESSAGE
</td>
</tr>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/click_proceed"
/>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/wait_for_content_loaded"
/>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_wait_for_activities_and_front_page"
/>
<tal:block
define=
"menu_item python: 'Services'; header menu_item"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/access_menu_item"
/>
</tal:block>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(1)', 'footer': '${count} Records'};
dummy python: context.REQUEST.set('mapping', {'count': '1'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-SERVICE-FRONTEND 0"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-SERVICE-FRONTEND 0"]
</td>
<td></td>
</tr>
<tr>
<td>
click
</td>
<td>
//a[text()="TEST-SLAPOSJS-SERVICE-FRONTEND 0"]
</td>
<td></td>
</tr>
<tr
tal:define=
"dummy python: context.REQUEST.set('mapping', {'title': 'TEST-SLAPOSJS-SERVICE-FRONTEND 0'})"
>
<td>
waitForElementPresent
</td>
<td
tal:content=
"python: '//a[@data-i18n= \'%s\']' % (here.Base_translateString('Instance Tree: ${title}', mapping=context.REQUEST.get('mapping', {}), lang=lang))"
></td>
<td></td>
</tr>
<tr
tal:define=
"dummy python: context.REQUEST.set('mapping', {'title': 'TEST-SLAPOSJS-SERVICE-FRONTEND 0'})"
>
<td>
assertElementPresent
</td>
<td
tal:content=
"python: '//a[@data-i18n= \'%s\']' % (here.Base_translateString('Instance Tree: ${title}', mapping=context.REQUEST.get('mapping', {}), lang=lang))"
></td>
<td></td>
</tr>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(1)', 'footer': '${count} Records'};
dummy python: context.REQUEST.set('mapping', {'count': '1'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-SUPPORT-REQUEST-SERVICE-RELATED 0"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-SUPPORT-REQUEST-SERVICE-RELATED 0"]
</td>
<td></td>
</tr>
<tr>
<td>
click
</td>
<td>
//a[text()="TEST-SLAPOSJS-SUPPORT-REQUEST-SERVICE-RELATED 0"]
</td>
<td></td>
</tr>
<tal:block
tal:define=
"header python: 'Support Request : ${title}';
dummy python: context.REQUEST.set('mapping', {'title': 'TEST-SLAPOSJS-SUPPORT-REQUEST-SERVICE-RELATED 0'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/assert_page_header"
/>
</tal:block>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(2)', 'footer': '${count} Records'};
dummy python: context.REQUEST.set('mapping', {'count': '2'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//div[contains(@data-gadget-url, 'gadget_slapos_event_discussion_entry.html')]//div[@class="slapos-event-discussion-message-header"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//div[contains(@data-gadget-url, 'gadget_slapos_event_discussion_entry.html')]//div[@class="slapos-event-discussion-message-header"]
</td>
<td></td>
</tr>
<tr>
<td>
verifyTextPresent
</td>
<td>
TEST-SLAPOSJS-SUPPORT-REQUEST-SERVICE-RELATED NEW MESSAGE
</td>
<td></td>
</tr>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_wait_for_activities_and_front_page"
/>
<tal:block
define=
"menu_item python: 'Services'; header menu_item"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/access_menu_item"
/>
</tal:block>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(1)', 'footer': '${count} Records'};
dummy python: context.REQUEST.set('mapping', {'count': '1'})"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tr>
<td>
waitForElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-SERVICE-FRONTEND 0"]
</td>
<td></td>
</tr>
<tr>
<td>
assertElementPresent
</td>
<td>
//a[text()="TEST-SLAPOSJS-SERVICE-FRONTEND 0"]
</td>
<td></td>
</tr>
<tr>
<td>
click
</td>
<td>
//a[text()="TEST-SLAPOSJS-SERVICE-FRONTEND 0"]
</td>
<td></td>
</tr>
<tr
tal:define=
"dummy python: context.REQUEST.set('mapping', {'title': 'TEST-SLAPOSJS-SERVICE-FRONTEND 0'})"
>
<td>
waitForElementPresent
</td>
<td
tal:content=
"python: '//a[@data-i18n= \'%s\']' % (here.Base_translateString('Instance Tree: ${title}', mapping=context.REQUEST.get('mapping', {}), lang=lang))"
></td>
<td></td>
</tr>
<tr
tal:define=
"dummy python: context.REQUEST.set('mapping', {'title': 'TEST-SLAPOSJS-SERVICE-FRONTEND 0'})"
>
<td>
assertElementPresent
</td>
<td
tal:content=
"python: '//a[@data-i18n= \'%s\']' % (here.Base_translateString('Instance Tree: ${title}', mapping=context.REQUEST.get('mapping', {}), lang=lang))"
></td>
<td></td>
</tr>
<tal:block
define=
"menu_action python: 'Destroy'"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/click_submenu_action"
/>
</tal:block>
<tal:block
tal:define=
"header python: 'Destroy Instance Tree: ${title}';
dummy python: context.REQUEST.set('mapping', {'title': 'TEST-SLAPOSJS-SERVICE-FRONTEND 0'}) "
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/assert_page_header"
/>
</tal:block>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/click_proceed"
/>
<tal:block
tal:define=
"notification_configuration python: {'class': 'success',
'text': 'Service is Destroyed.'}"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/wait_for_notification"
/>
</tal:block>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_wait_for_activities_and_front_page"
/>
<tal:block
define=
"menu_item python: 'Services'; header menu_item"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/access_menu_item"
/>
</tal:block>
<tal:block
tal:define=
"pagination_configuration python: {'header': '(0)', 'footer': 'No records'}"
>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/check_listbox_pagination_text"
/>
</tal:block>
<tal:block
metal:use-macro=
"here/Zuite_SlapOSCommonTemplate/macros/slapos_logout"
/>
</tbody>
</table>
</body>
</html>
\ No newline at end of file
master/bt5/slapos_pdm/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml
View file @
df2f22d0
...
...
@@ -5,6 +5,6 @@
</chain>
<chain>
<type>
Upgrade Decision
</type>
<workflow>
edit_workflow, ticket_interaction_workflow, upgrade_decision_workflow
</workflow>
<workflow>
edit_workflow, ticket_interaction_workflow, upgrade_decision_workflow
, upgrade_slap_interface_workflow
</workflow>
</chain>
</workflow_chain>
\ No newline at end of file
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/Alarm_cancelUpgradeDecision.py
View file @
df2f22d0
portal
=
context
.
getPortalObject
()
portal
.
portal_catalog
.
searchAndActivate
(
portal_type
=
"Upgrade Decision Line"
,
simulation_state
=
[
"confirmed"
,
"draft"
,
"planned"
],
...
...
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/ComputeNode_checkAndCreateUpgradeDecision.py
View file @
df2f22d0
...
...
@@ -41,22 +41,18 @@ for software_release in software_release_list:
# If exist upgrade decision in progress try to cancel it
decision_in_progress
=
newer_release
.
\
SoftwareRelease_getUpgradeDecisionInProgress
(
compute_node
.
getUid
())
if
decision_in_progress
and
\
not
decision_in_progress
.
UpgradeDecision_tryToCancel
(
newer_release
.
getUrlString
()):
continue
if
decision_in_progress
:
decision_in_progress
.
reviewRegistration
(
software_release_url
=
newer_release
.
getUrlString
())
if
decision_in_progress
.
getSimulationState
()
!=
"cancelled"
:
continue
upgrade_decision
=
newer_release
.
SoftwareRelease_createUpgradeDecision
(
source_url
=
compute_node
.
getRelativeUrl
(),
title
=
title
)
if
context
.
getUpgradeScope
()
==
"auto"
:
upgrade_decision
.
start
()
elif
context
.
getUpgradeScope
(
"ask_confirmation"
)
==
"ask_confirmation"
\
and
upgrade_decision
.
getSimulationState
()
!=
"planned"
:
upgrade_decision
.
plan
()
upgrade_decision
.
setStartDate
(
DateTime
())
upgrade_decision
.
approveRegistration
(
upgrade_scope
=
compute_node
.
getUpgradeScope
(
"ask_confirmation"
))
upgrade_decision_list
.
append
(
upgrade_decision
)
return
upgrade_decision_list
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/InstanceTree_createUpgradeDecision.py
View file @
df2f22d0
...
...
@@ -2,7 +2,7 @@ from DateTime import DateTime
portal
=
context
.
getPortalObject
()
instance_tree
=
context
upgrade_scope
=
context
.
getUpgradeScope
()
upgrade_scope
=
context
.
getUpgradeScope
(
"ask_confirmation"
)
if
upgrade_scope
in
[
"never"
,
"disabled"
]:
return
...
...
@@ -22,7 +22,6 @@ if instance_tree.getSlapState() == "destroy_requested":
return
tag
=
"%s_requestUpgradeDecisionCreation_inProgress"
%
instance_tree
.
getUid
()
activate_kw
=
{
'tag'
:
tag
}
if
portal
.
portal_activities
.
countMessageWithTag
(
tag
)
>
0
:
# nothing to do
return
...
...
@@ -52,22 +51,18 @@ if newer_release is None:
decision_in_progress
=
newer_release
.
\
SoftwareRelease_getUpgradeDecisionInProgress
(
instance_tree
.
getUid
())
if
decision_in_progress
and
\
not
decision_in_progress
.
UpgradeDecision_tryToCancel
(
newer_release
.
getUrlString
()):
return
if
decision_in_progress
:
decision_in_progress
.
reviewRegistration
(
software_release_url
=
newer_release
.
getUrlString
())
if
decision_in_progress
.
getSimulationState
()
!=
"cancelled"
:
return
upgrade_decision
=
newer_release
.
SoftwareRelease_createUpgradeDecision
(
source_url
=
instance_tree
.
getRelativeUrl
(),
title
=
decision_title
)
with
upgrade_decision
.
defaultActivateParameterDict
(
activate_kw
):
upgrade_decision
.
plan
()
upgrade_decision
.
setStartDate
(
DateTime
())
if
upgrade_scope
==
"auto"
:
upgrade_decision
.
start
()
# Prevent concurrent transaction to create 2 upgrade decision for the same instance_tree
instance_tree
.
serialize
(
)
upgrade_decision
.
approveRegistration
(
upgrade_scope
=
upgrade_scope
)
return
upgrade_decision
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecisionLine_cancel.py
View file @
df2f22d0
instance_tree
=
context
.
getAggregateValue
(
portal_type
=
"Instance Tree"
)
software_release
=
context
.
getAggregateValue
(
portal_type
=
"Software Release"
)
upgrade_decision
=
context
.
getParentValue
()
if
upgrade_decision
.
getSimulationState
()
==
"cancelled"
:
return
if
software_release
.
getValidationState
()
==
"archived"
:
upgrade_decision
.
cancel
(
comment
=
"Software Release is archived."
)
return
if
instance_tree
is
not
None
:
if
instance_tree
.
getUpgradeScope
()
in
[
'never'
,
'disabled'
]:
upgrade_decision
.
cancel
(
"Upgrade scope was disabled on the related Instance Tree"
)
elif
instance_tree
.
getSlapState
()
==
"destroy_requested"
:
upgrade_decision
.
cancel
(
comment
=
"Instance Tree is destroyed."
)
elif
instance_tree
.
getUrlString
()
==
software_release
.
getUrlString
():
upgrade_decision
.
cancel
(
comment
=
"Instance tree is already upgraded."
)
return
compute_node
=
context
.
getAggregateValue
(
portal_type
=
"Compute Node"
)
if
compute_node
is
not
None
:
if
compute_node
.
getUpgradeScope
()
in
[
'never'
,
'disabled'
]:
upgrade_decision
.
cancel
(
"Upgrade scope was disabled on the related Instance Tree"
)
return
elif
compute_node
.
getAllocationScope
()
in
[
"closed/forever"
,
"closed/termination"
]:
upgrade_decision
.
cancel
(
comment
=
"Compute Node is closed."
)
return
already_deployed
=
len
(
context
.
portal_catalog
(
limit
=
1
,
portal_type
=
"Compute Partition"
,
parent_reference
=
compute_node
.
getReference
(),
software_release_url
=
software_release
.
getUrlString
()))
if
already_deployed
:
upgrade_decision
.
cancel
(
comment
=
"Compute Node already has the software release"
)
context
.
getParentValue
().
reviewUpgrade
()
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_getAggregateValue.py
0 → 100644
View file @
df2f22d0
document_list
=
[]
for
decision_line
in
context
.
contentValues
():
try
:
document_list
.
extend
(
decision_line
.
getAggregateValueList
(
portal_type
=
document_portal_type
))
except
:
raise
ValueError
(
context
)
if
len
(
document_list
)
>
1
:
raise
ValueError
(
"It is only allowed to have more them 1 %s"
%
document_list
)
if
len
(
document_list
)
==
0
:
return
None
return
document_list
[
0
]
master/bt5/slapos_
crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/Base_generateSupportRequestForSlapOS
.xml
→
master/bt5/slapos_
pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_getAggregateValue
.xml
View file @
df2f22d0
...
...
@@ -50,11 +50,11 @@
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
title, description, source_relative_url
</string>
</value>
<value>
<string>
document_portal_type="Instance Tree"
</string>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
Base_generateSupportRequestForSlapOS
</string>
</value>
<value>
<string>
UpgradeDecision_getAggregateValue
</string>
</value>
</item>
</dictionary>
</pickle>
...
...
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_getComputeNode.py
deleted
100644 → 0
View file @
1d1bcf8b
compute_node_list
=
[]
for
decision_line
in
context
.
contentValues
():
compute_node_list
.
extend
(
decision_line
.
getAggregateValueList
(
portal_type
=
"Compute Node"
))
if
len
(
compute_node_list
)
>
1
:
raise
ValueError
(
"It is only allowed to have more them 1 Compute Node"
)
if
len
(
compute_node_list
)
==
0
:
return
None
return
compute_node_list
[
0
]
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_getInstanceTree.py
deleted
100644 → 0
View file @
1d1bcf8b
instance_tree_list
=
[]
for
decision_line
in
context
.
contentValues
():
instance_tree_list
.
extend
(
decision_line
.
getAggregateValueList
(
portal_type
=
"Instance Tree"
))
if
len
(
instance_tree_list
)
>
1
:
raise
ValueError
(
"It is only allowed to have more them 1 Instance Tree"
)
if
len
(
instance_tree_list
)
==
0
:
return
None
return
instance_tree_list
[
0
]
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_getSoftwareRelease.py
deleted
100644 → 0
View file @
1d1bcf8b
software_release_list
=
[]
for
decision_line
in
context
.
contentValues
():
software_release_list
.
extend
(
decision_line
.
getAggregateValueList
(
portal_type
=
"Software Release"
))
if
len
(
software_release_list
)
>
1
:
raise
ValueError
(
"It is only allowed to have more them 1 Software Release"
)
if
len
(
software_release_list
)
==
0
:
return
None
return
software_release_list
[
0
]
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_isUpgradeFinished.py
View file @
df2f22d0
portal
=
context
.
getPortalObject
()
instance_tree
=
context
.
UpgradeDecision_get
InstanceTree
(
)
compute_node
=
context
.
UpgradeDecision_get
ComputeNode
(
)
software_release
=
context
.
UpgradeDecision_get
SoftwareRelease
(
)
instance_tree
=
context
.
UpgradeDecision_get
AggregateValue
(
"Instance Tree"
)
compute_node
=
context
.
UpgradeDecision_get
AggregateValue
(
"Compute Node"
)
software_release
=
context
.
UpgradeDecision_get
AggregateValue
(
"Software Release"
)
if
instance_tree
is
not
None
:
if
instance_tree
.
getUrlString
()
==
software_release
.
getUrlString
():
...
...
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_notify.py
View file @
df2f22d0
from
DateTime
import
DateTime
# Review if the upgrade is applicable before notify.
context
.
reviewUpgrade
()
if
context
.
getSimulationState
()
!=
'planned'
:
# XXX Don't notify the ones which are not planned.
return
return
portal
=
context
.
getPortalObject
()
...
...
@@ -10,9 +13,9 @@ person = context.getDestinationDecisionValue(portal_type="Person")
if
not
person
:
raise
ValueError
(
"Inconsistent Upgrade Decision, No Destination Decision"
)
instance_tree
=
context
.
UpgradeDecision_get
InstanceTree
(
)
compute_node
=
context
.
UpgradeDecision_get
ComputeNode
(
)
software_release
=
context
.
UpgradeDecision_get
SoftwareRelease
(
)
instance_tree
=
context
.
UpgradeDecision_get
AggregateValue
(
"Instance Tree"
)
compute_node
=
context
.
UpgradeDecision_get
AggregateValue
(
"Compute Node"
)
software_release
=
context
.
UpgradeDecision_get
AggregateValue
(
"Software Release"
)
software_product_title
=
software_release
.
getAggregateTitle
(
portal_type
=
"Software Product"
)
...
...
@@ -21,8 +24,8 @@ mapping_dict = {
'software_release_name'
:
software_release
.
getTitle
(),
'software_release_reference'
:
software_release
.
getReference
(),
'new_software_release_url'
:
software_release
.
getUrlString
(),
}
if
instance_tree
is
not
None
:
notification_message_reference
=
'slapos-upgrade-instance-tree.notification'
title
=
"New Upgrade available for %s"
%
instance_tree
.
getTitle
()
...
...
@@ -30,11 +33,8 @@ if instance_tree is not None:
'instance_tree_title'
:
instance_tree
.
getTitle
(),
'old_software_release_url'
:
instance_tree
.
getUrlString
()})
elif
compute_node
is
not
None
:
notification_message_reference
=
'slapos-upgrade-compute-node.notification'
title
=
"New Software available for Installation at %s"
%
compute_node
.
getTitle
()
mapping_dict
.
update
(
**
{
'compute_node_title'
:
compute_node
.
getTitle
(),
'compute_node_reference'
:
compute_node
.
getReference
()})
...
...
@@ -49,8 +49,10 @@ notification_message = portal.portal_notifications.getDocumentValue(
message
=
notification_message
.
asEntireHTML
(
substitution_method_parameter_dict
=
{
'mapping_dict'
:
mapping_dict
})
event
=
context
.
SupportRequest_trySendNotificationMessage
(
title
,
message
,
person
.
getRelativeUrl
())
context
.
notify
(
message_title
=
title
,
message
=
message
,
destination_relative_url
=
person
.
getRelativeUrl
())
event
=
context
.
REQUEST
.
get
(
"upgrade_decision_notified_item"
)
if
event
is
not
None
:
context
.
confirm
()
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_notifyDelivered.py
View file @
df2f22d0
...
...
@@ -12,9 +12,10 @@ person = context.getDestinationDecisionValue(portal_type="Person")
if
not
person
:
raise
ValueError
(
"Inconsistent Upgrade Decision, No Destination Decision"
)
instance_tree
=
context
.
UpgradeDecision_getInstanceTree
()
compute_node
=
context
.
UpgradeDecision_getComputeNode
()
software_release
=
context
.
UpgradeDecision_getSoftwareRelease
()
instance_tree
=
context
.
UpgradeDecision_getAggregateValue
(
"Instance Tree"
)
compute_node
=
context
.
UpgradeDecision_getAggregateValue
(
"Compute Node"
)
software_release
=
context
.
UpgradeDecision_getAggregateValue
(
"Software Release"
)
software_product_title
=
software_release
.
getAggregateTitle
(
portal_type
=
"Software Product"
)
...
...
@@ -51,8 +52,10 @@ notification_message = portal.portal_notifications.getDocumentValue(
message
=
notification_message
.
asEntireHTML
(
substitution_method_parameter_dict
=
{
'mapping_dict'
:
mapping_dict
})
event
=
context
.
SupportRequest_trySendNotificationMessage
(
title
,
message
,
person
.
getRelativeUrl
())
context
.
notify
(
message_title
=
title
,
message
=
message
,
destination_relative_url
=
person
.
getRelativeUrl
())
event
=
context
.
REQUEST
.
get
(
"upgrade_decision_notified_item"
)
if
event
is
not
None
:
context
.
setStopDate
(
DateTime
())
...
...
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_processUpgrade.py
View file @
df2f22d0
if
context
.
UpgradeDecision_upgradeInstanceTree
():
return
True
if
context
.
UpgradeDecision_upgradeComputeNode
():
return
True
return
False
return
context
.
requestUpgrade
()
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_processUpgrade.xml
View file @
df2f22d0
...
...
@@ -50,7 +50,7 @@
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
**kw
</string>
</value>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
...
...
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_tryToCancel.xml
deleted
100644 → 0
View file @
1d1bcf8b
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"PythonScript"
module=
"Products.PythonScripts.PythonScript"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
Script_magic
</string>
</key>
<value>
<int>
3
</int>
</value>
</item>
<item>
<key>
<string>
_bind_names
</string>
</key>
<value>
<object>
<klass>
<global
name=
"NameAssignments"
module=
"Shared.DC.Scripts.Bindings"
/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key>
<string>
_asgns
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
name_container
</string>
</key>
<value>
<string>
container
</string>
</value>
</item>
<item>
<key>
<string>
name_context
</string>
</key>
<value>
<string>
context
</string>
</value>
</item>
<item>
<key>
<string>
name_m_self
</string>
</key>
<value>
<string>
script
</string>
</value>
</item>
<item>
<key>
<string>
name_subpath
</string>
</key>
<value>
<string>
traverse_subpath
</string>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
new_url_string
</string>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
UpgradeDecision_tryToCancel
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
master/bt5/slapos_pdm/SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_upgradeComputeNode.py
deleted
100644 → 0
View file @
1d1bcf8b
if
context
.
getSimulationState
()
!=
'started'
:
# Update Decision is not on started state, Upgrade is not possible!
return
False
compute_node
=
context
.
UpgradeDecision_getComputeNode
()
software_release
=
context
.
UpgradeDecision_getSoftwareRelease
()
if
compute_node
is
None
:
return
False
if
software_release
is
None
:
return
False
software_release_url
=
software_release
.
getUrlString
()
compute_node
.
requestSoftwareRelease
(
software_release_url
=
software_release_url
,
state
=
"available"
)
context
.
stop
()
return
True
master/bt5/slapos_pdm/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudUpgradeSlapInterfaceWorkflow.py
0 → 100644
View file @
df2f22d0
# -*- 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
#from zExceptions import Unauthorized
import
transaction
class
TestSlapOSCoreProjectSlapInterfaceWorkflow
(
SlapOSTestCaseMixin
):
def
afterSetUp
(
self
):
SlapOSTestCaseMixin
.
afterSetUp
(
self
)
portal
=
self
.
getPortalObject
()
person_user
=
self
.
makePerson
()
self
.
tic
()
self
.
login
()
self
.
compute_node
=
self
.
portal
.
compute_node_module
.
template_compute_node
\
.
Base_createCloneDocument
(
batch_mode
=
1
)
new_id
=
self
.
generateNewId
()
self
.
compute_node
.
edit
(
title
=
"compute node %s"
%
(
new_id
,
),
reference
=
"TESTCOMP-%s"
%
(
new_id
,
),
source_administration
=
person_user
.
getRelativeUrl
()
)
self
.
compute_node
.
validate
()
self
.
upgrade_decision
=
portal
.
upgrade_decision_module
.
newContent
(
portal_type
=
"Upgrade Decision"
,
)
# Value set by the init
self
.
assertTrue
(
self
.
upgrade_decision
.
getReference
().
startswith
(
"UD-"
),
"Reference don't start with UD- : %s"
%
self
.
upgrade_decision
.
getReference
())
self
.
software_release
=
self
.
_makeSoftwareRelease
()
self
.
tic
()
def
_addUpgradeLine
(
self
,
aggregate
):
self
.
upgrade_decision
.
newContent
(
portal_type
=
"Upgrade Decision Line"
,
aggregate_value_list
=
[
self
.
software_release
,
aggregate
]
)
def
beforeTearDown
(
self
):
transaction
.
abort
()
def
test_upgrade_decision_approveRegistration_no_line
(
self
):
self
.
assertRaises
(
ValueError
,
self
.
upgrade_decision
.
approveRegistration
)
def
test_upgrade_decision_approveRegistration_no_aggregate
(
self
):
self
.
upgrade_decision
.
newContent
(
portal_type
=
"Upgrade Decision Line"
,
aggregate
=
self
.
software_release
.
getRelativeUrl
()
)
self
.
assertRaises
(
ValueError
,
self
.
upgrade_decision
.
approveRegistration
)
def
test_upgrade_decision_approveRegistration_no_upgrade_scope
(
self
):
self
.
_addUpgradeLine
(
self
.
compute_node
)
self
.
assertRaises
(
TypeError
,
self
.
upgrade_decision
.
approveRegistration
)
def
test_upgrade_decision_approveRegistration_computer
(
self
):
self
.
_addUpgradeLine
(
self
.
compute_node
)
self
.
upgrade_decision
.
approveRegistration
(
upgrade_scope
=
"ask_confirmation"
)
self
.
assertEqual
(
"planned"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
commit
()
tag
=
"%s_requestUpgradeDecisionCreation_inProgress"
%
self
.
compute_node
.
getUid
()
self
.
assertEqual
(
2
,
self
.
portal
.
portal_activities
.
countMessageWithTag
(
tag
))
# Call again does nothing
self
.
upgrade_decision
.
approveRegistration
(
upgrade_scope
=
"ask_confirmation"
)
self
.
assertEqual
(
"planned"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
commit
()
tag
=
"%s_requestUpgradeDecisionCreation_inProgress"
%
self
.
compute_node
.
getUid
()
self
.
assertEqual
(
2
,
self
.
portal
.
portal_activities
.
countMessageWithTag
(
tag
))
self
.
tic
()
# Call again does nothing again
self
.
upgrade_decision
.
approveRegistration
(
upgrade_scope
=
"ask_confirmation"
)
self
.
assertEqual
(
"planned"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
commit
()
tag
=
"%s_requestUpgradeDecisionCreation_inProgress"
%
self
.
compute_node
.
getUid
()
self
.
assertEqual
(
2
,
self
.
portal
.
portal_activities
.
countMessageWithTag
(
tag
))
def
test_upgrade_decision_approveRegistration_instance_tree
(
self
):
self
.
_makeTree
()
self
.
_addUpgradeLine
(
self
.
instance_tree
)
self
.
upgrade_decision
.
approveRegistration
(
upgrade_scope
=
"ask_confirmation"
)
self
.
assertEqual
(
"planned"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
commit
()
tag
=
"%s_requestUpgradeDecisionCreation_inProgress"
%
self
.
instance_tree
.
getUid
()
self
.
assertEqual
(
2
,
self
.
portal
.
portal_activities
.
countMessageWithTag
(
tag
))
# Call again does nothing
self
.
upgrade_decision
.
approveRegistration
(
upgrade_scope
=
"ask_confirmation"
)
self
.
assertEqual
(
"planned"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
commit
()
tag
=
"%s_requestUpgradeDecisionCreation_inProgress"
%
self
.
instance_tree
.
getUid
()
self
.
assertEqual
(
2
,
self
.
portal
.
portal_activities
.
countMessageWithTag
(
tag
))
self
.
tic
()
# Call again does nothing again
self
.
upgrade_decision
.
approveRegistration
(
upgrade_scope
=
"ask_confirmation"
)
self
.
assertEqual
(
"planned"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
commit
()
tag
=
"%s_requestUpgradeDecisionCreation_inProgress"
%
self
.
instance_tree
.
getUid
()
self
.
assertEqual
(
2
,
self
.
portal
.
portal_activities
.
countMessageWithTag
(
tag
))
def
test_upgrade_decision_approveRegistration_computer_auto
(
self
):
self
.
_addUpgradeLine
(
self
.
compute_node
)
self
.
upgrade_decision
.
approveRegistration
(
upgrade_scope
=
"auto"
)
self
.
assertEqual
(
"started"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
commit
()
tag
=
"%s_requestUpgradeDecisionCreation_inProgress"
%
self
.
compute_node
.
getUid
()
self
.
assertEqual
(
2
,
self
.
portal
.
portal_activities
.
countMessageWithTag
(
tag
))
# Call again does nothing
self
.
upgrade_decision
.
approveRegistration
(
upgrade_scope
=
"auto"
)
self
.
assertEqual
(
"started"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
commit
()
tag
=
"%s_requestUpgradeDecisionCreation_inProgress"
%
self
.
compute_node
.
getUid
()
self
.
assertEqual
(
2
,
self
.
portal
.
portal_activities
.
countMessageWithTag
(
tag
))
self
.
tic
()
# Call again does nothing again
self
.
upgrade_decision
.
approveRegistration
(
upgrade_scope
=
"auto"
)
self
.
assertEqual
(
"started"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
commit
()
tag
=
"%s_requestUpgradeDecisionCreation_inProgress"
%
self
.
compute_node
.
getUid
()
self
.
assertEqual
(
2
,
self
.
portal
.
portal_activities
.
countMessageWithTag
(
tag
))
def
test_upgrade_decision_approveRegistration_instance_tree_auto
(
self
):
self
.
_makeTree
()
self
.
_addUpgradeLine
(
self
.
instance_tree
)
self
.
upgrade_decision
.
approveRegistration
(
upgrade_scope
=
"auto"
)
self
.
assertEqual
(
"started"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
commit
()
tag
=
"%s_requestUpgradeDecisionCreation_inProgress"
%
self
.
instance_tree
.
getUid
()
self
.
assertEqual
(
2
,
self
.
portal
.
portal_activities
.
countMessageWithTag
(
tag
))
# Call again does nothing
self
.
upgrade_decision
.
approveRegistration
(
upgrade_scope
=
"auto"
)
self
.
assertEqual
(
"started"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
commit
()
tag
=
"%s_requestUpgradeDecisionCreation_inProgress"
%
self
.
instance_tree
.
getUid
()
self
.
assertEqual
(
2
,
self
.
portal
.
portal_activities
.
countMessageWithTag
(
tag
))
self
.
tic
()
# Call again does nothing again
# Call again does nothing
self
.
upgrade_decision
.
approveRegistration
(
upgrade_scope
=
"auto"
)
self
.
assertEqual
(
"started"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
commit
()
tag
=
"%s_requestUpgradeDecisionCreation_inProgress"
%
self
.
instance_tree
.
getUid
()
self
.
assertEqual
(
2
,
self
.
portal
.
portal_activities
.
countMessageWithTag
(
tag
))
def
test_upgrade_decision_reviewRegistration_no_software_release_url
(
self
):
self
.
assertRaises
(
TypeError
,
self
.
upgrade_decision
.
reviewRegistration
)
def
test_upgrade_decision_reviewRegistration_draft
(
self
):
# Do nothing as draft
software_release
=
self
.
generateNewSoftwareReleaseUrl
()
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
software_release
)
def
test_upgrade_decision_reviewRegistration
(
self
):
self
.
_addUpgradeLine
(
self
.
compute_node
)
software_release
=
self
.
generateNewSoftwareReleaseUrl
()
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
software_release
)
self
.
assertEqual
(
"draft"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
upgrade_decision
.
plan
()
self
.
tic
()
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
software_release
)
self
.
assertEqual
(
"cancelled"
,
self
.
upgrade_decision
.
getSimulationState
())
def
test_upgrade_decision_reviewRegistration_confirm
(
self
):
self
.
_addUpgradeLine
(
self
.
compute_node
)
software_release
=
self
.
generateNewSoftwareReleaseUrl
()
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
software_release
)
self
.
assertEqual
(
"draft"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
upgrade_decision
.
confirm
()
self
.
tic
()
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
software_release
)
self
.
assertEqual
(
"cancelled"
,
self
.
upgrade_decision
.
getSimulationState
())
def
test_upgrade_decision_reviewRegistration_rejected
(
self
):
self
.
_addUpgradeLine
(
self
.
compute_node
)
software_release
=
self
.
generateNewSoftwareReleaseUrl
()
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
software_release
)
self
.
assertEqual
(
"draft"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
upgrade_decision
.
reject
()
self
.
tic
()
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
software_release
)
self
.
assertEqual
(
"rejected"
,
self
.
upgrade_decision
.
getSimulationState
())
def
test_upgrade_decision_reviewRegistration_same_url
(
self
):
self
.
_addUpgradeLine
(
self
.
compute_node
)
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
self
.
software_release
.
getUrlString
())
self
.
assertEqual
(
"draft"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
upgrade_decision
.
plan
()
self
.
tic
()
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
self
.
software_release
.
getUrlString
())
self
.
assertEqual
(
"planned"
,
self
.
upgrade_decision
.
getSimulationState
())
def
test_upgrade_decision_reviewRegistration_confirm_same_url
(
self
):
self
.
_addUpgradeLine
(
self
.
compute_node
)
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
self
.
software_release
.
getUrlString
())
self
.
assertEqual
(
"draft"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
upgrade_decision
.
confirm
()
self
.
tic
()
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
self
.
software_release
.
getUrlString
())
self
.
assertEqual
(
"confirmed"
,
self
.
upgrade_decision
.
getSimulationState
())
def
test_upgrade_decision_reviewRegistration_rejected_same_url
(
self
):
self
.
_addUpgradeLine
(
self
.
compute_node
)
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
self
.
software_release
.
getUrlString
())
self
.
assertEqual
(
"draft"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
upgrade_decision
.
reject
()
self
.
tic
()
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
self
.
software_release
.
getUrlString
())
self
.
assertEqual
(
"rejected"
,
self
.
upgrade_decision
.
getSimulationState
())
def
test_upgrade_decision_reviewRegistration_started
(
self
):
self
.
_addUpgradeLine
(
self
.
compute_node
)
software_release
=
self
.
generateNewSoftwareReleaseUrl
()
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
software_release
)
self
.
assertEqual
(
"draft"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
upgrade_decision
.
plan
()
self
.
upgrade_decision
.
start
()
self
.
tic
()
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
software_release
)
self
.
assertEqual
(
"started"
,
self
.
upgrade_decision
.
getSimulationState
())
def
test_upgrade_decision_reviewRegistration_instance_tree
(
self
):
self
.
_makeTree
()
self
.
_addUpgradeLine
(
self
.
instance_tree
)
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
self
.
instance_tree
.
getUrlString
())
self
.
assertEqual
(
"draft"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
upgrade_decision
.
plan
()
self
.
tic
()
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
self
.
instance_tree
.
getUrlString
())
self
.
assertEqual
(
"cancelled"
,
self
.
upgrade_decision
.
getSimulationState
())
def
test_upgrade_decision_reviewRegistration_instance_tree_confirmed
(
self
):
self
.
_makeTree
()
self
.
_addUpgradeLine
(
self
.
instance_tree
)
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
self
.
instance_tree
.
getUrlString
())
self
.
assertEqual
(
"draft"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
upgrade_decision
.
confirm
()
self
.
tic
()
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
self
.
instance_tree
.
getUrlString
())
self
.
assertEqual
(
"cancelled"
,
self
.
upgrade_decision
.
getSimulationState
())
def
test_upgrade_decision_reviewRegistration_instance_tree_started
(
self
):
self
.
_makeTree
()
self
.
_addUpgradeLine
(
self
.
instance_tree
)
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
self
.
instance_tree
.
getUrlString
())
self
.
assertEqual
(
"draft"
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
upgrade_decision
.
start
()
self
.
tic
()
self
.
upgrade_decision
.
reviewRegistration
(
software_release_url
=
self
.
instance_tree
.
getUrlString
())
self
.
assertEqual
(
"started"
,
self
.
upgrade_decision
.
getSimulationState
())
@
simulate
(
'InstanceTree_isUpgradePossible'
,
'software_release_url'
,
'return 1'
)
def
test_upgrade_decision_requestUpgrade_instance_tree
(
self
):
self
.
_makeTree
()
self
.
_addUpgradeLine
(
self
.
instance_tree
)
self
.
tic
()
slap_state
=
self
.
instance_tree
.
getSlapState
()
self
.
upgrade_decision
.
requestUpgrade
()
self
.
assertNotEqual
(
self
.
software_release
.
getUrlString
(),
self
.
instance_tree
.
getUrlString
())
self
.
upgrade_decision
.
confirm
()
self
.
upgrade_decision
.
start
()
# Check that url_string change, but slap state doesn't
self
.
assertNotEqual
(
self
.
software_release
.
getUrlString
(),
self
.
instance_tree
.
getUrlString
())
self
.
upgrade_decision
.
requestUpgrade
()
self
.
assertEqual
(
self
.
software_release
.
getUrlString
(),
self
.
instance_tree
.
getUrlString
())
self
.
assertEqual
(
slap_state
,
self
.
instance_tree
.
getSlapState
())
self
.
assertEqual
(
'stopped'
,
self
.
upgrade_decision
.
getSimulationState
())
def
test_upgrade_decision_requestUpgrade_instance_tree_no_software_release
(
self
):
self
.
_makeTree
()
self
.
upgrade_decision
.
newContent
(
portal_type
=
"Upgrade Decision Line"
,
aggregate_value_list
=
[
self
.
instance_tree
]
)
self
.
upgrade_decision
.
confirm
()
self
.
upgrade_decision
.
start
()
self
.
tic
()
self
.
upgrade_decision
.
requestUpgrade
()
self
.
assertEqual
(
'started'
,
self
.
upgrade_decision
.
getSimulationState
())
def
test_upgrade_decision_requestUpgrade_compute_node_no_software_release
(
self
):
self
.
upgrade_decision
.
newContent
(
portal_type
=
"Upgrade Decision Line"
,
aggregate_value_list
=
[
self
.
compute_node
]
)
self
.
upgrade_decision
.
confirm
()
self
.
upgrade_decision
.
start
()
self
.
tic
()
self
.
upgrade_decision
.
requestUpgrade
()
self
.
assertEqual
(
'started'
,
self
.
upgrade_decision
.
getSimulationState
())
def
test_upgrade_decision_requestUpgrade_only_software_release
(
self
):
self
.
upgrade_decision
.
newContent
(
portal_type
=
"Upgrade Decision Line"
,
aggregate_value_list
=
[
self
.
software_release
]
)
self
.
upgrade_decision
.
confirm
()
self
.
upgrade_decision
.
start
()
self
.
tic
()
self
.
upgrade_decision
.
requestUpgrade
()
self
.
assertEqual
(
'started'
,
self
.
upgrade_decision
.
getSimulationState
())
def
test_upgrade_decision_requestUpgrade_duplicated
(
self
):
self
.
_makeTree
()
self
.
upgrade_decision
.
newContent
(
portal_type
=
"Upgrade Decision Line"
,
aggregate_value_list
=
[
self
.
software_release
,
self
.
instance_tree
,
self
.
compute_node
]
)
self
.
upgrade_decision
.
confirm
()
self
.
upgrade_decision
.
start
()
self
.
tic
()
self
.
assertRaises
(
ValueError
,
self
.
upgrade_decision
.
requestUpgrade
)
self
.
assertEqual
(
'started'
,
self
.
upgrade_decision
.
getSimulationState
())
def
test_upgrade_decision_requestUpgrade_compute_node
(
self
):
self
.
_addUpgradeLine
(
self
.
compute_node
)
self
.
upgrade_decision
.
confirm
()
self
.
upgrade_decision
.
start
()
self
.
tic
()
self
.
upgrade_decision
.
requestUpgrade
()
self
.
tic
()
self
.
assertEqual
(
'stopped'
,
self
.
upgrade_decision
.
getSimulationState
())
software_installation
=
self
.
compute_node
.
getAggregateRelatedValue
(
portal_type
=
'Software Installation'
)
self
.
assertEqual
(
'start_requested'
,
software_installation
.
getSlapState
())
self
.
assertEqual
(
self
.
software_release
.
getUrlString
(),
software_installation
.
getUrlString
())
self
.
assertEqual
(
'validated'
,
software_installation
.
getValidationState
())
@
simulate
(
'InstanceTree_isUpgradePossible'
,
'software_release_url'
,
'return 0'
)
def
test_upgrade_decision_requestUpgrade_instance_tree_not_possible
(
self
):
self
.
_makeTree
()
self
.
_addUpgradeLine
(
self
.
instance_tree
)
self
.
assertNotEqual
(
self
.
instance_tree
.
getUrlString
(),
self
.
software_release
.
getUrlString
())
slap_state
=
self
.
instance_tree
.
getSlapState
()
self
.
upgrade_decision
.
confirm
()
self
.
upgrade_decision
.
start
()
self
.
tic
()
self
.
upgrade_decision
.
requestUpgrade
()
self
.
tic
()
self
.
assertEqual
(
'started'
,
self
.
upgrade_decision
.
getSimulationState
())
self
.
assertNotEqual
(
self
.
instance_tree
.
getUrlString
(),
self
.
software_release
.
getUrlString
())
self
.
assertEqual
(
slap_state
,
self
.
instance_tree
.
getSlapState
())
master/bt5/slapos_pdm/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudUpgradeSlapInterfaceWorkflow.xml
0 → 100644
View file @
df2f22d0
<?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>
testSlapOSCloudUpgradeSlapInterfaceWorkflow
</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.testSlapOSCloudUpgradeSlapInterfaceWorkflow
</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>
master/bt5/slapos_pdm/TestTemplateItem/portal_components/test.erp5.testSlapOSPDMCreateUpgradeDecisionSkins.py
View file @
df2f22d0
...
...
@@ -284,11 +284,12 @@ class TestSlapOSPDMCreateUpgradeDecisionSkins(TestSlapOSPDMMixinSkins):
self
.
assertNotEqual
(
up_decision
,
None
)
self
.
assertEqual
(
up_decision
.
getSimulationState
(),
'planned'
)
self
.
assertEqual
(
up_decision
.
UpgradeDecision_get
InstanceTree
(
).
\
self
.
assertEqual
(
up_decision
.
UpgradeDecision_get
AggregateValue
(
"Instance Tree"
).
\
getReference
(),
instance_tree
.
getReference
())
self
.
assertEqual
(
up_decision
.
UpgradeDecision_getSoftwareRelease
().
\
getUrlString
(),
software_release2
.
getUrlString
())
self
.
assertEqual
(
software_release2
.
getUrlString
(),
up_decision
.
UpgradeDecision_getAggregateValue
(
"Software Release"
).
\
getUrlString
())
self
.
tic
()
up_decision2
=
instance_tree
.
InstanceTree_createUpgradeDecision
()
...
...
@@ -331,7 +332,7 @@ class TestSlapOSPDMCreateUpgradeDecisionSkins(TestSlapOSPDMMixinSkins):
up_decision2
=
instance_tree
.
InstanceTree_createUpgradeDecision
()
self
.
assertEqual
(
up_decision2
.
getSimulationState
(),
'planned'
)
self
.
assertEqual
(
up_decision
.
getSimulationState
(),
'cancelled'
)
release
=
up_decision2
.
UpgradeDecision_get
SoftwareRelease
(
)
release
=
up_decision2
.
UpgradeDecision_get
AggregateValue
(
"Software Release"
)
self
.
assertEqual
(
release
.
getUrlString
(),
software_release3
.
getUrlString
())
...
...
@@ -414,7 +415,7 @@ class TestSlapOSPDMCreateUpgradeDecisionSkins(TestSlapOSPDMMixinSkins):
decision2
=
instance_tree
.
InstanceTree_createUpgradeDecision
()
self
.
assertEqual
(
decision2
.
getSimulationState
(),
'planned'
)
self
.
assertEqual
(
up_decision
.
getSimulationState
(),
'rejected'
)
release
=
decision2
.
UpgradeDecision_get
SoftwareRelease
(
)
release
=
decision2
.
UpgradeDecision_get
AggregateValue
(
"Software Release"
)
self
.
assertEqual
(
release
.
getUrlString
(),
software_release3
.
getUrlString
())
\ No newline at end of file
master/bt5/slapos_pdm/TestTemplateItem/portal_components/test.erp5.testSlapOSPDMSkins.py
View file @
df2f22d0
...
...
@@ -338,7 +338,7 @@ class TestSlapOSPDMSkins(TestSlapOSPDMMixinSkins):
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
upgrade_decision_line
.
setAggregateValue
(
compute_node
)
found_compute_node
=
upgrade_decision
.
UpgradeDecision_get
ComputeNode
(
)
found_compute_node
=
upgrade_decision
.
UpgradeDecision_get
AggregateValue
(
"Compute Node"
)
self
.
assertEqual
(
compute_node
.
getRelativeUrl
(),
found_compute_node
.
getRelativeUrl
())
...
...
@@ -351,7 +351,7 @@ class TestSlapOSPDMSkins(TestSlapOSPDMMixinSkins):
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
found_compute_node
=
upgrade_decision
.
UpgradeDecision_get
ComputeNode
(
)
found_compute_node
=
upgrade_decision
.
UpgradeDecision_get
AggregateValue
(
"Compute Node"
)
self
.
assertEqual
(
compute_node
.
getRelativeUrl
(),
found_compute_node
.
getRelativeUrl
())
...
...
@@ -365,13 +365,14 @@ class TestSlapOSPDMSkins(TestSlapOSPDMMixinSkins):
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
upgrade_decision_line
.
setAggregateValue
(
compute_node
)
self
.
assertRaises
(
ValueError
,
upgrade_decision
.
UpgradeDecision_getComputeNode
)
self
.
assertRaises
(
ValueError
,
upgrade_decision
.
UpgradeDecision_getAggregateValue
,
document_portal_type
=
"Compute Node"
)
def
testUpgradeDecision_getComputeNode_O_compute_node
(
self
):
upgrade_decision
=
self
.
_makeUpgradeDecision
()
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
found_compute_node
=
upgrade_decision
.
UpgradeDecision_get
ComputeNode
(
)
found_compute_node
=
upgrade_decision
.
UpgradeDecision_get
AggregateValue
(
"Compute Node"
)
self
.
assertEqual
(
None
,
found_compute_node
)
...
...
@@ -382,7 +383,7 @@ class TestSlapOSPDMSkins(TestSlapOSPDMMixinSkins):
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
upgrade_decision_line
.
setAggregateValue
(
instance_tree
)
found_instance_tree
=
upgrade_decision
.
UpgradeDecision_get
InstanceTree
(
)
found_instance_tree
=
upgrade_decision
.
UpgradeDecision_get
AggregateValue
(
"Instance Tree"
)
self
.
assertEqual
(
instance_tree
.
getRelativeUrl
(),
found_instance_tree
.
getRelativeUrl
())
...
...
@@ -396,7 +397,7 @@ class TestSlapOSPDMSkins(TestSlapOSPDMMixinSkins):
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
found_instance_tree
=
upgrade_decision
.
UpgradeDecision_get
InstanceTree
(
)
found_instance_tree
=
upgrade_decision
.
UpgradeDecision_get
AggregateValue
(
"Instance Tree"
)
self
.
assertEqual
(
instance_tree
.
getRelativeUrl
(),
found_instance_tree
.
getRelativeUrl
())
...
...
@@ -411,28 +412,29 @@ class TestSlapOSPDMSkins(TestSlapOSPDMMixinSkins):
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
upgrade_decision_line
.
setAggregateValue
(
instance_tree
)
self
.
assertRaises
(
ValueError
,
upgrade_decision
.
UpgradeDecision_getInstanceTree
)
self
.
assertRaises
(
ValueError
,
upgrade_decision
.
UpgradeDecision_getAggregateValue
,
document_portal_type
=
"Instance Tree"
)
def
testUpgradeDecision_getInstanceTree_O_hosting
(
self
):
upgrade_decision
=
self
.
_makeUpgradeDecision
()
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
found_instance_tree
=
upgrade_decision
.
UpgradeDecision_get
InstanceTree
(
)
found_instance_tree
=
upgrade_decision
.
UpgradeDecision_get
AggregateValue
(
"Instance Tree"
)
self
.
assertEqual
(
None
,
found_instance_tree
)
def
testUpgradeDecision_getSoftwareRelease
(
self
):
def
testUpgradeDecision_get
AggregateValue_
SoftwareRelease
(
self
):
software_release
=
self
.
_makeSoftwareRelease
()
upgrade_decision
=
self
.
_makeUpgradeDecision
()
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
upgrade_decision_line
.
setAggregateValue
(
software_release
)
found_software_release
=
upgrade_decision
.
UpgradeDecision_get
SoftwareRelease
(
)
found_software_release
=
upgrade_decision
.
UpgradeDecision_get
AggregateValue
(
"Software Release"
)
self
.
assertEqual
(
software_release
.
getRelativeUrl
(),
found_software_release
.
getRelativeUrl
())
def
testUpgradeDecision_getSoftwareRelease_2_lines
(
self
):
def
testUpgradeDecision_get
AggregateValue_
SoftwareRelease_2_lines
(
self
):
software_release
=
self
.
_makeSoftwareRelease
()
upgrade_decision
=
self
.
_makeUpgradeDecision
()
...
...
@@ -441,11 +443,11 @@ class TestSlapOSPDMSkins(TestSlapOSPDMMixinSkins):
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
found_software_release
=
upgrade_decision
.
UpgradeDecision_get
SoftwareRelease
(
)
found_software_release
=
upgrade_decision
.
UpgradeDecision_get
AggregateValue
(
"Software Release"
)
self
.
assertEqual
(
software_release
.
getRelativeUrl
(),
found_software_release
.
getRelativeUrl
())
def
testUpgradeDecision_getSoftwareRelease_2_sr
(
self
):
def
testUpgradeDecision_get
AggregateValue_
SoftwareRelease_2_sr
(
self
):
software_release
=
self
.
_makeSoftwareRelease
()
upgrade_decision
=
self
.
_makeUpgradeDecision
()
...
...
@@ -455,212 +457,16 @@ class TestSlapOSPDMSkins(TestSlapOSPDMMixinSkins):
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
upgrade_decision_line
.
setAggregateValue
(
software_release
)
self
.
assertRaises
(
ValueError
,
upgrade_decision
.
UpgradeDecision_getSoftwareRelease
)
self
.
assertRaises
(
ValueError
,
upgrade_decision
.
UpgradeDecision_getAggregateValue
,
document_portal_type
=
"Software Release"
)
def
testUpgradeDecision_getSoftwareRelease_O_sr
(
self
):
def
testUpgradeDecision_get
AggregateValue_
SoftwareRelease_O_sr
(
self
):
upgrade_decision
=
self
.
_makeUpgradeDecision
()
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
found_software_release
=
upgrade_decision
.
UpgradeDecision_get
SoftwareRelease
(
)
found_software_release
=
upgrade_decision
.
UpgradeDecision_get
AggregateValue
(
"Software Release"
)
self
.
assertEqual
(
None
,
found_software_release
)
@
simulate
(
'InstanceTree_isUpgradePossible'
,
'software_release_url'
,
'return 1'
)
def
testUpgradeDecision_upgradeInstanceTree
(
self
):
person
=
self
.
_makePerson
()
instance_tree
=
self
.
_makeInstanceTree
()
instance_tree
.
edit
(
destination_section_value
=
person
.
getRelativeUrl
())
self
.
_makeSoftwareInstance
(
instance_tree
,
instance_tree
.
getUrlString
())
software_release
=
self
.
_makeSoftwareRelease
()
upgrade_decision
=
self
.
_makeUpgradeDecision
()
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
upgrade_decision_line
.
setAggregateValueList
(
[
software_release
,
instance_tree
])
self
.
tic
()
slap_state
=
instance_tree
.
getSlapState
()
self
.
assertFalse
(
upgrade_decision
.
UpgradeDecision_upgradeInstanceTree
())
self
.
assertNotEqual
(
software_release
.
getUrlString
(),
instance_tree
.
getUrlString
())
upgrade_decision
.
confirm
()
upgrade_decision
.
start
()
# Check that url_string change, but slap state doesn't
self
.
assertNotEqual
(
software_release
.
getUrlString
(),
instance_tree
.
getUrlString
())
self
.
assertTrue
(
upgrade_decision
.
UpgradeDecision_upgradeInstanceTree
())
self
.
assertEqual
(
software_release
.
getUrlString
(),
instance_tree
.
getUrlString
())
self
.
assertEqual
(
slap_state
,
instance_tree
.
getSlapState
())
self
.
assertEqual
(
'stopped'
,
upgrade_decision
.
getSimulationState
())
@
simulate
(
'InstanceTree_isUpgradePossible'
,
'software_release_url'
,
'return 1'
)
def
testUpgradeDecision_processUpgradeeInstanceTree
(
self
):
person
=
self
.
_makePerson
()
instance_tree
=
self
.
_makeInstanceTree
()
instance_tree
.
edit
(
destination_section_value
=
person
.
getRelativeUrl
())
self
.
_makeSoftwareInstance
(
instance_tree
,
instance_tree
.
getUrlString
())
software_release
=
self
.
_makeSoftwareRelease
()
upgrade_decision
=
self
.
_makeUpgradeDecision
()
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
upgrade_decision_line
.
setAggregateValueList
(
[
software_release
,
instance_tree
])
self
.
tic
()
slap_state
=
instance_tree
.
getSlapState
()
self
.
assertFalse
(
upgrade_decision
.
UpgradeDecision_processUpgrade
())
self
.
assertNotEqual
(
software_release
.
getUrlString
(),
instance_tree
.
getUrlString
())
upgrade_decision
.
confirm
()
upgrade_decision
.
start
()
# Check that url_string change, but slap state doesn't
self
.
assertNotEqual
(
software_release
.
getUrlString
(),
instance_tree
.
getUrlString
())
self
.
assertTrue
(
upgrade_decision
.
UpgradeDecision_processUpgrade
())
self
.
assertEqual
(
software_release
.
getUrlString
(),
instance_tree
.
getUrlString
())
self
.
assertEqual
(
slap_state
,
instance_tree
.
getSlapState
())
self
.
assertEqual
(
'stopped'
,
upgrade_decision
.
getSimulationState
())
def
testUpgradeDecision_upgradeInstanceTree_no_software_release
(
self
):
person
=
self
.
_makePerson
()
instance_tree
=
self
.
_makeInstanceTree
()
instance_tree
.
edit
(
destination_section_value
=
person
.
getRelativeUrl
())
self
.
_makeSoftwareInstance
(
instance_tree
,
instance_tree
.
getUrlString
())
upgrade_decision
=
self
.
_makeUpgradeDecision
()
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
upgrade_decision_line
.
setAggregateValueList
([
instance_tree
])
self
.
tic
()
upgrade_decision
.
confirm
()
upgrade_decision
.
start
()
self
.
assertFalse
(
upgrade_decision
.
UpgradeDecision_upgradeInstanceTree
())
self
.
assertEqual
(
'started'
,
upgrade_decision
.
getSimulationState
())
def
testUpgradeDecision_upgradeInstanceTree_no_hosting_subscripion
(
self
):
software_release
=
self
.
_makeSoftwareRelease
()
upgrade_decision
=
self
.
_makeUpgradeDecision
()
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
upgrade_decision_line
.
setAggregateValueList
([
software_release
])
self
.
tic
()
upgrade_decision
.
confirm
()
upgrade_decision
.
start
()
self
.
assertFalse
(
upgrade_decision
.
UpgradeDecision_upgradeInstanceTree
())
self
.
assertEqual
(
'started'
,
upgrade_decision
.
getSimulationState
())
def
testUpgradeDecision_upgradeComputeNode_no_software_release
(
self
):
person
=
self
.
_makePerson
()
compute_node
,
_
=
self
.
_makeComputeNode
(
owner
=
person
)
upgrade_decision
=
self
.
_makeUpgradeDecision
()
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
upgrade_decision_line
.
setAggregateValueList
([
compute_node
])
self
.
tic
()
upgrade_decision
.
confirm
()
upgrade_decision
.
start
()
self
.
assertFalse
(
upgrade_decision
.
UpgradeDecision_upgradeComputeNode
())
self
.
assertEqual
(
'started'
,
upgrade_decision
.
getSimulationState
())
def
testUpgradeDecision_upgradeComputeNode_no_hosting_subscripion
(
self
):
software_release
=
self
.
_makeSoftwareRelease
()
upgrade_decision
=
self
.
_makeUpgradeDecision
()
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
upgrade_decision_line
.
setAggregateValueList
([
software_release
])
self
.
tic
()
upgrade_decision
.
confirm
()
upgrade_decision
.
start
()
self
.
assertFalse
(
upgrade_decision
.
UpgradeDecision_upgradeComputeNode
())
self
.
assertEqual
(
'started'
,
upgrade_decision
.
getSimulationState
())
def
testUpgradeDecision_upgradeComputeNode
(
self
):
self
.
_makePerson
()
compute_node
,
_
=
self
.
_makeComputeNode
()
software_release
=
self
.
_makeSoftwareRelease
()
upgrade_decision
=
self
.
_makeUpgradeDecision
()
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
upgrade_decision_line
.
setAggregateValueList
([
software_release
,
compute_node
])
url
=
software_release
.
getUrlString
()
self
.
tic
()
self
.
assertFalse
(
upgrade_decision
.
UpgradeDecision_upgradeComputeNode
())
upgrade_decision
.
confirm
()
upgrade_decision
.
start
()
self
.
assertTrue
(
upgrade_decision
.
UpgradeDecision_upgradeComputeNode
())
self
.
tic
()
software_installation
=
compute_node
.
getAggregateRelatedValue
(
portal_type
=
'Software Installation'
)
self
.
assertEqual
(
'start_requested'
,
software_installation
.
getSlapState
())
self
.
assertEqual
(
url
,
software_installation
.
getUrlString
())
self
.
assertEqual
(
'validated'
,
software_installation
.
getValidationState
())
self
.
assertEqual
(
'stopped'
,
upgrade_decision
.
getSimulationState
())
def
testUpgradeDecision_processUpgradeComputeNode
(
self
):
self
.
_makePerson
()
compute_node
,
_
=
self
.
_makeComputeNode
()
software_release
=
self
.
_makeSoftwareRelease
()
upgrade_decision
=
self
.
_makeUpgradeDecision
()
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
upgrade_decision_line
.
setAggregateValueList
([
software_release
,
compute_node
])
url
=
software_release
.
getUrlString
()
self
.
tic
()
self
.
assertFalse
(
upgrade_decision
.
UpgradeDecision_processUpgrade
())
upgrade_decision
.
confirm
()
upgrade_decision
.
start
()
self
.
assertTrue
(
upgrade_decision
.
UpgradeDecision_processUpgrade
())
self
.
tic
()
software_installation
=
compute_node
.
getAggregateRelatedValue
(
portal_type
=
'Software Installation'
)
self
.
assertEqual
(
'start_requested'
,
software_installation
.
getSlapState
())
self
.
assertEqual
(
url
,
software_installation
.
getUrlString
())
self
.
assertEqual
(
'validated'
,
software_installation
.
getValidationState
())
self
.
assertEqual
(
'stopped'
,
upgrade_decision
.
getSimulationState
())
def
testSoftwareRelease_createUpgradeDecision_compute_node
(
self
):
person
=
self
.
_makePerson
()
compute_node
,
_
=
self
.
_makeComputeNode
(
owner
=
person
)
...
...
@@ -893,54 +699,6 @@ class TestSlapOSPDMSkins(TestSlapOSPDMMixinSkins):
self
.
assertEqual
(
in_progress
,
None
)
def
testUpgradeDecision_tryToCancel
(
self
):
compute_node
,
_
=
self
.
_makeComputeNode
()
software_release
=
self
.
_makeSoftwareRelease
()
software_release2
=
self
.
_makeSoftwareRelease
()
upgrade_decision
=
self
.
_makeUpgradeDecision
()
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
upgrade_decision_line
.
setAggregateValueList
([
software_release
,
compute_node
])
upgrade_decision
.
confirm
()
upgrade_decision2
=
self
.
_makeUpgradeDecision
()
upgrade_decision_line2
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision2
)
upgrade_decision_line2
.
setAggregateValueList
([
software_release
,
compute_node
])
upgrade_decision2
.
confirm
()
upgrade_decision2
.
start
()
url
=
software_release
.
getUrlString
()
url2
=
software_release2
.
getUrlString
()
# Cancel is not possible with the same url_string
self
.
assertEqual
(
upgrade_decision
.
UpgradeDecision_tryToCancel
(
url
),
False
)
self
.
assertEqual
(
upgrade_decision
.
UpgradeDecision_tryToCancel
(
url2
),
True
)
self
.
assertEqual
(
upgrade_decision
.
getSimulationState
(),
'cancelled'
)
# Cancel is no longer possible
self
.
assertEqual
(
upgrade_decision2
.
UpgradeDecision_tryToCancel
(
url
),
False
)
self
.
assertEqual
(
upgrade_decision2
.
UpgradeDecision_tryToCancel
(
url2
),
False
)
self
.
assertEqual
(
upgrade_decision2
.
getSimulationState
(),
'started'
)
def
testUpgradeDecision_tryToCancel_withRejected
(
self
):
compute_node
,
_
=
self
.
_makeComputeNode
()
software_release
=
self
.
_makeSoftwareRelease
()
software_release2
=
self
.
_makeSoftwareRelease
()
upgrade_decision
=
self
.
_makeUpgradeDecision
()
upgrade_decision_line
=
self
.
_makeUpgradeDecisionLine
(
upgrade_decision
)
upgrade_decision_line
.
setAggregateValueList
([
software_release
,
compute_node
])
upgrade_decision
.
confirm
()
upgrade_decision
.
reject
()
url
=
software_release
.
getUrlString
()
url2
=
software_release2
.
getUrlString
()
# Try to cancel rejected UD with the same sr will return False
self
.
assertEqual
(
upgrade_decision
.
UpgradeDecision_tryToCancel
(
url
),
False
)
self
.
assertEqual
(
upgrade_decision
.
getSimulationState
(),
'rejected'
)
# Try to cancel rejected UD will return True with url2
self
.
assertEqual
(
upgrade_decision
.
UpgradeDecision_tryToCancel
(
url2
),
True
)
self
.
assertEqual
(
upgrade_decision
.
getSimulationState
(),
'rejected'
)
def
testComputeNode_checkAndCreateUpgradeDecision_auto
(
self
):
person
=
self
.
_makePerson
()
compute_node
,
_
=
self
.
_makeComputeNode
(
owner
=
person
,
...
...
@@ -966,10 +724,10 @@ class TestSlapOSPDMSkins(TestSlapOSPDMMixinSkins):
self
.
assertEqual
(
len
(
upgrade_decision
),
1
)
self
.
assertEqual
(
upgrade_decision
[
0
].
getSimulationState
(),
'started'
)
compute_node_aggregate
=
upgrade_decision
[
0
].
UpgradeDecision_get
ComputeNode
(
)
self
.
assertEqual
(
compute_node_aggregate
.
getReference
()
,
compute_node
.
getReference
()
)
release
=
upgrade_decision
[
0
].
UpgradeDecision_get
SoftwareRelease
(
)
compute_node_aggregate
=
upgrade_decision
[
0
].
UpgradeDecision_get
AggregateValue
(
"Compute Node"
)
self
.
assertEqual
(
compute_node_aggregate
,
compute_node
)
release
=
upgrade_decision
[
0
].
UpgradeDecision_get
AggregateValue
(
"Software Release"
)
self
.
assertEqual
(
release
.
getUrlString
(),
software_release2
.
getUrlString
())
self
.
tic
()
...
...
@@ -1001,7 +759,7 @@ class TestSlapOSPDMSkins(TestSlapOSPDMMixinSkins):
self
.
assertEqual
(
upgrade_decision
.
getSimulationState
(),
'cancelled'
)
self
.
assertEqual
(
upgrade_decision2
.
getSimulationState
(),
'planned'
)
release
=
upgrade_decision2
.
UpgradeDecision_get
SoftwareRelease
(
)
release
=
upgrade_decision2
.
UpgradeDecision_get
AggregateValue
(
"Software Release"
)
self
.
assertEqual
(
release
.
getUrlString
(),
software_release3
.
getUrlString
())
...
...
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow.xml
0 → 100644
View file @
df2f22d0
<?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/upgrade_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>
upgrade_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>
Upgrade 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>
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_approveRegistration.py
0 → 100644
View file @
df2f22d0
upgrade_decision
=
state_change
[
"object"
]
from
DateTime
import
DateTime
portal
=
upgrade_decision
.
getPortalObject
()
document
=
upgrade_decision
.
UpgradeDecision_getAggregateValue
(
"Instance Tree"
)
if
document
is
None
:
document
=
upgrade_decision
.
UpgradeDecision_getAggregateValue
(
"Compute Node"
)
if
document
is
None
:
raise
ValueError
(
"No Compute Node or Instance Tree associated to upgrade."
)
# Get required arguments
kwargs
=
state_change
.
kwargs
# Required args
# Raise TypeError if all parameters are not provided
try
:
upgrade_scope
=
kwargs
[
'upgrade_scope'
]
except
KeyError
:
raise
TypeError
(
"UpgradeDecision_approveRegistration takes exactly 1 arguments"
)
tag
=
"%s_requestUpgradeDecisionCreation_inProgress"
%
document
.
getUid
()
activate_kw
=
{
'tag'
:
tag
}
if
portal
.
portal_activities
.
countMessageWithTag
(
tag
)
>
0
:
# nothing to do
return
with
upgrade_decision
.
defaultActivateParameterDict
(
activate_kw
):
if
upgrade_decision
.
getSimulationState
()
==
"draft"
:
upgrade_decision
.
plan
()
upgrade_decision
.
setStartDate
(
DateTime
())
if
upgrade_scope
==
"auto"
:
if
upgrade_decision
.
getSimulationState
()
==
"planned"
:
upgrade_decision
.
start
()
# Prevent concurrent transaction to create 2 upgrade decision for the same instance_tree
document
.
serialize
()
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_approveRegistration.xml
0 → 100644
View file @
df2f22d0
<?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>
Manager
</string>
</tuple>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
script_UpgradeDecision_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>
UpgradeDecision_approveRegistration
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_checkConsistency.py
0 → 100644
View file @
df2f22d0
upgrade_decision
=
state_change
[
'object'
]
upgrade_decision
.
Base_checkConsistency
()
master/bt5/slapos_
erp5/WorkflowTemplateItem/portal_workflow/slapos_erp5_interaction_workflow/script_WebMessage_stopAndReopenTicket
.xml
→
master/bt5/slapos_
pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_checkConsistency
.xml
View file @
df2f22d0
...
...
@@ -50,19 +50,17 @@
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
state_
object
</string>
</value>
<value>
<string>
state_
change
</string>
</value>
</item>
<item>
<key>
<string>
_proxy_roles
</string>
</key>
<key>
<string>
description
</string>
</key>
<value>
<tuple>
<string>
Assignor
</string>
</tuple>
<none/>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
script_
WebMessage_stopAndReopenTicket
</string>
</value>
<value>
<string>
script_
UpgradeDecision_checkConsistency
</string>
</value>
</item>
<item>
<key>
<string>
portal_type
</string>
</key>
...
...
master/bt5/slapos_
crm/SkinTemplateItem/portal_skins/slapos_crm_monitoring/SupportRequest_trySendNotificationMessage
.py
→
master/bt5/slapos_
pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_notify
.py
View file @
df2f22d0
support_request
=
context
upgrade_decision
=
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
:
message_title
=
kwargs
[
'message_title'
]
message
=
kwargs
[
'message'
]
destination_relative_url
=
kwargs
[
'destination_relative_url'
]
except
KeyError
:
raise
TypeError
(
"UpgradeDecision_requestEvent takes exactly 3 arguments"
)
resource
=
portal
.
service_module
.
slapos_crm_information
.
getRelativeUrl
()
# create Web message if needed for this ticket
last_event
=
context
.
portal_catalog
.
getResultValue
(
last_event
=
portal
.
portal_catalog
.
getResultValue
(
title
=
message_title
,
follow_up_uid
=
support_request
.
getUid
(),
follow_up_uid
=
upgrade_decision
.
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
)
transactional_event
=
context
.
REQUEST
.
get
(
"
upgrade_decision
_notified_item"
,
None
)
if
transactional_event
is
not
None
:
if
(
transactional_event
.
getFollowUpUid
()
==
support_request
.
getUid
())
and
\
if
(
transactional_event
.
getFollowUpUid
()
==
upgrade_decision
.
getUid
())
and
\
(
transactional_event
.
getTitle
()
==
message_title
):
return
transactional_event
...
...
@@ -28,14 +42,12 @@ event.edit(
text_content
=
message
,
start_date
=
DateTime
(),
resource
=
resource
,
source
=
support_request
.
getSource
(),
source
=
upgrade_decision
.
getSource
(),
destination
=
destination_relative_url
,
follow_up
=
support_request
.
getRelativeUrl
(),
follow_up
=
upgrade_decision
.
getRelativeUrl
(),
)
event
.
stop
()
event
.
deliver
()
support_request
.
serialize
()
context
.
REQUEST
.
set
(
"support_request_notified_item"
,
event
)
return
event
upgrade_decision
.
serialize
()
upgrade_decision
.
REQUEST
.
set
(
"upgrade_decision_notified_item"
,
event
)
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_notify.xml
0 → 100644
View file @
df2f22d0
<?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>
Manager
</string>
</tuple>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
script_UpgradeDecision_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>
UpgradeDecision_notify
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
master/bt5/slapos_pdm/
SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_upgradeInstanceTre
e.py
→
master/bt5/slapos_pdm/
WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_requestUpgrad
e.py
View file @
df2f22d0
if
context
.
getSimulationState
()
!=
'started'
:
# Update Decision is not on started state, Upgrade is not possible!
return
False
upgrade_decision
=
state_change
[
"object"
]
from
DateTime
import
DateTime
instance_tree
=
context
.
UpgradeDecision_getInstanceTree
()
software_release
=
context
.
UpgradeDecision_getSoftwareRelease
()
if
upgrade_decision
.
getSimulationState
()
!=
'started'
:
# Update Decision is not on started state, Upgrade is not possible!
return
if
instance_tree
is
None
:
return
False
instance_tree
=
upgrade_decision
.
UpgradeDecision_getAggregateValue
(
"Instance Tree"
)
software_release
=
upgrade_decision
.
UpgradeDecision_getAggregateValue
(
"Software Release"
)
compute_node
=
upgrade_decision
.
UpgradeDecision_getAggregateValue
(
"Compute Node"
)
if
software_release
is
None
:
return
False
return
if
compute_node
is
None
and
instance_tree
is
None
:
return
if
compute_node
is
not
None
and
instance_tree
is
not
None
:
raise
ValueError
(
"Something is wrong, you cannot upgrade Compute Node and Instance Tree on the same decision."
)
software_release_url
=
software_release
.
getUrlString
()
person
=
instance_tree
.
getDestinationSectionValue
(
portal_type
=
"Person"
)
if
compute_node
is
not
None
:
compute_node
.
requestSoftwareRelease
(
software_release_url
=
software_release_url
,
state
=
"available"
)
upgrade_decision
.
stop
(
comment
=
"Upgrade Processed for the Compute Node!"
)
return
# Test if the Software is available at the ComputeNode.
if
not
instance_tree
.
InstanceTree_isUpgradePossible
(
...
...
@@ -26,7 +40,8 @@ elif status == "stop_requested":
state
=
"stopped"
elif
status
==
"destroy_requested"
:
state
=
"destroyed"
person
=
instance_tree
.
getDestinationSectionValue
(
portal_type
=
"Person"
)
person
.
requestSoftwareInstance
(
state
=
state
,
software_release
=
software_release_url
,
...
...
@@ -37,6 +52,5 @@ person.requestSoftwareInstance(
shared
=
instance_tree
.
isRootSlave
()
)
context
.
stop
()
return
True
upgrade_decision
.
stop
(
comment
=
"Upgrade Processed for the Instance Tree!"
)
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_requestUpgrade.xml
0 → 100644
View file @
df2f22d0
<?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>
Manager
</string>
</tuple>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
script_UpgradeDecision_requestUpgrade
</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>
UpgradeDecision_requestUpgrade
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
master/bt5/slapos_pdm/
SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_tryToCancel
.py
→
master/bt5/slapos_pdm/
WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_reviewRegistration
.py
View file @
df2f22d0
upgrade_decision
=
context
upgrade_decision
=
state_change
[
"object"
]
from
DateTime
import
DateTime
cancellable_state_list
=
[
'confirmed'
,
'planned'
]
require_state_list
=
[
'rejected'
,
'confirmed'
,
'planned'
]
simulation_state
=
upgrade_decision
.
getSimulationState
()
# Get required arguments
kwargs
=
state_change
.
kwargs
# Required args
# Raise TypeError if all parameters are not provided
try
:
software_release_url
=
kwargs
[
'software_release_url'
]
except
KeyError
:
raise
TypeError
(
"UpgradeDecision_reviewRegistration takes exactly 1 arguments"
)
if
simulation_state
in
require_state_list
:
current_release
=
upgrade_decision
.
UpgradeDecision_get
SoftwareRelease
(
)
current_release
=
upgrade_decision
.
UpgradeDecision_get
AggregateValue
(
"Software Release"
)
if
not
current_release
:
# This upgrade decision is not valid
return
False
instance_tree
=
upgrade_decision
.
UpgradeDecision_getInstanceTree
()
return
instance_tree
=
upgrade_decision
.
UpgradeDecision_getAggregateValue
(
"Instance Tree"
)
if
instance_tree
is
not
None
:
current_instance_tree_release
=
instance_tree
.
getUrlString
()
if
current_instance_tree_release
==
new_url_string
:
if
current_instance_tree_release
==
software_release_url
:
if
simulation_state
in
cancellable_state_list
:
upgrade_decision
.
cancel
()
return
True
upgrade_decision
.
cancel
(
comment
=
"Instance tree is already upgraded."
)
return
if
current_release
.
getUrlString
()
==
new_url_string
:
if
current_release
.
getUrlString
()
==
software_release_url
:
# Cannot cancel because the software releases are the same
return
False
if
simulation_state
in
cancellable_state_list
:
upgrade_decision
.
cancel
()
return
True
else
:
return
False
master/bt5/slapos_pdm/
SkinTemplateItem/portal_skins/slapos_pdm/UpgradeDecision_getSoftwareRelease
.xml
→
master/bt5/slapos_pdm/
WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_reviewRegistration
.xml
View file @
df2f22d0
...
...
@@ -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></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>
UpgradeDecision_getSoftwareRelease
</string>
</value>
<value>
<string>
script_UpgradeDecision_reviewRegistration
</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>
UpgradeDecision_reviewRegistration
</string>
</value>
</item>
</dictionary>
</pickle>
...
...
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_reviewUpgrade.py
0 → 100644
View file @
df2f22d0
upgrade_decision
=
state_change
[
"object"
]
from
DateTime
import
DateTime
portal
=
upgrade_decision
.
getPortalObject
()
instance_tree
=
upgrade_decision
.
UpgradeDecision_getAggregateValue
(
"Instance Tree"
)
software_release
=
upgrade_decision
.
UpgradeDecision_getAggregateValue
(
"Software Release"
)
if
upgrade_decision
.
getSimulationState
()
==
"cancelled"
:
return
if
software_release
.
getValidationState
()
==
"archived"
:
upgrade_decision
.
cancel
(
comment
=
"Software Release is archived."
)
return
if
instance_tree
is
not
None
:
if
instance_tree
.
getUpgradeScope
()
in
[
'never'
,
'disabled'
]:
upgrade_decision
.
cancel
(
"Upgrade scope was disabled on the related Instance Tree"
)
elif
instance_tree
.
getSlapState
()
==
"destroy_requested"
:
upgrade_decision
.
cancel
(
comment
=
"Instance Tree is destroyed."
)
elif
instance_tree
.
getUrlString
()
==
software_release
.
getUrlString
():
upgrade_decision
.
cancel
(
comment
=
"Instance tree is already upgraded."
)
return
compute_node
=
upgrade_decision
.
UpgradeDecision_getAggregateValue
(
"Compute Node"
)
if
compute_node
is
not
None
:
if
compute_node
.
getUpgradeScope
()
in
[
'never'
,
'disabled'
]:
upgrade_decision
.
cancel
(
"Upgrade scope was disabled on the related Instance Tree"
)
return
elif
compute_node
.
getAllocationScope
()
in
[
"closed/forever"
,
"closed/termination"
]:
upgrade_decision
.
cancel
(
comment
=
"Compute Node is closed."
)
return
already_deployed
=
len
(
portal
.
portal_catalog
(
limit
=
1
,
portal_type
=
"Compute Partition"
,
parent_reference
=
compute_node
.
getReference
(),
software_release_url
=
software_release
.
getUrlString
()))
if
already_deployed
:
upgrade_decision
.
cancel
(
comment
=
"Compute Node already has the software release"
)
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_reviewUpgrade.xml
0 → 100644
View file @
df2f22d0
<?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>
Manager
</string>
</tuple>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
<value>
<none/>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
script_UpgradeDecision_reviewUpgrade
</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>
UpgradeDecision_reviewUpgrade
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/state_draft.xml
0 → 100644
View file @
df2f22d0
<?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/upgrade_slap_interface_workflow/transition_approve_registration
</string>
<string>
destination/portal_workflow/upgrade_slap_interface_workflow/transition_notify
</string>
<string>
destination/portal_workflow/upgrade_slap_interface_workflow/transition_request_upgrade
</string>
<string>
destination/portal_workflow/upgrade_slap_interface_workflow/transition_review_registration
</string>
<string>
destination/portal_workflow/upgrade_slap_interface_workflow/transition_review_upgrade
</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>
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/transition_approve_registration.xml
0 → 100644
View file @
df2f22d0
<?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/upgrade_slap_interface_workflow/script_UpgradeDecision_checkConsistency
</string>
<string>
after_script/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_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>
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/transition_notify.xml
0 → 100644
View file @
df2f22d0
<?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/upgrade_slap_interface_workflow/script_UpgradeDecision_checkConsistency
</string>
<string>
after_script/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_notify
</string>
</tuple>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
<value>
<string>
Create an event for the Upgrade Decision
</string>
</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>
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/transition_request_upgrade.xml
0 → 100644
View file @
df2f22d0
<?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/upgrade_slap_interface_workflow/script_UpgradeDecision_checkConsistency
</string>
<string>
after_script/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_requestUpgrade
</string>
</tuple>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
<value>
<string>
Perform the Upgrade
</string>
</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_upgrade
</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 Upgrade
</string>
</value>
</item>
<item>
<key>
<string>
trigger_type
</string>
</key>
<value>
<int>
2
</int>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/transition_review_registration.xml
0 → 100644
View file @
df2f22d0
<?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/upgrade_slap_interface_workflow/script_UpgradeDecision_checkConsistency
</string>
<string>
after_script/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_reviewRegistration
</string>
</tuple>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
<value>
<string>
Cancel if the current upgrade isn\'t valid anymore.
</string>
</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_review_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>
Review Registration
</string>
</value>
</item>
<item>
<key>
<string>
trigger_type
</string>
</key>
<value>
<int>
2
</int>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/transition_review_upgrade.xml
0 → 100644
View file @
df2f22d0
<?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/upgrade_slap_interface_workflow/script_UpgradeDecision_checkConsistency
</string>
<string>
after_script/portal_workflow/upgrade_slap_interface_workflow/script_UpgradeDecision_reviewUpgrade
</string>
</tuple>
</value>
</item>
<item>
<key>
<string>
description
</string>
</key>
<value>
<string>
Review if the upgrade still applicable
</string>
</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_review_upgrade
</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>
Review Upgrade
</string>
</value>
</item>
<item>
<key>
<string>
trigger_type
</string>
</key>
<value>
<int>
2
</int>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/variable_action.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/variable_actor.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/variable_comment.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/variable_error_message.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/variable_history.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/variable_portal_type.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_pdm/WorkflowTemplateItem/portal_workflow/upgrade_slap_interface_workflow/variable_time.xml
0 → 100644
View file @
df2f22d0
<?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>
master/bt5/slapos_pdm/bt/template_portal_type_workflow_chain_list
View file @
df2f22d0
...
...
@@ -2,4 +2,5 @@ Software Product | -validation_workflow
Software Product | commerce_validation_workflow
Upgrade Decision | edit_workflow
Upgrade Decision | ticket_interaction_workflow
Upgrade Decision | upgrade_decision_workflow
\ No newline at end of file
Upgrade Decision | upgrade_decision_workflow
Upgrade Decision | upgrade_slap_interface_workflow
\ No newline at end of file
master/bt5/slapos_pdm/bt/template_test_id_list
View file @
df2f22d0
test.erp5.testSlapOSPDMAlarm
test.erp5.testSlapOSPDMSkins
test.erp5.testSlapOSPDMDestroySoftwareInstallationWithArchivedSoftwareReleaseAlarm
test.erp5.testSlapOSPDMCreateUpgradeDecisionSkins
\ No newline at end of file
test.erp5.testSlapOSPDMCreateUpgradeDecisionSkins
test.erp5.testSlapOSCloudUpgradeSlapInterfaceWorkflow
\ No newline at end of file
master/bt5/slapos_pdm/bt/template_workflow_id_list
View file @
df2f22d0
upgrade_decision_workflow
\ No newline at end of file
upgrade_decision_workflow
upgrade_slap_interface_workflow
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment