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 dabe376393d13f7b9ff6b3b87396d5fae1d7c267..0fce63b1ebdcf0fb60b147a58e037a44d3117302 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 e542f0a7b769784c9b0f9a2dda07bf9844cbbfa3..e44b2ae375c09e9a7c273203a9735b5fed79eeb8 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 99881076c84233f1e7e03cbce574e8603c3d4615..ca911a05b3397fce7c2865fe5e7c73fc5c07d07d 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 0000000000000000000000000000000000000000..dd8f58b6b4fd7ce57cf83f3af19a3461436451cd --- /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 0000000000000000000000000000000000000000..1262de960b4b8727e21e72a9e4134e372842b6f8 --- /dev/null +++ b/bt5/erp5_free_subscription/SkinTemplateItem/portal_skins/erp5_free_subscription/FreeSubscriptionRequest_init.py @@ -0,0 +1,2 @@ +if 'start_date' not in kw.get('edit_kw', {}): + 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 0000000000000000000000000000000000000000..f2d89d437f183418faf4bb41254ec5976883f71a --- /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 9c05f62945f2e3213b138b7cba0da9d8f260a9e1..fb878384e09c02bd4ed745ea4c5df9762f48b6d9 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 7d2991894300285d0e5158fa00c99fd0c0ff3d2c..3177dcbada6d8346d2f48a735ab34bc0670df00b 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 0d3a155922cb8e576fec5d313e6f2314982c06dd..5ce7e881c2225415958f572aeb84b73618946de6 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 00c5a893650873d8a67e873d796931079c8790fd..5d228c3e521000bb5f932081df7ffe7c24c27031 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 0000000000000000000000000000000000000000..dd8f58b6b4fd7ce57cf83f3af19a3461436451cd --- /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 + + + + + + + + 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 d24c18f65b8a0ba4407d9866422841bbd547033b..d1793712e460316e14cf940d3b09b49a9d3ba239 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)