diff --git a/fieldservice_survey/README.rst b/fieldservice_survey/README.rst new file mode 100644 index 0000000000..25ac775f39 --- /dev/null +++ b/fieldservice_survey/README.rst @@ -0,0 +1,111 @@ +=================== +Fieldservice Survey +=================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:f30f866be07068c593eb0ccaa0c5a07a84560d05d580608d4a172e14d178650b + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Ffield--service-lightgray.png?logo=github + :target: https://github.com/OCA/field-service/tree/18.0/fieldservice_survey + :alt: OCA/field-service +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/field-service-18-0/field-service-18-0-fieldservice_survey + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/field-service&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module introduces enhanced survey functionalities in the Field +Service module, streamlining the process of collecting and analyzing +feedback for service orders. Users can seamlessly navigate to Field +Service, access settings, and select a customized FSM Order Survey +Template. When generating a new order, the system prompts users to +submit a survey, facilitating efficient data collection. + +The module further extends capabilities by incorporating an intuitive +"Survey Answer" button within the order interface. This button provides +users with the flexibility to either view comprehensive statistics +derived from survey responses or directly edit the survey for any +necessary adjustments. + +With the Field Service Survey Enhancements module, businesses can +effortlessly manage and optimize their survey processes, gaining +valuable insights into service performance and customer satisfaction. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +- Navigate to Field Service +- Go to Settings +- Choose a FSM Order Survey Template +- Generate a new order +- Submit Survey +- Access the "Survey Answer" button in the order to either view the + statistics or edit the survey. + +Known issues / Roadmap +====================== + +- Improve survey data integrity by updating the fsm_order_person_id + field in response to changes in the field service order's person_id. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Escodoo + +Contributors +------------ + +- `Escodoo `__: + + - Marcel Savegnago + - Kaynnan Lemes + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/field-service `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/fieldservice_survey/__init__.py b/fieldservice_survey/__init__.py new file mode 100644 index 0000000000..6bac603e8d --- /dev/null +++ b/fieldservice_survey/__init__.py @@ -0,0 +1,3 @@ +from . import models +from . import wizard +from . import controllers diff --git a/fieldservice_survey/__manifest__.py b/fieldservice_survey/__manifest__.py new file mode 100644 index 0000000000..6bf23b4309 --- /dev/null +++ b/fieldservice_survey/__manifest__.py @@ -0,0 +1,28 @@ +# Copyright 2023 - TODAY, Escodoo +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Fieldservice Survey", + "summary": """ + This module enable integration the fieldservice app with survey""", + "version": "18.0.1.0.0", + "license": "AGPL-3", + "author": "Escodoo,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/field-service", + "depends": [ + "fieldservice", + "survey", + ], + "data": [ + "security/res_groups.xml", + "security/ir.model.access.csv", + "views/res_config_settings.xml", + "views/survey_survey.xml", + "views/survey_user_input.xml", + "views/fsm_order.xml", + "views/survey_templates_statistics.xml", + "data/fsm_order_survey_data.xml", + "data/mail_data.xml", + "wizard/fsm_order_survey_submit.xml", + ], +} diff --git a/fieldservice_survey/controllers/__init__.py b/fieldservice_survey/controllers/__init__.py new file mode 100644 index 0000000000..12a7e529b6 --- /dev/null +++ b/fieldservice_survey/controllers/__init__.py @@ -0,0 +1 @@ +from . import main diff --git a/fieldservice_survey/controllers/main.py b/fieldservice_survey/controllers/main.py new file mode 100644 index 0000000000..e42791c2f7 --- /dev/null +++ b/fieldservice_survey/controllers/main.py @@ -0,0 +1,130 @@ +# Copyright 2023 - TODAY, Marcel Savegnago +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import http +from odoo.exceptions import AccessDenied +from odoo.http import request +from odoo.osv import expression + +from odoo.addons.survey.controllers.main import Survey + +FSM_ORDER_ID = "fsm_order_id" +PARTNER_ID = "partner_id" +FSM_ORDER_PERSON_ID = "fsm_order_person_id" + + +class FsmOrderSurveySurvey(Survey): + def _get_user_input_domain(self, survey, line_filter_domain, **post): + user_input_domain = super()._get_user_input_domain( + survey, line_filter_domain, **post + ) + + fsm_order_id = post.get(FSM_ORDER_ID) + if not fsm_order_id: + return user_input_domain + + try: + fsm_order = request.env["fsm.order"].sudo().browse(int(fsm_order_id)) + except ValueError: + raise AccessDenied(request.env._("Invalid FSM Order ID")) from None + + user = request.env.user + partner = user.partner_id + person = request.env["fsm.person"].search([(PARTNER_ID, "=", partner.id)]) + + if user.has_group("fieldservice_survey.group_fsm_survey_user"): + return expression.AND( + [[("fsm_order_id", "=", fsm_order.id)], user_input_domain] + ) + + if partner.id in fsm_order.partner_submitted_answer_survey_ids.ids: + return expression.AND( + [ + [FSM_ORDER_ID, "=", fsm_order.id], + [FSM_ORDER_PERSON_ID, "=", person.id], + ], + user_input_domain, + ) + + raise AccessDenied( + request.env._("You do not have access to this FSM Order Survey") + ) + + @http.route( + "/fsm_order//results", type="http", auth="user", website=True + ) + def survey_results(self, fsm_order_id, **post): + try: + fsm_order = request.env["fsm.order"].sudo().browse(fsm_order_id) + except ValueError: + raise AccessDenied(request.env._("Invalid FSM Order ID")) from None + + if ( + fsm_order.person_id.partner_id == request.env.user.partner_id + and not request.env.user.has_group( + "fieldservice_survey.group_fsm_survey_user" + ) + ): + return request.render( + "http_routing.http_error", + { + "status_code": "Forbidden", + "status_message": "You don't have access to this survey " + "related to your FSM Order.", + }, + ) + + user = request.env.user + partner = user.partner_id + person = request.env["fsm.person"].search([(PARTNER_ID, "=", partner.id)]) + survey_sudo = None + answer = None + + if user.has_group( + "fieldservice_survey.group_fsm_survey_user" + ) or user.has_group("base.group_system"): + survey_sudo = ( + request.env["survey.user_input"] + .sudo() + .search([(FSM_ORDER_ID, "=", fsm_order.id)], limit=1) + .survey_id + ) + + if partner.id in fsm_order.partner_submitted_answer_survey_ids.ids: + answer = ( + request.env["survey.user_input"] + .sudo() + .search( + [ + (FSM_ORDER_ID, "=", fsm_order.id), + (FSM_ORDER_PERSON_ID, "=", person.id), + ], + limit=1, + ) + ) + + if answer: + survey_sudo = answer.survey_id + + if not survey_sudo: + raise AccessDenied(request.env._("No survey found for the given FSM Order")) + + post["fsm_order_id"] = fsm_order_id + user_input_lines_sudo, search_filters = self._extract_filters_data( + survey_sudo, post + ) + survey_data = survey_sudo._prepare_statistics(user_input_lines_sudo) + question_and_page_data = survey_sudo.question_and_page_ids._prepare_statistics( + user_input_lines_sudo + ) + + template_values = { + "survey": survey_sudo, + "question_and_page_data": question_and_page_data, + "survey_data": survey_data, + "search_filters": search_filters, + "search_finished": "true", + "fsm_order_id": fsm_order_id, + } + + return request.render("survey.survey_page_statistics", template_values) diff --git a/fieldservice_survey/data/fsm_order_survey_data.xml b/fieldservice_survey/data/fsm_order_survey_data.xml new file mode 100644 index 0000000000..a1e6178f38 --- /dev/null +++ b/fieldservice_survey/data/fsm_order_survey_data.xml @@ -0,0 +1,465 @@ + + + + + Customer Satisfaction Survey for Field Services + b247640x-9646-1344-abce-344ca236521e + public + in_progress + + scoring_with_answers + 0 + page_per_question + +

