From 65a57d308efeb500e567ed4b2c1365b1e196f2f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com> Date: Fri, 19 Oct 2018 17:06:31 +0900 Subject: [PATCH] officejs_support_request_ui: Take into account preferred SR use Only services whose use is included in the preferred SR use are allowed when openning a support request. We still filter the services according to supply lines applicable for the selected project, but allow all SR services when project does not define supplies. Another user visible change is that test we no longer select a random service, it must be a user decision (eventhough one possible sophistication could be to select the service when there's only one). Update test accordingly. Also use relative URL for service, not just the service ID (this is API breaking change, but the javascript part should not have this cached) --- ...upportRequestModule_createSupportRequest.py | 2 +- .../your_resource.xml | 2 +- .../SupportRequest_getSupportTypeList.py | 11 +++-------- ...quest_getSupportTypeListFromProjectValue.py | 18 +++++++++++++++--- .../testSupportRequestModuleAccess.zpt | 5 +++++ .../test.erp5.testSupportRequest.py | 8 ++------ 6 files changed, 27 insertions(+), 19 deletions(-) diff --git a/bt5/erp5_officejs_support_request_ui/SkinTemplateItem/portal_skins/erp5_officejs_support_request/SupportRequestModule_createSupportRequest.py b/bt5/erp5_officejs_support_request_ui/SkinTemplateItem/portal_skins/erp5_officejs_support_request/SupportRequestModule_createSupportRequest.py index bf87470717..90fb760e80 100644 --- a/bt5/erp5_officejs_support_request_ui/SkinTemplateItem/portal_skins/erp5_officejs_support_request/SupportRequestModule_createSupportRequest.py +++ b/bt5/erp5_officejs_support_request_ui/SkinTemplateItem/portal_skins/erp5_officejs_support_request/SupportRequestModule_createSupportRequest.py @@ -8,7 +8,7 @@ project_object = portal.project_module[project] support_request = portal.support_request_module.newContent( portal_type='Support Request', title=title, - resource="service_module/" + resource, + resource=resource, destination_decision_value=logged_in_user_value, source_decision_value = project_object.getSourceDecisionValue(), source_section_value = project_object.getSourceSectionValue(), diff --git a/bt5/erp5_officejs_support_request_ui/SkinTemplateItem/portal_skins/erp5_officejs_support_request/SupportRequestModule_viewSupportRequestFastInputDialog/your_resource.xml b/bt5/erp5_officejs_support_request_ui/SkinTemplateItem/portal_skins/erp5_officejs_support_request/SupportRequestModule_viewSupportRequestFastInputDialog/your_resource.xml index 8c64bc562e..085aa3b943 100644 --- a/bt5/erp5_officejs_support_request_ui/SkinTemplateItem/portal_skins/erp5_officejs_support_request/SupportRequestModule_viewSupportRequestFastInputDialog/your_resource.xml +++ b/bt5/erp5_officejs_support_request_ui/SkinTemplateItem/portal_skins/erp5_officejs_support_request/SupportRequestModule_viewSupportRequestFastInputDialog/your_resource.xml @@ -136,7 +136,7 @@ <dictionary> <item> <key> <string>_text</string> </key> - <value> <string>python: here.SupportRequest_getSupportTypeList(request.get("field_your_project", None)) or [(\'\', \'\')]</string> </value> + <value> <string>python: context.SupportRequest_getSupportTypeList(request.get("your_project", None))</string> </value> </item> </dictionary> </pickle> diff --git a/bt5/erp5_officejs_support_request_ui/SkinTemplateItem/portal_skins/erp5_officejs_support_request/SupportRequest_getSupportTypeList.py b/bt5/erp5_officejs_support_request_ui/SkinTemplateItem/portal_skins/erp5_officejs_support_request/SupportRequest_getSupportTypeList.py index eca453a4b6..7a46434465 100644 --- a/bt5/erp5_officejs_support_request_ui/SkinTemplateItem/portal_skins/erp5_officejs_support_request/SupportRequest_getSupportTypeList.py +++ b/bt5/erp5_officejs_support_request_ui/SkinTemplateItem/portal_skins/erp5_officejs_support_request/SupportRequest_getSupportTypeList.py @@ -1,19 +1,14 @@ portal = context.getPortalObject() +project = None if project_id: - project_list = portal.portal_catalog(portal_type="Project", id=project_id, limit=1) -else: - project_list = portal.portal_catalog(portal_type="Project", validation_state="validated", limit=1) - -try: - project = project_list[0] -except IndexError: - project = None + project = portal.project_module[project_id] result = context.SupportRequest_getSupportTypeListFromProjectValue(project) if json_flag: from json import dumps + container.REQUEST.RESPONSE.setHeader('content-type', 'application/json') return dumps(result) return result diff --git a/bt5/erp5_officejs_support_request_ui/SkinTemplateItem/portal_skins/erp5_officejs_support_request/SupportRequest_getSupportTypeListFromProjectValue.py b/bt5/erp5_officejs_support_request_ui/SkinTemplateItem/portal_skins/erp5_officejs_support_request/SupportRequest_getSupportTypeListFromProjectValue.py index 3baec3e7f8..e0b9e993bc 100644 --- a/bt5/erp5_officejs_support_request_ui/SkinTemplateItem/portal_skins/erp5_officejs_support_request/SupportRequest_getSupportTypeListFromProjectValue.py +++ b/bt5/erp5_officejs_support_request_ui/SkinTemplateItem/portal_skins/erp5_officejs_support_request/SupportRequest_getSupportTypeListFromProjectValue.py @@ -1,6 +1,15 @@ +"""Returns the services that can be used on support request for this project. +""" # /!\ proxy role ! + portal = context.getPortalObject() -result = [] +item_list = portal.Ticket_getResourceItemList( + portal_type='Support Request', + include_context=False, +) + +allowed_resource_relative_url_set = set([]) +# if this project has supplies, only allow projects from the supplies. if project_value is not None: sale_supply_list = portal.portal_catalog(portal_type="Sale Supply", destination_project_uid=project_value.getUid()) for sale_supply in sale_supply_list: @@ -8,6 +17,9 @@ if project_value is not None: for supply_line in sale_supply_line_list: service = supply_line.getResourceValue() if service is not None: - result.append((service.getTitle(), service.getId())) + allowed_resource_relative_url_set.add(service.getRelativeUrl()) +if allowed_resource_relative_url_set: + return [('', '')] + [item for item in item_list if item[1] in allowed_resource_relative_url_set] -return result +# otherwise return all support request services +return item_list diff --git a/bt5/erp5_officejs_support_request_ui_test/PathTemplateItem/portal_tests/officejs_support_request_ui_zuite/testSupportRequestModuleAccess.zpt b/bt5/erp5_officejs_support_request_ui_test/PathTemplateItem/portal_tests/officejs_support_request_ui_zuite/testSupportRequestModuleAccess.zpt index 3e01954566..a94fed33cb 100644 --- a/bt5/erp5_officejs_support_request_ui_test/PathTemplateItem/portal_tests/officejs_support_request_ui_zuite/testSupportRequestModuleAccess.zpt +++ b/bt5/erp5_officejs_support_request_ui_test/PathTemplateItem/portal_tests/officejs_support_request_ui_zuite/testSupportRequestModuleAccess.zpt @@ -32,6 +32,11 @@ <td>//input[@name='field_your_title']</td> <td>test</td> </tr> +<tr> + <td>select</td> + <td>field_your_resource</td> + <td>FeatureRequire</td> +</tr> <tr> <td>click</td> <td>//input[@data-i18n='[value]Proceed']</td> diff --git a/bt5/erp5_officejs_support_request_ui_test/TestTemplateItem/portal_components/test.erp5.testSupportRequest.py b/bt5/erp5_officejs_support_request_ui_test/TestTemplateItem/portal_components/test.erp5.testSupportRequest.py index b2daaaa4bc..78a4865543 100644 --- a/bt5/erp5_officejs_support_request_ui_test/TestTemplateItem/portal_components/test.erp5.testSupportRequest.py +++ b/bt5/erp5_officejs_support_request_ui_test/TestTemplateItem/portal_components/test.erp5.testSupportRequest.py @@ -98,9 +98,7 @@ class TestSupportRequestCreateNewSupportRequest(SupportRequestTestCase): self.getWebSite().SupportRequestModule_createSupportRequest( description='<b>Help !!!</b>', file=None, - # FIXME: resource passed by the UI should be full relative URL - resource='erp5_officejs_support_request_ui_test_service_001', - # resource=self.portal.service_module.erp5_officejs_support_request_ui_test_service_001.getRelativeUrl(), + resource=self.portal.service_module.erp5_officejs_support_request_ui_test_service_001.getRelativeUrl(), title=self.id(), project='erp5_officejs_support_request_ui_test_project_001', # FIXME: project passed by the UI should be full relative URL @@ -169,9 +167,7 @@ class TestSupportRequestCreateNewSupportRequest(SupportRequestTestCase): self.getWebSite().SupportRequestModule_createSupportRequest( description='<b>Look at this file !</b>', file=FileUpload("the text content"), - # FIXME: resource passed by the UI should be full relative URL - resource='erp5_officejs_support_request_ui_test_service_001', - # resource=self.portal.service_module.erp5_officejs_support_request_ui_test_service_001.getRelativeUrl(), + resource=self.portal.service_module.erp5_officejs_support_request_ui_test_service_001.getRelativeUrl(), title=self.id(), project='erp5_officejs_support_request_ui_test_project_001', # FIXME: project passed by the UI should be full relative URL -- 2.30.9