Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[17.0] [MIG] survey_question_type_nps: Migration to 17.0 #126

Open
wants to merge 3 commits into
base: 17.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 76 additions & 0 deletions survey_question_type_nps/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
========================
Survey nps question type
========================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:9621e797605aa10b2625d4eb6b4f97abe8d106691b6ac8709f7b6ff5376b91bd
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |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%2Fsurvey-lightgray.png?logo=github
:target: https://github.com/OCA/survey/tree/17.0/survey_question_type_nps
:alt: OCA/survey
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/survey-17-0/survey-17-0-survey_question_type_nps
: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/survey&target_branch=17.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This module add NPS rating question type for survey page

**Table of contents**

.. contents::
:local:

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/survey/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 <https://github.com/OCA/survey/issues/new?body=module:%20survey_question_type_nps%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

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

Credits
=======

Authors
-------

* ACSONE SA/NV

Contributors
------------

- Souheil Bejaoui <[email protected]>

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/survey <https://github.com/OCA/survey/tree/17.0/survey_question_type_nps>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions survey_question_type_nps/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
25 changes: 25 additions & 0 deletions survey_question_type_nps/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Copyright 2018 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

{
"name": "Survey nps question type",
"summary": """
This module add nps rating as question type for survey page""",
"version": "17.0.1.0.0",
"license": "AGPL-3",
"author": "ACSONE SA/NV,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/survey",
"depends": ["survey"],
"data": [
"views/survey_question.xml",
"templates/survey_template.xml",
],
"assets": {
"survey.survey_assets": [
"/survey_question_type_nps/static/src/js/survey.js",
"/survey_question_type_nps/static/src/scss/parameters.scss",
"/survey_question_type_nps/static/src/scss/survey.scss",
],
},
"demo": [],
}
113 changes: 113 additions & 0 deletions survey_question_type_nps/i18n/it.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * survey_question_type_nps
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-10-29 06:42+0000\n"
"Last-Translator: mymage <[email protected]>\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"
"X-Generator: Weblate 4.17\n"

#. module: survey_question_type_nps
#: model_terms:ir.ui.view,arch_db:survey_question_type_nps.nps_rate
msgid "10"
msgstr "10"

#. module: survey_question_type_nps
#: model_terms:ir.ui.view,arch_db:survey_question_type_nps.survey_question_form
msgid ""
"<i class=\"fa fa-frown-o fa-2x text-danger\" title=\"face1\"/>\n"
" <i class=\"fa fa-frown-o fa-2x text-danger\" title="
"\"face2\"/>\n"
" <i class=\"fa fa-frown-o fa-2x text-danger\" title="
"\"face3\"/>\n"
" <i class=\"fa fa-meh-o fa-2x text-warning\" title="
"\"face4\"/>\n"
" <i class=\"fa fa-smile-o fa-2x text-success\" title="
"\"face5\"/>"
msgstr ""
"<i class=\"fa fa-frown-o fa-2x text-danger\" title=\"viso1\"/>\n"
" <i class=\"fa fa-frown-o fa-2x text-danger\" title="
"\"viso2\"/>\n"
" <i class=\"fa fa-frown-o fa-2x text-danger\" title="
"\"viso3\"/>\n"
" <i class=\"fa fa-meh-o fa-2x text-warning\" title=\"viso4"
"\"/>\n"
" <i class=\"fa fa-smile-o fa-2x text-success\" title="
"\"viso5\"/>"

#. module: survey_question_type_nps
#: code:addons/survey_question_type_nps/models/survey_user_input_line.py:0
#, python-format
msgid "Answer is not in the right range"
msgstr "La risposta non è nell'intervallo corretto"

#. module: survey_question_type_nps
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_question__display_name
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_user_input__display_name
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_user_input_line__display_name
msgid "Display Name"
msgstr "Nome visualizzato"

#. module: survey_question_type_nps
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_question__id
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_user_input__id
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_user_input_line__id
msgid "ID"
msgstr "ID"

#. module: survey_question_type_nps
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_question____last_update
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_user_input____last_update
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_user_input_line____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"

#. module: survey_question_type_nps
#: model_terms:ir.ui.view,arch_db:survey_question_type_nps.avg_nps
msgid "NPS Average"
msgstr "Media NPS"

#. module: survey_question_type_nps
#: model:ir.model.fields.selection,name:survey_question_type_nps.selection__survey_question__question_type__nps_rate
msgid "NPS Rating"
msgstr "Punteggio NPS"

#. module: survey_question_type_nps
#: code:addons/survey_question_type_nps/models/survey_user_input_line.py:0
#, python-format
msgid "NPS rate question must have numeric answer"
msgstr "La domanda valutazione NPS deve avere una risposta numerica"

#. module: survey_question_type_nps
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_question__question_type
msgid "Question Type"
msgstr "Tipo di domanda"

#. module: survey_question_type_nps
#: model:ir.model,name:survey_question_type_nps.model_survey_question
msgid "Survey Question"
msgstr "Domanda sondaggio"

#. module: survey_question_type_nps
#: model:ir.model,name:survey_question_type_nps.model_survey_user_input
msgid "Survey User Input"
msgstr "Risposta utente al sondaggio"

#. module: survey_question_type_nps
#: model:ir.model,name:survey_question_type_nps.model_survey_user_input_line
msgid "Survey User Input Line"
msgstr "Riga risposta utente al sondaggio"

#. module: survey_question_type_nps
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_user_input_line__value_nps
msgid "Value Nps"
msgstr "Valorizza NPS"
98 changes: 98 additions & 0 deletions survey_question_type_nps/i18n/survey_question_type_nps.pot
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * survey_question_type_nps
#
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: survey_question_type_nps
#: model_terms:ir.ui.view,arch_db:survey_question_type_nps.nps_rate
msgid "10"
msgstr ""