The purpose of this survey is to evaluate customer satisfaction with our company's field service operations. Your responses will be highly valuable in identifying areas for improvement and enhancing our service quality. We appreciate your time in completing this questionnaire.

+
+
+ + + + Overall, how satisfied are you with the field services you have received from our company? + + simple_choice + True + + + + + + 1 + Very satisfied + + 100 + + + + 1 + Satisfied + + 75 + + + + 1 + Neutral + + 50 + + + + 1 + Dissatisfied + + 25 + + + + 1 + Very dissatisfied + + 0 + + + + + How would you rate the punctuality of our technicians in meeting scheduled appointments? + + simple_choice + True + + + + + + 1 + Very punctual + + 100 + + + + 2 + Punctual + + 75 + + + + 3 + Neutral + + 50 + + + + 4 + Somewhat punctual + + 25 + + + + 5 + Very unpunctual + + 0 + + + + + How would you rate the competence and knowledge of our technicians in addressing your needs? + + simple_choice + True + + + + + + 1 + Very competent and knowledgeable + + 100 + + + + 2 + Competent and knowledgeable + + 75 + + + + 3 + Neutral + + 50 + + + + 4 + Somewhat incompetent and uninformed + + 25 + + + + 5 + Very incompetent and uninformed + + 0 + + + + + How would you rate the quality of service provided by our technicians? + + simple_choice + True + + + + + + 1 + Very high quality + + 100 + + + + 2 + High quality + + 75 + + + + 3 + Neutral + + 50 + + + + 4 + Low quality + + 25 + + + + 5 + Very low quality + + 0 + + + + + Do you believe our technicians have the necessary tools and equipment to adequately perform the service? + + simple_choice + True + + + + + + 1 + Yes, they always have all the necessary tools and equipment + + 100 + + + + 2 + Most of the time, they have the necessary tools and equipment + + 75 + + + + 3 + Neutral + + 50 + + + + 4 + Rarely, they have the necessary tools and equipment + + 25 + + + + 5 + Almost never, they have the necessary tools and equipment + + 0 + + + + + Would you recommend our services to a friend or colleague? + + simple_choice + True + + + + + + 1 + Definitely + + 100 + + + + 2 + Probably + + 75 + + + + 3 + Not sure + + 50 + + + + 4 + Probably not + + 25 + + + + 5 + Definitely not + + 0 + + + + + How would you rate the effectiveness of problem-solving and repairs during the field service operations? + + simple_choice + True + + + + + + 1 + Very effective + + 100 + + + + 2 + Effective + + 75 + + + + 3 + Neutral + + 50 + + + + 4 + Ineffective + + 25 + + + + 5 + Very ineffective + + 0 + + + + + How would you rate the communication and clarity of information provided by our technicians during the service? + + simple_choice + True + + + + + + 1 + Very clear and informative + + 100 + + + + 2 + Clear and informative + + 75 + + + + 3 + Neutral + + 50 + + + + 4 + Unclear and uninformative + + 25 + + + + 5 + Very unclear and uninformative + + 0 + + + + + Considering your overall experience with our field service operations, would you recommend our company to others? + + simple_choice + True + + + + + + 1 + Definitely yes + + 100 + + + + 2 + Probably yes + + 75 + + + + 3 + Neutral + + 50 + + + + 4 + Probably not + + 25 + + + + 5 + Definitely not + + 0 + + + + + What suggestions do you have for improving our field services? + + text_box + + + + + Do you have any additional comments or observations you would like to share? + + text_box + +
diff --git a/fieldservice_survey/data/mail_data.xml b/fieldservice_survey/data/mail_data.xml new file mode 100644 index 0000000000..45a51e2462 --- /dev/null +++ b/fieldservice_survey/data/mail_data.xml @@ -0,0 +1,50 @@ + + + + FSM Survey: Submit Suvery + + Take part in {{object.fsm_order_id.name}} survey + +
+

+ Dear participant

+ + You have been invited to take a new certification. + + + We are conducting a survey and your response would be appreciated. + +

+ + Please answer the survey for 05/05/2021.

+
+ + We wish you good luck! + + + Thank you in advance for your participation. + +

+
+
+ + ${object.lang} + +
+
diff --git a/fieldservice_survey/i18n/fieldservice_survey.pot b/fieldservice_survey/i18n/fieldservice_survey.pot new file mode 100644 index 0000000000..41abab597b --- /dev/null +++ b/fieldservice_survey/i18n/fieldservice_survey.pot @@ -0,0 +1,657 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_survey +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: fieldservice_survey +#: model:mail.template,report_name:fieldservice_survey.mail_template_fsm_order_survey_submit +msgid "${(object.name or '').replace('/','_')}" +msgstr "" + +#. module: fieldservice_survey +#: model:mail.template,body_html:fieldservice_survey.mail_template_fsm_order_survey_submit +msgid "" +"
\n" +"

\n" +" Dear ${object.partner_id.name},\n" +"

\n" +" An survey was requested.\n" +"
\n" +" Please take time to fill the survey.\n" +"

\n" +" Thank you!\n" +"

\n" +" % if ctx.get('recipient_users'):\n" +"

\n" +" \n" +" View Survey\n" +" \n" +"

\n" +" % endif\n" +" \n" +" % if object.deadline:\n" +" Please answer the survey before ${format_date(object.deadline)}.

\n" +" % endif\n" +"

\n" +" ${(object.signature or '')| safe}\n" +"

\n" +"
\n" +" " +msgstr "" + +#. module: fieldservice_survey +#: model:survey.survey,description:fieldservice_survey.customer_satisfaction_survey +msgid "" +"

The purpose of this survey is to evaluate customer satisfaction with our company's field service operations. Your responses will be highly valuable in identifying areas for improvement and enhancing our service quality. We appreciate your time in completing this questionnaire.

