From 3ef809521f2643816ca24d51e8508e87bc5c870f Mon Sep 17 00:00:00 2001 From: brackenburyn Date: Fri, 1 Sep 2017 15:03:01 +0200 Subject: [PATCH 01/12] Ai business bot first commit --- .../portal_skins/erp5_web_crm.xml | 26 ++ .../Alarm_fetchIngestedWebMessageList.py | 16 + .../Alarm_fetchIngestedWebMessageList.xml | 62 ++++ .../Alarm_processIngestedWebMessageList.py | 15 + .../Alarm_processIngestedWebMessageList.xml | 62 ++++ .../erp5_web_crm/EventModule_addWebMessage.py | 7 + .../EventModule_addWebMessage.xml | 71 +++++ .../erp5_web_crm/Event_createSenderPerson.py | 26 ++ .../erp5_web_crm/Event_createSenderPerson.xml | 62 ++++ .../Event_getNotificationMessageItemList.py | 28 ++ .../Event_getNotificationMessageItemList.xml | 62 ++++ .../Event_viewCreateSenderPersonDialog.xml | 155 +++++++++ .../your_default_email_text.xml | 275 ++++++++++++++++ .../your_default_telephone_text.xml | 275 ++++++++++++++++ .../your_first_name.xml | 275 ++++++++++++++++ .../your_last_name.xml | 275 ++++++++++++++++ .../Ticket_createWebMessageResponse.py | 70 ++++ .../Ticket_createWebMessageResponse.xml | 62 ++++ .../erp5_web_crm/WebMessage_createResponse.py | 42 +++ .../WebMessage_createResponse.xml | 62 ++++ .../WebMessage_followUpWebMessage.py | 69 ++++ .../WebMessage_followUpWebMessage.xml | 66 ++++ .../WebMessage_parseWebMessage.xml | 28 ++ .../erp5_web_crm/WebMessage_setModel.xml | 28 ++ .../WebMessage_trainOnWebMessage.xml | 28 ++ .../erp5_web_crm/WebMessage_view.xml | 163 ++++++++++ .../WebMessage_view/attachment_list.xml | 90 ++++++ .../my_aggregate_title_list.xml | 90 ++++++ .../WebMessage_view/my_causality_title.xml | 90 ++++++ .../WebMessage_view/my_content_type.xml | 90 ++++++ .../my_default_follow_up_title.xml | 90 ++++++ .../WebMessage_view/my_description.xml | 90 ++++++ .../my_destination_section_title.xml | 96 ++++++ .../my_destination_title_list.xml | 90 ++++++ .../WebMessage_view/my_reference.xml | 96 ++++++ .../WebMessage_view/my_resource.xml | 90 ++++++ .../my_source_section_title.xml | 96 ++++++ .../WebMessage_view/my_source_title.xml | 101 ++++++ .../WebMessage_view/my_start_date.xml | 90 ++++++ .../WebMessage_view/my_subject_list.xml | 298 ++++++++++++++++++ .../WebMessage_view/my_text_content.xml | 90 ++++++ .../erp5_web_crm/WebMessage_view/my_title.xml | 90 ++++++ .../my_translated_portal_type.xml | 90 ++++++ .../my_translated_simulation_state_title.xml | 90 ++++++ .../WebMessage_viewCreateResponseDialog.xml | 149 +++++++++ .../my_default_destination.xml | 163 ++++++++++ .../my_default_source_title.xml | 96 ++++++ .../your_response_event_content_type.xml | 275 ++++++++++++++++ ...ur_response_event_notification_message.xml | 126 ++++++++ .../your_response_event_portal_type.xml | 159 ++++++++++ .../your_response_event_resource.xml | 150 +++++++++ .../your_response_event_start_date.xml | 90 ++++++ .../your_response_event_text_content.xml | 166 ++++++++++ .../your_response_event_title.xml | 124 ++++++++ .../your_response_workflow_action.xml | 161 ++++++++++ .../WebMessage_viewWebFormInformation.xml | 156 +++++++++ .../my_source_organisation_title.xml | 106 +++++++ .../my_source_person_default_email_text.xml | 106 +++++++ ...y_source_person_default_telephone_text.xml | 106 +++++++ .../my_source_person_first_name.xml | 106 +++++++ .../my_source_person_last_name.xml | 106 +++++++ .../erp5_web_crm/WebSection_addWebMessage.py | 39 +++ .../erp5_web_crm/WebSection_addWebMessage.xml | 70 ++++ .../WebSection_getEventResourceItemList.py | 20 ++ .../WebSection_getEventResourceItemList.xml | 70 ++++ .../WebSection_viewAddWebMessageDialog.xml | 162 ++++++++++ .../my_text_content.xml | 142 +++++++++ .../your_captcha.xml | 101 ++++++ .../your_resource.xml | 121 +++++++ .../your_source_organisation_title.xml | 124 ++++++++ .../your_source_person_default_email_text.xml | 129 ++++++++ .../your_source_person_first_name.xml | 133 ++++++++ .../your_source_person_last_name.xml | 133 ++++++++ .../your_source_person_telephone_text.xml | 124 ++++++++ .../your_text_content.xml | 111 +++++++ .../your_title.xml | 101 ++++++ bt5/erp5_ai_business_bot/bt/dependency_list | 5 + bt5/erp5_ai_business_bot/bt/description | 1 + bt5/erp5_ai_business_bot/bt/maintainer_list | 1 + .../bt/template_format_version | 1 + .../bt/template_skin_id_list | 1 + bt5/erp5_ai_business_bot/bt/title | 1 + bt5/erp5_ai_business_bot/bt/version | 1 + 83 files changed, 8103 insertions(+) create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_fetchIngestedWebMessageList.py create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_fetchIngestedWebMessageList.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_processIngestedWebMessageList.py create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_processIngestedWebMessageList.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/EventModule_addWebMessage.py create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/EventModule_addWebMessage.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_createSenderPerson.py create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_createSenderPerson.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_getNotificationMessageItemList.py create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_getNotificationMessageItemList.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_default_email_text.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_default_telephone_text.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_first_name.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_last_name.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Ticket_createWebMessageResponse.py create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Ticket_createWebMessageResponse.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_createResponse.py create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_createResponse.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_followUpWebMessage.py create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_followUpWebMessage.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_parseWebMessage.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_setModel.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_trainOnWebMessage.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/attachment_list.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_aggregate_title_list.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_causality_title.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_content_type.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_default_follow_up_title.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_description.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_destination_section_title.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_destination_title_list.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_reference.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_resource.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_source_section_title.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_source_title.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_start_date.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_subject_list.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_text_content.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_title.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_translated_portal_type.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_translated_simulation_state_title.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/my_default_destination.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/my_default_source_title.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_content_type.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_notification_message.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_portal_type.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_resource.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_start_date.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_text_content.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_title.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_workflow_action.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_organisation_title.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_default_email_text.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_default_telephone_text.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_first_name.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_last_name.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_addWebMessage.py create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_addWebMessage.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_getEventResourceItemList.py create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_getEventResourceItemList.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/my_text_content.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_captcha.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_resource.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_organisation_title.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_default_email_text.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_first_name.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_last_name.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_telephone_text.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_text_content.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_title.xml create mode 100644 bt5/erp5_ai_business_bot/bt/dependency_list create mode 100644 bt5/erp5_ai_business_bot/bt/description create mode 100644 bt5/erp5_ai_business_bot/bt/maintainer_list create mode 100644 bt5/erp5_ai_business_bot/bt/template_format_version create mode 100644 bt5/erp5_ai_business_bot/bt/template_skin_id_list create mode 100644 bt5/erp5_ai_business_bot/bt/title create mode 100644 bt5/erp5_ai_business_bot/bt/version diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm.xml new file mode 100644 index 00000000000..bc0f6817063 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm.xml @@ -0,0 +1,26 @@ + + + + + + + + + + _objects + + + + + + id + erp5_web_crm + + + title + CRM features for Web + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_fetchIngestedWebMessageList.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_fetchIngestedWebMessageList.py new file mode 100644 index 00000000000..1183d02a914 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_fetchIngestedWebMessageList.py @@ -0,0 +1,16 @@ +portal = context.getPortalObject() + +sql_kw = {'portal_type': 'Web Message', + 'source_carrier_portal_type': ('Web Section', 'Web Site',), + 'simulation_state': 'draft'} + + +result_list = list(portal.portal_catalog(**sql_kw)) +MAX_IN_ACTIVITIES = 5 +starting_index = 0 +while True: + local_path_list = [r.getPath() for r in result_list[starting_index:starting_index+MAX_IN_ACTIVITIES]] + if not local_path_list: + break + context.activate(activity='SQLQueue').Alarm_processIngestedWebMessageList(local_path_list) + starting_index += MAX_IN_ACTIVITIES diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_fetchIngestedWebMessageList.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_fetchIngestedWebMessageList.xml new file mode 100644 index 00000000000..9aeae809c45 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_fetchIngestedWebMessageList.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 + + + + id + Alarm_fetchIngestedWebMessageList + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_processIngestedWebMessageList.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_processIngestedWebMessageList.py new file mode 100644 index 00000000000..d13931991aa --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_processIngestedWebMessageList.py @@ -0,0 +1,15 @@ +portal = context.getPortalObject() +for path in path_list: + document = portal.restrictedTraverse(path) + # Useful to reproduce Ingestion process from beginning + # All properties of object are considered as user input + input_parameter_dict = {'portal_type': document.getPortalType()} + for property_id in document.propertyIds(): + if property_id not in ('portal_type', 'uid', 'id',) \ + and document.hasProperty(property_id): + input_parameter_dict[property_id] = document.getProperty(property_id) + filename = document.getFilename() + + # Now starts metadata discovery process + document.activate().discoverMetadata(filename=filename, input_parameter_dict=input_parameter_dict) + document.activate().WebMessage_followUpWebMessage() diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_processIngestedWebMessageList.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_processIngestedWebMessageList.xml new file mode 100644 index 00000000000..8952e2972bb --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_processIngestedWebMessageList.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 + path_list + + + id + Alarm_processIngestedWebMessageList + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/EventModule_addWebMessage.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/EventModule_addWebMessage.py new file mode 100644 index 00000000000..f078b324bd6 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/EventModule_addWebMessage.py @@ -0,0 +1,7 @@ +"""Manager Proxy Role allows anonymous users to create events +""" +if REQUEST is not None: + from zExceptions import Unauthorized + portal = context.getPortalObject() + raise Unauthorized(portal.Base_translateString('You are not allowed to call this script by your own')) +context.newContent(**kw) diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/EventModule_addWebMessage.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/EventModule_addWebMessage.xml new file mode 100644 index 00000000000..1b7270fe769 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/EventModule_addWebMessage.xml @@ -0,0 +1,71 @@ + + + + + + + + + + Script_magic + 3 + + + _bind_names + + + + + + + + + + _asgns + + + + name_container + container + + + name_context + context + + + name_m_self + script + + + name_subpath + traverse_subpath + + + + + + + + + + + _params + REQUEST=None, **kw + + + _proxy_roles + + + Manager + Owner + + + + + id + EventModule_addWebMessage + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_createSenderPerson.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_createSenderPerson.py new file mode 100644 index 00000000000..87599ec6f80 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_createSenderPerson.py @@ -0,0 +1,26 @@ +portal = context.getPortalObject() +portal_type = 'Person' +module = portal.getDefaultModule(portal_type) + +sender_list = [entity.getRelativeUrl() for entity\ + in context.Base_getEntityListFromFromHeader(default_email_text or '')] + +if sender_list: + context.setSourceList(sender_list) + message = portal.Base_translateString('Sender found from ${person_module_translated_title}.', + mapping={'person_module_translated_title': module.getTranslatedTitle()}) + return context.Base_redirect(form_id=kw.get('form_id', 'view'), + keep_items={'portal_status_message': message}) + + +person = module.newContent(portal_type=portal_type, + default_email_text=default_email_text, + default_telephone_text=default_telephone_text, + first_name=first_name, + last_name=last_name) + +context.setSourceValue(person) + +message = portal.Base_translateString('Sender Person Created.') +return context.Base_redirect(form_id=kw.get('form_id', 'view'), + keep_items={'portal_status_message': message}) diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_createSenderPerson.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_createSenderPerson.xml new file mode 100644 index 00000000000..5680ff317e0 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_createSenderPerson.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 + default_email_text=None, default_telephone_text=None, first_name=None, last_name=None, **kw + + + id + Event_createSenderPerson + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_getNotificationMessageItemList.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_getNotificationMessageItemList.py new file mode 100644 index 00000000000..fb322023bce --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_getNotificationMessageItemList.py @@ -0,0 +1,28 @@ +"""Return the notification messages that can be used as a template to create an event. +""" +reference_set = set() # If there are two messages with same reference, we only + # display one entry, because later code will use getDocumentValue +item_list = [('', '')] + +portal = context.getPortalObject() + +preferred_use_list = portal.portal_preferences.getPreferredEventResponseUseList() + +for notification_message in portal.portal_catalog( + validation_state='validated', portal_type='Notification Message'): + notification_message = notification_message.getObject() + reference = notification_message.getReference() + if reference and reference not in reference_set: + reference_set.add(reference) + service = notification_message.getSpecialiseValue() + if response_only and preferred_use_list: + if service is not None: + for preferred_use in preferred_use_list: + if service.isMemberOf('use/%s' % preferred_use): + item_list.append( + ('%s - %s' % (reference, notification_message.getTranslatedTitle()), reference)) + else: + item_list.append( + ('%s - %s' % (reference, notification_message.getTranslatedTitle()), reference)) + +return sorted(item_list) diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_getNotificationMessageItemList.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_getNotificationMessageItemList.xml new file mode 100644 index 00000000000..fb892452638 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_getNotificationMessageItemList.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 + response_only=False + + + id + Event_getNotificationMessageItemList + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog.xml new file mode 100644 index 00000000000..037a7af7a0f --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog.xml @@ -0,0 +1,155 @@ + + + + + + + + + + _bind_names + + + + + + + + + + _asgns + + + + + + + + + + + _objects + + + + + + action + Event_createSenderPerson + + + description + + + + edit_order + + + + + + encoding + UTF-8 + + + enctype + + + + group_list + + + left + right + center + bottom + hidden + + + + + groups + + + + bottom + + + + + + center + + + + + + hidden + + + + + + left + + + your_first_name + your_last_name + your_default_email_text + your_default_telephone_text + + + + + right + + + + + + + + + id + Event_viewCreateSenderPersonDialog + + + method + POST + + + name + Event_viewCreateSenderPersonDialog + + + pt + form_dialog + + + row_length + 4 + + + stored_encoding + UTF-8 + + + title + Create Sender + + + unicode_mode + 0 + + + update_action + + + + update_action_title + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_default_email_text.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_default_email_text.xml new file mode 100644 index 00000000000..fbb5ff27cf4 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_default_email_text.xml @@ -0,0 +1,275 @@ + + + + + + + + + + id + your_default_email_text + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + required_not_found + Input is required but no input given. + + + too_long + Too much input was given. + + + + + + overrides + + + + alternate_name + + + + css_class + + + + default + + + + description + + + + display_maxwidth + + + + display_width + + + + editable + + + + enabled + + + + external_validator + + + + extra + + + + hidden + + + + max_length + + + + required + + + + title + + + + truncate + + + + unicode + + + + whitespace_preserve + + + + + + + tales + + + + alternate_name + + + + css_class + + + + default + + AAAAAAAAAAI= + + + + description + + + + display_maxwidth + + + + display_width + + + + editable + + + + enabled + + + + external_validator + + + + extra + + + + hidden + + + + max_length + + + + required + + + + title + + + + truncate + + + + unicode + + + + whitespace_preserve + + + + + + + values + + + + alternate_name + + + + css_class + + + + default + + + + description + + + + display_maxwidth + + + + display_width + 20 + + + editable + 1 + + + enabled + 1 + + + external_validator + + + + extra + + + + hidden + 0 + + + max_length + + + + required + 0 + + + title + Email Address + + + truncate + 0 + + + unicode + 0 + + + whitespace_preserve + 0 + + + + + + + + + + + + + + + _text + here/getSourcePersonDefaultEmailText + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_default_telephone_text.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_default_telephone_text.xml new file mode 100644 index 00000000000..b15150b4843 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_default_telephone_text.xml @@ -0,0 +1,275 @@ + + + + + + + + + + id + your_default_telephone_text + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + required_not_found + Input is required but no input given. + + + too_long + Too much input was given. + + + + + + overrides + + + + alternate_name + + + + css_class + + + + default + + + + description + + + + display_maxwidth + + + + display_width + + + + editable + + + + enabled + + + + external_validator + + + + extra + + + + hidden + + + + max_length + + + + required + + + + title + + + + truncate + + + + unicode + + + + whitespace_preserve + + + + + + + tales + + + + alternate_name + + + + css_class + + + + default + + AAAAAAAAAAI= + + + + description + + + + display_maxwidth + + + + display_width + + + + editable + + + + enabled + + + + external_validator + + + + extra + + + + hidden + + + + max_length + + + + required + + + + title + + + + truncate + + + + unicode + + + + whitespace_preserve + + + + + + + values + + + + alternate_name + + + + css_class + + + + default + + + + description + + + + display_maxwidth + + + + display_width + 20 + + + editable + 1 + + + enabled + 1 + + + external_validator + + + + extra + + + + hidden + 0 + + + max_length + + + + required + 0 + + + title + Telephone Number + + + truncate + 0 + + + unicode + 0 + + + whitespace_preserve + 0 + + + + + + + + + + + + + + + _text + here/getSourcePErsonDefaultTelephoneText + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_first_name.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_first_name.xml new file mode 100644 index 00000000000..1e797ae2bb5 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_first_name.xml @@ -0,0 +1,275 @@ + + + + + + + + + + id + your_first_name + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + required_not_found + Input is required but no input given. + + + too_long + Too much input was given. + + + + + + overrides + + + + alternate_name + + + + css_class + + + + default + + + + description + + + + display_maxwidth + + + + display_width + + + + editable + + + + enabled + + + + external_validator + + + + extra + + + + hidden + + + + max_length + + + + required + + + + title + + + + truncate + + + + unicode + + + + whitespace_preserve + + + + + + + tales + + + + alternate_name + + + + css_class + + + + default + + AAAAAAAAAAI= + + + + description + + + + display_maxwidth + + + + display_width + + + + editable + + + + enabled + + + + external_validator + + + + extra + + + + hidden + + + + max_length + + + + required + + + + title + + + + truncate + + + + unicode + + + + whitespace_preserve + + + + + + + values + + + + alternate_name + + + + css_class + + + + default + + + + description + + + + display_maxwidth + + + + display_width + 20 + + + editable + 1 + + + enabled + 1 + + + external_validator + + + + extra + + + + hidden + 0 + + + max_length + + + + required + 0 + + + title + First Name + + + truncate + 0 + + + unicode + 0 + + + whitespace_preserve + 0 + + + + + + + + + + + + + + + _text + here/getSourcePersonFirstName + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_last_name.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_last_name.xml new file mode 100644 index 00000000000..389799753e0 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_last_name.xml @@ -0,0 +1,275 @@ + + + + + + + + + + id + your_last_name + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + required_not_found + Input is required but no input given. + + + too_long + Too much input was given. + + + + + + overrides + + + + alternate_name + + + + css_class + + + + default + + + + description + + + + display_maxwidth + + + + display_width + + + + editable + + + + enabled + + + + external_validator + + + + extra + + + + hidden + + + + max_length + + + + required + + + + title + + + + truncate + + + + unicode + + + + whitespace_preserve + + + + + + + tales + + + + alternate_name + + + + css_class + + + + default + + AAAAAAAAAAI= + + + + description + + + + display_maxwidth + + + + display_width + + + + editable + + + + enabled + + + + external_validator + + + + extra + + + + hidden + + + + max_length + + + + required + + + + title + + + + truncate + + + + unicode + + + + whitespace_preserve + + + + + + + values + + + + alternate_name + + + + css_class + + + + default + + + + description + + + + display_maxwidth + + + + display_width + 20 + + + editable + 1 + + + enabled + 1 + + + external_validator + + + + extra + + + + hidden + 0 + + + max_length + + + + required + 0 + + + title + Last Name + + + truncate + 0 + + + unicode + 0 + + + whitespace_preserve + 0 + + + + + + + + + + + + + + + _text + here/getSourcePersonLastName + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Ticket_createWebMessageResponse.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Ticket_createWebMessageResponse.py new file mode 100644 index 00000000000..bdbbc432d9b --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Ticket_createWebMessageResponse.py @@ -0,0 +1,70 @@ +""" +Create a response web message event from ticket +""" +portal = context.getPortalObject() +current_object = context.getObject() +portal_type='Web Message' +translateString = portal.Base_translateString +module = portal.getDefaultModule(portal_type) + +if not portal.Base_checkPermission(module.getId(), "Add portal content"): + return context.Base_redirect( + form_id, + keep_items=dict( + portal_status_message=translateString( + "You do not have permission to add new event.") + ) + ) + +# Create a new event +response = module.newContent( + portal_type=portal_type, + source=current_object.getDestination(), + destination=current_object.getSourceList(), + direction=direction, + resource=resource, + title='Re: ' + current_object.getTitle(), + text_content=text_content, + start_date=current_object.getStartDate(), + # follow_up=current_object, + # content_type=portal.portal_preferences.getPreferredTextEditor() and 'text/html' or 'text/plain' + # subject_list=current_object.getSubjectList() +) + +response.setFollowUpValueList([current_object]) + +if notification_message: + response.Event_setTextContentFromNotificationMessage( + reference=notification_message, + substitution_method_parameter_dict=dict( + reply_body='', + reply_subject=title or '' + ) + ) + +''' +if workflow_action: + portal.portal_workflow.doActionFor( + context, + workflow_action, + ) +''' + +message = translateString( + "Created and associated a new ${ticket_type} for the Web Message. Here is a recommended response.", + mapping=dict(ticket_type = translateString(ticket_type)) +) + +# Trigger appropriate workflow action +if not keep_draft: + if direction == 'incoming': + # Support event_workflow and event_simulation_workflow + if portal.portal_workflow.isTransitionPossible(response, 'receive'): + response.receive() + if portal.portal_workflow.isTransitionPossible(response, 'stop'): + response.stop() + else: + response.plan() + +return response.Base_redirect('Ticket_viewWebMessageResponseDialog', keep_items={'portal_status_message': message}) +#return response.Base_redirect('view', keep_items={'portal_status_message': message}) diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Ticket_createWebMessageResponse.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Ticket_createWebMessageResponse.xml new file mode 100644 index 00000000000..aed200a84b6 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Ticket_createWebMessageResponse.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 + title=None, resource=None, text_content=None,direction=None, source=None, destination=None, ticket_type=\'Ticket\', notification_message=None, keep_draft=False + + + id + Ticket_createWebMessageResponse + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_createResponse.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_createResponse.py new file mode 100644 index 00000000000..917b511e61e --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_createResponse.py @@ -0,0 +1,42 @@ +""" + This script creates a new event with given metadata and + attaches it to the current ticket. +""" + + +portal = context.getPortalObject() +translateString = portal.Base_translateString +module = portal.getDefaultModule(portal_type) + +if portal_type not in module.getVisibleAllowedContentTypeList(): + return context.Base_redirect(form_id, + keep_items=dict( + portal_status_message=translateString("You do not have permission to add new event."))) + +# Create a new event +event = module.newContent(portal_type=portal_type, + title=title, + text_content=text_content, + content_type=portal.portal_preferences.getPreferredTextEditor() and 'text/html' or 'text/plain', + resource=resource, + source=source, + destination=destination, + start_date=DateTime(), + follow_up=context.getRelativeUrl()) + +# Trigger appropriate workflow action +if not keep_draft: + if direction == 'incoming': + # Support event_workflow and event_simulation_workflow + if portal.portal_workflow.isTransitionPossible(event, 'receive'): + event.receive() + if portal.portal_workflow.isTransitionPossible(event, 'stop'): + event.stop() + else: + event.plan() + +# Redirect to event +portal_status_message = translateString( + "Created and associated a new ${portal_type} to the ticket.", + mapping=dict(portal_type = translateString(portal_type))) +return event.Base_redirect('view', keep_items = dict(portal_status_message=portal_status_message), **kw) diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_createResponse.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_createResponse.xml new file mode 100644 index 00000000000..6fbb0a971d7 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_createResponse.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 + form_id=\'view\', portal_type=None, title=None, resource=None, text_content=None,direction=None, source=None, destination=None, keep_draft=False, **kw + + + id + WebMessage_createResponse + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_followUpWebMessage.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_followUpWebMessage.py new file mode 100644 index 00000000000..f2f952fed23 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_followUpWebMessage.py @@ -0,0 +1,69 @@ +# This script creates a new ticket object from this current event based on its tags +translateString = context.Base_translateString +portal = context.getPortalObject() +current_object = context.getObject() + +if tags == None: + return() +assign = None # + +# Find appropriate ticket type +tagset = set(tags) +so = {"sale", "pricing", "demo", "partnership", "advertising"} +sr = {"help", "starting", "install", "bug"} +m = {"job", "sponsorship", "academic", "contributor"} + +if tagset.intersection(sr): + module = context.getPortalObject().support_request_module + ticket_type = "Support Request" +elif tagset.intersection(so): + module = context.getPortalObject().sale_opportunity_module + ticket_type = "Sale Opportunity" +else: + module = context.getPortalObject().meeting_module + ticket_type = "Meeting" + +if not portal.Base_checkPermission(module.getId(), "Add portal content"): + return context.Base_redirect( + form_id, + keep_items=dict( + portal_status_message=translateString( + "You do not have permission to add new ticket.") + ) + ) + +# Create a new object +new_id = str(module.generateNewId()) +context.portal_types.constructContent( + type_name=ticket_type, + container=module, + id=new_id +) +new_object = module[new_id] + +# If we do this before, each added line will take 20 times more time +# because of programmable acquisition +new_object.edit( + title=current_object.getTitle(), + destination_decision_list=current_object.getSourceList(), + source_decision_list=current_object.getDestinationList(), + start_date=current_object.getStartDate() +) +# Now create the relation between the current object and the new one +current_object.setFollowUpValueList([new_object]) +if assign: + new_object.setSourceTrade([assign[1]]) + +# Redirect to new object +if assign == None: + message = translateString( + "Created and associated a new ${ticket_type} for " + current_object.getTitle()+ ". Here is a recommended response.", + mapping=dict(ticket_type = translateString(ticket_type))) + return current_object.Base_redirect('WebMessage_viewCreateResponseDialog', keep_items={'portal_status_message': message}) + +else: + name = assign[0] + message = translateString( + "Created and associated a new ${ticket_type} for " + current_object.getTitle() + ". " + name + " is recommended to handle it", + mapping=dict(ticket_type = translateString(ticket_type))) + return new_object.Base_redirect('view', keep_items={'portal_status_message': message}) diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_followUpWebMessage.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_followUpWebMessage.xml new file mode 100644 index 00000000000..ef88d8b0b99 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_followUpWebMessage.xml @@ -0,0 +1,66 @@ + + + + + + + + + + Script_magic + 3 + + + _bind_names + + + + + + + + + + _asgns + + + + name_container + container + + + name_context + context + + + name_m_self + script + + + name_subpath + traverse_subpath + + + + + + + + + + + _params + tags=None + + + id + WebMessage_followUpWebMessage + + + title + Follow Up Web Message + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_parseWebMessage.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_parseWebMessage.xml new file mode 100644 index 00000000000..87a71380ae5 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_parseWebMessage.xml @@ -0,0 +1,28 @@ + + + + + + + + + + _function + WebMessage_parseWebMessage + + + _module + Parse Web Message + + + id + WebMessage_parseWebMessage + + + title + Parse Web Message + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_setModel.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_setModel.xml new file mode 100644 index 00000000000..cca59ca74ca --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_setModel.xml @@ -0,0 +1,28 @@ + + + + + + + + + + _function + WebMessage_setModel + + + _module + Set Web Message Model + + + id + WebMessage_setModel + + + title + Set Web Message Model + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_trainOnWebMessage.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_trainOnWebMessage.xml new file mode 100644 index 00000000000..f3b144f4505 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_trainOnWebMessage.xml @@ -0,0 +1,28 @@ + + + + + + + + + + _function + WebMessage_trainOnWebMessage + + + _module + Train On Web Message + + + id + WebMessage_trainOnWebMessage + + + title + Train On Web Message + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view.xml new file mode 100644 index 00000000000..933ddffef1e --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view.xml @@ -0,0 +1,163 @@ + + + + + + + + + + _bind_names + + + + + + + + + + _asgns + + + + + + + + + + + _objects + + + + + + action + Base_edit + + + description + + + + encoding + UTF-8 + + + enctype + + + + group_list + + + left + right + center + bottom + hidden + + + + + groups + + + + bottom + + + my_text_content + + + + + center + + + my_description + my_aggregate_title_list + attachment_list + my_content_type + + + + + hidden + + + my_source_section_title + my_destination_section_title + + + + + left + + + my_title + my_reference + my_start_date + my_translated_portal_type + my_resource + my_causality_title + my_subject_list + + + + + right + + + my_source_title + my_destination_title_list + my_default_follow_up_title + my_translated_simulation_state_title + + + + + + + + id + WebMessage_view + + + method + POST + + + name + Event_view + + + pt + form_view + + + row_length + 4 + + + stored_encoding + UTF-8 + + + title + Event + + + unicode_mode + 0 + + + update_action + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/attachment_list.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/attachment_list.xml new file mode 100644 index 00000000000..72950044a6b --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/attachment_list.xml @@ -0,0 +1,90 @@ + + + + + + + + + + delegated_list + + + + + + id + attachment_list + + + 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 + attachment_list + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_aggregate_title_list.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_aggregate_title_list.xml new file mode 100644 index 00000000000..d30f10ff4c0 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_aggregate_title_list.xml @@ -0,0 +1,90 @@ + + + + + + + + + + delegated_list + + + + + + id + my_aggregate_title_list + + + 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_aggregate_title_list + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_causality_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_causality_title.xml new file mode 100644 index 00000000000..67742f3124b --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_causality_title.xml @@ -0,0 +1,90 @@ + + + + + + + + + + delegated_list + + + + + + id + my_causality_title + + + 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_causality_title + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_content_type.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_content_type.xml new file mode 100644 index 00000000000..f051e9a6c13 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_content_type.xml @@ -0,0 +1,90 @@ + + + + + + + + + + delegated_list + + + + + + id + my_content_type + + + 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_content_type + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_default_follow_up_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_default_follow_up_title.xml new file mode 100644 index 00000000000..3de3f9aa68b --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_default_follow_up_title.xml @@ -0,0 +1,90 @@ + + + + + + + + + + delegated_list + + + + + + id + my_default_follow_up_title + + + 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_default_follow_up_title + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_description.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_description.xml new file mode 100644 index 00000000000..e703af92e08 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_description.xml @@ -0,0 +1,90 @@ + + + + + + + + + + delegated_list + + + + + + id + my_description + + + 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_description + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_destination_section_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_destination_section_title.xml new file mode 100644 index 00000000000..5c1f4d80901 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_destination_section_title.xml @@ -0,0 +1,96 @@ + + + + + + + + + + delegated_list + + + title + + + + + id + my_destination_section_title + + + 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_destination_section_title + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + title + Recipient Organisation + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_destination_title_list.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_destination_title_list.xml new file mode 100644 index 00000000000..0c7658d6b32 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_destination_title_list.xml @@ -0,0 +1,90 @@ + + + + + + + + + + delegated_list + + + + + + id + my_destination_title_list + + + 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_destination_title_list + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_reference.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_reference.xml new file mode 100644 index 00000000000..b184a3f86d6 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_reference.xml @@ -0,0 +1,96 @@ + + + + + + + + + + delegated_list + + + editable + + + + + id + my_reference + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + field_id + + + + form_id + + + + target + + + + + + + values + + + + editable + 0 + + + field_id + my_reference + + + form_id + Base_viewFieldLibrary + + + target + Click to edit the target + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_resource.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_resource.xml new file mode 100644 index 00000000000..779ea43d630 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_resource.xml @@ -0,0 +1,90 @@ + + + + + + + + + + delegated_list + + + + + + id + my_resource + + + 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_event_resource + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_source_section_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_source_section_title.xml new file mode 100644 index 00000000000..77611c2fb4f --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_source_section_title.xml @@ -0,0 +1,96 @@ + + + + + + + + + + delegated_list + + + title + + + + + id + my_source_section_title + + + 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_source_section_title + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + title + Sender Organisation + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_source_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_source_title.xml new file mode 100644 index 00000000000..1413ec4109f --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_source_title.xml @@ -0,0 +1,101 @@ + + + + + + + + + + delegated_list + + + allow_creation + editable + + + + + id + my_source_title + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + field_id + + + + form_id + + + + target + + + + + + + values + + + + allow_creation + 1 + + + editable + 1 + + + field_id + my_event_source_title + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_start_date.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_start_date.xml new file mode 100644 index 00000000000..94c47a79ac4 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_start_date.xml @@ -0,0 +1,90 @@ + + + + + + + + + + delegated_list + + + + + + id + my_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_event_start_date + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_subject_list.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_subject_list.xml new file mode 100644 index 00000000000..a011d0f3350 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_subject_list.xml @@ -0,0 +1,298 @@ + + + + + + + + + + id + my_subject_list + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + line_too_long + A line was too long. + + + required_not_found + Input is required but no input given. + + + too_long + You entered too many characters. + + + too_many_lines + You entered too many lines. + + + + + + overrides + + + + alternate_name + + + + css_class + + + + default + + + + description + + + + editable + + + + enabled + + + + external_validator + + + + extra + + + + height + + + + hidden + + + + max_length + + + + max_linelength + + + + max_lines + + + + required + + + + title + + + + unicode + + + + view_separator + + + + whitespace_preserve + + + + width + + + + + + + tales + + + + alternate_name + + + + css_class + + + + default + + + + description + + + + editable + + + + enabled + + + + external_validator + + + + extra + + + + height + + + + hidden + + + + max_length + + + + max_linelength + + + + max_lines + + + + required + + + + title + + + + unicode + + + + view_separator + + + + whitespace_preserve + + + + width + + + + + + + values + + + + alternate_name + + + + css_class + + + + default + + + + + + description + + + + editable + 1 + + + enabled + 1 + + + external_validator + + + + extra + + + + height + 3 + + + hidden + 0 + + + max_length + + + + max_linelength + + + + max_lines + + + + required + 0 + + + title + Keywords + + + unicode + 0 + + + view_separator + + +]]> + + + whitespace_preserve + 0 + + + width + 30 + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_text_content.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_text_content.xml new file mode 100644 index 00000000000..fe398b47c62 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_text_content.xml @@ -0,0 +1,90 @@ + + + + + + + + + + delegated_list + + + + + + id + my_text_content + + + 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_text_content + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_title.xml new file mode 100644 index 00000000000..07c998abe39 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_title.xml @@ -0,0 +1,90 @@ + + + + + + + + + + delegated_list + + + + + + id + my_title + + + 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_event_title + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_translated_portal_type.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_translated_portal_type.xml new file mode 100644 index 00000000000..2ea7722de62 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_translated_portal_type.xml @@ -0,0 +1,90 @@ + + + + + + + + + + delegated_list + + + + + + id + my_translated_portal_type + + + 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_translated_portal_type + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_translated_simulation_state_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_translated_simulation_state_title.xml new file mode 100644 index 00000000000..7bc23f5cf1b --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_translated_simulation_state_title.xml @@ -0,0 +1,90 @@ + + + + + + + + + + delegated_list + + + + + + id + my_translated_simulation_state_title + + + 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_translated_simulation_state_title + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog.xml new file mode 100644 index 00000000000..50d3bbcbd46 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog.xml @@ -0,0 +1,149 @@ + + + + + + + + + + _bind_names + + + + + + + + + + _asgns + + + + + + + + + + + _objects + + + + + + action + Event_createResponse + + + description + + + + edit_order + + + + + + encoding + UTF-8 + + + enctype + + + + group_list + + + left + right + center + + + + + groups + + + + center + + + your_response_event_notification_message + your_response_event_text_content + your_response_workflow_action + + + + + left + + + your_response_event_title + your_response_event_portal_type + your_response_event_resource + your_response_event_start_date + your_response_event_content_type + + + + + right + + + my_default_destination + my_default_source_title + + + + + + + + id + WebMessage_viewCreateResponseDialog + + + method + POST + + + name + Event_viewWorkflowRespondActionDialog + + + pt + form_dialog + + + row_length + 4 + + + stored_encoding + UTF-8 + + + title + Create Response + + + unicode_mode + 0 + + + update_action + Event_updateCreateResponse + + + update_action_title + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/my_default_destination.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/my_default_destination.xml new file mode 100644 index 00000000000..bb6cd698331 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/my_default_destination.xml @@ -0,0 +1,163 @@ + + + + + + + + + + delegated_list + + + default + items + required + title + + + + + id + my_default_destination + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + default + + AAAAAAAAAAI= + + + + field_id + + + + form_id + + + + items + + AAAAAAAAAAM= + + + + target + + + + title + + + + + + + values + + + + default + + + + field_id + my_list_field + + + form_id + Base_viewFieldLibrary + + + items + + + + + + required + 1 + + + target + Click to edit the target + + + title + Sender or Caller + + + view_separator + + +]]> + + + + + + + + + + + + + + + _text + context/Event_getPreferredResponseEventSource + + + + + + + + + + + + _text + context/Event_getPreferredResponseEventSourceItemList + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/my_default_source_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/my_default_source_title.xml new file mode 100644 index 00000000000..2caa11af76a --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/my_default_source_title.xml @@ -0,0 +1,96 @@ + + + + + + + + + + delegated_list + + + title + + + + + id + my_default_source_title + + + 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_event_source_title + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + title + Recipient + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_content_type.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_content_type.xml new file mode 100644 index 00000000000..3ccb7f53516 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_content_type.xml @@ -0,0 +1,275 @@ + + + + + + + + + + id + your_response_event_content_type + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + required_not_found + Input is required but no input given. + + + too_long + Too much input was given. + + + + + + overrides + + + + alternate_name + + + + css_class + + + + default + + + + description + + + + display_maxwidth + + + + display_width + + + + editable + + + + enabled + + + + external_validator + + + + extra + + + + hidden + + + + max_length + + + + required + + + + title + + + + truncate + + + + unicode + + + + whitespace_preserve + + + + + + + tales + + + + alternate_name + + + + css_class + + + + default + + AAAAAAAAAAI= + + + + description + + + + display_maxwidth + + + + display_width + + + + editable + + + + enabled + + + + external_validator + + + + extra + + + + hidden + + + + max_length + + + + required + + + + title + + + + truncate + + + + unicode + + + + whitespace_preserve + + + + + + + values + + + + alternate_name + + + + css_class + hidden_label + + + default + + + + description + + + + display_maxwidth + + + + display_width + 20 + + + editable + 1 + + + enabled + 1 + + + external_validator + + + + extra + + + + hidden + 1 + + + max_length + + + + required + 0 + + + title + Content Type + + + truncate + 0 + + + unicode + 0 + + + whitespace_preserve + 0 + + + + + + + + + + + + + + + _text + context/Event_getPreferredResponseEventContentType + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_notification_message.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_notification_message.xml new file mode 100644 index 00000000000..06bd5ba4a0f --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_notification_message.xml @@ -0,0 +1,126 @@ + + + + + + + + + + delegated_list + + + items + title + + + + + id + your_response_event_notification_message + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + field_id + + + + form_id + + + + items + + AAAAAAAAAAI= + + + + target + + + + title + + + + + + + values + + + + field_id + my_list_field + + + form_id + Base_viewFieldLibrary + + + items + + + + + + target + Click to edit the target + + + title + Notification Message + + + + + + + + + + + + + + + _text + python: here.Event_getNotificationMessageItemList(response_only=True) + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_portal_type.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_portal_type.xml new file mode 100644 index 00000000000..7e1ccef9472 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_portal_type.xml @@ -0,0 +1,159 @@ + + + + + + + + + + delegated_list + + + default + items + required + title + + + + + id + your_response_event_portal_type + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + default + + AAAAAAAAAAI= + + + + field_id + + + + form_id + + + + items + + AAAAAAAAAAM= + + + + required + + + + target + + + + title + + + + + + + values + + + + default + + + + field_id + my_list_field + + + form_id + Base_viewFieldLibrary + + + items + + + + + + required + 1 + + + target + Click to edit the target + + + title + Event Type + + + + + + + + + + + + + + + _text + context/Event_getPreferredResponseEventPortalType + + + + + + + + + + + + _text + python: [(here.Localizer.erp5_ui.gettext(x), x) for x in here.getPortalEventTypeList()] + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_resource.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_resource.xml new file mode 100644 index 00000000000..fe192477630 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_resource.xml @@ -0,0 +1,150 @@ + + + + + + + + + + delegated_list + + + default + items + title + + + + + id + your_response_event_resource + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + default + + AAAAAAAAAAI= + + + + field_id + + + + form_id + + + + items + + AAAAAAAAAAM= + + + + target + + + + title + + + + + + + values + + + + default + + + + field_id + my_list_field + + + form_id + Base_viewFieldLibrary + + + items + + + + + + target + Click to edit the target + + + title + Event Nature + + + + + + + + + + + + + + + _text + here/getResource + + + + + + + + + + + + _text + here/Event_getResponseResourceItemList + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_start_date.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_start_date.xml new file mode 100644 index 00000000000..3f9c6dc52f2 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_start_date.xml @@ -0,0 +1,90 @@ + + + + + + + + + + delegated_list + + + + + + id + your_response_event_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_event_start_date + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_text_content.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_text_content.xml new file mode 100644 index 00000000000..d93d921aa48 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_text_content.xml @@ -0,0 +1,166 @@ + + + + + + + + + + delegated_list + + + css_class + default + editable + text_editor + title + + + + + id + your_response_event_text_content + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + css_class + + + + default + + AAAAAAAAAAI= + + + + editable + + + + field_id + + + + form_id + + + + target + + + + text_editor + + AAAAAAAAAAM= + + + + title + + + + + + + values + + + + css_class + page + + + default + + + + editable + 1 + + + field_id + my_text_content + + + form_id + Base_viewCRMFieldLibrary + + + target + Click to edit the target + + + text_editor + text_area + + + title + Message + + + + + + + + + + + + + + + _text + python: context.getReplyBody(content_type=context.Event_getPreferredResponseEventContentType()) + + + + + + + + + + + + _text + python: context.Base_getEditorFieldPreferredTextEditor(content_type=context.Event_getPreferredResponseEventContentType()) + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_title.xml new file mode 100644 index 00000000000..1af1b65b597 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_title.xml @@ -0,0 +1,124 @@ + + + + + + + + + + delegated_list + + + default + title + + + + + id + your_response_event_title + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + default + + AAAAAAAAAAI= + + + + field_id + + + + form_id + + + + target + + + + title + + + + + + + values + + + + default + + + + field_id + my_string_field + + + form_id + Base_viewFieldLibrary + + + target + Click to edit the target + + + title + Title + + + + + + + + + + + + + + + _text + python: here.hasTitle() and \'Re: %s\' % here.getTitle() or \'Re: %s\' % (here.getFollowUpTitle()) + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_workflow_action.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_workflow_action.xml new file mode 100644 index 00000000000..7029c1045eb --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_workflow_action.xml @@ -0,0 +1,161 @@ + + + + + + + + + + delegated_list + + + first_item + items + orientation + title + + + + + id + your_response_workflow_action + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + field_id + + + + first_item + + + + form_id + + + + items + + AAAAAAAAAAI= + + + + orientation + + + + target + + + + title + + + + + + + values + + + + field_id + my_radio_field + + + first_item + 1 + + + form_id + Base_viewFieldLibrary + + + items + + + + Send it immediately + send + + + Plan it at the given date + plan + + + Declare as Received + stop + + + Edit it as a Draft + draft + + + + + + orientation + horizontal + + + target + Click to edit the target + + + title + Action to be triggered on the Response Event + + + + + + + + + + + + + + + _text + here/Event_getWorkflowActionList + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation.xml new file mode 100644 index 00000000000..c82180f441b --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation.xml @@ -0,0 +1,156 @@ + + + + + + + + + + _bind_names + + + + + + + + + + _asgns + + + + + + + + + + + _objects + + + + + + action + + + + description + + + + edit_order + + + + + + encoding + UTF-8 + + + enctype + + + + group_list + + + left + right + center + bottom + hidden + + + + + groups + + + + bottom + + + + + + center + + + + + + hidden + + + + + + left + + + my_source_organisation_title + my_source_person_first_name + my_source_person_last_name + my_source_person_default_email_text + my_source_person_default_telephone_text + + + + + right + + + + + + + + + id + WebMessage_viewWebFormInformation + + + method + POST + + + name + WebMessage_viewWebFormInformation + + + pt + form_view + + + row_length + 4 + + + stored_encoding + UTF-8 + + + title + Sender Informations + + + unicode_mode + 0 + + + update_action + + + + update_action_title + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_organisation_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_organisation_title.xml new file mode 100644 index 00000000000..5e676503677 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_organisation_title.xml @@ -0,0 +1,106 @@ + + + + + + + + + + delegated_list + + + display_width + editable + title + + + + + id + my_source_organisation_title + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + field_id + + + + form_id + + + + target + + + + + + + values + + + + display_width + 20 + + + editable + 0 + + + field_id + my_string_field + + + form_id + Base_viewFieldLibrary + + + target + Click to edit the target + + + title + Sender Organisation + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_default_email_text.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_default_email_text.xml new file mode 100644 index 00000000000..ad098727c5a --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_default_email_text.xml @@ -0,0 +1,106 @@ + + + + + + + + + + delegated_list + + + display_width + editable + title + + + + + id + my_source_person_default_email_text + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + field_id + + + + form_id + + + + target + + + + + + + values + + + + display_width + 20 + + + editable + 0 + + + field_id + my_string_field + + + form_id + Base_viewFieldLibrary + + + target + Click to edit the target + + + title + Sender Email Address + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_default_telephone_text.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_default_telephone_text.xml new file mode 100644 index 00000000000..5a358aba198 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_default_telephone_text.xml @@ -0,0 +1,106 @@ + + + + + + + + + + delegated_list + + + display_width + editable + title + + + + + id + my_source_person_default_telephone_text + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + field_id + + + + form_id + + + + target + + + + + + + values + + + + display_width + 20 + + + editable + 0 + + + field_id + my_string_field + + + form_id + Base_viewFieldLibrary + + + target + Click to edit the target + + + title + Sender Telephone Number + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_first_name.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_first_name.xml new file mode 100644 index 00000000000..3a6b5b7c85b --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_first_name.xml @@ -0,0 +1,106 @@ + + + + + + + + + + delegated_list + + + display_width + editable + title + + + + + id + my_source_person_first_name + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + field_id + + + + form_id + + + + target + + + + + + + values + + + + display_width + 20 + + + editable + 0 + + + field_id + my_string_field + + + form_id + Base_viewFieldLibrary + + + target + Click to edit the target + + + title + Sender First Name + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_last_name.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_last_name.xml new file mode 100644 index 00000000000..2675842c0f8 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_last_name.xml @@ -0,0 +1,106 @@ + + + + + + + + + + delegated_list + + + display_width + editable + title + + + + + id + my_source_person_last_name + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + field_id + + + + form_id + + + + target + + + + + + + values + + + + display_width + 20 + + + editable + 0 + + + field_id + my_string_field + + + form_id + Base_viewFieldLibrary + + + target + Click to edit the target + + + title + Sender Last Name + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_addWebMessage.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_addWebMessage.py new file mode 100644 index 00000000000..e0e3178bd15 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_addWebMessage.py @@ -0,0 +1,39 @@ +"""Proxy Role Auditor is required to create activity +""" +portal = context.getPortalObject() +portal_type = 'Web Message' +module = portal.getDefaultModule(portal_type) + +translate = portal.Base_translateString + +edit_kw = {'portal_type': portal_type, + 'title': title, + 'start_date': DateTime(), + 'source_organisation_title': source_organisation_title, + 'source_person_first_name': source_person_first_name, + 'source_person_last_name': source_person_last_name, + 'source_person_default_email_text': source_person_default_email_text, + 'source_person_default_telephone_text': source_person_default_telephone_text, + 'text_content': text_content, + 'content_type': 'text/plain', + 'resource': resource, + 'source_carrier': context.getWebSectionValue().getRelativeUrl(), + } +connected_user = portal.portal_membership.getAuthenticatedMember().getUserValue() +if connected_user is not None: + edit_kw['source'] = connected_user.getRelativeUrl() + +# We do not call portal_contribution for two reasons: +# 1- Metadata discovery will be run by alarms with allowed user to access other documents. +# 2- A proxy role can not wrap portal_contributions calls and disallow Anonymous user to create the document. +tag = 'incoming_web_message' +edit_kw['activate_kw'] = {'tag': tag} +module.activate(tag=tag, activity='SQLQueue').EventModule_addWebMessage(**edit_kw) + +# Trigger explicitly the alarm which will run discoverMetadata on created event, then +# Fill in discoverable properties (sender, recipient, ...) and change workflow states. +# XXX hardcoded id, must be picked up by reference and version API +portal.portal_alarms.fetch_incoming_web_message_list.activate(after_tag=tag).activeSense() + +portal_status_message = translate('Your message has been successfully submitted.') +context.getWebSectionValue().getParentValue().Base_redirect(keep_items={'portal_status_message': portal_status_message}) diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_addWebMessage.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_addWebMessage.xml new file mode 100644 index 00000000000..6f300e268fe --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_addWebMessage.xml @@ -0,0 +1,70 @@ + + + + + + + + + + Script_magic + 3 + + + _bind_names + + + + + + + + + + _asgns + + + + name_container + container + + + name_context + context + + + name_m_self + script + + + name_subpath + traverse_subpath + + + + + + + + + + + _params + source_person_default_email_text=None, source_person_default_telephone_text=None, source_organisation_title=None, title=None, text_content=None, source_person_first_name=None, source_person_last_name=None, resource=None, **kw + + + _proxy_roles + + + Auditor + + + + + id + WebSection_addWebMessage + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_getEventResourceItemList.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_getEventResourceItemList.py new file mode 100644 index 00000000000..52e2629a054 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_getEventResourceItemList.py @@ -0,0 +1,20 @@ +"""Inspired by Event_getResourceItemList +Use Auditor proxy role to let anonymous users accessing resources. +""" + +from Products.ERP5Type.Cache import CachingMethod +portal = context.getPortalObject() + +sql_kw = {'portal_type': portal.getPortalResourceTypeList(), + 'use_uid': portal.portal_categories.getCategoryUid(portal.portal_preferences.getPreferredEventUse(), base_category='use'), + 'validation_state': 'validated', + 'sort_on': 'title'} + +def getResourceItemList(): + return [('', '')] + [(result.getTitle(), result.getRelativeUrl()) for result in portal.portal_catalog(**sql_kw)] + +getResourceItemList = CachingMethod(getResourceItemList, + id=(script.id, context.Localizer.get_selected_language()), + cache_factory='erp5_ui_long') + +return getResourceItemList() diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_getEventResourceItemList.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_getEventResourceItemList.xml new file mode 100644 index 00000000000..65caf949439 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_getEventResourceItemList.xml @@ -0,0 +1,70 @@ + + + + + + + + + + Script_magic + 3 + + + _bind_names + + + + + + + + + + _asgns + + + + name_container + container + + + name_context + context + + + name_m_self + script + + + name_subpath + traverse_subpath + + + + + + + + + + + _params + + + + _proxy_roles + + + Auditor + + + + + id + WebSection_getEventResourceItemList + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog.xml new file mode 100644 index 00000000000..85d0d73a4c3 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog.xml @@ -0,0 +1,162 @@ + + + + + + + + + + _bind_names + + + + + + + + + + _asgns + + + + + + + + + + + _objects + + + + + + action + WebSection_addWebMessage + + + description + + + + edit_order + + + + + + encoding + UTF-8 + + + enctype + + + + group_list + + + left + right + center + bottom + hidden + + + + + groups + + + + bottom + + + + + + center + + + + + + hidden + + + your_source_organisation_title + your_title + + + + + left + + + my_text_content + your_source_person_first_name + your_source_person_last_name + your_source_person_default_email_text + your_source_person_telephone_text + your_resource + your_text_content + your_captcha + + + + + right + + + + + + + + + id + WebSection_viewAddWebMessageDialog + + + method + POST + + + name + WebSection_viewAddWebMessageDialog + + + pt + form_dialog + + + row_length + 4 + + + stored_encoding + UTF-8 + + + title + Send + + + unicode_mode + 0 + + + update_action + + + + update_action_title + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/my_text_content.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/my_text_content.xml new file mode 100644 index 00000000000..09c9dd5cdbd --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/my_text_content.xml @@ -0,0 +1,142 @@ + + + + + + + + + + delegated_list + + + css_class + description + enabled + title + + + + + id + my_text_content + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + css_class + + + + description + + + + enabled + + AAAAAAAAAAI= + + + + field_id + + + + form_id + + + + target + + + + title + + + + + + + values + + + + css_class + hidden_label + + + description + + + + enabled + 1 + + + field_id + my_text_content + + + form_id + Base_viewWebFieldLibrary + + + target + Click to edit the target + + + title + Text Content + + + + + + + + + + + + + + + _text + not:here/getUrlString + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_captcha.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_captcha.xml new file mode 100644 index 00000000000..993f5aeebaf --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_captcha.xml @@ -0,0 +1,101 @@ + + + + + + + + + + delegated_list + + + css_class + title + + + + + id + your_captcha + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + field_id + + + + form_id + + + + target + + + + + + + values + + + + css_class + required + + + field_id + your_captcha + + + form_id + Base_viewFieldLibrary + + + target + Click to edit the target + + + title + Type in the String of Letters that you See in the Image into the Text Box + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_resource.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_resource.xml new file mode 100644 index 00000000000..04a8e537369 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_resource.xml @@ -0,0 +1,121 @@ + + + + + + + + + + delegated_list + + + required + title + items + + + + + id + your_resource + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + field_id + + + + form_id + + + + items + + AAAAAAAAAAI= + + + + target + + + + + + + values + + + + field_id + my_list_field + + + form_id + Base_viewFieldLibrary + + + required + 1 + + + target + Click to edit the target + + + title + Message Subject + + + + + + + + + + + + + + + _text + here/WebSection_getEventResourceItemList + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_organisation_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_organisation_title.xml new file mode 100644 index 00000000000..7262de7fe68 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_organisation_title.xml @@ -0,0 +1,124 @@ + + + + + + + + + + delegated_list + + + default + title + + + + + id + your_source_organisation_title + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + default + + AAAAAAAAAAI= + + + + field_id + + + + form_id + + + + target + + + + title + + + + + + + values + + + + default + + + + field_id + my_string_field + + + form_id + Base_viewFieldLibrary + + + target + Click to edit the target + + + title + Organisation + + + + + + + + + + + + + + + _text + python: here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue() is not None and here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue().getSubordinationTitle() or None + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_default_email_text.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_default_email_text.xml new file mode 100644 index 00000000000..a5efff5f214 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_default_email_text.xml @@ -0,0 +1,129 @@ + + + + + + + + + + delegated_list + + + default + required + title + + + + + id + your_source_person_default_email_text + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + default + + AAAAAAAAAAI= + + + + field_id + + + + form_id + + + + required + + + + target + + + + + + + values + + + + default + + + + field_id + my_email + + + form_id + Base_viewFieldLibrary + + + required + 1 + + + target + Click to edit the target + + + title + Email Address + + + + + + + + + + + + + + + _text + python: here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue() is not None and here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue().getDefaultEmailText() or None + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_first_name.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_first_name.xml new file mode 100644 index 00000000000..35ed1507952 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_first_name.xml @@ -0,0 +1,133 @@ + + + + + + + + + + delegated_list + + + default + required + title + + + + + id + your_source_person_first_name + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + default + + AAAAAAAAAAI= + + + + field_id + + + + form_id + + + + required + + + + target + + + + title + + + + + + + values + + + + default + + + + field_id + my_string_field + + + form_id + Base_viewFieldLibrary + + + required + 1 + + + target + Click to edit the target + + + title + First Name + + + + + + + + + + + + + + + _text + python: here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue() is not None and here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue().getFirstName() or None + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_last_name.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_last_name.xml new file mode 100644 index 00000000000..a6f48e8fbfc --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_last_name.xml @@ -0,0 +1,133 @@ + + + + + + + + + + delegated_list + + + default + required + title + + + + + id + your_source_person_last_name + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + default + + AAAAAAAAAAI= + + + + field_id + + + + form_id + + + + required + + + + target + + + + title + + + + + + + values + + + + default + + + + field_id + my_string_field + + + form_id + Base_viewFieldLibrary + + + required + 1 + + + target + Click to edit the target + + + title + Last Name + + + + + + + + + + + + + + + _text + python: here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue() is not None and here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue().getLastName() or None + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_telephone_text.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_telephone_text.xml new file mode 100644 index 00000000000..424e82e7b09 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_telephone_text.xml @@ -0,0 +1,124 @@ + + + + + + + + + + delegated_list + + + default + title + + + + + id + your_source_person_telephone_text + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + default + + AAAAAAAAAAI= + + + + field_id + + + + form_id + + + + target + + + + title + + + + + + + values + + + + default + + + + field_id + my_string_field + + + form_id + Base_viewFieldLibrary + + + target + Click to edit the target + + + title + Telephone + + + + + + + + + + + + + + + _text + python: here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue() is not None and here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue().getDefaultTelephoneText() or None + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_text_content.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_text_content.xml new file mode 100644 index 00000000000..4ba6f545e0f --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_text_content.xml @@ -0,0 +1,111 @@ + + + + + + + + + + delegated_list + + + description + required + title + width + + + + + id + your_text_content + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + field_id + + + + form_id + + + + target + + + + + + + values + + + + description + + + + field_id + my_text_area_field + + + form_id + Base_viewWebFieldLibrary + + + required + 1 + + + target + Click to edit the target + + + title + Message + + + width + 40 + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_title.xml new file mode 100644 index 00000000000..7cb82810e65 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_title.xml @@ -0,0 +1,101 @@ + + + + + + + + + + delegated_list + + + description + title + + + + + id + your_title + + + message_values + + + + external_validator_failed + The input failed the external validator. + + + + + + overrides + + + + field_id + + + + form_id + + + + target + + + + + + + tales + + + + field_id + + + + form_id + + + + target + + + + + + + values + + + + description + + + + field_id + your_title + + + form_id + Base_viewDialogFieldLibrary + + + target + Click to edit the target + + + title + Subject + + + + + + + + diff --git a/bt5/erp5_ai_business_bot/bt/dependency_list b/bt5/erp5_ai_business_bot/bt/dependency_list new file mode 100644 index 00000000000..8be73656578 --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/dependency_list @@ -0,0 +1,5 @@ +erp5_base +erp5_web +erp5_ingestion_mysql_innodb_catalog, erp5_ingestion +erp5_dms +erp5_crm \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/description b/bt5/erp5_ai_business_bot/bt/description new file mode 100644 index 00000000000..5f2ca8cc2bd --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/description @@ -0,0 +1 @@ +Provides the ability to train a model that can automatically tag and process web messages. \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/maintainer_list b/bt5/erp5_ai_business_bot/bt/maintainer_list new file mode 100644 index 00000000000..8bc0281dbdf --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/maintainer_list @@ -0,0 +1 @@ +Noah Brackenbury \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/template_format_version b/bt5/erp5_ai_business_bot/bt/template_format_version new file mode 100644 index 00000000000..56a6051ca2b --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/template_format_version @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/template_skin_id_list b/bt5/erp5_ai_business_bot/bt/template_skin_id_list new file mode 100644 index 00000000000..2ddceb56377 --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/template_skin_id_list @@ -0,0 +1 @@ +erp5_web_crm \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/title b/bt5/erp5_ai_business_bot/bt/title new file mode 100644 index 00000000000..32a78b9cab0 --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/title @@ -0,0 +1 @@ +erp5_ai_business_bot \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/version b/bt5/erp5_ai_business_bot/bt/version new file mode 100644 index 00000000000..56a6051ca2b --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/version @@ -0,0 +1 @@ +1 \ No newline at end of file -- 2.30.9 From 69b14a2e22c9b7d3333c5f785b648eaea1b812f7 Mon Sep 17 00:00:00 2001 From: Noah Brackenbury Date: Fri, 1 Sep 2017 15:04:15 +0000 Subject: [PATCH 02/12] Moved files to new skin folder, erp5_business_bot --- ...erp5_web_crm.xml => erp5_business_bot.xml} | 4 +- .../WebMessage_followUpWebMessage.py | 0 .../WebMessage_followUpWebMessage.xml | 0 .../WebMessage_parseWebMessage.xml | 0 .../WebMessage_setModel.xml | 0 .../WebMessage_trainOnWebMessage.xml | 0 .../Alarm_fetchIngestedWebMessageList.py | 16 - .../Alarm_fetchIngestedWebMessageList.xml | 62 ---- .../Alarm_processIngestedWebMessageList.py | 15 - .../Alarm_processIngestedWebMessageList.xml | 62 ---- .../erp5_web_crm/EventModule_addWebMessage.py | 7 - .../EventModule_addWebMessage.xml | 71 ----- .../erp5_web_crm/Event_createSenderPerson.py | 26 -- .../erp5_web_crm/Event_createSenderPerson.xml | 62 ---- .../Event_getNotificationMessageItemList.py | 28 -- .../Event_getNotificationMessageItemList.xml | 62 ---- .../Event_viewCreateSenderPersonDialog.xml | 155 --------- .../your_default_email_text.xml | 275 ---------------- .../your_default_telephone_text.xml | 275 ---------------- .../your_first_name.xml | 275 ---------------- .../your_last_name.xml | 275 ---------------- .../Ticket_createWebMessageResponse.py | 70 ---- .../Ticket_createWebMessageResponse.xml | 62 ---- .../erp5_web_crm/WebMessage_createResponse.py | 42 --- .../WebMessage_createResponse.xml | 62 ---- .../erp5_web_crm/WebMessage_view.xml | 163 ---------- .../WebMessage_view/attachment_list.xml | 90 ------ .../my_aggregate_title_list.xml | 90 ------ .../WebMessage_view/my_causality_title.xml | 90 ------ .../WebMessage_view/my_content_type.xml | 90 ------ .../my_default_follow_up_title.xml | 90 ------ .../WebMessage_view/my_description.xml | 90 ------ .../my_destination_section_title.xml | 96 ------ .../my_destination_title_list.xml | 90 ------ .../WebMessage_view/my_reference.xml | 96 ------ .../WebMessage_view/my_resource.xml | 90 ------ .../my_source_section_title.xml | 96 ------ .../WebMessage_view/my_source_title.xml | 101 ------ .../WebMessage_view/my_start_date.xml | 90 ------ .../WebMessage_view/my_subject_list.xml | 298 ------------------ .../WebMessage_view/my_text_content.xml | 90 ------ .../erp5_web_crm/WebMessage_view/my_title.xml | 90 ------ .../my_translated_portal_type.xml | 90 ------ .../my_translated_simulation_state_title.xml | 90 ------ .../WebMessage_viewCreateResponseDialog.xml | 149 --------- .../my_default_destination.xml | 163 ---------- .../my_default_source_title.xml | 96 ------ .../your_response_event_content_type.xml | 275 ---------------- ...ur_response_event_notification_message.xml | 126 -------- .../your_response_event_portal_type.xml | 159 ---------- .../your_response_event_resource.xml | 150 --------- .../your_response_event_start_date.xml | 90 ------ .../your_response_event_text_content.xml | 166 ---------- .../your_response_event_title.xml | 124 -------- .../your_response_workflow_action.xml | 161 ---------- .../WebMessage_viewWebFormInformation.xml | 156 --------- .../my_source_organisation_title.xml | 106 ------- .../my_source_person_default_email_text.xml | 106 ------- ...y_source_person_default_telephone_text.xml | 106 ------- .../my_source_person_first_name.xml | 106 ------- .../my_source_person_last_name.xml | 106 ------- .../erp5_web_crm/WebSection_addWebMessage.py | 39 --- .../erp5_web_crm/WebSection_addWebMessage.xml | 70 ---- .../WebSection_getEventResourceItemList.py | 20 -- .../WebSection_getEventResourceItemList.xml | 70 ---- .../WebSection_viewAddWebMessageDialog.xml | 162 ---------- .../my_text_content.xml | 142 --------- .../your_captcha.xml | 101 ------ .../your_resource.xml | 121 ------- .../your_source_organisation_title.xml | 124 -------- .../your_source_person_default_email_text.xml | 129 -------- .../your_source_person_first_name.xml | 133 -------- .../your_source_person_last_name.xml | 133 -------- .../your_source_person_telephone_text.xml | 124 -------- .../your_text_content.xml | 111 ------- .../your_title.xml | 101 ------ bt5/erp5_ai_business_bot/bt/dependency_list | 1 - .../bt/template_skin_id_list | 2 +- 78 files changed, 3 insertions(+), 7851 deletions(-) rename bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/{erp5_web_crm.xml => erp5_business_bot.xml} (81%) rename bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/{erp5_web_crm => erp5_business_bot}/WebMessage_followUpWebMessage.py (100%) rename bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/{erp5_web_crm => erp5_business_bot}/WebMessage_followUpWebMessage.xml (100%) rename bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/{erp5_web_crm => erp5_business_bot}/WebMessage_parseWebMessage.xml (100%) rename bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/{erp5_web_crm => erp5_business_bot}/WebMessage_setModel.xml (100%) rename bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/{erp5_web_crm => erp5_business_bot}/WebMessage_trainOnWebMessage.xml (100%) delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_fetchIngestedWebMessageList.py delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_fetchIngestedWebMessageList.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_processIngestedWebMessageList.py delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_processIngestedWebMessageList.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/EventModule_addWebMessage.py delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/EventModule_addWebMessage.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_createSenderPerson.py delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_createSenderPerson.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_getNotificationMessageItemList.py delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_getNotificationMessageItemList.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_default_email_text.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_default_telephone_text.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_first_name.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_last_name.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Ticket_createWebMessageResponse.py delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Ticket_createWebMessageResponse.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_createResponse.py delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_createResponse.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/attachment_list.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_aggregate_title_list.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_causality_title.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_content_type.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_default_follow_up_title.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_description.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_destination_section_title.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_destination_title_list.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_reference.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_resource.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_source_section_title.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_source_title.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_start_date.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_subject_list.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_text_content.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_title.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_translated_portal_type.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_translated_simulation_state_title.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/my_default_destination.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/my_default_source_title.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_content_type.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_notification_message.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_portal_type.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_resource.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_start_date.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_text_content.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_title.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_workflow_action.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_organisation_title.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_default_email_text.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_default_telephone_text.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_first_name.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_last_name.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_addWebMessage.py delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_addWebMessage.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_getEventResourceItemList.py delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_getEventResourceItemList.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/my_text_content.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_captcha.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_resource.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_organisation_title.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_default_email_text.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_first_name.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_last_name.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_telephone_text.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_text_content.xml delete mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_title.xml diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot.xml similarity index 81% rename from bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm.xml rename to bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot.xml index bc0f6817063..c2df62ddddb 100644 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm.xml +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot.xml @@ -14,11 +14,11 @@ id - erp5_web_crm + erp5_business_bot title - CRM features for Web + Business Bot diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_followUpWebMessage.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.py similarity index 100% rename from bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_followUpWebMessage.py rename to bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.py diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_followUpWebMessage.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.xml similarity index 100% rename from bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_followUpWebMessage.xml rename to bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.xml diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_parseWebMessage.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_parseWebMessage.xml similarity index 100% rename from bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_parseWebMessage.xml rename to bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_parseWebMessage.xml diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_setModel.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_setModel.xml similarity index 100% rename from bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_setModel.xml rename to bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_setModel.xml diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_trainOnWebMessage.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_trainOnWebMessage.xml similarity index 100% rename from bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_trainOnWebMessage.xml rename to bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_trainOnWebMessage.xml diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_fetchIngestedWebMessageList.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_fetchIngestedWebMessageList.py deleted file mode 100644 index 1183d02a914..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_fetchIngestedWebMessageList.py +++ /dev/null @@ -1,16 +0,0 @@ -portal = context.getPortalObject() - -sql_kw = {'portal_type': 'Web Message', - 'source_carrier_portal_type': ('Web Section', 'Web Site',), - 'simulation_state': 'draft'} - - -result_list = list(portal.portal_catalog(**sql_kw)) -MAX_IN_ACTIVITIES = 5 -starting_index = 0 -while True: - local_path_list = [r.getPath() for r in result_list[starting_index:starting_index+MAX_IN_ACTIVITIES]] - if not local_path_list: - break - context.activate(activity='SQLQueue').Alarm_processIngestedWebMessageList(local_path_list) - starting_index += MAX_IN_ACTIVITIES diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_fetchIngestedWebMessageList.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_fetchIngestedWebMessageList.xml deleted file mode 100644 index 9aeae809c45..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_fetchIngestedWebMessageList.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - Script_magic - 3 - - - _bind_names - - - - - - - - - - _asgns - - - - name_container - container - - - name_context - context - - - name_m_self - script - - - name_subpath - traverse_subpath - - - - - - - - - - - _params - - - - id - Alarm_fetchIngestedWebMessageList - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_processIngestedWebMessageList.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_processIngestedWebMessageList.py deleted file mode 100644 index d13931991aa..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_processIngestedWebMessageList.py +++ /dev/null @@ -1,15 +0,0 @@ -portal = context.getPortalObject() -for path in path_list: - document = portal.restrictedTraverse(path) - # Useful to reproduce Ingestion process from beginning - # All properties of object are considered as user input - input_parameter_dict = {'portal_type': document.getPortalType()} - for property_id in document.propertyIds(): - if property_id not in ('portal_type', 'uid', 'id',) \ - and document.hasProperty(property_id): - input_parameter_dict[property_id] = document.getProperty(property_id) - filename = document.getFilename() - - # Now starts metadata discovery process - document.activate().discoverMetadata(filename=filename, input_parameter_dict=input_parameter_dict) - document.activate().WebMessage_followUpWebMessage() diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_processIngestedWebMessageList.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_processIngestedWebMessageList.xml deleted file mode 100644 index 8952e2972bb..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Alarm_processIngestedWebMessageList.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - Script_magic - 3 - - - _bind_names - - - - - - - - - - _asgns - - - - name_container - container - - - name_context - context - - - name_m_self - script - - - name_subpath - traverse_subpath - - - - - - - - - - - _params - path_list - - - id - Alarm_processIngestedWebMessageList - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/EventModule_addWebMessage.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/EventModule_addWebMessage.py deleted file mode 100644 index f078b324bd6..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/EventModule_addWebMessage.py +++ /dev/null @@ -1,7 +0,0 @@ -"""Manager Proxy Role allows anonymous users to create events -""" -if REQUEST is not None: - from zExceptions import Unauthorized - portal = context.getPortalObject() - raise Unauthorized(portal.Base_translateString('You are not allowed to call this script by your own')) -context.newContent(**kw) diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/EventModule_addWebMessage.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/EventModule_addWebMessage.xml deleted file mode 100644 index 1b7270fe769..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/EventModule_addWebMessage.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - Script_magic - 3 - - - _bind_names - - - - - - - - - - _asgns - - - - name_container - container - - - name_context - context - - - name_m_self - script - - - name_subpath - traverse_subpath - - - - - - - - - - - _params - REQUEST=None, **kw - - - _proxy_roles - - - Manager - Owner - - - - - id - EventModule_addWebMessage - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_createSenderPerson.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_createSenderPerson.py deleted file mode 100644 index 87599ec6f80..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_createSenderPerson.py +++ /dev/null @@ -1,26 +0,0 @@ -portal = context.getPortalObject() -portal_type = 'Person' -module = portal.getDefaultModule(portal_type) - -sender_list = [entity.getRelativeUrl() for entity\ - in context.Base_getEntityListFromFromHeader(default_email_text or '')] - -if sender_list: - context.setSourceList(sender_list) - message = portal.Base_translateString('Sender found from ${person_module_translated_title}.', - mapping={'person_module_translated_title': module.getTranslatedTitle()}) - return context.Base_redirect(form_id=kw.get('form_id', 'view'), - keep_items={'portal_status_message': message}) - - -person = module.newContent(portal_type=portal_type, - default_email_text=default_email_text, - default_telephone_text=default_telephone_text, - first_name=first_name, - last_name=last_name) - -context.setSourceValue(person) - -message = portal.Base_translateString('Sender Person Created.') -return context.Base_redirect(form_id=kw.get('form_id', 'view'), - keep_items={'portal_status_message': message}) diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_createSenderPerson.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_createSenderPerson.xml deleted file mode 100644 index 5680ff317e0..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_createSenderPerson.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - Script_magic - 3 - - - _bind_names - - - - - - - - - - _asgns - - - - name_container - container - - - name_context - context - - - name_m_self - script - - - name_subpath - traverse_subpath - - - - - - - - - - - _params - default_email_text=None, default_telephone_text=None, first_name=None, last_name=None, **kw - - - id - Event_createSenderPerson - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_getNotificationMessageItemList.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_getNotificationMessageItemList.py deleted file mode 100644 index fb322023bce..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_getNotificationMessageItemList.py +++ /dev/null @@ -1,28 +0,0 @@ -"""Return the notification messages that can be used as a template to create an event. -""" -reference_set = set() # If there are two messages with same reference, we only - # display one entry, because later code will use getDocumentValue -item_list = [('', '')] - -portal = context.getPortalObject() - -preferred_use_list = portal.portal_preferences.getPreferredEventResponseUseList() - -for notification_message in portal.portal_catalog( - validation_state='validated', portal_type='Notification Message'): - notification_message = notification_message.getObject() - reference = notification_message.getReference() - if reference and reference not in reference_set: - reference_set.add(reference) - service = notification_message.getSpecialiseValue() - if response_only and preferred_use_list: - if service is not None: - for preferred_use in preferred_use_list: - if service.isMemberOf('use/%s' % preferred_use): - item_list.append( - ('%s - %s' % (reference, notification_message.getTranslatedTitle()), reference)) - else: - item_list.append( - ('%s - %s' % (reference, notification_message.getTranslatedTitle()), reference)) - -return sorted(item_list) diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_getNotificationMessageItemList.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_getNotificationMessageItemList.xml deleted file mode 100644 index fb892452638..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_getNotificationMessageItemList.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - Script_magic - 3 - - - _bind_names - - - - - - - - - - _asgns - - - - name_container - container - - - name_context - context - - - name_m_self - script - - - name_subpath - traverse_subpath - - - - - - - - - - - _params - response_only=False - - - id - Event_getNotificationMessageItemList - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog.xml deleted file mode 100644 index 037a7af7a0f..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog.xml +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - - - _bind_names - - - - - - - - - - _asgns - - - - - - - - - - - _objects - - - - - - action - Event_createSenderPerson - - - description - - - - edit_order - - - - - - encoding - UTF-8 - - - enctype - - - - group_list - - - left - right - center - bottom - hidden - - - - - groups - - - - bottom - - - - - - center - - - - - - hidden - - - - - - left - - - your_first_name - your_last_name - your_default_email_text - your_default_telephone_text - - - - - right - - - - - - - - - id - Event_viewCreateSenderPersonDialog - - - method - POST - - - name - Event_viewCreateSenderPersonDialog - - - pt - form_dialog - - - row_length - 4 - - - stored_encoding - UTF-8 - - - title - Create Sender - - - unicode_mode - 0 - - - update_action - - - - update_action_title - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_default_email_text.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_default_email_text.xml deleted file mode 100644 index fbb5ff27cf4..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_default_email_text.xml +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - id - your_default_email_text - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - required_not_found - Input is required but no input given. - - - too_long - Too much input was given. - - - - - - overrides - - - - alternate_name - - - - css_class - - - - default - - - - description - - - - display_maxwidth - - - - display_width - - - - editable - - - - enabled - - - - external_validator - - - - extra - - - - hidden - - - - max_length - - - - required - - - - title - - - - truncate - - - - unicode - - - - whitespace_preserve - - - - - - - tales - - - - alternate_name - - - - css_class - - - - default - - AAAAAAAAAAI= - - - - description - - - - display_maxwidth - - - - display_width - - - - editable - - - - enabled - - - - external_validator - - - - extra - - - - hidden - - - - max_length - - - - required - - - - title - - - - truncate - - - - unicode - - - - whitespace_preserve - - - - - - - values - - - - alternate_name - - - - css_class - - - - default - - - - description - - - - display_maxwidth - - - - display_width - 20 - - - editable - 1 - - - enabled - 1 - - - external_validator - - - - extra - - - - hidden - 0 - - - max_length - - - - required - 0 - - - title - Email Address - - - truncate - 0 - - - unicode - 0 - - - whitespace_preserve - 0 - - - - - - - - - - - - - - - _text - here/getSourcePersonDefaultEmailText - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_default_telephone_text.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_default_telephone_text.xml deleted file mode 100644 index b15150b4843..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_default_telephone_text.xml +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - id - your_default_telephone_text - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - required_not_found - Input is required but no input given. - - - too_long - Too much input was given. - - - - - - overrides - - - - alternate_name - - - - css_class - - - - default - - - - description - - - - display_maxwidth - - - - display_width - - - - editable - - - - enabled - - - - external_validator - - - - extra - - - - hidden - - - - max_length - - - - required - - - - title - - - - truncate - - - - unicode - - - - whitespace_preserve - - - - - - - tales - - - - alternate_name - - - - css_class - - - - default - - AAAAAAAAAAI= - - - - description - - - - display_maxwidth - - - - display_width - - - - editable - - - - enabled - - - - external_validator - - - - extra - - - - hidden - - - - max_length - - - - required - - - - title - - - - truncate - - - - unicode - - - - whitespace_preserve - - - - - - - values - - - - alternate_name - - - - css_class - - - - default - - - - description - - - - display_maxwidth - - - - display_width - 20 - - - editable - 1 - - - enabled - 1 - - - external_validator - - - - extra - - - - hidden - 0 - - - max_length - - - - required - 0 - - - title - Telephone Number - - - truncate - 0 - - - unicode - 0 - - - whitespace_preserve - 0 - - - - - - - - - - - - - - - _text - here/getSourcePErsonDefaultTelephoneText - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_first_name.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_first_name.xml deleted file mode 100644 index 1e797ae2bb5..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_first_name.xml +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - id - your_first_name - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - required_not_found - Input is required but no input given. - - - too_long - Too much input was given. - - - - - - overrides - - - - alternate_name - - - - css_class - - - - default - - - - description - - - - display_maxwidth - - - - display_width - - - - editable - - - - enabled - - - - external_validator - - - - extra - - - - hidden - - - - max_length - - - - required - - - - title - - - - truncate - - - - unicode - - - - whitespace_preserve - - - - - - - tales - - - - alternate_name - - - - css_class - - - - default - - AAAAAAAAAAI= - - - - description - - - - display_maxwidth - - - - display_width - - - - editable - - - - enabled - - - - external_validator - - - - extra - - - - hidden - - - - max_length - - - - required - - - - title - - - - truncate - - - - unicode - - - - whitespace_preserve - - - - - - - values - - - - alternate_name - - - - css_class - - - - default - - - - description - - - - display_maxwidth - - - - display_width - 20 - - - editable - 1 - - - enabled - 1 - - - external_validator - - - - extra - - - - hidden - 0 - - - max_length - - - - required - 0 - - - title - First Name - - - truncate - 0 - - - unicode - 0 - - - whitespace_preserve - 0 - - - - - - - - - - - - - - - _text - here/getSourcePersonFirstName - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_last_name.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_last_name.xml deleted file mode 100644 index 389799753e0..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Event_viewCreateSenderPersonDialog/your_last_name.xml +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - id - your_last_name - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - required_not_found - Input is required but no input given. - - - too_long - Too much input was given. - - - - - - overrides - - - - alternate_name - - - - css_class - - - - default - - - - description - - - - display_maxwidth - - - - display_width - - - - editable - - - - enabled - - - - external_validator - - - - extra - - - - hidden - - - - max_length - - - - required - - - - title - - - - truncate - - - - unicode - - - - whitespace_preserve - - - - - - - tales - - - - alternate_name - - - - css_class - - - - default - - AAAAAAAAAAI= - - - - description - - - - display_maxwidth - - - - display_width - - - - editable - - - - enabled - - - - external_validator - - - - extra - - - - hidden - - - - max_length - - - - required - - - - title - - - - truncate - - - - unicode - - - - whitespace_preserve - - - - - - - values - - - - alternate_name - - - - css_class - - - - default - - - - description - - - - display_maxwidth - - - - display_width - 20 - - - editable - 1 - - - enabled - 1 - - - external_validator - - - - extra - - - - hidden - 0 - - - max_length - - - - required - 0 - - - title - Last Name - - - truncate - 0 - - - unicode - 0 - - - whitespace_preserve - 0 - - - - - - - - - - - - - - - _text - here/getSourcePersonLastName - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Ticket_createWebMessageResponse.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Ticket_createWebMessageResponse.py deleted file mode 100644 index bdbbc432d9b..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Ticket_createWebMessageResponse.py +++ /dev/null @@ -1,70 +0,0 @@ -""" -Create a response web message event from ticket -""" -portal = context.getPortalObject() -current_object = context.getObject() -portal_type='Web Message' -translateString = portal.Base_translateString -module = portal.getDefaultModule(portal_type) - -if not portal.Base_checkPermission(module.getId(), "Add portal content"): - return context.Base_redirect( - form_id, - keep_items=dict( - portal_status_message=translateString( - "You do not have permission to add new event.") - ) - ) - -# Create a new event -response = module.newContent( - portal_type=portal_type, - source=current_object.getDestination(), - destination=current_object.getSourceList(), - direction=direction, - resource=resource, - title='Re: ' + current_object.getTitle(), - text_content=text_content, - start_date=current_object.getStartDate(), - # follow_up=current_object, - # content_type=portal.portal_preferences.getPreferredTextEditor() and 'text/html' or 'text/plain' - # subject_list=current_object.getSubjectList() -) - -response.setFollowUpValueList([current_object]) - -if notification_message: - response.Event_setTextContentFromNotificationMessage( - reference=notification_message, - substitution_method_parameter_dict=dict( - reply_body='', - reply_subject=title or '' - ) - ) - -''' -if workflow_action: - portal.portal_workflow.doActionFor( - context, - workflow_action, - ) -''' - -message = translateString( - "Created and associated a new ${ticket_type} for the Web Message. Here is a recommended response.", - mapping=dict(ticket_type = translateString(ticket_type)) -) - -# Trigger appropriate workflow action -if not keep_draft: - if direction == 'incoming': - # Support event_workflow and event_simulation_workflow - if portal.portal_workflow.isTransitionPossible(response, 'receive'): - response.receive() - if portal.portal_workflow.isTransitionPossible(response, 'stop'): - response.stop() - else: - response.plan() - -return response.Base_redirect('Ticket_viewWebMessageResponseDialog', keep_items={'portal_status_message': message}) -#return response.Base_redirect('view', keep_items={'portal_status_message': message}) diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Ticket_createWebMessageResponse.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Ticket_createWebMessageResponse.xml deleted file mode 100644 index aed200a84b6..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/Ticket_createWebMessageResponse.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - Script_magic - 3 - - - _bind_names - - - - - - - - - - _asgns - - - - name_container - container - - - name_context - context - - - name_m_self - script - - - name_subpath - traverse_subpath - - - - - - - - - - - _params - title=None, resource=None, text_content=None,direction=None, source=None, destination=None, ticket_type=\'Ticket\', notification_message=None, keep_draft=False - - - id - Ticket_createWebMessageResponse - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_createResponse.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_createResponse.py deleted file mode 100644 index 917b511e61e..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_createResponse.py +++ /dev/null @@ -1,42 +0,0 @@ -""" - This script creates a new event with given metadata and - attaches it to the current ticket. -""" - - -portal = context.getPortalObject() -translateString = portal.Base_translateString -module = portal.getDefaultModule(portal_type) - -if portal_type not in module.getVisibleAllowedContentTypeList(): - return context.Base_redirect(form_id, - keep_items=dict( - portal_status_message=translateString("You do not have permission to add new event."))) - -# Create a new event -event = module.newContent(portal_type=portal_type, - title=title, - text_content=text_content, - content_type=portal.portal_preferences.getPreferredTextEditor() and 'text/html' or 'text/plain', - resource=resource, - source=source, - destination=destination, - start_date=DateTime(), - follow_up=context.getRelativeUrl()) - -# Trigger appropriate workflow action -if not keep_draft: - if direction == 'incoming': - # Support event_workflow and event_simulation_workflow - if portal.portal_workflow.isTransitionPossible(event, 'receive'): - event.receive() - if portal.portal_workflow.isTransitionPossible(event, 'stop'): - event.stop() - else: - event.plan() - -# Redirect to event -portal_status_message = translateString( - "Created and associated a new ${portal_type} to the ticket.", - mapping=dict(portal_type = translateString(portal_type))) -return event.Base_redirect('view', keep_items = dict(portal_status_message=portal_status_message), **kw) diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_createResponse.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_createResponse.xml deleted file mode 100644 index 6fbb0a971d7..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_createResponse.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - Script_magic - 3 - - - _bind_names - - - - - - - - - - _asgns - - - - name_container - container - - - name_context - context - - - name_m_self - script - - - name_subpath - traverse_subpath - - - - - - - - - - - _params - form_id=\'view\', portal_type=None, title=None, resource=None, text_content=None,direction=None, source=None, destination=None, keep_draft=False, **kw - - - id - WebMessage_createResponse - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view.xml deleted file mode 100644 index 933ddffef1e..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view.xml +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - _bind_names - - - - - - - - - - _asgns - - - - - - - - - - - _objects - - - - - - action - Base_edit - - - description - - - - encoding - UTF-8 - - - enctype - - - - group_list - - - left - right - center - bottom - hidden - - - - - groups - - - - bottom - - - my_text_content - - - - - center - - - my_description - my_aggregate_title_list - attachment_list - my_content_type - - - - - hidden - - - my_source_section_title - my_destination_section_title - - - - - left - - - my_title - my_reference - my_start_date - my_translated_portal_type - my_resource - my_causality_title - my_subject_list - - - - - right - - - my_source_title - my_destination_title_list - my_default_follow_up_title - my_translated_simulation_state_title - - - - - - - - id - WebMessage_view - - - method - POST - - - name - Event_view - - - pt - form_view - - - row_length - 4 - - - stored_encoding - UTF-8 - - - title - Event - - - unicode_mode - 0 - - - update_action - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/attachment_list.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/attachment_list.xml deleted file mode 100644 index 72950044a6b..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/attachment_list.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - delegated_list - - - - - - id - attachment_list - - - 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 - attachment_list - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_aggregate_title_list.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_aggregate_title_list.xml deleted file mode 100644 index d30f10ff4c0..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_aggregate_title_list.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - delegated_list - - - - - - id - my_aggregate_title_list - - - 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_aggregate_title_list - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_causality_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_causality_title.xml deleted file mode 100644 index 67742f3124b..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_causality_title.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - delegated_list - - - - - - id - my_causality_title - - - 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_causality_title - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_content_type.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_content_type.xml deleted file mode 100644 index f051e9a6c13..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_content_type.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - delegated_list - - - - - - id - my_content_type - - - 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_content_type - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_default_follow_up_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_default_follow_up_title.xml deleted file mode 100644 index 3de3f9aa68b..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_default_follow_up_title.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - delegated_list - - - - - - id - my_default_follow_up_title - - - 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_default_follow_up_title - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_description.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_description.xml deleted file mode 100644 index e703af92e08..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_description.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - delegated_list - - - - - - id - my_description - - - 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_description - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_destination_section_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_destination_section_title.xml deleted file mode 100644 index 5c1f4d80901..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_destination_section_title.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - delegated_list - - - title - - - - - id - my_destination_section_title - - - 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_destination_section_title - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - title - Recipient Organisation - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_destination_title_list.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_destination_title_list.xml deleted file mode 100644 index 0c7658d6b32..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_destination_title_list.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - delegated_list - - - - - - id - my_destination_title_list - - - 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_destination_title_list - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_reference.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_reference.xml deleted file mode 100644 index b184a3f86d6..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_reference.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - delegated_list - - - editable - - - - - id - my_reference - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - field_id - - - - form_id - - - - target - - - - - - - values - - - - editable - 0 - - - field_id - my_reference - - - form_id - Base_viewFieldLibrary - - - target - Click to edit the target - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_resource.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_resource.xml deleted file mode 100644 index 779ea43d630..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_resource.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - delegated_list - - - - - - id - my_resource - - - 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_event_resource - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_source_section_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_source_section_title.xml deleted file mode 100644 index 77611c2fb4f..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_source_section_title.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - delegated_list - - - title - - - - - id - my_source_section_title - - - 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_source_section_title - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - title - Sender Organisation - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_source_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_source_title.xml deleted file mode 100644 index 1413ec4109f..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_source_title.xml +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - delegated_list - - - allow_creation - editable - - - - - id - my_source_title - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - field_id - - - - form_id - - - - target - - - - - - - values - - - - allow_creation - 1 - - - editable - 1 - - - field_id - my_event_source_title - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_start_date.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_start_date.xml deleted file mode 100644 index 94c47a79ac4..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_start_date.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - delegated_list - - - - - - id - my_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_event_start_date - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_subject_list.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_subject_list.xml deleted file mode 100644 index a011d0f3350..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_subject_list.xml +++ /dev/null @@ -1,298 +0,0 @@ - - - - - - - - - - id - my_subject_list - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - line_too_long - A line was too long. - - - required_not_found - Input is required but no input given. - - - too_long - You entered too many characters. - - - too_many_lines - You entered too many lines. - - - - - - overrides - - - - alternate_name - - - - css_class - - - - default - - - - description - - - - editable - - - - enabled - - - - external_validator - - - - extra - - - - height - - - - hidden - - - - max_length - - - - max_linelength - - - - max_lines - - - - required - - - - title - - - - unicode - - - - view_separator - - - - whitespace_preserve - - - - width - - - - - - - tales - - - - alternate_name - - - - css_class - - - - default - - - - description - - - - editable - - - - enabled - - - - external_validator - - - - extra - - - - height - - - - hidden - - - - max_length - - - - max_linelength - - - - max_lines - - - - required - - - - title - - - - unicode - - - - view_separator - - - - whitespace_preserve - - - - width - - - - - - - values - - - - alternate_name - - - - css_class - - - - default - - - - - - description - - - - editable - 1 - - - enabled - 1 - - - external_validator - - - - extra - - - - height - 3 - - - hidden - 0 - - - max_length - - - - max_linelength - - - - max_lines - - - - required - 0 - - - title - Keywords - - - unicode - 0 - - - view_separator - - -]]> - - - whitespace_preserve - 0 - - - width - 30 - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_text_content.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_text_content.xml deleted file mode 100644 index fe398b47c62..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_text_content.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - delegated_list - - - - - - id - my_text_content - - - 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_text_content - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_title.xml deleted file mode 100644 index 07c998abe39..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_title.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - delegated_list - - - - - - id - my_title - - - 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_event_title - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_translated_portal_type.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_translated_portal_type.xml deleted file mode 100644 index 2ea7722de62..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_translated_portal_type.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - delegated_list - - - - - - id - my_translated_portal_type - - - 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_translated_portal_type - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_translated_simulation_state_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_translated_simulation_state_title.xml deleted file mode 100644 index 7bc23f5cf1b..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_view/my_translated_simulation_state_title.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - delegated_list - - - - - - id - my_translated_simulation_state_title - - - 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_translated_simulation_state_title - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog.xml deleted file mode 100644 index 50d3bbcbd46..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog.xml +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - - - - _bind_names - - - - - - - - - - _asgns - - - - - - - - - - - _objects - - - - - - action - Event_createResponse - - - description - - - - edit_order - - - - - - encoding - UTF-8 - - - enctype - - - - group_list - - - left - right - center - - - - - groups - - - - center - - - your_response_event_notification_message - your_response_event_text_content - your_response_workflow_action - - - - - left - - - your_response_event_title - your_response_event_portal_type - your_response_event_resource - your_response_event_start_date - your_response_event_content_type - - - - - right - - - my_default_destination - my_default_source_title - - - - - - - - id - WebMessage_viewCreateResponseDialog - - - method - POST - - - name - Event_viewWorkflowRespondActionDialog - - - pt - form_dialog - - - row_length - 4 - - - stored_encoding - UTF-8 - - - title - Create Response - - - unicode_mode - 0 - - - update_action - Event_updateCreateResponse - - - update_action_title - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/my_default_destination.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/my_default_destination.xml deleted file mode 100644 index bb6cd698331..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/my_default_destination.xml +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - delegated_list - - - default - items - required - title - - - - - id - my_default_destination - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - default - - AAAAAAAAAAI= - - - - field_id - - - - form_id - - - - items - - AAAAAAAAAAM= - - - - target - - - - title - - - - - - - values - - - - default - - - - field_id - my_list_field - - - form_id - Base_viewFieldLibrary - - - items - - - - - - required - 1 - - - target - Click to edit the target - - - title - Sender or Caller - - - view_separator - - -]]> - - - - - - - - - - - - - - - _text - context/Event_getPreferredResponseEventSource - - - - - - - - - - - - _text - context/Event_getPreferredResponseEventSourceItemList - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/my_default_source_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/my_default_source_title.xml deleted file mode 100644 index 2caa11af76a..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/my_default_source_title.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - delegated_list - - - title - - - - - id - my_default_source_title - - - 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_event_source_title - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - title - Recipient - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_content_type.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_content_type.xml deleted file mode 100644 index 3ccb7f53516..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_content_type.xml +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - id - your_response_event_content_type - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - required_not_found - Input is required but no input given. - - - too_long - Too much input was given. - - - - - - overrides - - - - alternate_name - - - - css_class - - - - default - - - - description - - - - display_maxwidth - - - - display_width - - - - editable - - - - enabled - - - - external_validator - - - - extra - - - - hidden - - - - max_length - - - - required - - - - title - - - - truncate - - - - unicode - - - - whitespace_preserve - - - - - - - tales - - - - alternate_name - - - - css_class - - - - default - - AAAAAAAAAAI= - - - - description - - - - display_maxwidth - - - - display_width - - - - editable - - - - enabled - - - - external_validator - - - - extra - - - - hidden - - - - max_length - - - - required - - - - title - - - - truncate - - - - unicode - - - - whitespace_preserve - - - - - - - values - - - - alternate_name - - - - css_class - hidden_label - - - default - - - - description - - - - display_maxwidth - - - - display_width - 20 - - - editable - 1 - - - enabled - 1 - - - external_validator - - - - extra - - - - hidden - 1 - - - max_length - - - - required - 0 - - - title - Content Type - - - truncate - 0 - - - unicode - 0 - - - whitespace_preserve - 0 - - - - - - - - - - - - - - - _text - context/Event_getPreferredResponseEventContentType - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_notification_message.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_notification_message.xml deleted file mode 100644 index 06bd5ba4a0f..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_notification_message.xml +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - delegated_list - - - items - title - - - - - id - your_response_event_notification_message - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - field_id - - - - form_id - - - - items - - AAAAAAAAAAI= - - - - target - - - - title - - - - - - - values - - - - field_id - my_list_field - - - form_id - Base_viewFieldLibrary - - - items - - - - - - target - Click to edit the target - - - title - Notification Message - - - - - - - - - - - - - - - _text - python: here.Event_getNotificationMessageItemList(response_only=True) - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_portal_type.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_portal_type.xml deleted file mode 100644 index 7e1ccef9472..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_portal_type.xml +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - - - - delegated_list - - - default - items - required - title - - - - - id - your_response_event_portal_type - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - default - - AAAAAAAAAAI= - - - - field_id - - - - form_id - - - - items - - AAAAAAAAAAM= - - - - required - - - - target - - - - title - - - - - - - values - - - - default - - - - field_id - my_list_field - - - form_id - Base_viewFieldLibrary - - - items - - - - - - required - 1 - - - target - Click to edit the target - - - title - Event Type - - - - - - - - - - - - - - - _text - context/Event_getPreferredResponseEventPortalType - - - - - - - - - - - - _text - python: [(here.Localizer.erp5_ui.gettext(x), x) for x in here.getPortalEventTypeList()] - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_resource.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_resource.xml deleted file mode 100644 index fe192477630..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_resource.xml +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - - - delegated_list - - - default - items - title - - - - - id - your_response_event_resource - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - default - - AAAAAAAAAAI= - - - - field_id - - - - form_id - - - - items - - AAAAAAAAAAM= - - - - target - - - - title - - - - - - - values - - - - default - - - - field_id - my_list_field - - - form_id - Base_viewFieldLibrary - - - items - - - - - - target - Click to edit the target - - - title - Event Nature - - - - - - - - - - - - - - - _text - here/getResource - - - - - - - - - - - - _text - here/Event_getResponseResourceItemList - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_start_date.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_start_date.xml deleted file mode 100644 index 3f9c6dc52f2..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_start_date.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - delegated_list - - - - - - id - your_response_event_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_event_start_date - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_text_content.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_text_content.xml deleted file mode 100644 index d93d921aa48..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_text_content.xml +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - - - - delegated_list - - - css_class - default - editable - text_editor - title - - - - - id - your_response_event_text_content - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - css_class - - - - default - - AAAAAAAAAAI= - - - - editable - - - - field_id - - - - form_id - - - - target - - - - text_editor - - AAAAAAAAAAM= - - - - title - - - - - - - values - - - - css_class - page - - - default - - - - editable - 1 - - - field_id - my_text_content - - - form_id - Base_viewCRMFieldLibrary - - - target - Click to edit the target - - - text_editor - text_area - - - title - Message - - - - - - - - - - - - - - - _text - python: context.getReplyBody(content_type=context.Event_getPreferredResponseEventContentType()) - - - - - - - - - - - - _text - python: context.Base_getEditorFieldPreferredTextEditor(content_type=context.Event_getPreferredResponseEventContentType()) - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_title.xml deleted file mode 100644 index 1af1b65b597..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_event_title.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - delegated_list - - - default - title - - - - - id - your_response_event_title - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - default - - AAAAAAAAAAI= - - - - field_id - - - - form_id - - - - target - - - - title - - - - - - - values - - - - default - - - - field_id - my_string_field - - - form_id - Base_viewFieldLibrary - - - target - Click to edit the target - - - title - Title - - - - - - - - - - - - - - - _text - python: here.hasTitle() and \'Re: %s\' % here.getTitle() or \'Re: %s\' % (here.getFollowUpTitle()) - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_workflow_action.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_workflow_action.xml deleted file mode 100644 index 7029c1045eb..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewCreateResponseDialog/your_response_workflow_action.xml +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - - - - delegated_list - - - first_item - items - orientation - title - - - - - id - your_response_workflow_action - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - field_id - - - - first_item - - - - form_id - - - - items - - AAAAAAAAAAI= - - - - orientation - - - - target - - - - title - - - - - - - values - - - - field_id - my_radio_field - - - first_item - 1 - - - form_id - Base_viewFieldLibrary - - - items - - - - Send it immediately - send - - - Plan it at the given date - plan - - - Declare as Received - stop - - - Edit it as a Draft - draft - - - - - - orientation - horizontal - - - target - Click to edit the target - - - title - Action to be triggered on the Response Event - - - - - - - - - - - - - - - _text - here/Event_getWorkflowActionList - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation.xml deleted file mode 100644 index c82180f441b..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation.xml +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - - - - _bind_names - - - - - - - - - - _asgns - - - - - - - - - - - _objects - - - - - - action - - - - description - - - - edit_order - - - - - - encoding - UTF-8 - - - enctype - - - - group_list - - - left - right - center - bottom - hidden - - - - - groups - - - - bottom - - - - - - center - - - - - - hidden - - - - - - left - - - my_source_organisation_title - my_source_person_first_name - my_source_person_last_name - my_source_person_default_email_text - my_source_person_default_telephone_text - - - - - right - - - - - - - - - id - WebMessage_viewWebFormInformation - - - method - POST - - - name - WebMessage_viewWebFormInformation - - - pt - form_view - - - row_length - 4 - - - stored_encoding - UTF-8 - - - title - Sender Informations - - - unicode_mode - 0 - - - update_action - - - - update_action_title - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_organisation_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_organisation_title.xml deleted file mode 100644 index 5e676503677..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_organisation_title.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - delegated_list - - - display_width - editable - title - - - - - id - my_source_organisation_title - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - field_id - - - - form_id - - - - target - - - - - - - values - - - - display_width - 20 - - - editable - 0 - - - field_id - my_string_field - - - form_id - Base_viewFieldLibrary - - - target - Click to edit the target - - - title - Sender Organisation - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_default_email_text.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_default_email_text.xml deleted file mode 100644 index ad098727c5a..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_default_email_text.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - delegated_list - - - display_width - editable - title - - - - - id - my_source_person_default_email_text - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - field_id - - - - form_id - - - - target - - - - - - - values - - - - display_width - 20 - - - editable - 0 - - - field_id - my_string_field - - - form_id - Base_viewFieldLibrary - - - target - Click to edit the target - - - title - Sender Email Address - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_default_telephone_text.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_default_telephone_text.xml deleted file mode 100644 index 5a358aba198..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_default_telephone_text.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - delegated_list - - - display_width - editable - title - - - - - id - my_source_person_default_telephone_text - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - field_id - - - - form_id - - - - target - - - - - - - values - - - - display_width - 20 - - - editable - 0 - - - field_id - my_string_field - - - form_id - Base_viewFieldLibrary - - - target - Click to edit the target - - - title - Sender Telephone Number - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_first_name.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_first_name.xml deleted file mode 100644 index 3a6b5b7c85b..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_first_name.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - delegated_list - - - display_width - editable - title - - - - - id - my_source_person_first_name - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - field_id - - - - form_id - - - - target - - - - - - - values - - - - display_width - 20 - - - editable - 0 - - - field_id - my_string_field - - - form_id - Base_viewFieldLibrary - - - target - Click to edit the target - - - title - Sender First Name - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_last_name.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_last_name.xml deleted file mode 100644 index 2675842c0f8..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebMessage_viewWebFormInformation/my_source_person_last_name.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - delegated_list - - - display_width - editable - title - - - - - id - my_source_person_last_name - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - field_id - - - - form_id - - - - target - - - - - - - values - - - - display_width - 20 - - - editable - 0 - - - field_id - my_string_field - - - form_id - Base_viewFieldLibrary - - - target - Click to edit the target - - - title - Sender Last Name - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_addWebMessage.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_addWebMessage.py deleted file mode 100644 index e0e3178bd15..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_addWebMessage.py +++ /dev/null @@ -1,39 +0,0 @@ -"""Proxy Role Auditor is required to create activity -""" -portal = context.getPortalObject() -portal_type = 'Web Message' -module = portal.getDefaultModule(portal_type) - -translate = portal.Base_translateString - -edit_kw = {'portal_type': portal_type, - 'title': title, - 'start_date': DateTime(), - 'source_organisation_title': source_organisation_title, - 'source_person_first_name': source_person_first_name, - 'source_person_last_name': source_person_last_name, - 'source_person_default_email_text': source_person_default_email_text, - 'source_person_default_telephone_text': source_person_default_telephone_text, - 'text_content': text_content, - 'content_type': 'text/plain', - 'resource': resource, - 'source_carrier': context.getWebSectionValue().getRelativeUrl(), - } -connected_user = portal.portal_membership.getAuthenticatedMember().getUserValue() -if connected_user is not None: - edit_kw['source'] = connected_user.getRelativeUrl() - -# We do not call portal_contribution for two reasons: -# 1- Metadata discovery will be run by alarms with allowed user to access other documents. -# 2- A proxy role can not wrap portal_contributions calls and disallow Anonymous user to create the document. -tag = 'incoming_web_message' -edit_kw['activate_kw'] = {'tag': tag} -module.activate(tag=tag, activity='SQLQueue').EventModule_addWebMessage(**edit_kw) - -# Trigger explicitly the alarm which will run discoverMetadata on created event, then -# Fill in discoverable properties (sender, recipient, ...) and change workflow states. -# XXX hardcoded id, must be picked up by reference and version API -portal.portal_alarms.fetch_incoming_web_message_list.activate(after_tag=tag).activeSense() - -portal_status_message = translate('Your message has been successfully submitted.') -context.getWebSectionValue().getParentValue().Base_redirect(keep_items={'portal_status_message': portal_status_message}) diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_addWebMessage.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_addWebMessage.xml deleted file mode 100644 index 6f300e268fe..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_addWebMessage.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - Script_magic - 3 - - - _bind_names - - - - - - - - - - _asgns - - - - name_container - container - - - name_context - context - - - name_m_self - script - - - name_subpath - traverse_subpath - - - - - - - - - - - _params - source_person_default_email_text=None, source_person_default_telephone_text=None, source_organisation_title=None, title=None, text_content=None, source_person_first_name=None, source_person_last_name=None, resource=None, **kw - - - _proxy_roles - - - Auditor - - - - - id - WebSection_addWebMessage - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_getEventResourceItemList.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_getEventResourceItemList.py deleted file mode 100644 index 52e2629a054..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_getEventResourceItemList.py +++ /dev/null @@ -1,20 +0,0 @@ -"""Inspired by Event_getResourceItemList -Use Auditor proxy role to let anonymous users accessing resources. -""" - -from Products.ERP5Type.Cache import CachingMethod -portal = context.getPortalObject() - -sql_kw = {'portal_type': portal.getPortalResourceTypeList(), - 'use_uid': portal.portal_categories.getCategoryUid(portal.portal_preferences.getPreferredEventUse(), base_category='use'), - 'validation_state': 'validated', - 'sort_on': 'title'} - -def getResourceItemList(): - return [('', '')] + [(result.getTitle(), result.getRelativeUrl()) for result in portal.portal_catalog(**sql_kw)] - -getResourceItemList = CachingMethod(getResourceItemList, - id=(script.id, context.Localizer.get_selected_language()), - cache_factory='erp5_ui_long') - -return getResourceItemList() diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_getEventResourceItemList.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_getEventResourceItemList.xml deleted file mode 100644 index 65caf949439..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_getEventResourceItemList.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - Script_magic - 3 - - - _bind_names - - - - - - - - - - _asgns - - - - name_container - container - - - name_context - context - - - name_m_self - script - - - name_subpath - traverse_subpath - - - - - - - - - - - _params - - - - _proxy_roles - - - Auditor - - - - - id - WebSection_getEventResourceItemList - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog.xml deleted file mode 100644 index 85d0d73a4c3..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog.xml +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - - - - _bind_names - - - - - - - - - - _asgns - - - - - - - - - - - _objects - - - - - - action - WebSection_addWebMessage - - - description - - - - edit_order - - - - - - encoding - UTF-8 - - - enctype - - - - group_list - - - left - right - center - bottom - hidden - - - - - groups - - - - bottom - - - - - - center - - - - - - hidden - - - your_source_organisation_title - your_title - - - - - left - - - my_text_content - your_source_person_first_name - your_source_person_last_name - your_source_person_default_email_text - your_source_person_telephone_text - your_resource - your_text_content - your_captcha - - - - - right - - - - - - - - - id - WebSection_viewAddWebMessageDialog - - - method - POST - - - name - WebSection_viewAddWebMessageDialog - - - pt - form_dialog - - - row_length - 4 - - - stored_encoding - UTF-8 - - - title - Send - - - unicode_mode - 0 - - - update_action - - - - update_action_title - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/my_text_content.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/my_text_content.xml deleted file mode 100644 index 09c9dd5cdbd..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/my_text_content.xml +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - delegated_list - - - css_class - description - enabled - title - - - - - id - my_text_content - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - css_class - - - - description - - - - enabled - - AAAAAAAAAAI= - - - - field_id - - - - form_id - - - - target - - - - title - - - - - - - values - - - - css_class - hidden_label - - - description - - - - enabled - 1 - - - field_id - my_text_content - - - form_id - Base_viewWebFieldLibrary - - - target - Click to edit the target - - - title - Text Content - - - - - - - - - - - - - - - _text - not:here/getUrlString - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_captcha.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_captcha.xml deleted file mode 100644 index 993f5aeebaf..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_captcha.xml +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - delegated_list - - - css_class - title - - - - - id - your_captcha - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - field_id - - - - form_id - - - - target - - - - - - - values - - - - css_class - required - - - field_id - your_captcha - - - form_id - Base_viewFieldLibrary - - - target - Click to edit the target - - - title - Type in the String of Letters that you See in the Image into the Text Box - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_resource.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_resource.xml deleted file mode 100644 index 04a8e537369..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_resource.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - delegated_list - - - required - title - items - - - - - id - your_resource - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - field_id - - - - form_id - - - - items - - AAAAAAAAAAI= - - - - target - - - - - - - values - - - - field_id - my_list_field - - - form_id - Base_viewFieldLibrary - - - required - 1 - - - target - Click to edit the target - - - title - Message Subject - - - - - - - - - - - - - - - _text - here/WebSection_getEventResourceItemList - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_organisation_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_organisation_title.xml deleted file mode 100644 index 7262de7fe68..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_organisation_title.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - delegated_list - - - default - title - - - - - id - your_source_organisation_title - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - default - - AAAAAAAAAAI= - - - - field_id - - - - form_id - - - - target - - - - title - - - - - - - values - - - - default - - - - field_id - my_string_field - - - form_id - Base_viewFieldLibrary - - - target - Click to edit the target - - - title - Organisation - - - - - - - - - - - - - - - _text - python: here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue() is not None and here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue().getSubordinationTitle() or None - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_default_email_text.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_default_email_text.xml deleted file mode 100644 index a5efff5f214..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_default_email_text.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - delegated_list - - - default - required - title - - - - - id - your_source_person_default_email_text - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - default - - AAAAAAAAAAI= - - - - field_id - - - - form_id - - - - required - - - - target - - - - - - - values - - - - default - - - - field_id - my_email - - - form_id - Base_viewFieldLibrary - - - required - 1 - - - target - Click to edit the target - - - title - Email Address - - - - - - - - - - - - - - - _text - python: here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue() is not None and here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue().getDefaultEmailText() or None - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_first_name.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_first_name.xml deleted file mode 100644 index 35ed1507952..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_first_name.xml +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - - - - delegated_list - - - default - required - title - - - - - id - your_source_person_first_name - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - default - - AAAAAAAAAAI= - - - - field_id - - - - form_id - - - - required - - - - target - - - - title - - - - - - - values - - - - default - - - - field_id - my_string_field - - - form_id - Base_viewFieldLibrary - - - required - 1 - - - target - Click to edit the target - - - title - First Name - - - - - - - - - - - - - - - _text - python: here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue() is not None and here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue().getFirstName() or None - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_last_name.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_last_name.xml deleted file mode 100644 index a6f48e8fbfc..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_last_name.xml +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - - - - delegated_list - - - default - required - title - - - - - id - your_source_person_last_name - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - default - - AAAAAAAAAAI= - - - - field_id - - - - form_id - - - - required - - - - target - - - - title - - - - - - - values - - - - default - - - - field_id - my_string_field - - - form_id - Base_viewFieldLibrary - - - required - 1 - - - target - Click to edit the target - - - title - Last Name - - - - - - - - - - - - - - - _text - python: here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue() is not None and here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue().getLastName() or None - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_telephone_text.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_telephone_text.xml deleted file mode 100644 index 424e82e7b09..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_source_person_telephone_text.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - delegated_list - - - default - title - - - - - id - your_source_person_telephone_text - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - default - - AAAAAAAAAAI= - - - - field_id - - - - form_id - - - - target - - - - title - - - - - - - values - - - - default - - - - field_id - my_string_field - - - form_id - Base_viewFieldLibrary - - - target - Click to edit the target - - - title - Telephone - - - - - - - - - - - - - - - _text - python: here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue() is not None and here.getPortalObject().portal_membership.getAuthenticatedMember().getUserValue().getDefaultTelephoneText() or None - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_text_content.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_text_content.xml deleted file mode 100644 index 4ba6f545e0f..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_text_content.xml +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - delegated_list - - - description - required - title - width - - - - - id - your_text_content - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - field_id - - - - form_id - - - - target - - - - - - - values - - - - description - - - - field_id - my_text_area_field - - - form_id - Base_viewWebFieldLibrary - - - required - 1 - - - target - Click to edit the target - - - title - Message - - - width - 40 - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_title.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_title.xml deleted file mode 100644 index 7cb82810e65..00000000000 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_web_crm/WebSection_viewAddWebMessageDialog/your_title.xml +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - delegated_list - - - description - title - - - - - id - your_title - - - message_values - - - - external_validator_failed - The input failed the external validator. - - - - - - overrides - - - - field_id - - - - form_id - - - - target - - - - - - - tales - - - - field_id - - - - form_id - - - - target - - - - - - - values - - - - description - - - - field_id - your_title - - - form_id - Base_viewDialogFieldLibrary - - - target - Click to edit the target - - - title - Subject - - - - - - - - diff --git a/bt5/erp5_ai_business_bot/bt/dependency_list b/bt5/erp5_ai_business_bot/bt/dependency_list index 8be73656578..a87a6acd0e2 100644 --- a/bt5/erp5_ai_business_bot/bt/dependency_list +++ b/bt5/erp5_ai_business_bot/bt/dependency_list @@ -1,5 +1,4 @@ erp5_base erp5_web -erp5_ingestion_mysql_innodb_catalog, erp5_ingestion erp5_dms erp5_crm \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/template_skin_id_list b/bt5/erp5_ai_business_bot/bt/template_skin_id_list index 2ddceb56377..780ef531652 100644 --- a/bt5/erp5_ai_business_bot/bt/template_skin_id_list +++ b/bt5/erp5_ai_business_bot/bt/template_skin_id_list @@ -1 +1 @@ -erp5_web_crm \ No newline at end of file +erp5_business_bot \ No newline at end of file -- 2.30.9 From 1a6bcf81b36deb188732e615839317c2c5feb409 Mon Sep 17 00:00:00 2001 From: brackenburyn Date: Fri, 1 Sep 2017 17:55:08 +0200 Subject: [PATCH 03/12] fixed current_object.getTitle() to be within mapping dict --- .../WebMessage_followUpWebMessage.py | 69 +++++++++++++++++++ .../WebMessage_followUpWebMessage.xml | 66 ++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.py create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.xml diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.py new file mode 100644 index 00000000000..4cadd382c85 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.py @@ -0,0 +1,69 @@ +# This script creates a new ticket object from this current event based on its tags +translateString = context.Base_translateString +portal = context.getPortalObject() +current_object = context.getObject() + +if tags == None: + return() +assign = None # + +# Find appropriate ticket type +tagset = set(tags) +so = {"sale", "pricing", "demo", "partnership", "advertising"} +sr = {"help", "starting", "install", "bug"} +m = {"job", "sponsorship", "academic", "contributor"} + +if tagset.intersection(sr): + module = context.getPortalObject().support_request_module + ticket_type = "Support Request" +elif tagset.intersection(so): + module = context.getPortalObject().sale_opportunity_module + ticket_type = "Sale Opportunity" +else: + module = context.getPortalObject().meeting_module + ticket_type = "Meeting" + +if not portal.Base_checkPermission(module.getId(), "Add portal content"): + return context.Base_redirect( + form_id, + keep_items=dict( + portal_status_message=translateString( + "You do not have permission to add new ticket.") + ) + ) + +# Create a new object +new_id = str(module.generateNewId()) +context.portal_types.constructContent( + type_name=ticket_type, + container=module, + id=new_id +) +new_object = module[new_id] + +# If we do this before, each added line will take 20 times more time +# because of programmable acquisition +new_object.edit( + title=current_object.getTitle(), + destination_decision_list=current_object.getSourceList(), + source_decision_list=current_object.getDestinationList(), + start_date=current_object.getStartDate() +) +# Now create the relation between the current object and the new one +current_object.setFollowUpValueList([new_object]) +if assign: + new_object.setSourceTrade([assign[1]]) + +# Redirect to new object +if assign == None: + message = translateString( + "Created and associated a new ${ticket_type} for ${title}. Here is a recommended response.", + mapping=dict(ticket_type = translateString(ticket_type), title = current_object.getTitle())) + return current_object.Base_redirect('WebMessage_viewCreateResponseDialog', keep_items={'portal_status_message': message}) + +else: + name = assign[0] + message = translateString( + "Created and associated a new ${ticket_type} for ${title}. " + name + " is recommended to handle it", + mapping=dict(ticket_type = translateString(ticket_type), title = current_object.getTitle())) + return new_object.Base_redirect('view', keep_items={'portal_status_message': message}) diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.xml new file mode 100644 index 00000000000..ef88d8b0b99 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.xml @@ -0,0 +1,66 @@ + + + + + + + + + + Script_magic + 3 + + + _bind_names + + + + + + + + + + _asgns + + + + name_container + container + + + name_context + context + + + name_m_self + script + + + name_subpath + traverse_subpath + + + + + + + + + + + _params + tags=None + + + id + WebMessage_followUpWebMessage + + + title + Follow Up Web Message + + + + + -- 2.30.9 From 7ed3271f75e5825900db9bab4f9e774083ece168 Mon Sep 17 00:00:00 2001 From: brackenburyn Date: Fri, 1 Sep 2017 17:56:37 +0200 Subject: [PATCH 04/12] fixing current_object.getTitle() --- .../portal_skins/erp5_business_bot.xml | 26 +++++++++++++++++ .../WebMessage_parseWebMessage.xml | 28 +++++++++++++++++++ .../erp5_business_bot/WebMessage_setModel.xml | 28 +++++++++++++++++++ .../WebMessage_trainOnWebMessage.xml | 28 +++++++++++++++++++ bt5/erp5_ai_business_bot/bt/dependency_list | 4 +++ bt5/erp5_ai_business_bot/bt/description | 1 + bt5/erp5_ai_business_bot/bt/maintainer_list | 1 + .../bt/template_format_version | 1 + .../bt/template_skin_id_list | 1 + bt5/erp5_ai_business_bot/bt/title | 1 + bt5/erp5_ai_business_bot/bt/version | 1 + 11 files changed, 120 insertions(+) create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_parseWebMessage.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_setModel.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_trainOnWebMessage.xml create mode 100644 bt5/erp5_ai_business_bot/bt/dependency_list create mode 100644 bt5/erp5_ai_business_bot/bt/description create mode 100644 bt5/erp5_ai_business_bot/bt/maintainer_list create mode 100644 bt5/erp5_ai_business_bot/bt/template_format_version create mode 100644 bt5/erp5_ai_business_bot/bt/template_skin_id_list create mode 100644 bt5/erp5_ai_business_bot/bt/title create mode 100644 bt5/erp5_ai_business_bot/bt/version diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot.xml new file mode 100644 index 00000000000..c2df62ddddb --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot.xml @@ -0,0 +1,26 @@ + + + + + + + + + + _objects + + + + + + id + erp5_business_bot + + + title + Business Bot + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_parseWebMessage.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_parseWebMessage.xml new file mode 100644 index 00000000000..87a71380ae5 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_parseWebMessage.xml @@ -0,0 +1,28 @@ + + + + + + + + + + _function + WebMessage_parseWebMessage + + + _module + Parse Web Message + + + id + WebMessage_parseWebMessage + + + title + Parse Web Message + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_setModel.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_setModel.xml new file mode 100644 index 00000000000..cca59ca74ca --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_setModel.xml @@ -0,0 +1,28 @@ + + + + + + + + + + _function + WebMessage_setModel + + + _module + Set Web Message Model + + + id + WebMessage_setModel + + + title + Set Web Message Model + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_trainOnWebMessage.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_trainOnWebMessage.xml new file mode 100644 index 00000000000..f3b144f4505 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_trainOnWebMessage.xml @@ -0,0 +1,28 @@ + + + + + + + + + + _function + WebMessage_trainOnWebMessage + + + _module + Train On Web Message + + + id + WebMessage_trainOnWebMessage + + + title + Train On Web Message + + + + + diff --git a/bt5/erp5_ai_business_bot/bt/dependency_list b/bt5/erp5_ai_business_bot/bt/dependency_list new file mode 100644 index 00000000000..a87a6acd0e2 --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/dependency_list @@ -0,0 +1,4 @@ +erp5_base +erp5_web +erp5_dms +erp5_crm \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/description b/bt5/erp5_ai_business_bot/bt/description new file mode 100644 index 00000000000..5f2ca8cc2bd --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/description @@ -0,0 +1 @@ +Provides the ability to train a model that can automatically tag and process web messages. \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/maintainer_list b/bt5/erp5_ai_business_bot/bt/maintainer_list new file mode 100644 index 00000000000..8bc0281dbdf --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/maintainer_list @@ -0,0 +1 @@ +Noah Brackenbury \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/template_format_version b/bt5/erp5_ai_business_bot/bt/template_format_version new file mode 100644 index 00000000000..56a6051ca2b --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/template_format_version @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/template_skin_id_list b/bt5/erp5_ai_business_bot/bt/template_skin_id_list new file mode 100644 index 00000000000..780ef531652 --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/template_skin_id_list @@ -0,0 +1 @@ +erp5_business_bot \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/title b/bt5/erp5_ai_business_bot/bt/title new file mode 100644 index 00000000000..32a78b9cab0 --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/title @@ -0,0 +1 @@ +erp5_ai_business_bot \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/version b/bt5/erp5_ai_business_bot/bt/version new file mode 100644 index 00000000000..56a6051ca2b --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/version @@ -0,0 +1 @@ +1 \ No newline at end of file -- 2.30.9 From 0900d7fe137f835397a7ecb227c57bae66abd46e Mon Sep 17 00:00:00 2001 From: Noah Brackenbury Date: Mon, 4 Sep 2017 07:52:51 +0000 Subject: [PATCH 05/12] Added extension components --- .../extension.erp5.ParseWebMessage.py | 87 +++++++++++++ .../extension.erp5.ParseWebMessage.xml | 115 ++++++++++++++++++ .../extension.erp5.SetWebMessageModel.py | 48 ++++++++ .../extension.erp5.SetWebMessageModel.xml | 115 ++++++++++++++++++ .../extension.erp5.TrainOnWebMessage.py | 44 +++++++ .../extension.erp5.TrainOnWebMessage.xml | 115 ++++++++++++++++++ .../WebMessage_followUpWebMessage.py | 10 -- .../bt/template_extension_id_list | 3 + 8 files changed, 527 insertions(+), 10 deletions(-) create mode 100644 bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.py create mode 100644 bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.xml create mode 100644 bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.py create mode 100644 bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.xml create mode 100644 bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.py create mode 100644 bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.xml create mode 100644 bt5/erp5_ai_business_bot/bt/template_extension_id_list diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.py b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.py new file mode 100644 index 00000000000..fbedc9d299a --- /dev/null +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.py @@ -0,0 +1,87 @@ +def WebMessage_parseWebMessage(self): + ''' + This function automatically determines the keywords/subject/tags of a message + in order to follow up on it + ''' + import pickle + message = self.getObject() + portal=self.getPortalObject() + people = portal.person_module + text_content = message.getTextContent() + suggested_subject_list = [] + sender_info=False + + # process header and create person for response + line_array = [line for line in text_content.splitlines() if line.strip() != ''] + if line_array[0][:14] == "

  Name": + sender_info=True + line_array[:4] = [line.split(':')[1][:-4] for line in line_array[:4]] + name = line_array[0] + email = line_array[2][1:] + line_array = line_array[4:] + line_array[0] = line_array[0].split(':')[1] + + new_id = str(people.generateNewId()) + self.portal_types.constructContent( + type_name="Person", + container=people, + id=new_id + ) + person = people[new_id] + (first_name, last_name) = (name.split()[0], name.split()[1]) + person.edit(first_name=first_name, last_name=last_name) + person.setEmailText(email) + message.setSource("person_module/" + new_id) + + text = ' '.join(line_array) + + # get model from file + kw = dict(portal_type = 'File', \ + reference='ai_business_bot', + title="AI Business Bot") + erp5_file = portal.portal_catalog.getResultValue(**kw) + model_as_string = erp5_file.getData() + model = pickle.loads(model_as_string) + language_arrays = model[0] + tag_arrays = model[1] + stopwords_arrays = model[2] + + # determine language of message + message_language = "en" + languages = language_arrays.keys() + language_relevance = {languages[i]:0 for i in range(len(languages))} + for word in text_content: + for language in languages: + if word in language_arrays[language]: + word_relevance = (language_arrays[language][word])/(list(language_arrays[language].values())[0]) + language_relevance[language] = language_relevance[language] + word_relevance + message_language = max(language_relevance, key=language_relevance.get) + + # clean up text for analysis + import string + exclude = set(string.punctuation) + text = text_content.lower() + text = ''.join(ch for ch in text if ch not in exclude) + text = [w for w in text if w not in stopwords_arrays[message_language]] + + # determine relevance of each tag to message + tag_array = tag_arrays[message_language] + tags = tag_array.keys() + tag_relevance = {tags[i]:0 for i in range(len(tags))} + for word in text: + for t in range(len(tags)): + if word in tag_array[tags[t]]: + word_relevance = (tag_array[tags[t]][word]/list(tag_array[tags[t]].values())[0]) + tag_relevance[tags[t]] = tag_relevance[tags[t]] + word_relevance + + # apply tags + average_relevance = sum(tag_relevance.values()) / float(len(tag_relevance.values())) + for t in tag_relevance: + if tag_relevance[t] >= average_relevance*2: + suggested_subject_list.append(t) + + message.setSubjectList(suggested_subject_list) + if sender_info: + return self.WebMessage_followUpWebMessage(tags=suggested_subject_list) + else: + return self.Base_redirect() \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.xml b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.xml new file mode 100644 index 00000000000..22615d9c5b9 --- /dev/null +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.xml @@ -0,0 +1,115 @@ + + + + + + + + + + _recorded_property_dict + + AAAAAAAAAAI= + + + + default_reference + Parse Web Message + + + description + + + + + + id + extension.erp5.ParseWebMessage + + + portal_type + Extension Component + + + sid + + + + + + version + erp5 + + + workflow_history + + AAAAAAAAAAM= + + + + + + + + + + + + + data + + + + + + + + + + + + + + + data + + + + component_validation_workflow + + AAAAAAAAAAQ= + + + + + + + + + + + + + + + + + + + action + validate + + + error_message + + + + validation_state + validated + + + + + + + diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.py b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.py new file mode 100644 index 00000000000..bac480d463c --- /dev/null +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.py @@ -0,0 +1,48 @@ +def WebMessage_setModel(self): + """ + Make dictionaries of word counts and save it in ZODB. + For AI Business Bot for web messages. + """ + + from Products.ZSQLCatalog.SQLCatalog import Query + from Products.ZSQLCatalog.SQLCatalog import NegatedQuery + import datetime + import time + import pickle + + # instantiate arrays + stopwords_arrays = {} + stopwords_arrays["en"] = ['p', 'a', 'about', 'above', 'after', 'again', 'against', 'all', 'am', 'an', 'and', 'any', 'are', "aren't", 'as', 'at', 'be', 'because', 'been', 'before', 'being', 'below', 'between', 'both', 'but', 'by', "can't", 'cannot', 'could', "couldn't", 'did', "didn't", 'do', 'does', "doesn't", 'doing', "don't", 'down', 'during', 'each', 'few', 'for', 'from', 'further', 'had', "hadn't", 'has', "hasn't", 'have', "haven't", 'having', 'he', "he'd", "he'll", "he's", 'her', 'here', "here's", 'hers', 'herself', 'him', 'himself', 'his', 'how', "how's", 'i', "i'd", "i'll", "i'm", "i've", 'if', 'in', 'into', 'is', "isn't", 'it', "it's", 'its', 'itself', "let's", 'me', 'more', 'most', "mustn't", 'my', 'myself', 'no', 'nor', 'not', 'of', 'off', 'on', 'once', 'only', 'or', 'other', 'ought', 'our', 'ours\tourselves', 'out', 'over', 'own', 'same', "shan't", 'she', "she'd", "she'll", "she's", 'should', "shouldn't", 'so', 'some', 'such', 'than', 'that', "that's", 'the', 'their', 'theirs', 'them', 'themselves', 'then', 'there', "there's", 'these', 'they', "they'd", "they'll", "they're", "they've", 'this', 'those', 'through', 'to', 'too', 'under', 'until', 'up', 'very', 'was', "wasn't", 'we', "we'd", "we'll", "we're", "we've", 'were', "weren't", 'what', "what's", 'when', "when's", 'where', "where's", 'which', 'while', 'who', "who's", 'whom', 'why', "why's", 'with', "won't", 'would', "wouldn't", 'you', "you'd", "you'll", "you're", "you've", 'your', 'yours', 'yourself', 'yourselves'] + stopwords_arrays["fr"] = ['p', 'alors', 'au', 'aucuns', 'aussi', 'autre', 'avant', 'avec', 'avoir', 'bon', 'car', 'ce', 'cela', 'ces', 'ceux', 'chaque', 'ci', 'comme', 'comment', 'dans', 'des', 'du', 'dedans', 'dehors', 'depuis', 'devrait', 'doit', 'donc', 'dos', 'd\xc3\xa9but', 'elle', 'elles', 'en', 'encore', 'essai', 'est', 'et', 'eu', 'fait', 'faites', 'fois', 'font', 'hors', 'ici', 'il', 'ils', 'je', 'juste', 'la', 'le', 'les', 'leur', 'l\xc3\xa0', 'ma', 'maintenant', 'mais', 'mes', 'mine', 'moins', 'mon', 'mot', 'm\xc3\xaame', 'ni', 'nomm\xc3\xa9s', 'notre', 'nous', 'ou', 'o\xc3\xb9', 'par', 'parce', 'pas', 'peut', 'peu', 'plupart', 'pour', 'pourquoi', 'quand', 'que', 'quel', 'quelle', 'quelles', 'quels', 'qui', 'sa', 'sans', 'ses', 'seulement', 'si', 'sien', 'son', 'sont', 'sous', 'soyez', 'sujet', 'sur', 'ta', 'tandis', 'tellement', 'tels', 'tes', 'ton', 'tous', 'tout', 'trop', 'tr\xc3\xa8s', 'tu', 'voient', 'vont', 'votre', 'vous', 'vu', '\xc3\xa7a', '\xc3\xa9taient', '\xc3\xa9tat', '\xc3\xa9tions', '\xc3\xa9t\xc3\xa9', '\xc3\xaatre'] + stopwords_arrays["pt"] = ['p', 'a', 'ainda', 'alem', 'ambas', 'ambos', 'antes', 'ao', 'aonde', 'aos', 'apos', 'aquele', 'aqueles', 'as', 'assim', 'com', 'como', 'contra', 'contudo', 'cuja', 'cujas', 'cujo', 'cujos', 'da', 'das', 'de', 'dela', 'dele', 'deles', 'demais', 'depois', 'desde', 'desta', 'deste', 'dispoe', 'dispoem', 'diversa', 'diversas', 'diversos', 'do', 'dos', 'durante', 'e', 'ela', 'elas', 'ele', 'eles', 'em', 'entao', 'entre', 'essa', 'essas', 'esse', 'esses', 'esta', 'estas', 'este', 'estes', 'ha', 'isso', 'isto', 'logo', 'mais', 'mas', 'mediante', 'menos', 'mesma', 'mesmas', 'mesmo', 'mesmos', 'na', 'nas', 'nao', 'nas', 'nem', 'nesse', 'neste', 'nos', 'o', 'os', 'ou', 'outra', 'outras', 'outro', 'outros', 'pelas', 'pelas', 'pelo', 'pelos', 'perante', 'pois', 'por', 'porque', 'portanto', 'proprio', 'propios', 'quais', 'qual', 'qualquer', 'quando', 'quanto', 'que', 'quem', 'quer', 'se', 'seja', 'sem', 'sendo', 'seu', 'seus', 'sob', 'sobre', 'sua', 'suas', 'tal', 'tambem', 'teu', 'teus', 'toda', 'todas', 'todo', 'todos', 'tua', 'tuas', 'tudo', 'um', 'uma', 'umas', 'uns'] + stopwords_arrays["ja"] = ['p', '\xe3\x81\x93\xe3\x82\x8c', '\xe3\x81\x9d\xe3\x82\x8c', '\xe3\x81\x82\xe3\x82\x8c', '\xe3\x81\x93\xe3\x81\xae', '\xe3\x81\x9d\xe3\x81\xae', '\xe3\x81\x82\xe3\x81\xae', '\xe3\x81\x93\xe3\x81\x93', '\xe3\x81\x9d\xe3\x81\x93', '\xe3\x81\x82\xe3\x81\x9d\xe3\x81\x93', '\xe3\x81\x93\xe3\x81\xa1\xe3\x82\x89', '\xe3\x81\xa9\xe3\x81\x93', '\xe3\x81\xa0\xe3\x82\x8c', '\xe3\x81\xaa\xe3\x81\xab', '\xe3\x81\xaa\xe3\x82\x93', '\xe4\xbd\x95', '\xe7\xa7\x81', '\xe8\xb2\xb4\xe6\x96\xb9', '\xe8\xb2\xb4\xe6\x96\xb9\xe6\x96\xb9', '\xe6\x88\x91\xe3\x80\x85', '\xe7\xa7\x81\xe9\x81\x94', '\xe3\x81\x82\xe3\x81\xae\xe4\xba\xba', '\xe3\x81\x82\xe3\x81\xae\xe3\x81\x8b\xe3\x81\x9f', '\xe5\xbd\xbc\xe5\xa5\xb3', '\xe5\xbd\xbc', '\xe3\x81\xa7\xe3\x81\x99', '\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x99', '\xe3\x81\x8a\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x99', '\xe3\x81\x84\xe3\x81\xbe\xe3\x81\x99', '\xe3\x81\xaf', '\xe3\x81\x8c', '\xe3\x81\xae', '\xe3\x81\xab', '\xe3\x82\x92', '\xe3\x81\xa7', '\xe3\x81\x88', '\xe3\x81\x8b\xe3\x82\x89', '\xe3\x81\xbe\xe3\x81\xa7', '\xe3\x82\x88\xe3\x82\x8a', '\xe3\x82\x82', '\xe3\x81\xa9\xe3\x81\xae', '\xe3\x81\xa8', '\xe3\x81\x97', '\xe3\x81\x9d\xe3\x82\x8c\xe3\x81\xa7', '\xe3\x81\x97\xe3\x81\x8b\xe3\x81\x97'] + stopwords_arrays["es"] = ['p', 'un', 'una', 'unas', 'unos', 'uno', 'sobre', 'todo', 'tambi\xc3\xa9n', 'tras', 'otro', 'alg\xc3\xban', 'alguno', 'alguna', 'algunos', 'algunas', 'ser', 'es', 'soy', 'eres', 'somos', 'sois', 'estoy', 'esta', 'estamos', 'estais', 'estan', 'como', 'en', 'para', 'atras', 'porque', 'por', 'qu\xc3\xa9', 'estado', 'estaba', 'ante', 'antes', 'siendo', 'ambos', 'pero', 'por', 'poder', 'puede', 'puedo', 'podemos', 'podeis', 'pueden', 'fui', 'fue', 'fuimos', 'fueron', 'hacer', 'hago', 'hace', 'hacemos', 'haceis', 'hacen', 'cada', 'fin', 'incluso', 'primero', 'desde', 'conseguir', 'consigo', 'consigue', 'consigues', 'conseguimos', 'consiguen', 'ir', 'voy', 'va', 'vamos', 'vais', 'van', 'vaya', 'gueno', 'ha', 'tener', 'tengo', 'tiene', 'tenemos', 'teneis', 'tienen', 'el', 'la', 'lo', 'las', 'los', 'su', 'aqui', 'mio', 'tuyo', 'ellos', 'ellas', 'nos', 'nosotros', 'vosotros', 'vosotras', 'si', 'dentro', 'solo', 'solamente', 'saber', 'sabes', 'sabe', 'sabemos', 'sabeis', 'saben', 'ultimo', 'largo', 'bastante', 'haces', 'muchos', 'aquellos', 'aquellas', 'sus', 'entonces', 'tiempo', 'verdad', 'verdadero', 'verdadera', 'cierto', 'ciertos', 'cierta', 'ciertas', 'intentar', 'intento', 'intenta', 'intentas', 'intentamos', 'intentais', 'intentan', 'dos', 'bajo', 'arriba', 'encima', 'usar', 'uso', 'usas', 'usa', 'usamos', 'usais', 'usan', 'emplear', 'empleo', 'empleas', 'emplean', 'ampleamos', 'empleais', 'valor', 'muy', 'era', 'eras', 'eramos', 'eran', 'modo', 'bien', 'cual', 'cuando', 'donde', 'mientras', 'quien', 'con', 'entre', 'sin', 'trabajo', 'trabajar', 'trabajas', 'trabaja', 'trabajamos', 'trabajais', 'trabajan', 'podria', 'podrias', 'podriamos', 'podrian', 'podriais', 'yo', 'aquel'] + stopwords_arrays["de"] = ['p', 'aber', 'als', 'am', 'an', 'auch', 'auf', 'aus', 'bei', 'bin', 'bis', 'bist', 'da', 'dadurch', 'daher', 'darum', 'das', 'da\xc3\x9f', 'dass', 'dein', 'deine', 'dem', 'den', 'der', 'des', 'dessen', 'deshalb', 'die', 'dies', 'dieser', 'dieses', 'doch', 'dort', 'du', 'durch', 'ein', 'eine', 'einem', 'einen', 'einer', 'eines', 'er', 'es', 'euer', 'eure', 'f\xc3\xbcr', 'hatte', 'hatten', 'hattest', 'hattet', 'hier', 'hinter', 'ich', 'ihr', 'ihre', 'im', 'in', 'ist', 'ja', 'jede', 'jedem', 'jeden', 'jeder', 'jedes', 'jener', 'jenes', 'jetzt', 'kann', 'kannst', 'k\xc3\xb6nnen', 'k\xc3\xb6nnt', 'machen', 'mein', 'meine', 'mit', 'mu\xc3\x9f', 'mu\xc3\x9ft', 'musst', 'm\xc3\xbcssen', 'm\xc3\xbc\xc3\x9ft', 'nach', 'nachdem', 'nein', 'nicht', 'nun', 'oder', 'seid', 'sein', 'seine', 'sich', 'sie', 'sind', 'soll', 'sollen', 'sollst', 'sollt', 'sonst', 'soweit', 'sowie', 'und', 'unser', 'unsere', 'unter', 'vom', 'von', 'vor', 'wann', 'warum', 'was', 'weiter', 'weitere', 'wenn', 'wer', 'werde', 'werden', 'werdet', 'weshalb', 'wie', 'wieder', 'wieso', 'wir', 'wird', 'wirst', 'wo', 'woher', 'wohin', 'zu', 'zum', 'zur', '\xc3\xbcber'] + language_arrays = {"en":{}, "fr":{}, "pt":{}, "ja":{}, "es":{}, "de":{}} + tag_arrays = {i: {} for i in language_arrays.keys()} + + # fit the model + start_time = time.time() + training_messages = self.portal_catalog.searchResults( + portal_type="Web Message", + query=NegatedQuery(Query(subject=None)), + ) + for message in training_messages: + (language_arrays, tag_arrays) = message.WebMessage_trainOnWebMessage(language_arrays, tag_arrays, stopwords_arrays) + end_time = time.time() + uptime = end_time - start_time + human_uptime = str(datetime.timedelta(seconds=int(uptime))) + + # save the model in ZODB + model = (language_arrays, tag_arrays, stopwords_arrays) + model_as_string = pickle.dumps(model) + kw = dict(portal_type = 'File', \ + reference = 'ai_business_bot', + title = "AI Business Bot") + erp5_file = self.portal_catalog.getResultValue(**kw) + if erp5_file is None: + # create it + erp5_file = self.document_module.newContent(**kw) + erp5_file.setData(model_as_string) + + return "Model created at " + erp5_file.getPath() + " in " + human_uptime \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.xml b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.xml new file mode 100644 index 00000000000..7f9d895208d --- /dev/null +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.xml @@ -0,0 +1,115 @@ + + + + + + + + + + _recorded_property_dict + + AAAAAAAAAAI= + + + + default_reference + Set Web Message Model + + + description + + + + + + id + extension.erp5.SetWebMessageModel + + + portal_type + Extension Component + + + sid + + + + + + version + erp5 + + + workflow_history + + AAAAAAAAAAM= + + + + + + + + + + + + + data + + + + + + + + + + + + + + + data + + + + component_validation_workflow + + AAAAAAAAAAQ= + + + + + + + + + + + + + + + + + + + action + validate + + + error_message + + + + validation_state + validated + + + + + + + diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.py b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.py new file mode 100644 index 00000000000..33f403e6b0f --- /dev/null +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.py @@ -0,0 +1,44 @@ +def WebMessage_trainOnWebMessage(self, language_arrays, tag_arrays, stopwords_arrays): + message_tags = self.getSubjectList() + if message_tags == []: + return (language_arrays, tag_arrays) + + # clean up header from contact form, if there is one + text = self.getTextContent() + line_array = [line for line in text.splitlines() if line.strip() != ''] + if line_array[0][:6] == " Name": + line_array = line_array[4:] + line_array[0] = line_array[0][14:] + text = ' '.join(line_array) + + # determine message language + message_language = "en" + languages = language_arrays.keys() + for language in languages: + if language in message_tags: + message_language = language + message_tags.remove(language) + + # clean up text for training + import string + exclude = set(string.punctuation) + text = text.lower() + text = ''.join(ch for ch in text if ch not in exclude) + text = [w for w in text if w not in stopwords_arrays[message_language]] + + # add text into language_arrays and tag_arrays + for word in text: + language_arrays[message_language][word] = language_arrays[message_language].get(word, 1) + 1 + + tag_array = tag_arrays[message_language] + tags = tag_array.keys() + for word in text: + for t in range(len(message_tags)): + if message_tags[t] in tags: + tag_array[message_tags[t]][word] = tag_array[message_tags[t]].get(word, 1) + 1 + else: + tag_array[message_tags[t]] = {} + tag_array[message_tags[t]][word] = 1 + + tag_arrays[message_language] = tag_array + return (language_arrays, tag_arrays) \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.xml b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.xml new file mode 100644 index 00000000000..cd7b7b80e3a --- /dev/null +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.xml @@ -0,0 +1,115 @@ + + + + + + + + + + _recorded_property_dict + + AAAAAAAAAAI= + + + + default_reference + Train On Web Message + + + description + + + + + + id + extension.erp5.TrainOnWebMessage + + + portal_type + Extension Component + + + sid + + + + + + version + erp5 + + + workflow_history + + AAAAAAAAAAM= + + + + + + + + + + + + + data + + + + + + + + + + + + + + + data + + + + component_validation_workflow + + AAAAAAAAAAQ= + + + + + + + + + + + + + + + + + + + action + validate + + + error_message + + + + validation_state + validated + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.py index 15ebf231d7a..4cadd382c85 100644 --- a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.py +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.py @@ -57,23 +57,13 @@ if assign: # Redirect to new object if assign == None: message = translateString( -<<<<<<< HEAD "Created and associated a new ${ticket_type} for ${title}. Here is a recommended response.", mapping=dict(ticket_type = translateString(ticket_type), title = current_object.getTitle())) -======= - "Created and associated a new ${ticket_type} for " + current_object.getTitle()+ ". Here is a recommended response.", - mapping=dict(ticket_type = translateString(ticket_type))) ->>>>>>> 69b14a2e22c9b7d3333c5f785b648eaea1b812f7 return current_object.Base_redirect('WebMessage_viewCreateResponseDialog', keep_items={'portal_status_message': message}) else: name = assign[0] message = translateString( -<<<<<<< HEAD "Created and associated a new ${ticket_type} for ${title}. " + name + " is recommended to handle it", mapping=dict(ticket_type = translateString(ticket_type), title = current_object.getTitle())) -======= - "Created and associated a new ${ticket_type} for " + current_object.getTitle() + ". " + name + " is recommended to handle it", - mapping=dict(ticket_type = translateString(ticket_type))) ->>>>>>> 69b14a2e22c9b7d3333c5f785b648eaea1b812f7 return new_object.Base_redirect('view', keep_items={'portal_status_message': message}) diff --git a/bt5/erp5_ai_business_bot/bt/template_extension_id_list b/bt5/erp5_ai_business_bot/bt/template_extension_id_list new file mode 100644 index 00000000000..2610484b881 --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/template_extension_id_list @@ -0,0 +1,3 @@ +extension.erp5.ParseWebMessage +extension.erp5.SetWebMessageModel +extension.erp5.TrainOnWebMessage \ No newline at end of file -- 2.30.9 From af963f9e413a11f48ae4be95c6e670cf7ef15be3 Mon Sep 17 00:00:00 2001 From: Noah Brackenbury Date: Tue, 5 Sep 2017 12:50:18 +0000 Subject: [PATCH 06/12] Added actions --- .../portal_types/Event%20Module/set_model.xml | 85 +++++++++++++++++++ .../Web%20Message/follow_up_automatically.xml | 85 +++++++++++++++++++ .../bt/template_action_path_list | 2 + 3 files changed, 172 insertions(+) create mode 100644 bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Event%20Module/set_model.xml create mode 100644 bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Web%20Message/follow_up_automatically.xml create mode 100644 bt5/erp5_ai_business_bot/bt/template_action_path_list diff --git a/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Event%20Module/set_model.xml b/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Event%20Module/set_model.xml new file mode 100644 index 00000000000..f0d890f6e96 --- /dev/null +++ b/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Event%20Module/set_model.xml @@ -0,0 +1,85 @@ + + + + + + + + + + action + + AAAAAAAAAAI= + + + + categories + + + action_type/object_action + + + + + category + object_action + + + condition + + + + description + + + + + + icon + + + + id + set_model + + + permissions + + + View + + + + + portal_type + Action Information + + + priority + 1.0 + + + title + Set Web Message Model + + + visible + 1 + + + + + + + + + + + + text + string:${object_url}/WebMessage_setModel + + + + + diff --git a/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Web%20Message/follow_up_automatically.xml b/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Web%20Message/follow_up_automatically.xml new file mode 100644 index 00000000000..0ac14f88211 --- /dev/null +++ b/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Web%20Message/follow_up_automatically.xml @@ -0,0 +1,85 @@ + + + + + + + + + + action + + AAAAAAAAAAI= + + + + categories + + + action_type/object_action + + + + + category + object_action + + + condition + + + + description + + + + + + icon + + + + id + follow_up_automatically + + + permissions + + + Add portal content + + + + + portal_type + Action Information + + + priority + 1.5 + + + title + Follow Up Automatically + + + visible + 1 + + + + + + + + + + + + text + string:${object_url}/WebMessage_parseWebMessage + + + + + diff --git a/bt5/erp5_ai_business_bot/bt/template_action_path_list b/bt5/erp5_ai_business_bot/bt/template_action_path_list new file mode 100644 index 00000000000..d1a1690d24c --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/template_action_path_list @@ -0,0 +1,2 @@ +Event Module | set_model +Web Message | follow_up_automatically \ No newline at end of file -- 2.30.9 From cf8b8a0365777b3d46528b580904df703ac44cc6 Mon Sep 17 00:00:00 2001 From: Noah Brackenbury Date: Tue, 5 Sep 2017 14:14:31 +0000 Subject: [PATCH 07/12] Added Test Web Message Model script --- .../Event%20Module/test_model.xml | 85 +++++++++++++ .../extension.erp5.ParseWebMessage.py | 1 + .../extension.erp5.TestWebMessageModel.py | 120 ++++++++++++++++++ .../extension.erp5.TestWebMessageModel.xml | 115 +++++++++++++++++ .../WebMessage_testModel.xml | 28 ++++ .../bt/template_action_path_list | 1 + .../bt/template_extension_id_list | 1 + 7 files changed, 351 insertions(+) create mode 100644 bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Event%20Module/test_model.xml create mode 100644 bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py create mode 100644 bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_testModel.xml diff --git a/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Event%20Module/test_model.xml b/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Event%20Module/test_model.xml new file mode 100644 index 00000000000..fba380112ed --- /dev/null +++ b/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Event%20Module/test_model.xml @@ -0,0 +1,85 @@ + + + + + + + + + + action + + AAAAAAAAAAI= + + + + categories + + + action_type/object_action + + + + + category + object_action + + + condition + + + + description + + + + + + icon + + + + id + test_model + + + permissions + + + View + + + + + portal_type + Action Information + + + priority + 1.0 + + + title + Test Web Message Model + + + visible + 1 + + + + + + + + + + + + text + string:${object_url}/WebMessage_testModel + + + + + diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.py b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.py index fbedc9d299a..79bbae8ee07 100644 --- a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.py +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.py @@ -56,6 +56,7 @@ def WebMessage_parseWebMessage(self): word_relevance = (language_arrays[language][word])/(list(language_arrays[language].values())[0]) language_relevance[language] = language_relevance[language] + word_relevance message_language = max(language_relevance, key=language_relevance.get) + suggested_subject_list.append(message_language) # clean up text for analysis import string diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py new file mode 100644 index 00000000000..6e8cb66b782 --- /dev/null +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py @@ -0,0 +1,120 @@ +def WebMessage_testModel(self): + """ + Test the accuracy of the web message model + """ + + from Products.ZSQLCatalog.SQLCatalog import Query + from Products.ZSQLCatalog.SQLCatalog import NegatedQuery + import datetime + import time + + # instantiate arrays + stopwords_arrays = {} + stopwords_arrays["en"] = ['p', 'a', 'about', 'above', 'after', 'again', 'against', 'all', 'am', 'an', 'and', 'any', 'are', "aren't", 'as', 'at', 'be', 'because', 'been', 'before', 'being', 'below', 'between', 'both', 'but', 'by', "can't", 'cannot', 'could', "couldn't", 'did', "didn't", 'do', 'does', "doesn't", 'doing', "don't", 'down', 'during', 'each', 'few', 'for', 'from', 'further', 'had', "hadn't", 'has', "hasn't", 'have', "haven't", 'having', 'he', "he'd", "he'll", "he's", 'her', 'here', "here's", 'hers', 'herself', 'him', 'himself', 'his', 'how', "how's", 'i', "i'd", "i'll", "i'm", "i've", 'if', 'in', 'into', 'is', "isn't", 'it', "it's", 'its', 'itself', "let's", 'me', 'more', 'most', "mustn't", 'my', 'myself', 'no', 'nor', 'not', 'of', 'off', 'on', 'once', 'only', 'or', 'other', 'ought', 'our', 'ours\tourselves', 'out', 'over', 'own', 'same', "shan't", 'she', "she'd", "she'll", "she's", 'should', "shouldn't", 'so', 'some', 'such', 'than', 'that', "that's", 'the', 'their', 'theirs', 'them', 'themselves', 'then', 'there', "there's", 'these', 'they', "they'd", "they'll", "they're", "they've", 'this', 'those', 'through', 'to', 'too', 'under', 'until', 'up', 'very', 'was', "wasn't", 'we', "we'd", "we'll", "we're", "we've", 'were', "weren't", 'what', "what's", 'when', "when's", 'where', "where's", 'which', 'while', 'who', "who's", 'whom', 'why', "why's", 'with', "won't", 'would', "wouldn't", 'you', "you'd", "you'll", "you're", "you've", 'your', 'yours', 'yourself', 'yourselves'] + stopwords_arrays["fr"] = ['p', 'alors', 'au', 'aucuns', 'aussi', 'autre', 'avant', 'avec', 'avoir', 'bon', 'car', 'ce', 'cela', 'ces', 'ceux', 'chaque', 'ci', 'comme', 'comment', 'dans', 'des', 'du', 'dedans', 'dehors', 'depuis', 'devrait', 'doit', 'donc', 'dos', 'd\xc3\xa9but', 'elle', 'elles', 'en', 'encore', 'essai', 'est', 'et', 'eu', 'fait', 'faites', 'fois', 'font', 'hors', 'ici', 'il', 'ils', 'je', 'juste', 'la', 'le', 'les', 'leur', 'l\xc3\xa0', 'ma', 'maintenant', 'mais', 'mes', 'mine', 'moins', 'mon', 'mot', 'm\xc3\xaame', 'ni', 'nomm\xc3\xa9s', 'notre', 'nous', 'ou', 'o\xc3\xb9', 'par', 'parce', 'pas', 'peut', 'peu', 'plupart', 'pour', 'pourquoi', 'quand', 'que', 'quel', 'quelle', 'quelles', 'quels', 'qui', 'sa', 'sans', 'ses', 'seulement', 'si', 'sien', 'son', 'sont', 'sous', 'soyez', 'sujet', 'sur', 'ta', 'tandis', 'tellement', 'tels', 'tes', 'ton', 'tous', 'tout', 'trop', 'tr\xc3\xa8s', 'tu', 'voient', 'vont', 'votre', 'vous', 'vu', '\xc3\xa7a', '\xc3\xa9taient', '\xc3\xa9tat', '\xc3\xa9tions', '\xc3\xa9t\xc3\xa9', '\xc3\xaatre'] + stopwords_arrays["pt"] = ['p', 'a', 'ainda', 'alem', 'ambas', 'ambos', 'antes', 'ao', 'aonde', 'aos', 'apos', 'aquele', 'aqueles', 'as', 'assim', 'com', 'como', 'contra', 'contudo', 'cuja', 'cujas', 'cujo', 'cujos', 'da', 'das', 'de', 'dela', 'dele', 'deles', 'demais', 'depois', 'desde', 'desta', 'deste', 'dispoe', 'dispoem', 'diversa', 'diversas', 'diversos', 'do', 'dos', 'durante', 'e', 'ela', 'elas', 'ele', 'eles', 'em', 'entao', 'entre', 'essa', 'essas', 'esse', 'esses', 'esta', 'estas', 'este', 'estes', 'ha', 'isso', 'isto', 'logo', 'mais', 'mas', 'mediante', 'menos', 'mesma', 'mesmas', 'mesmo', 'mesmos', 'na', 'nas', 'nao', 'nas', 'nem', 'nesse', 'neste', 'nos', 'o', 'os', 'ou', 'outra', 'outras', 'outro', 'outros', 'pelas', 'pelas', 'pelo', 'pelos', 'perante', 'pois', 'por', 'porque', 'portanto', 'proprio', 'propios', 'quais', 'qual', 'qualquer', 'quando', 'quanto', 'que', 'quem', 'quer', 'se', 'seja', 'sem', 'sendo', 'seu', 'seus', 'sob', 'sobre', 'sua', 'suas', 'tal', 'tambem', 'teu', 'teus', 'toda', 'todas', 'todo', 'todos', 'tua', 'tuas', 'tudo', 'um', 'uma', 'umas', 'uns'] + stopwords_arrays["ja"] = ['p', '\xe3\x81\x93\xe3\x82\x8c', '\xe3\x81\x9d\xe3\x82\x8c', '\xe3\x81\x82\xe3\x82\x8c', '\xe3\x81\x93\xe3\x81\xae', '\xe3\x81\x9d\xe3\x81\xae', '\xe3\x81\x82\xe3\x81\xae', '\xe3\x81\x93\xe3\x81\x93', '\xe3\x81\x9d\xe3\x81\x93', '\xe3\x81\x82\xe3\x81\x9d\xe3\x81\x93', '\xe3\x81\x93\xe3\x81\xa1\xe3\x82\x89', '\xe3\x81\xa9\xe3\x81\x93', '\xe3\x81\xa0\xe3\x82\x8c', '\xe3\x81\xaa\xe3\x81\xab', '\xe3\x81\xaa\xe3\x82\x93', '\xe4\xbd\x95', '\xe7\xa7\x81', '\xe8\xb2\xb4\xe6\x96\xb9', '\xe8\xb2\xb4\xe6\x96\xb9\xe6\x96\xb9', '\xe6\x88\x91\xe3\x80\x85', '\xe7\xa7\x81\xe9\x81\x94', '\xe3\x81\x82\xe3\x81\xae\xe4\xba\xba', '\xe3\x81\x82\xe3\x81\xae\xe3\x81\x8b\xe3\x81\x9f', '\xe5\xbd\xbc\xe5\xa5\xb3', '\xe5\xbd\xbc', '\xe3\x81\xa7\xe3\x81\x99', '\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x99', '\xe3\x81\x8a\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x99', '\xe3\x81\x84\xe3\x81\xbe\xe3\x81\x99', '\xe3\x81\xaf', '\xe3\x81\x8c', '\xe3\x81\xae', '\xe3\x81\xab', '\xe3\x82\x92', '\xe3\x81\xa7', '\xe3\x81\x88', '\xe3\x81\x8b\xe3\x82\x89', '\xe3\x81\xbe\xe3\x81\xa7', '\xe3\x82\x88\xe3\x82\x8a', '\xe3\x82\x82', '\xe3\x81\xa9\xe3\x81\xae', '\xe3\x81\xa8', '\xe3\x81\x97', '\xe3\x81\x9d\xe3\x82\x8c\xe3\x81\xa7', '\xe3\x81\x97\xe3\x81\x8b\xe3\x81\x97'] + stopwords_arrays["es"] = ['p', 'un', 'una', 'unas', 'unos', 'uno', 'sobre', 'todo', 'tambi\xc3\xa9n', 'tras', 'otro', 'alg\xc3\xban', 'alguno', 'alguna', 'algunos', 'algunas', 'ser', 'es', 'soy', 'eres', 'somos', 'sois', 'estoy', 'esta', 'estamos', 'estais', 'estan', 'como', 'en', 'para', 'atras', 'porque', 'por', 'qu\xc3\xa9', 'estado', 'estaba', 'ante', 'antes', 'siendo', 'ambos', 'pero', 'por', 'poder', 'puede', 'puedo', 'podemos', 'podeis', 'pueden', 'fui', 'fue', 'fuimos', 'fueron', 'hacer', 'hago', 'hace', 'hacemos', 'haceis', 'hacen', 'cada', 'fin', 'incluso', 'primero', 'desde', 'conseguir', 'consigo', 'consigue', 'consigues', 'conseguimos', 'consiguen', 'ir', 'voy', 'va', 'vamos', 'vais', 'van', 'vaya', 'gueno', 'ha', 'tener', 'tengo', 'tiene', 'tenemos', 'teneis', 'tienen', 'el', 'la', 'lo', 'las', 'los', 'su', 'aqui', 'mio', 'tuyo', 'ellos', 'ellas', 'nos', 'nosotros', 'vosotros', 'vosotras', 'si', 'dentro', 'solo', 'solamente', 'saber', 'sabes', 'sabe', 'sabemos', 'sabeis', 'saben', 'ultimo', 'largo', 'bastante', 'haces', 'muchos', 'aquellos', 'aquellas', 'sus', 'entonces', 'tiempo', 'verdad', 'verdadero', 'verdadera', 'cierto', 'ciertos', 'cierta', 'ciertas', 'intentar', 'intento', 'intenta', 'intentas', 'intentamos', 'intentais', 'intentan', 'dos', 'bajo', 'arriba', 'encima', 'usar', 'uso', 'usas', 'usa', 'usamos', 'usais', 'usan', 'emplear', 'empleo', 'empleas', 'emplean', 'ampleamos', 'empleais', 'valor', 'muy', 'era', 'eras', 'eramos', 'eran', 'modo', 'bien', 'cual', 'cuando', 'donde', 'mientras', 'quien', 'con', 'entre', 'sin', 'trabajo', 'trabajar', 'trabajas', 'trabaja', 'trabajamos', 'trabajais', 'trabajan', 'podria', 'podrias', 'podriamos', 'podrian', 'podriais', 'yo', 'aquel'] + stopwords_arrays["de"] = ['p', 'aber', 'als', 'am', 'an', 'auch', 'auf', 'aus', 'bei', 'bin', 'bis', 'bist', 'da', 'dadurch', 'daher', 'darum', 'das', 'da\xc3\x9f', 'dass', 'dein', 'deine', 'dem', 'den', 'der', 'des', 'dessen', 'deshalb', 'die', 'dies', 'dieser', 'dieses', 'doch', 'dort', 'du', 'durch', 'ein', 'eine', 'einem', 'einen', 'einer', 'eines', 'er', 'es', 'euer', 'eure', 'f\xc3\xbcr', 'hatte', 'hatten', 'hattest', 'hattet', 'hier', 'hinter', 'ich', 'ihr', 'ihre', 'im', 'in', 'ist', 'ja', 'jede', 'jedem', 'jeden', 'jeder', 'jedes', 'jener', 'jenes', 'jetzt', 'kann', 'kannst', 'k\xc3\xb6nnen', 'k\xc3\xb6nnt', 'machen', 'mein', 'meine', 'mit', 'mu\xc3\x9f', 'mu\xc3\x9ft', 'musst', 'm\xc3\xbcssen', 'm\xc3\xbc\xc3\x9ft', 'nach', 'nachdem', 'nein', 'nicht', 'nun', 'oder', 'seid', 'sein', 'seine', 'sich', 'sie', 'sind', 'soll', 'sollen', 'sollst', 'sollt', 'sonst', 'soweit', 'sowie', 'und', 'unser', 'unsere', 'unter', 'vom', 'von', 'vor', 'wann', 'warum', 'was', 'weiter', 'weitere', 'wenn', 'wer', 'werde', 'werden', 'werdet', 'weshalb', 'wie', 'wieder', 'wieso', 'wir', 'wird', 'wirst', 'wo', 'woher', 'wohin', 'zu', 'zum', 'zur', '\xc3\xbcber'] + language_arrays = {"en":{}, "fr":{}, "pt":{}, "ja":{}, "es":{}, "de":{}} + tag_arrays = {i: {} for i in language_arrays.keys()} + + # fit the model + start_time = time.time() + test_messages = [] + training_messages = self.portal_catalog.searchResults( + portal_type="Web Message", + query=NegatedQuery(Query(subject=None)), + ) + for index, message in enumerate(training_messages): + if index%5 == 0: + test_messages.append(message) + else: + (language_arrays, tag_arrays) = message.WebMessage_trainOnWebMessage(language_arrays, tag_arrays, stopwords_arrays) + + so = {"sale", "pricing", "demo", "partnership", "advertising"} + sr = {"help", "starting", "install", "bug"} + m = {"job", "sponsorship", "academic", "contributor"} + correct_tags = 0 + excess_tags = 0 + type_accuracy = 0 + + for message in test_messages: + suggested_subject_list = [] + # clean up header from contact form, if there is one + text = message.getTextContent() + line_array = [line for line in text.splitlines() if line.strip() != ''] + if line_array[0][:6] == " Name": + line_array = line_array[4:] + line_array[0] = line_array[0][14:] + text = ' '.join(line_array) + + # determine language of message + message_language = "en" + languages = language_arrays.keys() + language_relevance = {languages[i]:0 for i in range(len(languages))} + for word in text: + for language in languages: + if word in language_arrays[language]: + word_relevance = (language_arrays[language][word])/(list(language_arrays[language].values())[0]) + language_relevance[language] = language_relevance[language] + word_relevance + message_language = max(language_relevance, key=language_relevance.get) + suggested_subject_list.append(message_language) + + # clean up text for analysis + import string + exclude = set(string.punctuation) + text = text.lower() + text = ''.join(ch for ch in text if ch not in exclude) + text = [w for w in text if w not in stopwords_arrays[message_language]] + + # determine relevance of each tag to message + tag_array = tag_arrays[message_language] + tags = tag_array.keys() + tag_relevance = {tags[i]:0 for i in range(len(tags))} + for word in text: + for t in range(len(tags)): + if word in tag_array[tags[t]]: + word_relevance = (tag_array[tags[t]][word]/list(tag_array[tags[t]].values())[0]) + tag_relevance[tags[t]] = tag_relevance[tags[t]] + word_relevance + + # apply tags + average_relevance = sum(tag_relevance.values()) / float(len(tag_relevance.values())) + for t in tag_relevance: + if tag_relevance[t] >= average_relevance*2: + suggested_subject_list.append(t) + + # test applied tags for accuracy + message_tags = message.getSubjectList() + message_tags_set = set(message_tags) + suggested_tags_set = set(suggested_subject_list) + + correct_tags += len(suggested_tags_set.intersection(message_tags_set)) / len(message_tags_set) + excess_tags += len(suggested_tags_set.difference(message_tags_set)) / len(suggested_tags_set) + + correct_language = True + for language in language_arrays.keys(): + if language in message_tags_set.symmetric_difference(suggested_tags_set): + correct_language = False + if correct_language == True: + type_accuracy += .5 + + if message_tags_set.intersection(sr): + if suggested_tags_set.intersection(sr): + type_accuracy += .5 + elif message_tags_set.intersection(so): + if suggested_tags_set.intersection(so): + type_accuracy += .5 + else: + if not suggested_tags_set.intersection(sr) and not suggested_tags_set.intersection(so): + type_accuracy += .5 + + correct_tags /= len(test_messages) + excess_tags /= len(test_messages) + type_accuracy /= len(test_messages) + end_time = time.time() + uptime = end_time - start_time + human_uptime = str(datetime.timedelta(seconds=int(uptime))) + + return "Model tested in " + human_uptime + " showed a ticket_type/language accuracy of " + str(type_accuracy) + \ + " and identified " + str(correct_tags) + " of the tags correctly with " + str(excess_tags) + " excess tags." \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.xml b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.xml new file mode 100644 index 00000000000..fe72db4ecfa --- /dev/null +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.xml @@ -0,0 +1,115 @@ + + + + + + + + + + _recorded_property_dict + + AAAAAAAAAAI= + + + + default_reference + Test Web Message Model + + + description + + + + + + id + extension.erp5.TestWebMessageModel + + + portal_type + Extension Component + + + sid + + + + + + version + erp5 + + + workflow_history + + AAAAAAAAAAM= + + + + + + + + + + + + + data + + + + + + + + + + + + + + + data + + + + component_validation_workflow + + AAAAAAAAAAQ= + + + + + + + + + + + + + + + + + + + action + validate + + + error_message + + + + validation_state + validated + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_testModel.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_testModel.xml new file mode 100644 index 00000000000..10901ed3289 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_testModel.xml @@ -0,0 +1,28 @@ + + + + + + + + + + _function + WebMessage_testModel + + + _module + Test Web Message Model + + + id + WebMessage_testModel + + + title + Test Web Message Model + + + + + diff --git a/bt5/erp5_ai_business_bot/bt/template_action_path_list b/bt5/erp5_ai_business_bot/bt/template_action_path_list index d1a1690d24c..473c34d9675 100644 --- a/bt5/erp5_ai_business_bot/bt/template_action_path_list +++ b/bt5/erp5_ai_business_bot/bt/template_action_path_list @@ -1,2 +1,3 @@ Event Module | set_model +Event Module | test_model Web Message | follow_up_automatically \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/template_extension_id_list b/bt5/erp5_ai_business_bot/bt/template_extension_id_list index 2610484b881..c5cc1652142 100644 --- a/bt5/erp5_ai_business_bot/bt/template_extension_id_list +++ b/bt5/erp5_ai_business_bot/bt/template_extension_id_list @@ -1,3 +1,4 @@ extension.erp5.ParseWebMessage extension.erp5.SetWebMessageModel +extension.erp5.TestWebMessageModel extension.erp5.TrainOnWebMessage \ No newline at end of file -- 2.30.9 From 6d662f06f10b55fe221dab6486d685f8df243448 Mon Sep 17 00:00:00 2001 From: Noah Brackenbury Date: Tue, 5 Sep 2017 14:36:41 +0000 Subject: [PATCH 08/12] made testing distribution random instead of fixed --- .../extension.erp5.TestWebMessageModel.py | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py index 6e8cb66b782..faf5e135120 100644 --- a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py @@ -7,6 +7,7 @@ def WebMessage_testModel(self): from Products.ZSQLCatalog.SQLCatalog import NegatedQuery import datetime import time + import random # instantiate arrays stopwords_arrays = {} @@ -27,7 +28,7 @@ def WebMessage_testModel(self): query=NegatedQuery(Query(subject=None)), ) for index, message in enumerate(training_messages): - if index%5 == 0: + if random.random() <= 0.2: test_messages.append(message) else: (language_arrays, tag_arrays) = message.WebMessage_trainOnWebMessage(language_arrays, tag_arrays, stopwords_arrays) @@ -37,10 +38,12 @@ def WebMessage_testModel(self): m = {"job", "sponsorship", "academic", "contributor"} correct_tags = 0 excess_tags = 0 + language_accuracy = 0 type_accuracy = 0 for message in test_messages: suggested_subject_list = [] + # clean up header from contact form, if there is one text = message.getTextContent() line_array = [line for line in text.splitlines() if line.strip() != ''] @@ -79,7 +82,7 @@ def WebMessage_testModel(self): tag_relevance[tags[t]] = tag_relevance[tags[t]] + word_relevance # apply tags - average_relevance = sum(tag_relevance.values()) / float(len(tag_relevance.values())) + average_relevance = sum(tag_relevance.values()) / (len(tag_relevance.values())) for t in tag_relevance: if tag_relevance[t] >= average_relevance*2: suggested_subject_list.append(t) @@ -93,28 +96,29 @@ def WebMessage_testModel(self): excess_tags += len(suggested_tags_set.difference(message_tags_set)) / len(suggested_tags_set) correct_language = True - for language in language_arrays.keys(): + for language in languages: if language in message_tags_set.symmetric_difference(suggested_tags_set): correct_language = False if correct_language == True: - type_accuracy += .5 + language_accuracy += 1 if message_tags_set.intersection(sr): if suggested_tags_set.intersection(sr): - type_accuracy += .5 + type_accuracy += 1 elif message_tags_set.intersection(so): if suggested_tags_set.intersection(so): - type_accuracy += .5 + type_accuracy += 1 else: if not suggested_tags_set.intersection(sr) and not suggested_tags_set.intersection(so): - type_accuracy += .5 + type_accuracy += 1 correct_tags /= len(test_messages) excess_tags /= len(test_messages) + language_accuracy /= len(test_messages) type_accuracy /= len(test_messages) end_time = time.time() uptime = end_time - start_time human_uptime = str(datetime.timedelta(seconds=int(uptime))) - return "Model tested in " + human_uptime + " showed a ticket_type/language accuracy of " + str(type_accuracy) + \ - " and identified " + str(correct_tags) + " of the tags correctly with " + str(excess_tags) + " excess tags." \ No newline at end of file + return "Model tested in " + human_uptime + " showed a language accuracy of " + str(language_accuracy) + \ + ", and a ticket_type accuracy of " + str(type_accuracy) + ", identifying " + str(correct_tags) + " of the tags correctly with " + str(excess_tags) + " excess tags." \ No newline at end of file -- 2.30.9 From 8d0de8313909730b69ccf73031dcd03983b0210e Mon Sep 17 00:00:00 2001 From: Noah Brackenbury Date: Wed, 6 Sep 2017 07:59:30 +0000 Subject: [PATCH 09/12] Improved TestWebMessageModel --- .../extension.erp5.TestWebMessageModel.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py index faf5e135120..2e868ff6015 100644 --- a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py @@ -62,7 +62,8 @@ def WebMessage_testModel(self): word_relevance = (language_arrays[language][word])/(list(language_arrays[language].values())[0]) language_relevance[language] = language_relevance[language] + word_relevance message_language = max(language_relevance, key=language_relevance.get) - suggested_subject_list.append(message_language) + if message_language != "en": + suggested_subject_list.append(message_language) # clean up text for analysis import string @@ -93,7 +94,8 @@ def WebMessage_testModel(self): suggested_tags_set = set(suggested_subject_list) correct_tags += len(suggested_tags_set.intersection(message_tags_set)) / len(message_tags_set) - excess_tags += len(suggested_tags_set.difference(message_tags_set)) / len(suggested_tags_set) + if len(suggested_tags_set) != 0: + excess_tags += len(suggested_tags_set.difference(message_tags_set)) / len(suggested_tags_set) correct_language = True for language in languages: @@ -111,11 +113,11 @@ def WebMessage_testModel(self): else: if not suggested_tags_set.intersection(sr) and not suggested_tags_set.intersection(so): type_accuracy += 1 - - correct_tags /= len(test_messages) - excess_tags /= len(test_messages) - language_accuracy /= len(test_messages) - type_accuracy /= len(test_messages) + + correct_tags = float(correct_tags) / float(len(test_messages)) + excess_tags = float(excess_tags) / float(len(test_messages)) + language_accuracy = float(language_accuracy) / float(len(test_messages)) + type_accuracy = float(type_accuracy) / float(len(test_messages)) end_time = time.time() uptime = end_time - start_time human_uptime = str(datetime.timedelta(seconds=int(uptime))) -- 2.30.9 From 7733aaccc75430a6c85e4a9fc1b6d28626e6fdef Mon Sep 17 00:00:00 2001 From: Noah Brackenbury Date: Thu, 7 Sep 2017 07:34:29 +0000 Subject: [PATCH 10/12] Added unit test --- .../portal_types/Event%20Module/set_model.xml | 85 ++++++++++++ .../Event%20Module/test_model.xml | 85 ++++++++++++ .../Web%20Message/follow_up_automatically.xml | 85 ++++++++++++ .../extension.erp5.ParseWebMessage.py | 90 ++++++++++++ .../extension.erp5.ParseWebMessage.xml | 115 ++++++++++++++++ .../extension.erp5.SetWebMessageModel.py | 50 +++++++ .../extension.erp5.SetWebMessageModel.xml | 115 ++++++++++++++++ .../extension.erp5.TestWebMessageModel.py | 129 ++++++++++++++++++ .../extension.erp5.TestWebMessageModel.xml | 115 ++++++++++++++++ .../extension.erp5.TrainOnWebMessage.py | 44 ++++++ .../extension.erp5.TrainOnWebMessage.xml | 115 ++++++++++++++++ .../portal_skins/erp5_business_bot.xml | 26 ++++ .../WebMessage_followUpWebMessage.py | 69 ++++++++++ .../WebMessage_followUpWebMessage.xml | 66 +++++++++ .../WebMessage_parseWebMessage.xml | 28 ++++ .../erp5_business_bot/WebMessage_setModel.xml | 28 ++++ .../WebMessage_testModel.xml | 28 ++++ .../WebMessage_trainOnWebMessage.xml | 28 ++++ .../test.erp5.testBusinessBot.py | 68 +++++++++ .../test.erp5.testBusinessBot.xml | 113 +++++++++++++++ bt5/erp5_ai_business_bot/bt/dependency_list | 5 + bt5/erp5_ai_business_bot/bt/description | 1 + bt5/erp5_ai_business_bot/bt/maintainer_list | 1 + .../bt/template_action_path_list | 3 + .../bt/template_extension_id_list | 4 + .../bt/template_format_version | 1 + .../bt/template_skin_id_list | 1 + .../bt/template_test_id_list | 1 + bt5/erp5_ai_business_bot/bt/title | 1 + bt5/erp5_ai_business_bot/bt/version | 1 + 30 files changed, 1501 insertions(+) create mode 100644 bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Event%20Module/set_model.xml create mode 100644 bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Event%20Module/test_model.xml create mode 100644 bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Web%20Message/follow_up_automatically.xml create mode 100644 bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.py create mode 100644 bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.xml create mode 100644 bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.py create mode 100644 bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.xml create mode 100644 bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py create mode 100644 bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.xml create mode 100644 bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.py create mode 100644 bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.py create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_parseWebMessage.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_setModel.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_testModel.xml create mode 100644 bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_trainOnWebMessage.xml create mode 100644 bt5/erp5_ai_business_bot/TestTemplateItem/portal_components/test.erp5.testBusinessBot.py create mode 100644 bt5/erp5_ai_business_bot/TestTemplateItem/portal_components/test.erp5.testBusinessBot.xml create mode 100644 bt5/erp5_ai_business_bot/bt/dependency_list create mode 100644 bt5/erp5_ai_business_bot/bt/description create mode 100644 bt5/erp5_ai_business_bot/bt/maintainer_list create mode 100644 bt5/erp5_ai_business_bot/bt/template_action_path_list create mode 100644 bt5/erp5_ai_business_bot/bt/template_extension_id_list create mode 100644 bt5/erp5_ai_business_bot/bt/template_format_version create mode 100644 bt5/erp5_ai_business_bot/bt/template_skin_id_list create mode 100644 bt5/erp5_ai_business_bot/bt/template_test_id_list create mode 100644 bt5/erp5_ai_business_bot/bt/title create mode 100644 bt5/erp5_ai_business_bot/bt/version diff --git a/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Event%20Module/set_model.xml b/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Event%20Module/set_model.xml new file mode 100644 index 00000000000..f0d890f6e96 --- /dev/null +++ b/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Event%20Module/set_model.xml @@ -0,0 +1,85 @@ + + + + + + + + + + action + + AAAAAAAAAAI= + + + + categories + + + action_type/object_action + + + + + category + object_action + + + condition + + + + description + + + + + + icon + + + + id + set_model + + + permissions + + + View + + + + + portal_type + Action Information + + + priority + 1.0 + + + title + Set Web Message Model + + + visible + 1 + + + + + + + + + + + + text + string:${object_url}/WebMessage_setModel + + + + + diff --git a/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Event%20Module/test_model.xml b/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Event%20Module/test_model.xml new file mode 100644 index 00000000000..fba380112ed --- /dev/null +++ b/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Event%20Module/test_model.xml @@ -0,0 +1,85 @@ + + + + + + + + + + action + + AAAAAAAAAAI= + + + + categories + + + action_type/object_action + + + + + category + object_action + + + condition + + + + description + + + + + + icon + + + + id + test_model + + + permissions + + + View + + + + + portal_type + Action Information + + + priority + 1.0 + + + title + Test Web Message Model + + + visible + 1 + + + + + + + + + + + + text + string:${object_url}/WebMessage_testModel + + + + + diff --git a/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Web%20Message/follow_up_automatically.xml b/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Web%20Message/follow_up_automatically.xml new file mode 100644 index 00000000000..0ac14f88211 --- /dev/null +++ b/bt5/erp5_ai_business_bot/ActionTemplateItem/portal_types/Web%20Message/follow_up_automatically.xml @@ -0,0 +1,85 @@ + + + + + + + + + + action + + AAAAAAAAAAI= + + + + categories + + + action_type/object_action + + + + + category + object_action + + + condition + + + + description + + + + + + icon + + + + id + follow_up_automatically + + + permissions + + + Add portal content + + + + + portal_type + Action Information + + + priority + 1.5 + + + title + Follow Up Automatically + + + visible + 1 + + + + + + + + + + + + text + string:${object_url}/WebMessage_parseWebMessage + + + + + diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.py b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.py new file mode 100644 index 00000000000..9410a4fdef2 --- /dev/null +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.py @@ -0,0 +1,90 @@ +def WebMessage_parseWebMessage(self): + ''' + This function automatically determines the keywords/subject/tags of a message + in order to follow up on it + ''' + import pickle + message = self.getObject() + portal=self.getPortalObject() + people = portal.person_module + text_content = message.getTextContent() + suggested_subject_list = [] + sender_info=False + + # process header and create person for response + line_array = [line for line in text_content.splitlines() if line.strip() != ''] + if line_array[0][:14] == "

  Name": + sender_info=True + line_array[:4] = [line.split(':')[1][:-4] for line in line_array[:4]] + name = line_array[0] + email = line_array[2][1:] + line_array = line_array[4:] + line_array[0] = line_array[0].split(':')[1] + + new_id = str(people.generateNewId()) + self.portal_types.constructContent( + type_name="Person", + container=people, + id=new_id + ) + person = people[new_id] + (first_name, last_name) = (name.split()[0], name.split()[1]) + person.edit(first_name=first_name, last_name=last_name) + person.setEmailText(email) + message.setSource("person_module/" + new_id) + + text = ' '.join(line_array) + + # get model from file + kw = dict(portal_type = 'File', \ + reference='ai_business_bot', + title="AI Business Bot") + erp5_file = portal.portal_catalog.getResultValue(**kw) + if not erp5_file: + return "No model found to be applied to this Web Message. Run Set Web Message Model in Event Module first." + model_as_string = erp5_file.getData() + model = pickle.loads(model_as_string) + language_arrays = model[0] + tag_arrays = model[1] + stopwords_arrays = model[2] + + # determine language of message + message_language = "en" + languages = language_arrays.keys() + language_relevance = {languages[i]:0 for i in range(len(languages))} + for word in text_content: + for language in languages: + if word in language_arrays[language]: + word_relevance = (language_arrays[language][word])/(list(language_arrays[language].values())[0]) + language_relevance[language] = language_relevance[language] + word_relevance + message_language = max(language_relevance, key=language_relevance.get) + suggested_subject_list.append(message_language) + + # clean up text for analysis + import string + exclude = set(string.punctuation) + text = text_content.lower() + text = ''.join(ch for ch in text if ch not in exclude) + text = [w for w in text if w not in stopwords_arrays[message_language]] + + # determine relevance of each tag to message + tag_array = tag_arrays[message_language] + tags = tag_array.keys() + tag_relevance = {tags[i]:0 for i in range(len(tags))} + for word in text: + for t in range(len(tags)): + if word in tag_array[tags[t]]: + word_relevance = (tag_array[tags[t]][word]/list(tag_array[tags[t]].values())[0]) + tag_relevance[tags[t]] = tag_relevance[tags[t]] + word_relevance + + # apply tags + average_relevance = sum(tag_relevance.values()) / float(len(tag_relevance.values())) + for t in tag_relevance: + if tag_relevance[t] >= average_relevance*2: + suggested_subject_list.append(t) + + message.setSubjectList(suggested_subject_list) + if sender_info: + return self.WebMessage_followUpWebMessage(tags=suggested_subject_list) + else: + return self.Base_redirect() \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.xml b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.xml new file mode 100644 index 00000000000..22615d9c5b9 --- /dev/null +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.xml @@ -0,0 +1,115 @@ + + + + + + + + + + _recorded_property_dict + + AAAAAAAAAAI= + + + + default_reference + Parse Web Message + + + description + + + + + + id + extension.erp5.ParseWebMessage + + + portal_type + Extension Component + + + sid + + + + + + version + erp5 + + + workflow_history + + AAAAAAAAAAM= + + + + + + + + + + + + + data + + + + + + + + + + + + + + + data + + + + component_validation_workflow + + AAAAAAAAAAQ= + + + + + + + + + + + + + + + + + + + action + validate + + + error_message + + + + validation_state + validated + + + + + + + diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.py b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.py new file mode 100644 index 00000000000..97b925f344a --- /dev/null +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.py @@ -0,0 +1,50 @@ +def WebMessage_setModel(self): + """ + Make dictionaries of word counts and save it in ZODB. + For AI Business Bot for web messages. + """ + + from Products.ZSQLCatalog.SQLCatalog import Query + from Products.ZSQLCatalog.SQLCatalog import NegatedQuery + import datetime + import time + import pickle + + # instantiate arrays + stopwords_arrays = {} + stopwords_arrays["en"] = ['p', 'a', 'about', 'above', 'after', 'again', 'against', 'all', 'am', 'an', 'and', 'any', 'are', "aren't", 'as', 'at', 'be', 'because', 'been', 'before', 'being', 'below', 'between', 'both', 'but', 'by', "can't", 'cannot', 'could', "couldn't", 'did', "didn't", 'do', 'does', "doesn't", 'doing', "don't", 'down', 'during', 'each', 'few', 'for', 'from', 'further', 'had', "hadn't", 'has', "hasn't", 'have', "haven't", 'having', 'he', "he'd", "he'll", "he's", 'her', 'here', "here's", 'hers', 'herself', 'him', 'himself', 'his', 'how', "how's", 'i', "i'd", "i'll", "i'm", "i've", 'if', 'in', 'into', 'is', "isn't", 'it', "it's", 'its', 'itself', "let's", 'me', 'more', 'most', "mustn't", 'my', 'myself', 'no', 'nor', 'not', 'of', 'off', 'on', 'once', 'only', 'or', 'other', 'ought', 'our', 'ours\tourselves', 'out', 'over', 'own', 'same', "shan't", 'she', "she'd", "she'll", "she's", 'should', "shouldn't", 'so', 'some', 'such', 'than', 'that', "that's", 'the', 'their', 'theirs', 'them', 'themselves', 'then', 'there', "there's", 'these', 'they', "they'd", "they'll", "they're", "they've", 'this', 'those', 'through', 'to', 'too', 'under', 'until', 'up', 'very', 'was', "wasn't", 'we', "we'd", "we'll", "we're", "we've", 'were', "weren't", 'what', "what's", 'when', "when's", 'where', "where's", 'which', 'while', 'who', "who's", 'whom', 'why', "why's", 'with', "won't", 'would', "wouldn't", 'you', "you'd", "you'll", "you're", "you've", 'your', 'yours', 'yourself', 'yourselves'] + stopwords_arrays["fr"] = ['p', 'alors', 'au', 'aucuns', 'aussi', 'autre', 'avant', 'avec', 'avoir', 'bon', 'car', 'ce', 'cela', 'ces', 'ceux', 'chaque', 'ci', 'comme', 'comment', 'dans', 'des', 'du', 'dedans', 'dehors', 'depuis', 'devrait', 'doit', 'donc', 'dos', 'd\xc3\xa9but', 'elle', 'elles', 'en', 'encore', 'essai', 'est', 'et', 'eu', 'fait', 'faites', 'fois', 'font', 'hors', 'ici', 'il', 'ils', 'je', 'juste', 'la', 'le', 'les', 'leur', 'l\xc3\xa0', 'ma', 'maintenant', 'mais', 'mes', 'mine', 'moins', 'mon', 'mot', 'm\xc3\xaame', 'ni', 'nomm\xc3\xa9s', 'notre', 'nous', 'ou', 'o\xc3\xb9', 'par', 'parce', 'pas', 'peut', 'peu', 'plupart', 'pour', 'pourquoi', 'quand', 'que', 'quel', 'quelle', 'quelles', 'quels', 'qui', 'sa', 'sans', 'ses', 'seulement', 'si', 'sien', 'son', 'sont', 'sous', 'soyez', 'sujet', 'sur', 'ta', 'tandis', 'tellement', 'tels', 'tes', 'ton', 'tous', 'tout', 'trop', 'tr\xc3\xa8s', 'tu', 'voient', 'vont', 'votre', 'vous', 'vu', '\xc3\xa7a', '\xc3\xa9taient', '\xc3\xa9tat', '\xc3\xa9tions', '\xc3\xa9t\xc3\xa9', '\xc3\xaatre'] + stopwords_arrays["pt"] = ['p', 'a', 'ainda', 'alem', 'ambas', 'ambos', 'antes', 'ao', 'aonde', 'aos', 'apos', 'aquele', 'aqueles', 'as', 'assim', 'com', 'como', 'contra', 'contudo', 'cuja', 'cujas', 'cujo', 'cujos', 'da', 'das', 'de', 'dela', 'dele', 'deles', 'demais', 'depois', 'desde', 'desta', 'deste', 'dispoe', 'dispoem', 'diversa', 'diversas', 'diversos', 'do', 'dos', 'durante', 'e', 'ela', 'elas', 'ele', 'eles', 'em', 'entao', 'entre', 'essa', 'essas', 'esse', 'esses', 'esta', 'estas', 'este', 'estes', 'ha', 'isso', 'isto', 'logo', 'mais', 'mas', 'mediante', 'menos', 'mesma', 'mesmas', 'mesmo', 'mesmos', 'na', 'nas', 'nao', 'nas', 'nem', 'nesse', 'neste', 'nos', 'o', 'os', 'ou', 'outra', 'outras', 'outro', 'outros', 'pelas', 'pelas', 'pelo', 'pelos', 'perante', 'pois', 'por', 'porque', 'portanto', 'proprio', 'propios', 'quais', 'qual', 'qualquer', 'quando', 'quanto', 'que', 'quem', 'quer', 'se', 'seja', 'sem', 'sendo', 'seu', 'seus', 'sob', 'sobre', 'sua', 'suas', 'tal', 'tambem', 'teu', 'teus', 'toda', 'todas', 'todo', 'todos', 'tua', 'tuas', 'tudo', 'um', 'uma', 'umas', 'uns'] + stopwords_arrays["ja"] = ['p', '\xe3\x81\x93\xe3\x82\x8c', '\xe3\x81\x9d\xe3\x82\x8c', '\xe3\x81\x82\xe3\x82\x8c', '\xe3\x81\x93\xe3\x81\xae', '\xe3\x81\x9d\xe3\x81\xae', '\xe3\x81\x82\xe3\x81\xae', '\xe3\x81\x93\xe3\x81\x93', '\xe3\x81\x9d\xe3\x81\x93', '\xe3\x81\x82\xe3\x81\x9d\xe3\x81\x93', '\xe3\x81\x93\xe3\x81\xa1\xe3\x82\x89', '\xe3\x81\xa9\xe3\x81\x93', '\xe3\x81\xa0\xe3\x82\x8c', '\xe3\x81\xaa\xe3\x81\xab', '\xe3\x81\xaa\xe3\x82\x93', '\xe4\xbd\x95', '\xe7\xa7\x81', '\xe8\xb2\xb4\xe6\x96\xb9', '\xe8\xb2\xb4\xe6\x96\xb9\xe6\x96\xb9', '\xe6\x88\x91\xe3\x80\x85', '\xe7\xa7\x81\xe9\x81\x94', '\xe3\x81\x82\xe3\x81\xae\xe4\xba\xba', '\xe3\x81\x82\xe3\x81\xae\xe3\x81\x8b\xe3\x81\x9f', '\xe5\xbd\xbc\xe5\xa5\xb3', '\xe5\xbd\xbc', '\xe3\x81\xa7\xe3\x81\x99', '\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x99', '\xe3\x81\x8a\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x99', '\xe3\x81\x84\xe3\x81\xbe\xe3\x81\x99', '\xe3\x81\xaf', '\xe3\x81\x8c', '\xe3\x81\xae', '\xe3\x81\xab', '\xe3\x82\x92', '\xe3\x81\xa7', '\xe3\x81\x88', '\xe3\x81\x8b\xe3\x82\x89', '\xe3\x81\xbe\xe3\x81\xa7', '\xe3\x82\x88\xe3\x82\x8a', '\xe3\x82\x82', '\xe3\x81\xa9\xe3\x81\xae', '\xe3\x81\xa8', '\xe3\x81\x97', '\xe3\x81\x9d\xe3\x82\x8c\xe3\x81\xa7', '\xe3\x81\x97\xe3\x81\x8b\xe3\x81\x97'] + stopwords_arrays["es"] = ['p', 'un', 'una', 'unas', 'unos', 'uno', 'sobre', 'todo', 'tambi\xc3\xa9n', 'tras', 'otro', 'alg\xc3\xban', 'alguno', 'alguna', 'algunos', 'algunas', 'ser', 'es', 'soy', 'eres', 'somos', 'sois', 'estoy', 'esta', 'estamos', 'estais', 'estan', 'como', 'en', 'para', 'atras', 'porque', 'por', 'qu\xc3\xa9', 'estado', 'estaba', 'ante', 'antes', 'siendo', 'ambos', 'pero', 'por', 'poder', 'puede', 'puedo', 'podemos', 'podeis', 'pueden', 'fui', 'fue', 'fuimos', 'fueron', 'hacer', 'hago', 'hace', 'hacemos', 'haceis', 'hacen', 'cada', 'fin', 'incluso', 'primero', 'desde', 'conseguir', 'consigo', 'consigue', 'consigues', 'conseguimos', 'consiguen', 'ir', 'voy', 'va', 'vamos', 'vais', 'van', 'vaya', 'gueno', 'ha', 'tener', 'tengo', 'tiene', 'tenemos', 'teneis', 'tienen', 'el', 'la', 'lo', 'las', 'los', 'su', 'aqui', 'mio', 'tuyo', 'ellos', 'ellas', 'nos', 'nosotros', 'vosotros', 'vosotras', 'si', 'dentro', 'solo', 'solamente', 'saber', 'sabes', 'sabe', 'sabemos', 'sabeis', 'saben', 'ultimo', 'largo', 'bastante', 'haces', 'muchos', 'aquellos', 'aquellas', 'sus', 'entonces', 'tiempo', 'verdad', 'verdadero', 'verdadera', 'cierto', 'ciertos', 'cierta', 'ciertas', 'intentar', 'intento', 'intenta', 'intentas', 'intentamos', 'intentais', 'intentan', 'dos', 'bajo', 'arriba', 'encima', 'usar', 'uso', 'usas', 'usa', 'usamos', 'usais', 'usan', 'emplear', 'empleo', 'empleas', 'emplean', 'ampleamos', 'empleais', 'valor', 'muy', 'era', 'eras', 'eramos', 'eran', 'modo', 'bien', 'cual', 'cuando', 'donde', 'mientras', 'quien', 'con', 'entre', 'sin', 'trabajo', 'trabajar', 'trabajas', 'trabaja', 'trabajamos', 'trabajais', 'trabajan', 'podria', 'podrias', 'podriamos', 'podrian', 'podriais', 'yo', 'aquel'] + stopwords_arrays["de"] = ['p', 'aber', 'als', 'am', 'an', 'auch', 'auf', 'aus', 'bei', 'bin', 'bis', 'bist', 'da', 'dadurch', 'daher', 'darum', 'das', 'da\xc3\x9f', 'dass', 'dein', 'deine', 'dem', 'den', 'der', 'des', 'dessen', 'deshalb', 'die', 'dies', 'dieser', 'dieses', 'doch', 'dort', 'du', 'durch', 'ein', 'eine', 'einem', 'einen', 'einer', 'eines', 'er', 'es', 'euer', 'eure', 'f\xc3\xbcr', 'hatte', 'hatten', 'hattest', 'hattet', 'hier', 'hinter', 'ich', 'ihr', 'ihre', 'im', 'in', 'ist', 'ja', 'jede', 'jedem', 'jeden', 'jeder', 'jedes', 'jener', 'jenes', 'jetzt', 'kann', 'kannst', 'k\xc3\xb6nnen', 'k\xc3\xb6nnt', 'machen', 'mein', 'meine', 'mit', 'mu\xc3\x9f', 'mu\xc3\x9ft', 'musst', 'm\xc3\xbcssen', 'm\xc3\xbc\xc3\x9ft', 'nach', 'nachdem', 'nein', 'nicht', 'nun', 'oder', 'seid', 'sein', 'seine', 'sich', 'sie', 'sind', 'soll', 'sollen', 'sollst', 'sollt', 'sonst', 'soweit', 'sowie', 'und', 'unser', 'unsere', 'unter', 'vom', 'von', 'vor', 'wann', 'warum', 'was', 'weiter', 'weitere', 'wenn', 'wer', 'werde', 'werden', 'werdet', 'weshalb', 'wie', 'wieder', 'wieso', 'wir', 'wird', 'wirst', 'wo', 'woher', 'wohin', 'zu', 'zum', 'zur', '\xc3\xbcber'] + language_arrays = {"en":{}, "fr":{}, "pt":{}, "ja":{}, "es":{}, "de":{}} + tag_arrays = {i: {} for i in language_arrays.keys()} + + # fit the model + start_time = time.time() + training_messages = self.portal_catalog.searchResults( + portal_type="Web Message", + query=NegatedQuery(Query(subject=None)), + ) + if not training_messages: + return "No Web Messages to train on" + for message in training_messages: + (language_arrays, tag_arrays) = message.WebMessage_trainOnWebMessage(language_arrays, tag_arrays, stopwords_arrays) + end_time = time.time() + uptime = end_time - start_time + human_uptime = str(datetime.timedelta(seconds=int(uptime))) + + # save the model in ZODB + model = (language_arrays, tag_arrays, stopwords_arrays) + model_as_string = pickle.dumps(model) + kw = dict(portal_type = 'File', \ + reference = 'ai_business_bot', + title = "AI Business Bot") + erp5_file = self.portal_catalog.getResultValue(**kw) + if erp5_file is None: + # create it + erp5_file = self.document_module.newContent(**kw) + erp5_file.setData(model_as_string) + + return "Model created at " + erp5_file.getPath() + " in " + human_uptime \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.xml b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.xml new file mode 100644 index 00000000000..7f9d895208d --- /dev/null +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.xml @@ -0,0 +1,115 @@ + + + + + + + + + + _recorded_property_dict + + AAAAAAAAAAI= + + + + default_reference + Set Web Message Model + + + description + + + + + + id + extension.erp5.SetWebMessageModel + + + portal_type + Extension Component + + + sid + + + + + + version + erp5 + + + workflow_history + + AAAAAAAAAAM= + + + + + + + + + + + + + data + + + + + + + + + + + + + + + data + + + + component_validation_workflow + + AAAAAAAAAAQ= + + + + + + + + + + + + + + + + + + + action + validate + + + error_message + + + + validation_state + validated + + + + + + + diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py new file mode 100644 index 00000000000..2f4e7c60273 --- /dev/null +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py @@ -0,0 +1,129 @@ +def WebMessage_testModel(self): + """ + Test the accuracy of the web message model + """ + + from Products.ZSQLCatalog.SQLCatalog import Query + from Products.ZSQLCatalog.SQLCatalog import NegatedQuery + import datetime + import time + import random + + # instantiate arrays + stopwords_arrays = {} + stopwords_arrays["en"] = ['p', 'a', 'about', 'above', 'after', 'again', 'against', 'all', 'am', 'an', 'and', 'any', 'are', "aren't", 'as', 'at', 'be', 'because', 'been', 'before', 'being', 'below', 'between', 'both', 'but', 'by', "can't", 'cannot', 'could', "couldn't", 'did', "didn't", 'do', 'does', "doesn't", 'doing', "don't", 'down', 'during', 'each', 'few', 'for', 'from', 'further', 'had', "hadn't", 'has', "hasn't", 'have', "haven't", 'having', 'he', "he'd", "he'll", "he's", 'her', 'here', "here's", 'hers', 'herself', 'him', 'himself', 'his', 'how', "how's", 'i', "i'd", "i'll", "i'm", "i've", 'if', 'in', 'into', 'is', "isn't", 'it', "it's", 'its', 'itself', "let's", 'me', 'more', 'most', "mustn't", 'my', 'myself', 'no', 'nor', 'not', 'of', 'off', 'on', 'once', 'only', 'or', 'other', 'ought', 'our', 'ours\tourselves', 'out', 'over', 'own', 'same', "shan't", 'she', "she'd", "she'll", "she's", 'should', "shouldn't", 'so', 'some', 'such', 'than', 'that', "that's", 'the', 'their', 'theirs', 'them', 'themselves', 'then', 'there', "there's", 'these', 'they', "they'd", "they'll", "they're", "they've", 'this', 'those', 'through', 'to', 'too', 'under', 'until', 'up', 'very', 'was', "wasn't", 'we', "we'd", "we'll", "we're", "we've", 'were', "weren't", 'what', "what's", 'when', "when's", 'where', "where's", 'which', 'while', 'who', "who's", 'whom', 'why', "why's", 'with', "won't", 'would', "wouldn't", 'you', "you'd", "you'll", "you're", "you've", 'your', 'yours', 'yourself', 'yourselves'] + stopwords_arrays["fr"] = ['p', 'alors', 'au', 'aucuns', 'aussi', 'autre', 'avant', 'avec', 'avoir', 'bon', 'car', 'ce', 'cela', 'ces', 'ceux', 'chaque', 'ci', 'comme', 'comment', 'dans', 'des', 'du', 'dedans', 'dehors', 'depuis', 'devrait', 'doit', 'donc', 'dos', 'd\xc3\xa9but', 'elle', 'elles', 'en', 'encore', 'essai', 'est', 'et', 'eu', 'fait', 'faites', 'fois', 'font', 'hors', 'ici', 'il', 'ils', 'je', 'juste', 'la', 'le', 'les', 'leur', 'l\xc3\xa0', 'ma', 'maintenant', 'mais', 'mes', 'mine', 'moins', 'mon', 'mot', 'm\xc3\xaame', 'ni', 'nomm\xc3\xa9s', 'notre', 'nous', 'ou', 'o\xc3\xb9', 'par', 'parce', 'pas', 'peut', 'peu', 'plupart', 'pour', 'pourquoi', 'quand', 'que', 'quel', 'quelle', 'quelles', 'quels', 'qui', 'sa', 'sans', 'ses', 'seulement', 'si', 'sien', 'son', 'sont', 'sous', 'soyez', 'sujet', 'sur', 'ta', 'tandis', 'tellement', 'tels', 'tes', 'ton', 'tous', 'tout', 'trop', 'tr\xc3\xa8s', 'tu', 'voient', 'vont', 'votre', 'vous', 'vu', '\xc3\xa7a', '\xc3\xa9taient', '\xc3\xa9tat', '\xc3\xa9tions', '\xc3\xa9t\xc3\xa9', '\xc3\xaatre'] + stopwords_arrays["pt"] = ['p', 'a', 'ainda', 'alem', 'ambas', 'ambos', 'antes', 'ao', 'aonde', 'aos', 'apos', 'aquele', 'aqueles', 'as', 'assim', 'com', 'como', 'contra', 'contudo', 'cuja', 'cujas', 'cujo', 'cujos', 'da', 'das', 'de', 'dela', 'dele', 'deles', 'demais', 'depois', 'desde', 'desta', 'deste', 'dispoe', 'dispoem', 'diversa', 'diversas', 'diversos', 'do', 'dos', 'durante', 'e', 'ela', 'elas', 'ele', 'eles', 'em', 'entao', 'entre', 'essa', 'essas', 'esse', 'esses', 'esta', 'estas', 'este', 'estes', 'ha', 'isso', 'isto', 'logo', 'mais', 'mas', 'mediante', 'menos', 'mesma', 'mesmas', 'mesmo', 'mesmos', 'na', 'nas', 'nao', 'nas', 'nem', 'nesse', 'neste', 'nos', 'o', 'os', 'ou', 'outra', 'outras', 'outro', 'outros', 'pelas', 'pelas', 'pelo', 'pelos', 'perante', 'pois', 'por', 'porque', 'portanto', 'proprio', 'propios', 'quais', 'qual', 'qualquer', 'quando', 'quanto', 'que', 'quem', 'quer', 'se', 'seja', 'sem', 'sendo', 'seu', 'seus', 'sob', 'sobre', 'sua', 'suas', 'tal', 'tambem', 'teu', 'teus', 'toda', 'todas', 'todo', 'todos', 'tua', 'tuas', 'tudo', 'um', 'uma', 'umas', 'uns'] + stopwords_arrays["ja"] = ['p', '\xe3\x81\x93\xe3\x82\x8c', '\xe3\x81\x9d\xe3\x82\x8c', '\xe3\x81\x82\xe3\x82\x8c', '\xe3\x81\x93\xe3\x81\xae', '\xe3\x81\x9d\xe3\x81\xae', '\xe3\x81\x82\xe3\x81\xae', '\xe3\x81\x93\xe3\x81\x93', '\xe3\x81\x9d\xe3\x81\x93', '\xe3\x81\x82\xe3\x81\x9d\xe3\x81\x93', '\xe3\x81\x93\xe3\x81\xa1\xe3\x82\x89', '\xe3\x81\xa9\xe3\x81\x93', '\xe3\x81\xa0\xe3\x82\x8c', '\xe3\x81\xaa\xe3\x81\xab', '\xe3\x81\xaa\xe3\x82\x93', '\xe4\xbd\x95', '\xe7\xa7\x81', '\xe8\xb2\xb4\xe6\x96\xb9', '\xe8\xb2\xb4\xe6\x96\xb9\xe6\x96\xb9', '\xe6\x88\x91\xe3\x80\x85', '\xe7\xa7\x81\xe9\x81\x94', '\xe3\x81\x82\xe3\x81\xae\xe4\xba\xba', '\xe3\x81\x82\xe3\x81\xae\xe3\x81\x8b\xe3\x81\x9f', '\xe5\xbd\xbc\xe5\xa5\xb3', '\xe5\xbd\xbc', '\xe3\x81\xa7\xe3\x81\x99', '\xe3\x81\x82\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x99', '\xe3\x81\x8a\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x99', '\xe3\x81\x84\xe3\x81\xbe\xe3\x81\x99', '\xe3\x81\xaf', '\xe3\x81\x8c', '\xe3\x81\xae', '\xe3\x81\xab', '\xe3\x82\x92', '\xe3\x81\xa7', '\xe3\x81\x88', '\xe3\x81\x8b\xe3\x82\x89', '\xe3\x81\xbe\xe3\x81\xa7', '\xe3\x82\x88\xe3\x82\x8a', '\xe3\x82\x82', '\xe3\x81\xa9\xe3\x81\xae', '\xe3\x81\xa8', '\xe3\x81\x97', '\xe3\x81\x9d\xe3\x82\x8c\xe3\x81\xa7', '\xe3\x81\x97\xe3\x81\x8b\xe3\x81\x97'] + stopwords_arrays["es"] = ['p', 'un', 'una', 'unas', 'unos', 'uno', 'sobre', 'todo', 'tambi\xc3\xa9n', 'tras', 'otro', 'alg\xc3\xban', 'alguno', 'alguna', 'algunos', 'algunas', 'ser', 'es', 'soy', 'eres', 'somos', 'sois', 'estoy', 'esta', 'estamos', 'estais', 'estan', 'como', 'en', 'para', 'atras', 'porque', 'por', 'qu\xc3\xa9', 'estado', 'estaba', 'ante', 'antes', 'siendo', 'ambos', 'pero', 'por', 'poder', 'puede', 'puedo', 'podemos', 'podeis', 'pueden', 'fui', 'fue', 'fuimos', 'fueron', 'hacer', 'hago', 'hace', 'hacemos', 'haceis', 'hacen', 'cada', 'fin', 'incluso', 'primero', 'desde', 'conseguir', 'consigo', 'consigue', 'consigues', 'conseguimos', 'consiguen', 'ir', 'voy', 'va', 'vamos', 'vais', 'van', 'vaya', 'gueno', 'ha', 'tener', 'tengo', 'tiene', 'tenemos', 'teneis', 'tienen', 'el', 'la', 'lo', 'las', 'los', 'su', 'aqui', 'mio', 'tuyo', 'ellos', 'ellas', 'nos', 'nosotros', 'vosotros', 'vosotras', 'si', 'dentro', 'solo', 'solamente', 'saber', 'sabes', 'sabe', 'sabemos', 'sabeis', 'saben', 'ultimo', 'largo', 'bastante', 'haces', 'muchos', 'aquellos', 'aquellas', 'sus', 'entonces', 'tiempo', 'verdad', 'verdadero', 'verdadera', 'cierto', 'ciertos', 'cierta', 'ciertas', 'intentar', 'intento', 'intenta', 'intentas', 'intentamos', 'intentais', 'intentan', 'dos', 'bajo', 'arriba', 'encima', 'usar', 'uso', 'usas', 'usa', 'usamos', 'usais', 'usan', 'emplear', 'empleo', 'empleas', 'emplean', 'ampleamos', 'empleais', 'valor', 'muy', 'era', 'eras', 'eramos', 'eran', 'modo', 'bien', 'cual', 'cuando', 'donde', 'mientras', 'quien', 'con', 'entre', 'sin', 'trabajo', 'trabajar', 'trabajas', 'trabaja', 'trabajamos', 'trabajais', 'trabajan', 'podria', 'podrias', 'podriamos', 'podrian', 'podriais', 'yo', 'aquel'] + stopwords_arrays["de"] = ['p', 'aber', 'als', 'am', 'an', 'auch', 'auf', 'aus', 'bei', 'bin', 'bis', 'bist', 'da', 'dadurch', 'daher', 'darum', 'das', 'da\xc3\x9f', 'dass', 'dein', 'deine', 'dem', 'den', 'der', 'des', 'dessen', 'deshalb', 'die', 'dies', 'dieser', 'dieses', 'doch', 'dort', 'du', 'durch', 'ein', 'eine', 'einem', 'einen', 'einer', 'eines', 'er', 'es', 'euer', 'eure', 'f\xc3\xbcr', 'hatte', 'hatten', 'hattest', 'hattet', 'hier', 'hinter', 'ich', 'ihr', 'ihre', 'im', 'in', 'ist', 'ja', 'jede', 'jedem', 'jeden', 'jeder', 'jedes', 'jener', 'jenes', 'jetzt', 'kann', 'kannst', 'k\xc3\xb6nnen', 'k\xc3\xb6nnt', 'machen', 'mein', 'meine', 'mit', 'mu\xc3\x9f', 'mu\xc3\x9ft', 'musst', 'm\xc3\xbcssen', 'm\xc3\xbc\xc3\x9ft', 'nach', 'nachdem', 'nein', 'nicht', 'nun', 'oder', 'seid', 'sein', 'seine', 'sich', 'sie', 'sind', 'soll', 'sollen', 'sollst', 'sollt', 'sonst', 'soweit', 'sowie', 'und', 'unser', 'unsere', 'unter', 'vom', 'von', 'vor', 'wann', 'warum', 'was', 'weiter', 'weitere', 'wenn', 'wer', 'werde', 'werden', 'werdet', 'weshalb', 'wie', 'wieder', 'wieso', 'wir', 'wird', 'wirst', 'wo', 'woher', 'wohin', 'zu', 'zum', 'zur', '\xc3\xbcber'] + language_arrays = {"en":{}, "fr":{}, "pt":{}, "ja":{}, "es":{}, "de":{}} + tag_arrays = {i: {} for i in language_arrays.keys()} + + # fit the model + start_time = time.time() + test_messages = [] + training_messages = self.portal_catalog.searchResults( + portal_type="Web Message", + query=NegatedQuery(Query(subject=None)), + ) + if not training_messages: + return "No Web Messages found to train on" + for index, message in enumerate(training_messages): + if random.random() <= 0.2: + test_messages.append(message) + else: + (language_arrays, tag_arrays) = message.WebMessage_trainOnWebMessage(language_arrays, tag_arrays, stopwords_arrays) + + so = {"sale", "pricing", "demo", "partnership", "advertising"} + sr = {"help", "starting", "install", "bug"} + m = {"job", "sponsorship", "academic", "contributor"} + correct_tags = 0 + excess_tags = 0 + language_accuracy = 0 + type_accuracy = 0 + + for message in test_messages: + suggested_subject_list = [] + + # clean up header from contact form, if there is one + text = message.getTextContent() + line_array = [line for line in text.splitlines() if line.strip() != ''] + if line_array[0][:6] == " Name": + line_array = line_array[4:] + line_array[0] = line_array[0][14:] + text = ' '.join(line_array) + + # determine language of message + message_language = "en" + languages = language_arrays.keys() + language_relevance = {languages[i]:0 for i in range(len(languages))} + for word in text: + for language in languages: + if word in language_arrays[language]: + word_relevance = (language_arrays[language][word])/(list(language_arrays[language].values())[0]) + language_relevance[language] = language_relevance[language] + word_relevance + message_language = max(language_relevance, key=language_relevance.get) + if message_language != "en": + suggested_subject_list.append(message_language) + + # clean up text for analysis + import string + exclude = set(string.punctuation) + text = text.lower() + text = ''.join(ch for ch in text if ch not in exclude) + text = [w for w in text if w not in stopwords_arrays[message_language]] + + # determine relevance of each tag to message + tag_array = tag_arrays[message_language] + tags = tag_array.keys() + tag_relevance = {tags[i]:0 for i in range(len(tags))} + for word in text: + for t in range(len(tags)): + if word in tag_array[tags[t]]: + word_relevance = (tag_array[tags[t]][word]/list(tag_array[tags[t]].values())[0]) + tag_relevance[tags[t]] = tag_relevance[tags[t]] + word_relevance + + # apply tags + average_relevance = sum(tag_relevance.values()) / (len(tag_relevance.values())) + for t in tag_relevance: + if tag_relevance[t] >= average_relevance*2: + suggested_subject_list.append(t) + + # test applied tags for accuracy + message_tags = message.getSubjectList() + message_tags_set = set(message_tags) + suggested_tags_set = set(suggested_subject_list) + + correct_tags += len(suggested_tags_set.intersection(message_tags_set)) / len(message_tags_set) + if len(suggested_tags_set) != 0: + excess_tags += len(suggested_tags_set.difference(message_tags_set)) / len(suggested_tags_set) + + correct_language = True + for language in languages: + if language in message_tags_set.symmetric_difference(suggested_tags_set): + correct_language = False + if correct_language == True: + language_accuracy += 1 + + if message_tags_set.intersection(sr): + if suggested_tags_set.intersection(sr): + type_accuracy += 1 + elif message_tags_set.intersection(so): + if suggested_tags_set.intersection(so): + type_accuracy += 1 + else: + if not suggested_tags_set.intersection(sr) and not suggested_tags_set.intersection(so): + type_accuracy += 1 + + if not len(test_messages) == 0: + correct_tags = float(correct_tags) / float(len(test_messages)) + excess_tags = float(excess_tags) / float(len(test_messages)) + language_accuracy = float(language_accuracy) / float(len(test_messages)) + type_accuracy = float(type_accuracy) / float(len(test_messages)) + end_time = time.time() + uptime = end_time - start_time + human_uptime = str(datetime.timedelta(seconds=int(uptime))) + + return "Model tested in " + human_uptime + " showed a language accuracy of " + str(language_accuracy) + \ + ", and a ticket_type accuracy of " + str(type_accuracy) + ", identifying " + str(correct_tags) + " of the tags correctly with " + str(excess_tags) + " excess tags." \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.xml b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.xml new file mode 100644 index 00000000000..fe72db4ecfa --- /dev/null +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.xml @@ -0,0 +1,115 @@ + + + + + + + + + + _recorded_property_dict + + AAAAAAAAAAI= + + + + default_reference + Test Web Message Model + + + description + + + + + + id + extension.erp5.TestWebMessageModel + + + portal_type + Extension Component + + + sid + + + + + + version + erp5 + + + workflow_history + + AAAAAAAAAAM= + + + + + + + + + + + + + data + + + + + + + + + + + + + + + data + + + + component_validation_workflow + + AAAAAAAAAAQ= + + + + + + + + + + + + + + + + + + + action + validate + + + error_message + + + + validation_state + validated + + + + + + + diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.py b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.py new file mode 100644 index 00000000000..33f403e6b0f --- /dev/null +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.py @@ -0,0 +1,44 @@ +def WebMessage_trainOnWebMessage(self, language_arrays, tag_arrays, stopwords_arrays): + message_tags = self.getSubjectList() + if message_tags == []: + return (language_arrays, tag_arrays) + + # clean up header from contact form, if there is one + text = self.getTextContent() + line_array = [line for line in text.splitlines() if line.strip() != ''] + if line_array[0][:6] == " Name": + line_array = line_array[4:] + line_array[0] = line_array[0][14:] + text = ' '.join(line_array) + + # determine message language + message_language = "en" + languages = language_arrays.keys() + for language in languages: + if language in message_tags: + message_language = language + message_tags.remove(language) + + # clean up text for training + import string + exclude = set(string.punctuation) + text = text.lower() + text = ''.join(ch for ch in text if ch not in exclude) + text = [w for w in text if w not in stopwords_arrays[message_language]] + + # add text into language_arrays and tag_arrays + for word in text: + language_arrays[message_language][word] = language_arrays[message_language].get(word, 1) + 1 + + tag_array = tag_arrays[message_language] + tags = tag_array.keys() + for word in text: + for t in range(len(message_tags)): + if message_tags[t] in tags: + tag_array[message_tags[t]][word] = tag_array[message_tags[t]].get(word, 1) + 1 + else: + tag_array[message_tags[t]] = {} + tag_array[message_tags[t]][word] = 1 + + tag_arrays[message_language] = tag_array + return (language_arrays, tag_arrays) \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.xml b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.xml new file mode 100644 index 00000000000..cd7b7b80e3a --- /dev/null +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.xml @@ -0,0 +1,115 @@ + + + + + + + + + + _recorded_property_dict + + AAAAAAAAAAI= + + + + default_reference + Train On Web Message + + + description + + + + + + id + extension.erp5.TrainOnWebMessage + + + portal_type + Extension Component + + + sid + + + + + + version + erp5 + + + workflow_history + + AAAAAAAAAAM= + + + + + + + + + + + + + data + + + + + + + + + + + + + + + data + + + + component_validation_workflow + + AAAAAAAAAAQ= + + + + + + + + + + + + + + + + + + + action + validate + + + error_message + + + + validation_state + validated + + + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot.xml new file mode 100644 index 00000000000..c2df62ddddb --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot.xml @@ -0,0 +1,26 @@ + + + + + + + + + + _objects + + + + + + id + erp5_business_bot + + + title + Business Bot + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.py b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.py new file mode 100644 index 00000000000..4cadd382c85 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.py @@ -0,0 +1,69 @@ +# This script creates a new ticket object from this current event based on its tags +translateString = context.Base_translateString +portal = context.getPortalObject() +current_object = context.getObject() + +if tags == None: + return() +assign = None # + +# Find appropriate ticket type +tagset = set(tags) +so = {"sale", "pricing", "demo", "partnership", "advertising"} +sr = {"help", "starting", "install", "bug"} +m = {"job", "sponsorship", "academic", "contributor"} + +if tagset.intersection(sr): + module = context.getPortalObject().support_request_module + ticket_type = "Support Request" +elif tagset.intersection(so): + module = context.getPortalObject().sale_opportunity_module + ticket_type = "Sale Opportunity" +else: + module = context.getPortalObject().meeting_module + ticket_type = "Meeting" + +if not portal.Base_checkPermission(module.getId(), "Add portal content"): + return context.Base_redirect( + form_id, + keep_items=dict( + portal_status_message=translateString( + "You do not have permission to add new ticket.") + ) + ) + +# Create a new object +new_id = str(module.generateNewId()) +context.portal_types.constructContent( + type_name=ticket_type, + container=module, + id=new_id +) +new_object = module[new_id] + +# If we do this before, each added line will take 20 times more time +# because of programmable acquisition +new_object.edit( + title=current_object.getTitle(), + destination_decision_list=current_object.getSourceList(), + source_decision_list=current_object.getDestinationList(), + start_date=current_object.getStartDate() +) +# Now create the relation between the current object and the new one +current_object.setFollowUpValueList([new_object]) +if assign: + new_object.setSourceTrade([assign[1]]) + +# Redirect to new object +if assign == None: + message = translateString( + "Created and associated a new ${ticket_type} for ${title}. Here is a recommended response.", + mapping=dict(ticket_type = translateString(ticket_type), title = current_object.getTitle())) + return current_object.Base_redirect('WebMessage_viewCreateResponseDialog', keep_items={'portal_status_message': message}) + +else: + name = assign[0] + message = translateString( + "Created and associated a new ${ticket_type} for ${title}. " + name + " is recommended to handle it", + mapping=dict(ticket_type = translateString(ticket_type), title = current_object.getTitle())) + return new_object.Base_redirect('view', keep_items={'portal_status_message': message}) diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.xml new file mode 100644 index 00000000000..ef88d8b0b99 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_followUpWebMessage.xml @@ -0,0 +1,66 @@ + + + + + + + + + + Script_magic + 3 + + + _bind_names + + + + + + + + + + _asgns + + + + name_container + container + + + name_context + context + + + name_m_self + script + + + name_subpath + traverse_subpath + + + + + + + + + + + _params + tags=None + + + id + WebMessage_followUpWebMessage + + + title + Follow Up Web Message + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_parseWebMessage.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_parseWebMessage.xml new file mode 100644 index 00000000000..87a71380ae5 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_parseWebMessage.xml @@ -0,0 +1,28 @@ + + + + + + + + + + _function + WebMessage_parseWebMessage + + + _module + Parse Web Message + + + id + WebMessage_parseWebMessage + + + title + Parse Web Message + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_setModel.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_setModel.xml new file mode 100644 index 00000000000..cca59ca74ca --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_setModel.xml @@ -0,0 +1,28 @@ + + + + + + + + + + _function + WebMessage_setModel + + + _module + Set Web Message Model + + + id + WebMessage_setModel + + + title + Set Web Message Model + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_testModel.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_testModel.xml new file mode 100644 index 00000000000..10901ed3289 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_testModel.xml @@ -0,0 +1,28 @@ + + + + + + + + + + _function + WebMessage_testModel + + + _module + Test Web Message Model + + + id + WebMessage_testModel + + + title + Test Web Message Model + + + + + diff --git a/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_trainOnWebMessage.xml b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_trainOnWebMessage.xml new file mode 100644 index 00000000000..f3b144f4505 --- /dev/null +++ b/bt5/erp5_ai_business_bot/SkinTemplateItem/portal_skins/erp5_business_bot/WebMessage_trainOnWebMessage.xml @@ -0,0 +1,28 @@ + + + + + + + + + + _function + WebMessage_trainOnWebMessage + + + _module + Train On Web Message + + + id + WebMessage_trainOnWebMessage + + + title + Train On Web Message + + + + + diff --git a/bt5/erp5_ai_business_bot/TestTemplateItem/portal_components/test.erp5.testBusinessBot.py b/bt5/erp5_ai_business_bot/TestTemplateItem/portal_components/test.erp5.testBusinessBot.py new file mode 100644 index 00000000000..0304882e9ed --- /dev/null +++ b/bt5/erp5_ai_business_bot/TestTemplateItem/portal_components/test.erp5.testBusinessBot.py @@ -0,0 +1,68 @@ +from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase + +class Test(ERP5TypeTestCase): + """ + A test class to test the Business Bot module + """ + + def getTitle(self): + return "TestBusinessBot" + + def getBusinessTemplateList(self): + """ + Tuple of Business Templates we need to install + """ + return ('erp5_base', 'erp5_web', 'erp5_ingestion_mysql_innodb_catalog', 'erp5_crm', 'erp5_dms', 'erp5_business_bot') + + message_reference_dict = {} + def afterSetUp(self): + """ + This is ran before anything, used to set the environment + """ + message_list = [ + dict(title='Tagged Message', subject_list=['ERP5', 'pricing'], text_content="ERP5 pricing"), + dict(title='Untagged Message', text_content="ERP5 pricing"), + ] + for message in message_list: + kw = dict(portal_type = 'Web Message', title = message_list[title], text_content=message_list[text_content]) + existing = self.portal_catalog.getResultValue(**kw) + if existing is None: + self.message_reference_dict[message['reference']] = self.event_module.newContent(**kw).getReference() + else: + self.message_reference_dict[message['reference']] = existing.getReference() + + self.commit() + self.tic() + + def test_setWebMessageModel(self): + """ + Use case: user has one or more tagged messages + and wants to train a model on them. This model now + exists in the document module. + """ + + set_model_result = self.event_module.set_model().split() + self.assertEqual(set_model_result[0], "Model") + kw = dict(portal_type = 'Document', title = "AI Business Bot") + document = self.portal_catalog.getResultValue(**kw) + self.assertEqual(set_model_result[3], document.getRelativeUrl()) + + def test_testWebMessageModel(self): + """ + Use case: user wants to know how accurate the model + would be given the current algorithm for the model and + the current tagged messages. Data is returned to user. + """ + self.assertEqual(self.event_module.test_model().split()[0] , "Model") + + def test_followUpAutomatically(self): + """ + Use case: user has an untagged message that they + wish would be handled by the model. This message now + has tags. + """ + self.event_module.set_model() + kw = dict(portal_type = 'Web Message', title='Untagged Message', text_content="ERP5 pricing") + message = self.portal_catalog.getResultValue(**kw) + message.follow_up_automatically() + self.assertEqual(message.getSubjectList(), ['ERP5', 'pricing']) diff --git a/bt5/erp5_ai_business_bot/TestTemplateItem/portal_components/test.erp5.testBusinessBot.xml b/bt5/erp5_ai_business_bot/TestTemplateItem/portal_components/test.erp5.testBusinessBot.xml new file mode 100644 index 00000000000..fe1c5729fae --- /dev/null +++ b/bt5/erp5_ai_business_bot/TestTemplateItem/portal_components/test.erp5.testBusinessBot.xml @@ -0,0 +1,113 @@ + + + + + + + + + + _recorded_property_dict + + AAAAAAAAAAI= + + + + default_reference + testBusinessBot + + + description + Test for Business Bot template + + + id + test.erp5.testBusinessBot + + + portal_type + Test Component + + + sid + + + + + + version + erp5 + + + workflow_history + + AAAAAAAAAAM= + + + + + + + + + + + + + data + + + + + + + + + + + + + + + data + + + + component_validation_workflow + + AAAAAAAAAAQ= + + + + + + + + + + + + + + + + + + + action + validate + + + error_message + + + + validation_state + validated + + + + + + + diff --git a/bt5/erp5_ai_business_bot/bt/dependency_list b/bt5/erp5_ai_business_bot/bt/dependency_list new file mode 100644 index 00000000000..d28755dccca --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/dependency_list @@ -0,0 +1,5 @@ +erp5_base +erp5_web +erp5_dms +erp5_crm +erp5_ingestion_mysql_innodb_catalog \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/description b/bt5/erp5_ai_business_bot/bt/description new file mode 100644 index 00000000000..5f2ca8cc2bd --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/description @@ -0,0 +1 @@ +Provides the ability to train a model that can automatically tag and process web messages. \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/maintainer_list b/bt5/erp5_ai_business_bot/bt/maintainer_list new file mode 100644 index 00000000000..8bc0281dbdf --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/maintainer_list @@ -0,0 +1 @@ +Noah Brackenbury \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/template_action_path_list b/bt5/erp5_ai_business_bot/bt/template_action_path_list new file mode 100644 index 00000000000..473c34d9675 --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/template_action_path_list @@ -0,0 +1,3 @@ +Event Module | set_model +Event Module | test_model +Web Message | follow_up_automatically \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/template_extension_id_list b/bt5/erp5_ai_business_bot/bt/template_extension_id_list new file mode 100644 index 00000000000..c5cc1652142 --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/template_extension_id_list @@ -0,0 +1,4 @@ +extension.erp5.ParseWebMessage +extension.erp5.SetWebMessageModel +extension.erp5.TestWebMessageModel +extension.erp5.TrainOnWebMessage \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/template_format_version b/bt5/erp5_ai_business_bot/bt/template_format_version new file mode 100644 index 00000000000..56a6051ca2b --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/template_format_version @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/template_skin_id_list b/bt5/erp5_ai_business_bot/bt/template_skin_id_list new file mode 100644 index 00000000000..780ef531652 --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/template_skin_id_list @@ -0,0 +1 @@ +erp5_business_bot \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/template_test_id_list b/bt5/erp5_ai_business_bot/bt/template_test_id_list new file mode 100644 index 00000000000..c5c5426af86 --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/template_test_id_list @@ -0,0 +1 @@ +test.erp5.testBusinessBot \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/title b/bt5/erp5_ai_business_bot/bt/title new file mode 100644 index 00000000000..32a78b9cab0 --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/title @@ -0,0 +1 @@ +erp5_ai_business_bot \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/bt/version b/bt5/erp5_ai_business_bot/bt/version new file mode 100644 index 00000000000..56a6051ca2b --- /dev/null +++ b/bt5/erp5_ai_business_bot/bt/version @@ -0,0 +1 @@ +1 \ No newline at end of file -- 2.30.9 From 79451196a3ad9cd037f6d1c97ded9f32dcc668e7 Mon Sep 17 00:00:00 2001 From: brackenburyn Date: Thu, 7 Sep 2017 09:35:42 +0200 Subject: [PATCH 11/12] merging --- .../portal_types/Foo%20Line/view_contentlist.xml | 2 +- .../portal_types/Foo%20Line/view_dynamic_matrixbox.xml | 2 +- .../portal_types/Foo%20Line/view_matrixbox.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bt5/erp5_ui_test/ActionTemplateItem/portal_types/Foo%20Line/view_contentlist.xml b/bt5/erp5_ui_test/ActionTemplateItem/portal_types/Foo%20Line/view_contentlist.xml index 799ff417ec8..4e354725118 100644 --- a/bt5/erp5_ui_test/ActionTemplateItem/portal_types/Foo%20Line/view_contentlist.xml +++ b/bt5/erp5_ui_test/ActionTemplateItem/portal_types/Foo%20Line/view_contentlist.xml @@ -56,7 +56,7 @@ priority - 1.0 + 4.0 title diff --git a/bt5/erp5_ui_test/ActionTemplateItem/portal_types/Foo%20Line/view_dynamic_matrixbox.xml b/bt5/erp5_ui_test/ActionTemplateItem/portal_types/Foo%20Line/view_dynamic_matrixbox.xml index 79257524cda..bf2412cc4a8 100644 --- a/bt5/erp5_ui_test/ActionTemplateItem/portal_types/Foo%20Line/view_dynamic_matrixbox.xml +++ b/bt5/erp5_ui_test/ActionTemplateItem/portal_types/Foo%20Line/view_dynamic_matrixbox.xml @@ -56,7 +56,7 @@ priority - 1.0 + 3.0 title diff --git a/bt5/erp5_ui_test/ActionTemplateItem/portal_types/Foo%20Line/view_matrixbox.xml b/bt5/erp5_ui_test/ActionTemplateItem/portal_types/Foo%20Line/view_matrixbox.xml index 7ac56a8fa67..960c1700c4e 100644 --- a/bt5/erp5_ui_test/ActionTemplateItem/portal_types/Foo%20Line/view_matrixbox.xml +++ b/bt5/erp5_ui_test/ActionTemplateItem/portal_types/Foo%20Line/view_matrixbox.xml @@ -56,7 +56,7 @@ priority - 1.0 + 3.0 title -- 2.30.9 From 592ad8ff3ebca4c76902b7eb13e734e53ddca78c Mon Sep 17 00:00:00 2001 From: Noah Brackenbury Date: Thu, 7 Sep 2017 17:57:55 +0000 Subject: [PATCH 12/12] Fixed unit test, now ready for merge again --- .../extension.erp5.ParseWebMessage.py | 5 ++- .../extension.erp5.ParseWebMessage.xml | 16 ++++++--- .../extension.erp5.SetWebMessageModel.py | 3 -- .../extension.erp5.TestWebMessageModel.py | 12 ++----- .../extension.erp5.TestWebMessageModel.xml | 19 ++++++++--- .../extension.erp5.TrainOnWebMessage.py | 2 ++ .../extension.erp5.TrainOnWebMessage.xml | 16 ++++++--- .../test.erp5.testBusinessBot.py | 33 +++++++++---------- .../test.erp5.testBusinessBot.xml | 18 +++++++--- bt5/erp5_ai_business_bot/bt/dependency_list | 6 +--- 10 files changed, 75 insertions(+), 55 deletions(-) diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.py b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.py index 30a454928f1..93a77869658 100644 --- a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.py +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.py @@ -8,6 +8,8 @@ def WebMessage_parseWebMessage(self): portal=self.getPortalObject() people = portal.person_module text_content = message.getTextContent() + if text_content is None: + return() suggested_subject_list = [] sender_info=False @@ -40,11 +42,8 @@ def WebMessage_parseWebMessage(self): reference='ai_business_bot', title="AI Business Bot") erp5_file = portal.portal_catalog.getResultValue(**kw) -<<<<<<< HEAD if not erp5_file: return "No model found to be applied to this Web Message. Run Set Web Message Model in Event Module first." -======= ->>>>>>> 2e83d650106eb861a0c38350ab16aa6d13caea36 model_as_string = erp5_file.getData() model = pickle.loads(model_as_string) language_arrays = model[0] diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.xml b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.xml index 22615d9c5b9..937fa240eb9 100644 --- a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.xml +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.ParseWebMessage.xml @@ -36,6 +36,18 @@ + + text_content_error_message + + + + + + text_content_warning_message + + + + version erp5 @@ -99,10 +111,6 @@ action validate - - error_message - - validation_state validated diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.py b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.py index bee63acbcf7..97b925f344a 100644 --- a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.py +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.SetWebMessageModel.py @@ -27,11 +27,8 @@ def WebMessage_setModel(self): portal_type="Web Message", query=NegatedQuery(Query(subject=None)), ) -<<<<<<< HEAD if not training_messages: return "No Web Messages to train on" -======= ->>>>>>> 2e83d650106eb861a0c38350ab16aa6d13caea36 for message in training_messages: (language_arrays, tag_arrays) = message.WebMessage_trainOnWebMessage(language_arrays, tag_arrays, stopwords_arrays) end_time = time.time() diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py index 5fb13855236..0b857300af3 100644 --- a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.py @@ -27,11 +27,8 @@ def WebMessage_testModel(self): portal_type="Web Message", query=NegatedQuery(Query(subject=None)), ) -<<<<<<< HEAD if not training_messages: return "No Web Messages found to train on" -======= ->>>>>>> 2e83d650106eb861a0c38350ab16aa6d13caea36 for index, message in enumerate(training_messages): if random.random() <= 0.2: test_messages.append(message) @@ -51,6 +48,8 @@ def WebMessage_testModel(self): # clean up header from contact form, if there is one text = message.getTextContent() + if text is None: + pass line_array = [line for line in text.splitlines() if line.strip() != ''] if line_array[0][:6] == " Name": line_array = line_array[4:] @@ -119,18 +118,11 @@ def WebMessage_testModel(self): if not suggested_tags_set.intersection(sr) and not suggested_tags_set.intersection(so): type_accuracy += 1 -<<<<<<< HEAD if not len(test_messages) == 0: correct_tags = float(correct_tags) / float(len(test_messages)) excess_tags = float(excess_tags) / float(len(test_messages)) language_accuracy = float(language_accuracy) / float(len(test_messages)) type_accuracy = float(type_accuracy) / float(len(test_messages)) -======= - correct_tags = float(correct_tags) / float(len(test_messages)) - excess_tags = float(excess_tags) / float(len(test_messages)) - language_accuracy = float(language_accuracy) / float(len(test_messages)) - type_accuracy = float(type_accuracy) / float(len(test_messages)) ->>>>>>> 2e83d650106eb861a0c38350ab16aa6d13caea36 end_time = time.time() uptime = end_time - start_time human_uptime = str(datetime.timedelta(seconds=int(uptime))) diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.xml b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.xml index fe72db4ecfa..17fb7c5c80d 100644 --- a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.xml +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TestWebMessageModel.xml @@ -36,6 +36,21 @@ + + text_content_error_message + + + + + + text_content_warning_message + + + W: 32, 6: Unused variable \'index\' (unused-variable) + W: 40, 2: Unused variable \'m\' (unused-variable) + + + version erp5 @@ -99,10 +114,6 @@ action validate - - error_message - - validation_state validated diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.py b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.py index 33f403e6b0f..5cf883c3145 100644 --- a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.py +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.py @@ -5,6 +5,8 @@ def WebMessage_trainOnWebMessage(self, language_arrays, tag_arrays, stopwords_ar # clean up header from contact form, if there is one text = self.getTextContent() + if text is None: + return (language_arrays, tag_arrays) line_array = [line for line in text.splitlines() if line.strip() != ''] if line_array[0][:6] == " Name": line_array = line_array[4:] diff --git a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.xml b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.xml index cd7b7b80e3a..02be514dfce 100644 --- a/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.xml +++ b/bt5/erp5_ai_business_bot/ExtensionTemplateItem/portal_components/extension.erp5.TrainOnWebMessage.xml @@ -36,6 +36,18 @@ + + text_content_error_message + + + + + + text_content_warning_message + + + + version erp5 @@ -99,10 +111,6 @@ action validate - - error_message - - validation_state validated diff --git a/bt5/erp5_ai_business_bot/TestTemplateItem/portal_components/test.erp5.testBusinessBot.py b/bt5/erp5_ai_business_bot/TestTemplateItem/portal_components/test.erp5.testBusinessBot.py index 0304882e9ed..1926e8af165 100644 --- a/bt5/erp5_ai_business_bot/TestTemplateItem/portal_components/test.erp5.testBusinessBot.py +++ b/bt5/erp5_ai_business_bot/TestTemplateItem/portal_components/test.erp5.testBusinessBot.py @@ -14,22 +14,19 @@ class Test(ERP5TypeTestCase): """ return ('erp5_base', 'erp5_web', 'erp5_ingestion_mysql_innodb_catalog', 'erp5_crm', 'erp5_dms', 'erp5_business_bot') - message_reference_dict = {} def afterSetUp(self): """ This is ran before anything, used to set the environment """ message_list = [ dict(title='Tagged Message', subject_list=['ERP5', 'pricing'], text_content="ERP5 pricing"), - dict(title='Untagged Message', text_content="ERP5 pricing"), + dict(title='Untagged Message', subject_list=[], text_content="ERP5 pricing"), ] - for message in message_list: - kw = dict(portal_type = 'Web Message', title = message_list[title], text_content=message_list[text_content]) - existing = self.portal_catalog.getResultValue(**kw) + for index, message in enumerate(message_list): + kw = dict(portal_type = 'Web Message', title = message_list[index]["title"], subject = message_list[index]["subject_list"]) + existing = self.portal.portal_catalog.getResultValue(**kw) if existing is None: - self.message_reference_dict[message['reference']] = self.event_module.newContent(**kw).getReference() - else: - self.message_reference_dict[message['reference']] = existing.getReference() + self.portal.event_module.newContent(**kw) self.commit() self.tic() @@ -41,11 +38,11 @@ class Test(ERP5TypeTestCase): exists in the document module. """ - set_model_result = self.event_module.set_model().split() + set_model_result = self.portal.event_module.WebMessage_setModel().split() self.assertEqual(set_model_result[0], "Model") - kw = dict(portal_type = 'Document', title = "AI Business Bot") - document = self.portal_catalog.getResultValue(**kw) - self.assertEqual(set_model_result[3], document.getRelativeUrl()) + kw = dict(portal_type = 'File', title = "AI Business Bot") + document = self.portal.portal_catalog.getResultValue(**kw) + self.assertEqual(set_model_result[3], "/erp5/" + document.getRelativeUrl()) def test_testWebMessageModel(self): """ @@ -53,7 +50,7 @@ class Test(ERP5TypeTestCase): would be given the current algorithm for the model and the current tagged messages. Data is returned to user. """ - self.assertEqual(self.event_module.test_model().split()[0] , "Model") + self.assertEqual(self.portal.event_module.WebMessage_testModel().split()[0] , "Model") def test_followUpAutomatically(self): """ @@ -61,8 +58,8 @@ class Test(ERP5TypeTestCase): wish would be handled by the model. This message now has tags. """ - self.event_module.set_model() - kw = dict(portal_type = 'Web Message', title='Untagged Message', text_content="ERP5 pricing") - message = self.portal_catalog.getResultValue(**kw) - message.follow_up_automatically() - self.assertEqual(message.getSubjectList(), ['ERP5', 'pricing']) + self.portal.event_module.WebMessage_setModel() + kw = dict(portal_type = 'Web Message', title='Untagged Message') + message = self.portal.portal_catalog.getResultValue(**kw) + message.WebMessage_parseWebMessage() + self.assertFalse(message.getSubjectList() == "[]") \ No newline at end of file diff --git a/bt5/erp5_ai_business_bot/TestTemplateItem/portal_components/test.erp5.testBusinessBot.xml b/bt5/erp5_ai_business_bot/TestTemplateItem/portal_components/test.erp5.testBusinessBot.xml index fe1c5729fae..9a6e69a7db2 100644 --- a/bt5/erp5_ai_business_bot/TestTemplateItem/portal_components/test.erp5.testBusinessBot.xml +++ b/bt5/erp5_ai_business_bot/TestTemplateItem/portal_components/test.erp5.testBusinessBot.xml @@ -34,6 +34,20 @@ + + text_content_error_message + + + + + + text_content_warning_message + + + W: 25, 15: Unused variable \'message\' (unused-variable) + + + version erp5 @@ -97,10 +111,6 @@ action validate - - error_message - - validation_state validated diff --git a/bt5/erp5_ai_business_bot/bt/dependency_list b/bt5/erp5_ai_business_bot/bt/dependency_list index 9070d9bb18e..d28755dccca 100644 --- a/bt5/erp5_ai_business_bot/bt/dependency_list +++ b/bt5/erp5_ai_business_bot/bt/dependency_list @@ -1,9 +1,5 @@ erp5_base erp5_web erp5_dms -<<<<<<< HEAD erp5_crm -erp5_ingestion_mysql_innodb_catalog -======= -erp5_crm ->>>>>>> 2e83d650106eb861a0c38350ab16aa6d13caea36 +erp5_ingestion_mysql_innodb_catalog \ No newline at end of file -- 2.30.9