#. module: survey_question_type_nps
#: model_terms:ir.ui.view,arch_db:survey_question_type_nps.survey_question_form
msgid ""
"<i class=\"fa fa-frown-o fa-2x text-danger\" title=\"face1\"/>\n"
" <i class=\"fa fa-frown-o fa-2x text-danger\" title=\"face2\"/>\n"
" <i class=\"fa fa-frown-o fa-2x text-danger\" title=\"face3\"/>\n"
" <i class=\"fa fa-meh-o fa-2x text-warning\" title=\"face4\"/>\n"
" <i class=\"fa fa-smile-o fa-2x text-success\" title=\"face5\"/>"
msgstr ""

#. module: survey_question_type_nps
#: code:addons/survey_question_type_nps/models/survey_user_input_line.py:0
#: code:addons/survey_question_type_nps/models/survey_user_input_line.py:0
#, python-format
msgid "Answer is not in the right range"
msgstr ""

#. module: survey_question_type_nps
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_question__display_name
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_user_input__display_name
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_user_input_line__display_name
msgid "Display Name"
msgstr ""

#. module: survey_question_type_nps
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_question__id
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_user_input__id
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_user_input_line__id
msgid "ID"
msgstr ""

#. module: survey_question_type_nps
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_question____last_update
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_user_input____last_update
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_user_input_line____last_update
msgid "Last Modified on"
msgstr ""

#. module: survey_question_type_nps
#: model_terms:ir.ui.view,arch_db:survey_question_type_nps.avg_nps
msgid "NPS Average"
msgstr ""

#. module: survey_question_type_nps
#: model:ir.model.fields.selection,name:survey_question_type_nps.selection__survey_question__question_type__nps_rate
msgid "NPS Rating"
msgstr ""

#. module: survey_question_type_nps
#: code:addons/survey_question_type_nps/models/survey_user_input_line.py:0
#, python-format
msgid "NPS rate question must have numeric answer"
msgstr ""

#. module: survey_question_type_nps
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_question__question_type
msgid "Question Type"
msgstr ""

#. module: survey_question_type_nps
#: model:ir.model,name:survey_question_type_nps.model_survey_question
msgid "Survey Question"
msgstr ""

#. module: survey_question_type_nps
#: model:ir.model,name:survey_question_type_nps.model_survey_user_input
msgid "Survey User Input"
msgstr ""

#. module: survey_question_type_nps
#: model:ir.model,name:survey_question_type_nps.model_survey_user_input_line
msgid "Survey User Input Line"
msgstr ""

#. module: survey_question_type_nps
#: model:ir.model.fields,field_description:survey_question_type_nps.field_survey_user_input_line__value_nps
msgid "Value Nps"
msgstr ""
2 changes: 2 additions & 0 deletions survey_question_type_nps/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import survey_question
from . import survey_user_input_line
61 changes: 61 additions & 0 deletions survey_question_type_nps/models/survey_question.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Copyright 2018 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import collections

from odoo import fields, models, tools


class SurveyQuestion(models.Model):
_inherit = "survey.question"

question_type = fields.Selection(selection_add=[("nps_rate", "NPS Rating")])

def _get_stats_summary_data(self, user_input_lines):
stats = super()._get_stats_summary_data(user_input_lines)

Check warning on line 14 in survey_question_type_nps/models/survey_question.py

View check run for this annotation

Codecov / codecov/patch

survey_question_type_nps/models/survey_question.py#L14

Added line #L14 was not covered by tests
if self.question_type in ["nps_rate"]:
stats.update(self._get_stats_summary_data_numerical(user_input_lines))

Check warning on line 16 in survey_question_type_nps/models/survey_question.py

View check run for this annotation

Codecov / codecov/patch

survey_question_type_nps/models/survey_question.py#L16

Added line #L16 was not covered by tests
all_nps = user_input_lines.filtered(lambda line: not line.skipped).mapped(
"value_nps"
)
stats.update(
{
"common_lines": collections.Counter(
user_input_lines.filtered(lambda line: not line.skipped).mapped(
"value_numerical_box"
)
).most_common(5),
"right_inputs_count": len(
user_input_lines.filtered(
lambda line: line.answer_is_correct
).mapped("user_input_id")
),
"average_nps": round(sum(all_nps) / len(all_nps), 2)
if all_nps
else 0,
}
)
return stats

Check warning on line 37 in survey_question_type_nps/models/survey_question.py

View check run for this annotation

Codecov / codecov/patch

survey_question_type_nps/models/survey_question.py#L37

Added line #L37 was not covered by tests

def validate_nps_rate(self, post, answer_tag):
self.ensure_one()
errors = {}
answer = post[answer_tag].strip()
# Empty answer to mandatory question
if self.constr_mandatory and not answer:
errors.update({answer_tag: self.constr_error_msg})

Check warning on line 45 in survey_question_type_nps/models/survey_question.py

View check run for this annotation

Codecov / codecov/patch

survey_question_type_nps/models/survey_question.py#L45

Added line #L45 was not covered by tests
# Checks if user input is a number
if answer:
try:
floatanswer = float(answer)
except ValueError:
errors.update({answer_tag: "This is not a number"})
return errors
# Answer is not in the right range
with tools.ignore(Exception):
# 0 answer to mandatory question
if self.constr_mandatory:
if floatanswer == 0:
errors.update({answer_tag: self.constr_error_msg})

Check warning on line 58 in survey_question_type_nps/models/survey_question.py

View check run for this annotation

Codecov / codecov/patch

survey_question_type_nps/models/survey_question.py#L58

Added line #L58 was not covered by tests
if not (0 <= floatanswer <= 10):
errors.update({answer_tag: "Answer is not in the right range"})
return errors
Loading
Loading