\n" +" " +msgstr "" + +#. module: fieldservice_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_order_form_view +msgid "" +"Survey\n" +" Answer" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question5_answer5 +msgid "Almost never, they have the necessary tools and equipment" +msgstr "" + +#. module: fieldservice_survey +#: code:addons/fieldservice_survey/wizard/fsm_order_survey_submit.py:0 +#, python-format +msgid "" +"An survey was requested. Please take time to fill the survey" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__deadline +msgid "Answer Deadline" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__attachment_ids +msgid "Attachments" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__author_id +msgid "Author" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,help:fieldservice_survey.field_fsm_order_survey_submit__author_id +msgid "Author of the message." +msgstr "" + +#. module: fieldservice_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_survey_button_form_view +msgid "Back to the FSM Order" +msgstr "" + +#. module: fieldservice_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_order_survey_submit_view_form +msgid "Cancel" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,help:fieldservice_survey.field_survey_survey__is_fsm_order_survey +msgid "Check this option to restrict the answers to survey managers only." +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question8_answer2 +msgid "Clear and informative" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model,name:fieldservice_survey.model_res_company +msgid "Companies" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question3_answer2 +msgid "Competent and knowledgeable" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model,name:fieldservice_survey.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question9 +msgid "" +"Considering your overall experience with our field service operations, would" +" you recommend our company to others?" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__body +msgid "Contents" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__create_uid +msgid "Created by" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__create_date +msgid "Created on" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.survey,title:fieldservice_survey.customer_satisfaction_survey +msgid "Customer Satisfaction Survey for Field Services" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question6_answer1 +msgid "Definitely" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question6_answer5 +#: model:survey.question.answer,value:fieldservice_survey.question9_answer5 +msgid "Definitely not" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question9_answer1 +msgid "Definitely yes" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__display_name +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_company__display_name +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_config_settings__display_name +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_survey__display_name +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_user_input__display_name +msgid "Display Name" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question1_answer4 +msgid "Dissatisfied" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question5 +msgid "" +"Do you believe our technicians have the necessary tools and equipment to " +"adequately perform the service?" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question11 +msgid "" +"Do you have any additional comments or observations you would like to share?" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question7_answer2 +msgid "Effective" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,help:fieldservice_survey.field_fsm_order_survey_submit__email_from +msgid "Email address of the sender" +msgstr "" + +#. module: fieldservice_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.res_config_settings_view_employee_form +msgid "Enable feedback request through surveys" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_user_input__fsm_order_id +msgid "FSM Order" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_user_input__fsm_order_person_id +msgid "FSM Order Person " +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_survey__is_fsm_order_survey +msgid "FSM Order Survey Managers Only" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model,name:fieldservice_survey.model_fsm_order +msgid "Field Service Order" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_config_settings__module_fieldservice_survey +msgid "Field Service Survey" +msgstr "" + +#. module: fieldservice_survey +#: code:addons/fieldservice_survey/wizard/fsm_order_survey_submit.py:0 +#, python-format +msgid "Fill the answer form on survey" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__email_from +msgid "From" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_company__fsm_order_survey_template_id +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_config_settings__fsm_order_survey_template_id +msgid "Fsm Order Survey Template" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question4_answer2 +msgid "High quality" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question8 +msgid "" +"How would you rate the communication and clarity of information provided by " +"our technicians during the service?" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question3 +msgid "" +"How would you rate the competence and knowledge of our technicians in " +"addressing your needs?" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question7 +msgid "" +"How would you rate the effectiveness of problem-solving and repairs during " +"the field service operations?" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question2 +msgid "" +"How would you rate the punctuality of our technicians in meeting scheduled " +"appointments?" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question4 +msgid "How would you rate the quality of service provided by our technicians?" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order__id +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__id +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_company__id +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_config_settings__id +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_survey__id +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_user_input__id +msgid "ID" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,comments_message:fieldservice_survey.question1 +#: model:survey.question,comments_message:fieldservice_survey.question10 +#: model:survey.question,comments_message:fieldservice_survey.question11 +#: model:survey.question,comments_message:fieldservice_survey.question2 +#: model:survey.question,comments_message:fieldservice_survey.question3 +#: model:survey.question,comments_message:fieldservice_survey.question4 +#: model:survey.question,comments_message:fieldservice_survey.question5 +#: model:survey.question,comments_message:fieldservice_survey.question6 +#: model:survey.question,comments_message:fieldservice_survey.question7 +#: model:survey.question,comments_message:fieldservice_survey.question8 +#: model:survey.question,comments_message:fieldservice_survey.question9 +msgid "If other, please specify:" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question7_answer4 +msgid "Ineffective" +msgstr "" + +#. module: fieldservice_survey +#: code:addons/fieldservice_survey/controllers/main.py:0 +#: code:addons/fieldservice_survey/controllers/main.py:0 +#, python-format +msgid "Invalid FSM Order ID" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order____last_update +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit____last_update +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_company____last_update +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_config_settings____last_update +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_survey____last_update +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_user_input____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__write_date +msgid "Last Updated on" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question4_answer4 +msgid "Low quality" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question5_answer2 +msgid "Most of the time, they have the necessary tools and equipment" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question1_answer3 +#: model:survey.question.answer,value:fieldservice_survey.question2_answer3 +#: model:survey.question.answer,value:fieldservice_survey.question3_answer3 +#: model:survey.question.answer,value:fieldservice_survey.question4_answer3 +#: model:survey.question.answer,value:fieldservice_survey.question5_answer3 +#: model:survey.question.answer,value:fieldservice_survey.question7_answer3 +#: model:survey.question.answer,value:fieldservice_survey.question8_answer3 +#: model:survey.question.answer,value:fieldservice_survey.question9_answer3 +msgid "Neutral" +msgstr "" + +#. module: fieldservice_survey +#: code:addons/fieldservice_survey/controllers/main.py:0 +#, python-format +msgid "No survey found for the given FSM Order" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question6_answer3 +msgid "Not sure" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order__display_name +msgid "Order" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question1 +msgid "" +"Overall, how satisfied are you with the field services you have received " +"from our company?" +msgstr "" + +#. module: fieldservice_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_order_form_view +msgid "Partners submitted to answer survey" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question6_answer2 +msgid "Probably" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question6_answer4 +#: model:survey.question.answer,value:fieldservice_survey.question9_answer4 +msgid "Probably not" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question9_answer2 +msgid "Probably yes" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question2_answer2 +msgid "Punctual" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question5_answer4 +msgid "Rarely, they have the necessary tools and equipment" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__recipient_ids +msgid "Recipients" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question1_answer2 +msgid "Satisfied" +msgstr "" + +#. module: fieldservice_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_order_survey_submit_view_form +msgid "Send" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question3_answer4 +msgid "Somewhat incompetent and uninformed" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question2_answer4 +msgid "Somewhat punctual" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__subject +msgid "Subject" +msgstr "" + +#. module: fieldservice_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_order_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_order_survey_submit_view_form +msgid "Submit Survey" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model,name:fieldservice_survey.model_fsm_order_survey_submit +msgid "Submit Survey for FSM Order" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order__partner_submitted_answer_survey_ids +msgid "Submitted Survey" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model,name:fieldservice_survey.model_survey_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_order_form_view +msgid "Survey" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__fsm_order_id +msgid "Survey Field Service Order" +msgstr "" + +#. module: fieldservice_survey +#: model:res.groups,name:fieldservice_survey.group_fsm_survey_manager +msgid "Survey Manager" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__fsm_order_person_id +msgid "Survey Person" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__survey_template_id +msgid "Survey Template" +msgstr "" + +#. module: fieldservice_survey +#: model:res.groups,name:fieldservice_survey.group_fsm_survey_user +msgid "Survey User" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model,name:fieldservice_survey.model_survey_user_input +msgid "Survey User Input" +msgstr "" + +#. module: fieldservice_survey +#: model:mail.template,subject:fieldservice_survey.mail_template_fsm_order_survey_submit +msgid "Take part in ${ctx.get('fsm_order_name', 'this')} survey" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,validation_error_msg:fieldservice_survey.question1 +#: model:survey.question,validation_error_msg:fieldservice_survey.question10 +#: model:survey.question,validation_error_msg:fieldservice_survey.question11 +#: model:survey.question,validation_error_msg:fieldservice_survey.question2 +#: model:survey.question,validation_error_msg:fieldservice_survey.question3 +#: model:survey.question,validation_error_msg:fieldservice_survey.question4 +#: model:survey.question,validation_error_msg:fieldservice_survey.question5 +#: model:survey.question,validation_error_msg:fieldservice_survey.question6 +#: model:survey.question,validation_error_msg:fieldservice_survey.question7 +#: model:survey.question,validation_error_msg:fieldservice_survey.question8 +#: model:survey.question,validation_error_msg:fieldservice_survey.question9 +msgid "The answer you entered is not valid." +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,constr_error_msg:fieldservice_survey.question1 +#: model:survey.question,constr_error_msg:fieldservice_survey.question10 +#: model:survey.question,constr_error_msg:fieldservice_survey.question11 +#: model:survey.question,constr_error_msg:fieldservice_survey.question2 +#: model:survey.question,constr_error_msg:fieldservice_survey.question3 +#: model:survey.question,constr_error_msg:fieldservice_survey.question4 +#: model:survey.question,constr_error_msg:fieldservice_survey.question5 +#: model:survey.question,constr_error_msg:fieldservice_survey.question6 +#: model:survey.question,constr_error_msg:fieldservice_survey.question7 +#: model:survey.question,constr_error_msg:fieldservice_survey.question8 +#: model:survey.question,constr_error_msg:fieldservice_survey.question9 +msgid "This question requires an answer." +msgstr "" + +#. module: fieldservice_survey +#: code:addons/fieldservice_survey/wizard/fsm_order_survey_submit.py:0 +#, python-format +msgid "Unable to post message, please configure the sender's email address." +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question8_answer4 +msgid "Unclear and uninformative" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__template_id +msgid "Use template" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question8_answer1 +msgid "Very clear and informative" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question3_answer1 +msgid "Very competent and knowledgeable" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question1_answer5 +msgid "Very dissatisfied" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question7_answer1 +msgid "Very effective" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question4_answer1 +msgid "Very high quality" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question3_answer5 +msgid "Very incompetent and uninformed" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question7_answer5 +msgid "Very ineffective" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question4_answer5 +msgid "Very low quality" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question2_answer1 +msgid "Very punctual" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question1_answer1 +msgid "Very satisfied" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question8_answer5 +msgid "Very unclear and uninformative" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question2_answer5 +msgid "Very unpunctual" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question10 +msgid "What suggestions do you have for improving our field services?" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question6 +msgid "Would you recommend our services to a friend or colleague?" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question5_answer1 +msgid "Yes, they always have all the necessary tools and equipment" +msgstr "" + +#. module: fieldservice_survey +#: code:addons/fieldservice_survey/controllers/main.py:0 +#, python-format +msgid "You do not have access to this FSM Order Survey" +msgstr "" + +#. module: fieldservice_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_survey_button_form_view +msgid "or" +msgstr "" diff --git a/fieldservice_survey/i18n/it.po b/fieldservice_survey/i18n/it.po new file mode 100644 index 0000000000..a50d9cba63 --- /dev/null +++ b/fieldservice_survey/i18n/it.po @@ -0,0 +1,658 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fieldservice_survey +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: fieldservice_survey +#: model:mail.template,report_name:fieldservice_survey.mail_template_fsm_order_survey_submit +msgid "${(object.name or '').replace('/','_')}" +msgstr "" + +#. module: fieldservice_survey +#: model:mail.template,body_html:fieldservice_survey.mail_template_fsm_order_survey_submit +msgid "" +"
\n" +"

