From 19ebbe92450ab4d98d9d5f475214f579d23949cf Mon Sep 17 00:00:00 2001 From: Gabriel Monnerat <gabriel@tiolive.com> Date: Fri, 7 Apr 2017 20:55:16 +0000 Subject: [PATCH] erp5_calendar: Improve workflow interaction to update calendar if any sub-object is changed The interaction should also be triggered if a Calendar Exception is changed. --- .../workflow_chain_type.xml | 4 + ...oup_calendar_update_related_assignment.xml | 12 +-- ...sence_period_update_related_assignment.xml | 102 ------------------ ...oupCalendar_callUpdateRelatedAssignment.py | 2 - ...sencePeriod_callUpdateRelatedAssignment.py | 2 - ...encePeriod_callUpdateRelatedAssignment.xml | 62 ----------- .../scripts/callUpdateRelatedAssignment.py | 6 ++ ...nt.xml => callUpdateRelatedAssignment.xml} | 2 +- .../template_portal_type_workflow_chain_list | 1 + product/ERP5/tests/testCalendar.py | 48 +++++++++ 10 files changed, 65 insertions(+), 176 deletions(-) delete mode 100644 bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/interactions/group_presence_period_update_related_assignment.xml delete mode 100644 bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/GroupCalendar_callUpdateRelatedAssignment.py delete mode 100644 bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/GroupPresencePeriod_callUpdateRelatedAssignment.py delete mode 100644 bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/GroupPresencePeriod_callUpdateRelatedAssignment.xml create mode 100644 bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/callUpdateRelatedAssignment.py rename bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/{GroupCalendar_callUpdateRelatedAssignment.xml => callUpdateRelatedAssignment.xml} (96%) diff --git a/bt5/erp5_calendar/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml b/bt5/erp5_calendar/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml index 39832895ed..571c847198 100644 --- a/bt5/erp5_calendar/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml +++ b/bt5/erp5_calendar/PortalTypeWorkflowChainTemplateItem/workflow_chain_type.xml @@ -1,4 +1,8 @@ <workflow_chain> + <chain> + <type>Calendar Exception</type> + <workflow>group_calendar_interaction_workflow</workflow> + </chain> <chain> <type>Group Calendar</type> <workflow>edit_workflow, group_calendar_interaction_workflow, group_calendar_workflow</workflow> diff --git a/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/interactions/group_calendar_update_related_assignment.xml b/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/interactions/group_calendar_update_related_assignment.xml index 8626222bcb..e61b5ed2ff 100644 --- a/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/interactions/group_calendar_update_related_assignment.xml +++ b/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/interactions/group_calendar_update_related_assignment.xml @@ -27,15 +27,15 @@ <item> <key> <string>after_script_name</string> </key> <value> - <list> - <string>GroupCalendar_callUpdateRelatedAssignment</string> - </list> + <tuple/> </value> </item> <item> <key> <string>before_commit_script_name</string> </key> <value> - <tuple/> + <list> + <string>callUpdateRelatedAssignment</string> + </list> </value> </item> <item> @@ -67,9 +67,7 @@ <item> <key> <string>portal_type_filter</string> </key> <value> - <list> - <string>Group Calendar</string> - </list> + <none/> </value> </item> <item> diff --git a/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/interactions/group_presence_period_update_related_assignment.xml b/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/interactions/group_presence_period_update_related_assignment.xml deleted file mode 100644 index 0019c09e88..0000000000 --- a/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/interactions/group_presence_period_update_related_assignment.xml +++ /dev/null @@ -1,102 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="InteractionDefinition" module="Products.ERP5.Interaction"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>actbox_category</string> </key> - <value> <string>workflow</string> </value> - </item> - <item> - <key> <string>actbox_name</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>actbox_url</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>activate_script_name</string> </key> - <value> - <tuple/> - </value> - </item> - <item> - <key> <string>after_script_name</string> </key> - <value> - <tuple/> - </value> - </item> - <item> - <key> <string>before_commit_script_name</string> </key> - <value> - <list> - <string>GroupPresencePeriod_callUpdateRelatedAssignment</string> - </list> - </value> - </item> - <item> - <key> <string>description</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>guard</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>group_presence_period_update_related_assignment</string> </value> - </item> - <item> - <key> <string>method_id</string> </key> - <value> - <list> - <string>_set.*</string> - </list> - </value> - </item> - <item> - <key> <string>once_per_transaction</string> </key> - <value> <int>1</int> </value> - </item> - <item> - <key> <string>portal_type_filter</string> </key> - <value> - <list> - <string>Group Presence Period</string> - </list> - </value> - </item> - <item> - <key> <string>portal_type_group_filter</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>script_name</string> </key> - <value> - <tuple/> - </value> - </item> - <item> - <key> <string>temporary_document_disallowed</string> </key> - <value> <int>0</int> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>trigger_type</string> </key> - <value> <int>2</int> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/GroupCalendar_callUpdateRelatedAssignment.py b/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/GroupCalendar_callUpdateRelatedAssignment.py deleted file mode 100644 index 4ab968b1de..0000000000 --- a/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/GroupCalendar_callUpdateRelatedAssignment.py +++ /dev/null @@ -1,2 +0,0 @@ -group_calendar = state_change["object"] -group_calendar.GroupCalendar_updateRelatedAssignment() diff --git a/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/GroupPresencePeriod_callUpdateRelatedAssignment.py b/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/GroupPresencePeriod_callUpdateRelatedAssignment.py deleted file mode 100644 index ed3db8cef5..0000000000 --- a/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/GroupPresencePeriod_callUpdateRelatedAssignment.py +++ /dev/null @@ -1,2 +0,0 @@ -group_calendar = state_change["object"].getParentValue() -group_calendar.GroupCalendar_updateRelatedAssignment() diff --git a/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/GroupPresencePeriod_callUpdateRelatedAssignment.xml b/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/GroupPresencePeriod_callUpdateRelatedAssignment.xml deleted file mode 100644 index c8d5404145..0000000000 --- a/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/GroupPresencePeriod_callUpdateRelatedAssignment.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?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>state_change, **kw</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>GroupPresencePeriod_callUpdateRelatedAssignment</string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/callUpdateRelatedAssignment.py b/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/callUpdateRelatedAssignment.py new file mode 100644 index 0000000000..387dfd80bb --- /dev/null +++ b/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/callUpdateRelatedAssignment.py @@ -0,0 +1,6 @@ +group_calendar = state_change["object"] + +while group_calendar.getPortalType() != "Group Calendar": + group_calendar = group_calendar.getParentValue() + +group_calendar.GroupCalendar_updateRelatedAssignment() diff --git a/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/GroupCalendar_callUpdateRelatedAssignment.xml b/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/callUpdateRelatedAssignment.xml similarity index 96% rename from bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/GroupCalendar_callUpdateRelatedAssignment.xml rename to bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/callUpdateRelatedAssignment.xml index 233586c8a3..dd44aa34e4 100644 --- a/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/GroupCalendar_callUpdateRelatedAssignment.xml +++ b/bt5/erp5_calendar/WorkflowTemplateItem/portal_workflow/group_calendar_interaction_workflow/scripts/callUpdateRelatedAssignment.xml @@ -54,7 +54,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>GroupCalendar_callUpdateRelatedAssignment</string> </value> + <value> <string>callUpdateRelatedAssignment</string> </value> </item> </dictionary> </pickle> diff --git a/bt5/erp5_calendar/bt/template_portal_type_workflow_chain_list b/bt5/erp5_calendar/bt/template_portal_type_workflow_chain_list index 5216498eae..898c575a66 100644 --- a/bt5/erp5_calendar/bt/template_portal_type_workflow_chain_list +++ b/bt5/erp5_calendar/bt/template_portal_type_workflow_chain_list @@ -1,3 +1,4 @@ +Calendar Exception | group_calendar_interaction_workflow Group Calendar Assignment | edit_workflow Group Calendar Assignment | group_calendar_workflow Group Calendar | edit_workflow diff --git a/product/ERP5/tests/testCalendar.py b/product/ERP5/tests/testCalendar.py index 3649a716dc..8e00a36eb2 100644 --- a/product/ERP5/tests/testCalendar.py +++ b/product/ERP5/tests/testCalendar.py @@ -874,6 +874,54 @@ class TestCalendar(ERP5ReportTestCase): sequence_list.addSequenceString(sequence_string) sequence_list.play(self) + def test_CalendarException(self): + organisation = self.portal.organisation_module.newContent( + portal_type='Organisation') + + group_calendar = self.portal.group_calendar_module.newContent( + portal_type='Group Calendar') + group_calendar_period = group_calendar.newContent( + portal_type='Group Presence Period') + group_calendar_period.setStartDate('2008/01/01 08:00') + group_calendar_period.setStopDate('2008/01/01 18:00') + group_calendar_period.setResourceValue( + self.portal.portal_categories.calendar_period_type.type1) + group_calendar.confirm() + + person1 = self.portal.person_module.newContent( + portal_type='Person', + title='Person 1', + career_reference='1', + subordination_value=organisation) + self.tic() + self.assertEqual([0], [x.total_quantity + for x in person1.getAvailableTimeSequence( + from_date=DateTime(2008, 1, 1).earliestTime(), + to_date=DateTime(2008, 1, 1).latestTime(), + day=1)]) + assignment = self.portal.group_calendar_assignment_module.newContent( + specialise_value=group_calendar, + resource_value=self.portal.portal_categories.calendar_period_type.type1, + start_date=DateTime(2008, 1, 1).earliestTime(), + stop_date=DateTime(2008, 1, 1).latestTime(), + destination_value=person1) + assignment.confirm() + self.tic() + self.assertEqual([36000], [x.total_quantity + for x in person1.getAvailableTimeSequence( + from_date=DateTime(2008, 1, 1).earliestTime(), + to_date=DateTime(2008, 1, 1).latestTime(), + day=1)]) + exception = group_calendar_period.newContent( + portal_type="Calendar Exception", + exception_date=DateTime(2008, 1, 1)) + self.tic() + self.assertEqual([0], [x.total_quantity + for x in person1.getAvailableTimeSequence( + from_date=DateTime(2008, 1, 1).earliestTime(), + to_date=DateTime(2008, 1, 1).latestTime(), + day=1)]) + def test_GroupCalendarConstraint(self): group_calendar = self.portal.group_calendar_module.newContent( portal_type='Group Calendar') -- 2.30.9