From 648cadd2bcc8bef9ebaaa35e080d36a73e60f516 Mon Sep 17 00:00:00 2001 From: Georgios Dagkakis Date: Thu, 21 Jun 2018 09:41:39 +0000 Subject: [PATCH 1/3] erp5_free_subscription: Improvement in Free Subscription Request - Set Free Subscription Request to be of class 'Ticket' - Add FreeSubscriptionRequest_init to set start_date to now - In views and listboxed, show (delivery.)start_date as 'Begin Date', that is also sortable --- .../Free%20Subscription%20Request.xml | 12 ++- ...Module_viewFreeSubscriptionRequestList.xml | 4 +- .../listbox.xml | 4 + .../listbox_delivery_start_date.xml | 90 +++++++++++++++++++ .../FreeSubscriptionRequest_init.py | 1 + .../FreeSubscriptionRequest_init.xml | 62 +++++++++++++ .../FreeSubscriptionRequest_view.xml | 2 +- ...y_effective_date.xml => my_start_date.xml} | 4 +- ...bscription_viewFreeSubscriptionRequest.xml | 4 +- .../listbox.xml | 4 + .../listbox_delivery_start_date.xml | 90 +++++++++++++++++++ 11 files changed, 268 insertions(+), 9 deletions(-) create mode 100644 bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequestModule_viewFreeSubscriptionRequestList/listbox_delivery_start_date.xml create mode 100644 bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_init.py create mode 100644 bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_init.xml rename bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_view/{my_effective_date.xml => my_start_date.xml} (96%) create mode 100644 bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscription_viewFreeSubscriptionRequest/listbox_delivery_start_date.xml diff --git a/bt5/erp5_free_subscription/PortalTypeTemplateItem/portal_types/Free%20Subscription%20Request.xml b/bt5/erp5_free_subscription/PortalTypeTemplateItem/portal_types/Free%20Subscription%20Request.xml index dabe376393d..0fce63b1ebd 100644 --- a/bt5/erp5_free_subscription/PortalTypeTemplateItem/portal_types/Free%20Subscription%20Request.xml +++ b/bt5/erp5_free_subscription/PortalTypeTemplateItem/portal_types/Free%20Subscription%20Request.xml @@ -28,9 +28,7 @@ init_script - - - + FreeSubscriptionRequest_init permission @@ -42,9 +40,15 @@ portal_type Base Type + + short_title + + + + type_class - XMLObject + Ticket type_interface diff --git a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequestModule_viewFreeSubscriptionRequestList.xml b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequestModule_viewFreeSubscriptionRequestList.xml index e542f0a7b76..e44b2ae375c 100644 --- a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequestModule_viewFreeSubscriptionRequestList.xml +++ b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequestModule_viewFreeSubscriptionRequestList.xml @@ -67,7 +67,9 @@ hidden - + + listbox_delivery_start_date + diff --git a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequestModule_viewFreeSubscriptionRequestList/listbox.xml b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequestModule_viewFreeSubscriptionRequestList/listbox.xml index 99881076c84..ca911a05b33 100644 --- a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequestModule_viewFreeSubscriptionRequestList/listbox.xml +++ b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequestModule_viewFreeSubscriptionRequestList/listbox.xml @@ -93,6 +93,10 @@ free_subscription_request_type_title Type + + delivery.start_date + Begin Date + translated_validation_state_title State diff --git a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequestModule_viewFreeSubscriptionRequestList/listbox_delivery_start_date.xml b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequestModule_viewFreeSubscriptionRequestList/listbox_delivery_start_date.xml new file mode 100644 index 00000000000..dd8f58b6b4f --- /dev/null +++ b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequestModule_viewFreeSubscriptionRequestList/listbox_delivery_start_date.xml @@ -0,0 +1,90 @@ + + + + + + + + + + delegated_list + + + + + + id + listbox_delivery_start_date + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + field_id + + + + form_id + + + + target + + + + + + + values + + + + field_id + my_date_time_field + + + form_id + Base_viewFieldLibrary + + + target + Click to edit the target + + + + + + + + diff --git a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_init.py b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_init.py new file mode 100644 index 00000000000..4a1c07e58c6 --- /dev/null +++ b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_init.py @@ -0,0 +1 @@ +context.setStartDate(DateTime()) diff --git a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_init.xml b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_init.xml new file mode 100644 index 00000000000..f2d89d437f1 --- /dev/null +++ b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_init.xml @@ -0,0 +1,62 @@ + + + + + + + + + + Script_magic + 3 + + + _bind_names + + + + + + + + + + _asgns + + + + name_container + container + + + name_context + context + + + name_m_self + script + + + name_subpath + traverse_subpath + + + + + + + + + + + _params + **kw + + + id + FreeSubscriptionRequest_init + + + + + diff --git a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_view.xml b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_view.xml index 9c05f62945f..fb878384e09 100644 --- a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_view.xml +++ b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_view.xml @@ -88,7 +88,7 @@ my_reference my_free_subscription_request_type - my_effective_date + my_start_date my_translated_validation_state_title diff --git a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_view/my_effective_date.xml b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_view/my_start_date.xml similarity index 96% rename from bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_view/my_effective_date.xml rename to bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_view/my_start_date.xml index 7d299189430..3177dcbada6 100644 --- a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_view/my_effective_date.xml +++ b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_view/my_start_date.xml @@ -16,7 +16,7 @@ id - my_effective_date + my_start_date message_values @@ -89,7 +89,7 @@ title - Stop Date + Begin Date diff --git a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscription_viewFreeSubscriptionRequest.xml b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscription_viewFreeSubscriptionRequest.xml index 0d3a155922c..5ce7e881c22 100644 --- a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscription_viewFreeSubscriptionRequest.xml +++ b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscription_viewFreeSubscriptionRequest.xml @@ -57,7 +57,9 @@ hidden - + + listbox_delivery_start_date + diff --git a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscription_viewFreeSubscriptionRequest/listbox.xml b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscription_viewFreeSubscriptionRequest/listbox.xml index 00c5a893650..5d228c3e521 100644 --- a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscription_viewFreeSubscriptionRequest/listbox.xml +++ b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscription_viewFreeSubscriptionRequest/listbox.xml @@ -116,6 +116,10 @@ free_subscription_request_type_title Type + + delivery.start_date + Begin Date + translated_validation_state_title State diff --git a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscription_viewFreeSubscriptionRequest/listbox_delivery_start_date.xml b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscription_viewFreeSubscriptionRequest/listbox_delivery_start_date.xml new file mode 100644 index 00000000000..dd8f58b6b4f --- /dev/null +++ b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscription_viewFreeSubscriptionRequest/listbox_delivery_start_date.xml @@ -0,0 +1,90 @@ + + + + + + + + + + delegated_list + + + + + + id + listbox_delivery_start_date + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + field_id + + + + form_id + + + + target + + + + + + + values + + + + field_id + my_date_time_field + + + form_id + Base_viewFieldLibrary + + + target + Click to edit the target + + + + + + + + -- 2.30.9 From 62731ca67f7146651c6cc9dbd9038161ecb110b4 Mon Sep 17 00:00:00 2001 From: Georgios Dagkakis Date: Mon, 25 Jun 2018 10:12:09 +0000 Subject: [PATCH 2/3] erp5_free_subscription: Do not setStartDate in FreeSubscriptionRequest_init if start_date is in edit_kw --- .../erp5_free_subscription/FreeSubscriptionRequest_init.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_init.py b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_init.py index 4a1c07e58c6..1262de960b4 100644 --- a/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_init.py +++ b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_init.py @@ -1 +1,2 @@ -context.setStartDate(DateTime()) +if 'start_date' not in kw.get('edit_kw', {}): + context.setStartDate(DateTime()) -- 2.30.9 From af71c6f70262a2b49cbf7eeaff94177d260ae627 Mon Sep 17 00:00:00 2001 From: Georgios Dagkakis Date: Fri, 20 Jul 2018 14:00:47 +0000 Subject: [PATCH 3/3] erp5_free_subscription: several improvements on interaction the updated Free Subscription from Free Subscription Request: - In case of 'subscription', do not create a new Free Subscription if one already exists - In case of 'unsubscription' still create a Free Subscription if none exists and invalidate it at once - Allow having variation_category that will be passed to the Free Subscription - Handle definition of effective_date and expiration_date in Free Subscription better, Rule is: We prioritise effective_date (or expiration_date) if it exists Then getStopDate result (stop_date or acquiring from start_date) if it is not None Finally current date - Have assertions on variation_category and raise in case of unknown type --- .../scripts/Request_updateFreeSubscription.py | 62 +++++++++++++++---- 1 file changed, 51 insertions(+), 11 deletions(-) diff --git a/bt5/erp5_free_subscription/WorkflowTemplateItem/portal_workflow/free_subscription_interaction_workflow/scripts/Request_updateFreeSubscription.py b/bt5/erp5_free_subscription/WorkflowTemplateItem/portal_workflow/free_subscription_interaction_workflow/scripts/Request_updateFreeSubscription.py index d24c18f65b8..d1793712e46 100644 --- a/bt5/erp5_free_subscription/WorkflowTemplateItem/portal_workflow/free_subscription_interaction_workflow/scripts/Request_updateFreeSubscription.py +++ b/bt5/erp5_free_subscription/WorkflowTemplateItem/portal_workflow/free_subscription_interaction_workflow/scripts/Request_updateFreeSubscription.py @@ -1,16 +1,56 @@ request = state_change["object"] +portal = request.getPortalObject() +now = DateTime() +request_type = request.getFreeSubscriptionRequestType() +resource = request.getResource() +stop_date = request.getStopDate() -if request.getFreeSubscriptionRequestType() == "unsubscription": - free_subscription = request.getFollowUpValue() - if free_subscription.getValidationState() != "invalidated": - free_subscription.invalidate() -elif request.getFreeSubscriptionRequestType() == "subscription": - from DateTime import DateTime - portal = request.getPortalObject() +# Rule is we prioritise effective_date if it exists, +# then getStopDate result (stop_date or acquiring from start_date) if it is not None +# and finally current date +if request.hasEffectiveDate(): + effective_date = request.getEffectiveDate() +else: + effective_date = stop_date or now + +free_subscription = request.getFollowUpValue() +if free_subscription is None: free_subscription = portal.free_subscription_module.newContent( source=request.getSource(), destination=request.getDestination(), - resource=request.getResource(), - effective_date=DateTime()) - free_subscription.validate() - request.setFollowUpValue(free_subscription) + resource=resource, + effective_date=effective_date, + ) +request.setFollowUpValue(free_subscription) +variation_category_list = request.getVariationCategoryList() + +if request_type == "unsubscription": + assert not variation_category_list, 'unsubscription type of Free Subscription Request with non empty variation_category_list' + validation_state = free_subscription.getValidationState() + if validation_state != "invalidated": + if validation_state == "draft": + # validate, so that we can invalidate in same transaction + free_subscription.validate() + # Rule is we prioritise expiration_date if it exists + # then getStopDate result (stop_date or acquiring from start_date) if it is not None + # and finally current date + if request.hasExpirationDate(): + expiration_date = request.getExpirationDate() + else: + expiration_date = stop_date or now + free_subscription.setExpirationDate(expiration_date) + free_subscription.invalidate() +elif request_type == "subscription": + variation_range_category_list = request.getVariationRangeCategoryList() + if not variation_category_list: + assert not request.getVariationRangeCategoryList(), 'subscription type of Free Subscription Request with non empty variation_category_list, while resource has list defined' + for variation_category in variation_category_list: + assert variation_category in variation_range_category_list, 'not allowed variation_category %s' % variation_category + free_subscription.setExpirationDate(None) + if free_subscription.getValidationState() != "validated": + free_subscription.validate() + free_subscription.setEffectiveDate(effective_date) +else: + raise RuntimeError('Unknown request type %s' % request_type) + +free_subscription.setVariationCategoryList(variation_category_list) -- 2.30.9