\n" +" Dear ${object.partner_id.name},\n" +"

\n" +" An survey was requested.\n" +"
\n" +" Please take time to fill the survey.\n" +"

\n" +" Thank you!\n" +"

\n" +" % if ctx.get('recipient_users'):\n" +"

\n" +" \n" +" View Survey\n" +" \n" +"

\n" +" % endif\n" +" \n" +" % if object.deadline:\n" +" Please answer the survey before ${format_date(object.deadline)}.

\n" +" % endif\n" +"

\n" +" ${(object.signature or '')| safe}\n" +"

\n" +"
\n" +" " +msgstr "" + +#. module: fieldservice_survey +#: model:survey.survey,description:fieldservice_survey.customer_satisfaction_survey +msgid "" +"

The purpose of this survey is to evaluate customer satisfaction with our company's field service operations. Your responses will be highly valuable in identifying areas for improvement and enhancing our service quality. We appreciate your time in completing this questionnaire.

\n" +" " +msgstr "" + +#. module: fieldservice_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_order_form_view +msgid "" +"Survey\n" +" Answer" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question5_answer5 +msgid "Almost never, they have the necessary tools and equipment" +msgstr "" + +#. module: fieldservice_survey +#: code:addons/fieldservice_survey/wizard/fsm_order_survey_submit.py:0 +#, python-format +msgid "" +"An survey was requested. Please take time to fill the survey" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__deadline +msgid "Answer Deadline" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__attachment_ids +msgid "Attachments" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__author_id +msgid "Author" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,help:fieldservice_survey.field_fsm_order_survey_submit__author_id +msgid "Author of the message." +msgstr "" + +#. module: fieldservice_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_survey_button_form_view +msgid "Back to the FSM Order" +msgstr "" + +#. module: fieldservice_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_order_survey_submit_view_form +msgid "Cancel" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,help:fieldservice_survey.field_survey_survey__is_fsm_order_survey +msgid "Check this option to restrict the answers to survey managers only." +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question8_answer2 +msgid "Clear and informative" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model,name:fieldservice_survey.model_res_company +msgid "Companies" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question3_answer2 +msgid "Competent and knowledgeable" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model,name:fieldservice_survey.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question9 +msgid "" +"Considering your overall experience with our field service operations, would" +" you recommend our company to others?" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__body +msgid "Contents" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__create_uid +msgid "Created by" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__create_date +msgid "Created on" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.survey,title:fieldservice_survey.customer_satisfaction_survey +msgid "Customer Satisfaction Survey for Field Services" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question6_answer1 +msgid "Definitely" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question6_answer5 +#: model:survey.question.answer,value:fieldservice_survey.question9_answer5 +msgid "Definitely not" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question9_answer1 +msgid "Definitely yes" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__display_name +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_company__display_name +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_config_settings__display_name +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_survey__display_name +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_user_input__display_name +msgid "Display Name" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question1_answer4 +msgid "Dissatisfied" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question5 +msgid "" +"Do you believe our technicians have the necessary tools and equipment to " +"adequately perform the service?" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question11 +msgid "" +"Do you have any additional comments or observations you would like to share?" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question7_answer2 +msgid "Effective" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,help:fieldservice_survey.field_fsm_order_survey_submit__email_from +msgid "Email address of the sender" +msgstr "" + +#. module: fieldservice_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.res_config_settings_view_employee_form +msgid "Enable feedback request through surveys" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_user_input__fsm_order_id +msgid "FSM Order" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_user_input__fsm_order_person_id +msgid "FSM Order Person " +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_survey__is_fsm_order_survey +msgid "FSM Order Survey Managers Only" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model,name:fieldservice_survey.model_fsm_order +msgid "Field Service Order" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_config_settings__module_fieldservice_survey +msgid "Field Service Survey" +msgstr "" + +#. module: fieldservice_survey +#: code:addons/fieldservice_survey/wizard/fsm_order_survey_submit.py:0 +#, python-format +msgid "Fill the answer form on survey" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__email_from +msgid "From" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_company__fsm_order_survey_template_id +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_config_settings__fsm_order_survey_template_id +msgid "Fsm Order Survey Template" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question4_answer2 +msgid "High quality" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question8 +msgid "" +"How would you rate the communication and clarity of information provided by " +"our technicians during the service?" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question3 +msgid "" +"How would you rate the competence and knowledge of our technicians in " +"addressing your needs?" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question7 +msgid "" +"How would you rate the effectiveness of problem-solving and repairs during " +"the field service operations?" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question2 +msgid "" +"How would you rate the punctuality of our technicians in meeting scheduled " +"appointments?" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question4 +msgid "How would you rate the quality of service provided by our technicians?" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order__id +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__id +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_company__id +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_config_settings__id +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_survey__id +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_user_input__id +msgid "ID" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,comments_message:fieldservice_survey.question1 +#: model:survey.question,comments_message:fieldservice_survey.question10 +#: model:survey.question,comments_message:fieldservice_survey.question11 +#: model:survey.question,comments_message:fieldservice_survey.question2 +#: model:survey.question,comments_message:fieldservice_survey.question3 +#: model:survey.question,comments_message:fieldservice_survey.question4 +#: model:survey.question,comments_message:fieldservice_survey.question5 +#: model:survey.question,comments_message:fieldservice_survey.question6 +#: model:survey.question,comments_message:fieldservice_survey.question7 +#: model:survey.question,comments_message:fieldservice_survey.question8 +#: model:survey.question,comments_message:fieldservice_survey.question9 +msgid "If other, please specify:" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question7_answer4 +msgid "Ineffective" +msgstr "" + +#. module: fieldservice_survey +#: code:addons/fieldservice_survey/controllers/main.py:0 +#: code:addons/fieldservice_survey/controllers/main.py:0 +#, python-format +msgid "Invalid FSM Order ID" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order____last_update +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit____last_update +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_company____last_update +#: model:ir.model.fields,field_description:fieldservice_survey.field_res_config_settings____last_update +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_survey____last_update +#: model:ir.model.fields,field_description:fieldservice_survey.field_survey_user_input____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__write_date +msgid "Last Updated on" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question4_answer4 +msgid "Low quality" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question5_answer2 +msgid "Most of the time, they have the necessary tools and equipment" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question1_answer3 +#: model:survey.question.answer,value:fieldservice_survey.question2_answer3 +#: model:survey.question.answer,value:fieldservice_survey.question3_answer3 +#: model:survey.question.answer,value:fieldservice_survey.question4_answer3 +#: model:survey.question.answer,value:fieldservice_survey.question5_answer3 +#: model:survey.question.answer,value:fieldservice_survey.question7_answer3 +#: model:survey.question.answer,value:fieldservice_survey.question8_answer3 +#: model:survey.question.answer,value:fieldservice_survey.question9_answer3 +msgid "Neutral" +msgstr "" + +#. module: fieldservice_survey +#: code:addons/fieldservice_survey/controllers/main.py:0 +#, python-format +msgid "No survey found for the given FSM Order" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question6_answer3 +msgid "Not sure" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order__display_name +msgid "Order" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question1 +msgid "" +"Overall, how satisfied are you with the field services you have received " +"from our company?" +msgstr "" + +#. module: fieldservice_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_order_form_view +msgid "Partners submitted to answer survey" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question6_answer2 +msgid "Probably" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question6_answer4 +#: model:survey.question.answer,value:fieldservice_survey.question9_answer4 +msgid "Probably not" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question9_answer2 +msgid "Probably yes" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question2_answer2 +msgid "Punctual" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question5_answer4 +msgid "Rarely, they have the necessary tools and equipment" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__recipient_ids +msgid "Recipients" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question1_answer2 +msgid "Satisfied" +msgstr "" + +#. module: fieldservice_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_order_survey_submit_view_form +msgid "Send" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question3_answer4 +msgid "Somewhat incompetent and uninformed" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question2_answer4 +msgid "Somewhat punctual" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__subject +msgid "Subject" +msgstr "" + +#. module: fieldservice_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_order_form_view +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_order_survey_submit_view_form +msgid "Submit Survey" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model,name:fieldservice_survey.model_fsm_order_survey_submit +msgid "Submit Survey for FSM Order" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order__partner_submitted_answer_survey_ids +msgid "Submitted Survey" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model,name:fieldservice_survey.model_survey_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_order_form_view +msgid "Survey" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__fsm_order_id +msgid "Survey Field Service Order" +msgstr "" + +#. module: fieldservice_survey +#: model:res.groups,name:fieldservice_survey.group_fsm_survey_manager +msgid "Survey Manager" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__fsm_order_person_id +msgid "Survey Person" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__survey_template_id +msgid "Survey Template" +msgstr "" + +#. module: fieldservice_survey +#: model:res.groups,name:fieldservice_survey.group_fsm_survey_user +msgid "Survey User" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model,name:fieldservice_survey.model_survey_user_input +msgid "Survey User Input" +msgstr "" + +#. module: fieldservice_survey +#: model:mail.template,subject:fieldservice_survey.mail_template_fsm_order_survey_submit +msgid "Take part in ${ctx.get('fsm_order_name', 'this')} survey" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,validation_error_msg:fieldservice_survey.question1 +#: model:survey.question,validation_error_msg:fieldservice_survey.question10 +#: model:survey.question,validation_error_msg:fieldservice_survey.question11 +#: model:survey.question,validation_error_msg:fieldservice_survey.question2 +#: model:survey.question,validation_error_msg:fieldservice_survey.question3 +#: model:survey.question,validation_error_msg:fieldservice_survey.question4 +#: model:survey.question,validation_error_msg:fieldservice_survey.question5 +#: model:survey.question,validation_error_msg:fieldservice_survey.question6 +#: model:survey.question,validation_error_msg:fieldservice_survey.question7 +#: model:survey.question,validation_error_msg:fieldservice_survey.question8 +#: model:survey.question,validation_error_msg:fieldservice_survey.question9 +msgid "The answer you entered is not valid." +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,constr_error_msg:fieldservice_survey.question1 +#: model:survey.question,constr_error_msg:fieldservice_survey.question10 +#: model:survey.question,constr_error_msg:fieldservice_survey.question11 +#: model:survey.question,constr_error_msg:fieldservice_survey.question2 +#: model:survey.question,constr_error_msg:fieldservice_survey.question3 +#: model:survey.question,constr_error_msg:fieldservice_survey.question4 +#: model:survey.question,constr_error_msg:fieldservice_survey.question5 +#: model:survey.question,constr_error_msg:fieldservice_survey.question6 +#: model:survey.question,constr_error_msg:fieldservice_survey.question7 +#: model:survey.question,constr_error_msg:fieldservice_survey.question8 +#: model:survey.question,constr_error_msg:fieldservice_survey.question9 +msgid "This question requires an answer." +msgstr "" + +#. module: fieldservice_survey +#: code:addons/fieldservice_survey/wizard/fsm_order_survey_submit.py:0 +#, python-format +msgid "Unable to post message, please configure the sender's email address." +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question8_answer4 +msgid "Unclear and uninformative" +msgstr "" + +#. module: fieldservice_survey +#: model:ir.model.fields,field_description:fieldservice_survey.field_fsm_order_survey_submit__template_id +msgid "Use template" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question8_answer1 +msgid "Very clear and informative" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question3_answer1 +msgid "Very competent and knowledgeable" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question1_answer5 +msgid "Very dissatisfied" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question7_answer1 +msgid "Very effective" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question4_answer1 +msgid "Very high quality" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question3_answer5 +msgid "Very incompetent and uninformed" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question7_answer5 +msgid "Very ineffective" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question4_answer5 +msgid "Very low quality" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question2_answer1 +msgid "Very punctual" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question1_answer1 +msgid "Very satisfied" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question8_answer5 +msgid "Very unclear and uninformative" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question2_answer5 +msgid "Very unpunctual" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question10 +msgid "What suggestions do you have for improving our field services?" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question,title:fieldservice_survey.question6 +msgid "Would you recommend our services to a friend or colleague?" +msgstr "" + +#. module: fieldservice_survey +#: model:survey.question.answer,value:fieldservice_survey.question5_answer1 +msgid "Yes, they always have all the necessary tools and equipment" +msgstr "" + +#. module: fieldservice_survey +#: code:addons/fieldservice_survey/controllers/main.py:0 +#, python-format +msgid "You do not have access to this FSM Order Survey" +msgstr "" + +#. module: fieldservice_survey +#: model_terms:ir.ui.view,arch_db:fieldservice_survey.fsm_survey_button_form_view +msgid "or" +msgstr "" diff --git a/fieldservice_survey/models/__init__.py b/fieldservice_survey/models/__init__.py new file mode 100644 index 0000000000..0ffed64059 --- /dev/null +++ b/fieldservice_survey/models/__init__.py @@ -0,0 +1,5 @@ +from . import fsm_order +from . import survey_user_input +from . import survey_survey +from . import res_company +from . import res_config_settings diff --git a/fieldservice_survey/models/fsm_order.py b/fieldservice_survey/models/fsm_order.py new file mode 100644 index 0000000000..89ee5a4bac --- /dev/null +++ b/fieldservice_survey/models/fsm_order.py @@ -0,0 +1,26 @@ +from odoo import fields, models + + +class FsmOrder(models.Model): + _inherit = "fsm.order" + + partner_submitted_answer_survey_ids = fields.Many2many( + "res.partner", string="Submitted Survey" + ) + + def action_submit_fsm_order_survey(self): + return { + "type": "ir.actions.act_window", + "view_mode": "form", + "res_model": "fsm.order.survey.submit", + "target": "new", + "name": "Submit Survey ", + } + + def action_open_survey_inputs(self): + return { + "type": "ir.actions.act_url", + "name": "Survey Answer", + "target": "self", + "url": f"/fsm_order/{self.id}/results/", + } diff --git a/fieldservice_survey/models/res_company.py b/fieldservice_survey/models/res_company.py new file mode 100644 index 0000000000..02f57e5ea9 --- /dev/null +++ b/fieldservice_survey/models/res_company.py @@ -0,0 +1,16 @@ +# Copyright 2023 - TODAY, Marcel Savegnago +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + def _get_default_fsm_order_survey_template_id(self): + return self.env.ref( + "fieldservice_survey.fsm_order_survey_submit_template", + raise_if_not_found=False, + ) + + fsm_order_survey_template_id = fields.Many2one("survey.survey") diff --git a/fieldservice_survey/models/res_config_settings.py b/fieldservice_survey/models/res_config_settings.py new file mode 100644 index 0000000000..47c3821b5a --- /dev/null +++ b/fieldservice_survey/models/res_config_settings.py @@ -0,0 +1,16 @@ +# Copyright 2023 - TODAY, Marcel Savegnago +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + fsm_order_survey_template_id = fields.Many2one( + "survey.survey", + related="company_id.fsm_order_survey_template_id", + readonly=False, + ) + + module_fieldservice_survey = fields.Boolean(string="Field Service Survey") diff --git a/fieldservice_survey/models/survey_survey.py b/fieldservice_survey/models/survey_survey.py new file mode 100644 index 0000000000..10d903c88e --- /dev/null +++ b/fieldservice_survey/models/survey_survey.py @@ -0,0 +1,13 @@ +# Copyright 2023 - TODAY, Marcel Savegnago +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class SurveySurvey(models.Model): + _inherit = "survey.survey" + + is_fsm_order_survey = fields.Boolean( + string="FSM Order Survey Managers Only", + help="Check this option to restrict the answers to survey managers only.", + ) diff --git a/fieldservice_survey/models/survey_user_input.py b/fieldservice_survey/models/survey_user_input.py new file mode 100644 index 0000000000..290f301165 --- /dev/null +++ b/fieldservice_survey/models/survey_user_input.py @@ -0,0 +1,11 @@ +# Copyright 2023 - TODAY, Marcel Savegnago +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class SurveyUserInput(models.Model): + _inherit = "survey.user_input" + + fsm_order_id = fields.Many2one("fsm.order", string="FSM Order") + fsm_order_person_id = fields.Many2one("fsm.person", "FSM Order Person ") diff --git a/fieldservice_survey/pyproject.toml b/fieldservice_survey/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/fieldservice_survey/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/fieldservice_survey/readme/CONTRIBUTORS.md b/fieldservice_survey/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..0004ea3b1f --- /dev/null +++ b/fieldservice_survey/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +- [Escodoo](https://www.escodoo.com.br): + - Marcel Savegnago \ + - Kaynnan Lemes \ diff --git a/fieldservice_survey/readme/DESCRIPTION.md b/fieldservice_survey/readme/DESCRIPTION.md new file mode 100644 index 0000000000..45b01051bc --- /dev/null +++ b/fieldservice_survey/readme/DESCRIPTION.md @@ -0,0 +1,16 @@ +This module introduces enhanced survey functionalities in the Field +Service module, streamlining the process of collecting and analyzing +feedback for service orders. Users can seamlessly navigate to Field +Service, access settings, and select a customized FSM Order Survey +Template. When generating a new order, the system prompts users to +submit a survey, facilitating efficient data collection. + +The module further extends capabilities by incorporating an intuitive +"Survey Answer" button within the order interface. This button provides +users with the flexibility to either view comprehensive statistics +derived from survey responses or directly edit the survey for any +necessary adjustments. + +With the Field Service Survey Enhancements module, businesses can +effortlessly manage and optimize their survey processes, gaining +valuable insights into service performance and customer satisfaction. diff --git a/fieldservice_survey/readme/ROADMAP.md b/fieldservice_survey/readme/ROADMAP.md new file mode 100644 index 0000000000..9ad909fd51 --- /dev/null +++ b/fieldservice_survey/readme/ROADMAP.md @@ -0,0 +1,2 @@ +- Improve survey data integrity by updating the fsm_order_person_id + field in response to changes in the field service order's person_id. diff --git a/fieldservice_survey/readme/USAGE.md b/fieldservice_survey/readme/USAGE.md new file mode 100644 index 0000000000..a195635322 --- /dev/null +++ b/fieldservice_survey/readme/USAGE.md @@ -0,0 +1,7 @@ +- Navigate to Field Service +- Go to Settings +- Choose a FSM Order Survey Template +- Generate a new order +- Submit Survey +- Access the "Survey Answer" button in the order to either view the + statistics or edit the survey. diff --git a/fieldservice_survey/security/ir.model.access.csv b/fieldservice_survey/security/ir.model.access.csv new file mode 100644 index 0000000000..8abd344086 --- /dev/null +++ b/fieldservice_survey/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_fsm_order_survey_submit_user,fsm.order.survey.submit.user,model_fsm_order_survey_submit,base.group_user,1,1,1,0 diff --git a/fieldservice_survey/security/res_groups.xml b/fieldservice_survey/security/res_groups.xml new file mode 100644 index 0000000000..ca45803d05 --- /dev/null +++ b/fieldservice_survey/security/res_groups.xml @@ -0,0 +1,26 @@ + + + + + Survey User + + + + + + + Survey Manager + + + + + diff --git a/fieldservice_survey/static/description/icon.png b/fieldservice_survey/static/description/icon.png new file mode 100644 index 0000000000..3a0328b516 Binary files /dev/null and b/fieldservice_survey/static/description/icon.png differ diff --git a/fieldservice_survey/static/description/index.html b/fieldservice_survey/static/description/index.html new file mode 100644 index 0000000000..cb24719230 --- /dev/null +++ b/fieldservice_survey/static/description/index.html @@ -0,0 +1,461 @@ + + + + + +Fieldservice Survey + + + +
+

Fieldservice Survey

+ + +

Beta License: AGPL-3 OCA/field-service Translate me on Weblate Try me on Runboat

+

This module introduces enhanced survey functionalities in the Field +Service module, streamlining the process of collecting and analyzing +feedback for service orders. Users can seamlessly navigate to Field +Service, access settings, and select a customized FSM Order Survey +Template. When generating a new order, the system prompts users to +submit a survey, facilitating efficient data collection.

+

The module further extends capabilities by incorporating an intuitive +“Survey Answer” button within the order interface. This button provides +users with the flexibility to either view comprehensive statistics +derived from survey responses or directly edit the survey for any +necessary adjustments.

+

With the Field Service Survey Enhancements module, businesses can +effortlessly manage and optimize their survey processes, gaining +valuable insights into service performance and customer satisfaction.

+

Table of contents

+ +
+

Usage

+
    +
  • Navigate to Field Service
  • +
  • Go to Settings
  • +
  • Choose a FSM Order Survey Template
  • +
  • Generate a new order
  • +
  • Submit Survey
  • +
  • Access the “Survey Answer” button in the order to either view the +statistics or edit the survey.
  • +
+
+
+

Known issues / Roadmap

+
    +
  • Improve survey data integrity by updating the fsm_order_person_id +field in response to changes in the field service order’s person_id.
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Escodoo
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/field-service project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/fieldservice_survey/tests/__init__.py b/fieldservice_survey/tests/__init__.py new file mode 100644 index 0000000000..a10d48a708 --- /dev/null +++ b/fieldservice_survey/tests/__init__.py @@ -0,0 +1,2 @@ +from . import test_fsm_order +from . import test_fsm_order_survey_submit diff --git a/fieldservice_survey/tests/test_fsm_order.py b/fieldservice_survey/tests/test_fsm_order.py new file mode 100644 index 0000000000..ae5efd5cda --- /dev/null +++ b/fieldservice_survey/tests/test_fsm_order.py @@ -0,0 +1,47 @@ +# Copyright 2023 - TODAY, Kaynnan Lemes +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from datetime import datetime, timedelta + +from odoo.tests.common import TransactionCase + + +class TestFsmOrderSurveySubmit(TransactionCase): + def setUp(self): + super().setUp() + self.test_loc_partner = self.env["res.partner"].create( + {"name": "Test Loc Partner", "phone": "ABC", "email": "tlp@email.com"} + ) + self.test_location = self.env["fsm.location"].create( + { + "name": "Test Location", + "phone": "123", + "email": "tp@email.com", + "partner_id": self.test_loc_partner.id, + "owner_id": self.test_loc_partner.id, + } + ) + self.fsm_order = self.env["fsm.order"].create( + { + "location_id": self.test_location.id, + "date_start": datetime.today(), + "date_end": datetime.today() + timedelta(hours=2), + "request_early": datetime.today(), + } + ) + + def test_action_submit_fsm_order_survey(self): + result = self.fsm_order.action_submit_fsm_order_survey() + self.assertEqual(result["type"], "ir.actions.act_window") + self.assertEqual(result["view_mode"], "form") + self.assertEqual(result["res_model"], "fsm.order.survey.submit") + self.assertEqual(result["target"], "new") + self.assertEqual(result["name"], "Submit Survey ") + + def test_action_open_survey_inputs(self): + result = self.fsm_order.action_open_survey_inputs() + expected_url = f"/fsm_order/{self.fsm_order.id}/results/" + self.assertEqual(result["type"], "ir.actions.act_url") + self.assertEqual(result["name"], "Survey Answer") + self.assertEqual(result["target"], "self") + self.assertEqual(result["url"], expected_url) diff --git a/fieldservice_survey/tests/test_fsm_order_survey_submit.py b/fieldservice_survey/tests/test_fsm_order_survey_submit.py new file mode 100644 index 0000000000..5b79e95844 --- /dev/null +++ b/fieldservice_survey/tests/test_fsm_order_survey_submit.py @@ -0,0 +1,178 @@ +# Copyright 2023 - TODAY, Kaynnan Lemes +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from datetime import datetime, timedelta + +from dateutil.relativedelta import relativedelta + +from odoo import fields +from odoo.tests.common import TransactionCase + + +class TestFsmOrder(TransactionCase): + def setUp(self): + super().setUp() + self.test_loc_partner = self.env["res.partner"].create( + {"name": "Test Loc Partner", "phone": "ABC", "email": "tlp@email.com"} + ) + self.test_location = self.env["fsm.location"].create( + { + "name": "Test Location", + "phone": "123", + "email": "tp@email.com", + "partner_id": self.test_loc_partner.id, + "owner_id": self.test_loc_partner.id, + } + ) + self.fsm_order = self.env["fsm.order"].create( + { + "location_id": self.test_location.id, + "date_start": datetime.today(), + "date_end": datetime.today() + timedelta(hours=2), + "request_early": datetime.today(), + } + ) + self.survey_template = self.env.ref( + "fieldservice_survey.customer_satisfaction_survey" + ) + self.template = self.env.ref( + "fieldservice_survey.mail_template_fsm_order_survey_submit" + ) + self.survey_submit_wizard = self.env["fsm.order.survey.submit"].create( + { + "fsm_order_id": self.fsm_order.id, + "fsm_order_person_id": self.fsm_order.person_id.id, + "email_from": "test@example.com", + "author_id": self.test_loc_partner.id, + "template_id": self.template.id, + "survey_template_id": self.survey_template.id, + "recipient_ids": [(6, 0, [self.fsm_order.location_id.partner_id.id])], + "deadline": fields.Date.today() + relativedelta(months=1), + } + ) + + def test_get_default_deadline(self): + default_deadline = self.survey_submit_wizard._get_default_deadline() + expected_deadline = fields.Date.today() + relativedelta(months=1) + self.assertEqual(default_deadline, expected_deadline) + + def test_default_get(self): + fields_list = ["survey_template_id"] + self.env.context = {"active_id": self.fsm_order.id} + self.survey_submit_wizard.env.user.email = "test@example.com" + result = self.survey_submit_wizard.default_get(fields_list) + expected_survey_template_id = ( + self.fsm_order.company_id.fsm_order_survey_template_id.id + ) + self.assertEqual(result.get("survey_template_id"), expected_survey_template_id) + + def test_compute_recipients(self): + self.survey_submit_wizard._compute_recipients() + expected_recipients = ( + self.survey_submit_wizard.fsm_order_id.location_id.partner_id + ) + self.assertEqual(self.survey_submit_wizard.recipient_ids, expected_recipients) + + def test_compute_subject(self): + self.survey_submit_wizard._compute_subject() + expected_subject = self.template.subject + self.assertEqual(self.survey_submit_wizard.subject, expected_subject) + + def test_prepare_survey_answers(self): + recipients = self.survey_submit_wizard.recipient_ids + existing_answers = self.env["survey.user_input"].search( + [ + ("survey_id", "=", self.survey_submit_wizard.survey_template_id.id), + ("fsm_order_id", "=", self.survey_submit_wizard.fsm_order_id.id), + ("partner_id", "in", recipients.ids), + ] + ) + partners_done = existing_answers.mapped("partner_id") + answers = self.survey_submit_wizard._prepare_survey_answers(recipients) + + missing_answers = recipients - partners_done + + self.assertTrue( + all( + any(answer.partner_id == new_partner for answer in answers) + for new_partner in missing_answers + ), + "Survey answer not created for partner", + ) + + self.assertTrue( + all( + any(answer.partner_id == partner_done for answer in answers) + for partner_done in partners_done + ), + "Existing survey answer not included for partner", + ) + + def test_send_mail(self): + self.maxDiff = None + answer = self.env["survey.user_input"].create( + { + "survey_id": self.survey_template.id, + "email": "recipient@example.com", + "partner_id": self.test_loc_partner.id, + } + ) + ctx = {"fsm_order_name": self.fsm_order.name} + RenderMixin = self.env["mail.render.mixin"].with_context(**ctx) + subject = RenderMixin._render_template( + self.survey_submit_wizard.subject, + "survey.user_input", + answer.ids, + )[answer.id] + + self.env.ref("mail.mail_notification_light") + mail = self.survey_submit_wizard._send_mail(answer) + self.env.ref("mail.mail_notification_light").unlink() + + self.assertTrue(mail) + self.assertEqual(mail.email_from, self.survey_submit_wizard.email_from) + self.assertEqual(mail.author_id.id, self.survey_submit_wizard.author_id.id) + self.assertEqual(mail.subject, subject) + self.assertEqual(mail.attachment_ids, self.survey_submit_wizard.attachment_ids) + self.assertEqual(mail.recipient_ids.ids, [answer.partner_id.id]) + + def test_send_mail_no_partner(self): + self.maxDiff = None + + answer = self.env["survey.user_input"].create( + { + "survey_id": self.survey_template.id, + "email": "recipient@example.com", + } + ) + ctx = {"fsm_order_name": self.fsm_order.name} + RenderMixin = self.env["mail.render.mixin"].with_context(**ctx) + subject = RenderMixin._render_template( + self.survey_submit_wizard.subject, + "survey.user_input", + answer.ids, + )[answer.id] + mail = self.survey_submit_wizard._send_mail(answer) + + self.assertTrue(mail) + self.assertEqual(mail.email_from, self.survey_submit_wizard.email_from) + self.assertEqual(mail.author_id.id, self.survey_submit_wizard.author_id.id) + self.assertEqual(mail.subject, subject) + self.assertEqual(mail.attachment_ids, self.survey_submit_wizard.attachment_ids) + self.assertEqual(mail.email_to, answer.email) + + def test_action_send(self): + recipients = self.survey_submit_wizard.recipient_ids + answers = self.survey_submit_wizard._prepare_survey_answers(recipients) + + self.survey_submit_wizard._send_mail(answers) + self.survey_submit_wizard.fsm_order_id = self.fsm_order + + result = self.survey_submit_wizard.action_send() + + self.assertTrue(result["type"], "ir.actions.act_window_close") + self.assertEqual( + self.fsm_order.partner_submitted_answer_survey_ids, + self.survey_submit_wizard.recipient_ids, + ) + self.assertEqual(len(answers), len(self.survey_submit_wizard.recipient_ids)) diff --git a/fieldservice_survey/views/fsm_order.xml b/fieldservice_survey/views/fsm_order.xml new file mode 100644 index 0000000000..adcb7196c6 --- /dev/null +++ b/fieldservice_survey/views/fsm_order.xml @@ -0,0 +1,57 @@ + + + + + fsm.order.form (in fieldservice_survey) + fsm.order + + + + + + + + + + + + + + + +