From 3010751e954bca0ecb934fcb34ec483b87b7b055 Mon Sep 17 00:00:00 2001 From: ijas ahammed Date: Wed, 2 Dec 2020 06:21:20 +0000 Subject: [PATCH 1/2] [IMP] {hr_recruitment_,website_slides_}survey: remove 'state' field The goal of the draft state on survey is to have the survey under edition mode before before sending it to participants. Under this mode: - the responsible can test it (can be done with "In Progress" mode) - the survey can't be answered (same as the state closed) The risk that the survey can be leaked before being ready is really limited. If it's a live survey, participants will have to guess the 4 digits access code and wait for the host to go to the next question. Else, participant will have to guess the token. Considering these facts, the use of the draft state is very limited so 'draft' state can be dropped. If we do so, we are left with only two stages that are 'open' and 'closed'. But whether to consider survey open or closed can be simply achieved with active field we already have (if active=False, survey is closed, otherwise it's considered as open). So with this commit, we remove the state field from survey and thus simplify the flow. It means that we no longer require 'Start Survey' button, and so that button is also removed, and for the closed surveys, instead of the button 'Set to draft', now we have a 'Reopen' button which will activate the survey. And instead of displaying few buttons after saving a record, we now display all the buttons from beginning. Task ID-2389434 COM PR odoo/odoo#62712 ENT PR odoo/enterprise#15217 UPG PR odoo/upgrade#2006 --- .../data/survey_demo.xml | 1 - addons/survey/__manifest__.py | 2 +- addons/survey/controllers/main.py | 2 +- .../controllers/survey_session_manage.py | 1 - .../survey/data/survey_demo_certification.xml | 1 - .../survey/data/survey_demo_conditional.xml | 1 - addons/survey/data/survey_demo_feedback.xml | 1 - addons/survey/data/survey_demo_quiz.xml | 1 - addons/survey/models/survey_survey.py | 23 ++------------ addons/survey/tests/common.py | 1 - .../survey/tests/test_certification_badge.py | 3 -- .../survey/tests/test_certification_flow.py | 2 -- .../test_survey_compute_pages_questions.py | 1 - addons/survey/tests/test_survey_flow.py | 1 - addons/survey/tests/test_survey_invite.py | 2 +- addons/survey/tests/test_survey_security.py | 9 ++---- .../tests/test_survey_ui_certification.py | 1 - .../survey/tests/test_survey_ui_feedback.py | 1 - addons/survey/tests/test_survey_ui_session.py | 1 - addons/survey/views/survey_survey_views.xml | 31 +++++++------------ .../tests/test_ui_wslides.py | 1 - .../data/survey_demo.xml | 1 - .../test_course_certification_failure.py | 1 - 23 files changed, 20 insertions(+), 69 deletions(-) diff --git a/addons/hr_recruitment_survey/data/survey_demo.xml b/addons/hr_recruitment_survey/data/survey_demo.xml index 3cdc2fac743..0ef49338047 100644 --- a/addons/hr_recruitment_survey/data/survey_demo.xml +++ b/addons/hr_recruitment_survey/data/survey_demo.xml @@ -2,7 +2,6 @@ Recruitment Form - open token diff --git a/addons/survey/__manifest__.py b/addons/survey/__manifest__.py index 2f1c662f84b..fa0129ffd4b 100644 --- a/addons/survey/__manifest__.py +++ b/addons/survey/__manifest__.py @@ -2,7 +2,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. { 'name': 'Surveys', - 'version': '3.2', + 'version': '3.3', 'category': 'Marketing/Surveys', 'description': """ Create beautiful surveys and visualize answers diff --git a/addons/survey/controllers/main.py b/addons/survey/controllers/main.py index fd577a3d01c..80b17617f47 100644 --- a/addons/survey/controllers/main.py +++ b/addons/survey/controllers/main.py @@ -74,7 +74,7 @@ class Survey(http.Controller): if survey_sudo.users_login_required and request.env.user._is_public(): return 'survey_auth' - if (survey_sudo.state == 'closed' or survey_sudo.state == 'draft' or not survey_sudo.active) and (not answer_sudo or not answer_sudo.test_entry): + if not survey_sudo.active and (not answer_sudo or not answer_sudo.test_entry): return 'survey_closed' if (not survey_sudo.page_ids and survey_sudo.questions_layout == 'page_per_section') or not survey_sudo.question_ids: diff --git a/addons/survey/controllers/survey_session_manage.py b/addons/survey/controllers/survey_session_manage.py index c8e18f2935b..ed84444f5b5 100644 --- a/addons/survey/controllers/survey_session_manage.py +++ b/addons/survey/controllers/survey_session_manage.py @@ -28,7 +28,6 @@ class UserInputSession(http.Controller): We limit to sessions opened within the last 7 days to avoid potential abuses. """ if session_code: matching_survey = request.env['survey.survey'].sudo().search([ - ('state', '=', 'open'), ('session_start_time', '>', fields.Datetime.now() - relativedelta(days=7)), ('session_code', '=', session_code), ], limit=1) diff --git a/addons/survey/data/survey_demo_certification.xml b/addons/survey/data/survey_demo_certification.xml index 54cd42ca343..3a2e6d1f1ba 100644 --- a/addons/survey/data/survey_demo_certification.xml +++ b/addons/survey/data/survey_demo_certification.xml @@ -12,7 +12,6 @@ MyCompany Vendor Certification 4ead4bc8-b8f2-4760-a682-1fde8ddb95ac - open public page_per_question diff --git a/addons/survey/data/survey_demo_conditional.xml b/addons/survey/data/survey_demo_conditional.xml index 9201bcdcbaa..130c4939385 100644 --- a/addons/survey/data/survey_demo_conditional.xml +++ b/addons/survey/data/survey_demo_conditional.xml @@ -4,7 +4,6 @@ Burger Quiz burger00-quiz-1234-abcd-344ca2tgb31e - open public scoring_with_answers diff --git a/addons/survey/data/survey_demo_feedback.xml b/addons/survey/data/survey_demo_feedback.xml index ef23de6bcc1..9ed4d1118a8 100644 --- a/addons/survey/data/survey_demo_feedback.xml +++ b/addons/survey/data/survey_demo_feedback.xml @@ -4,7 +4,6 @@ Feedback Form b135640d-14d4-4748-9ef6-344ca256531e - open public page_per_section diff --git a/addons/survey/data/survey_demo_quiz.xml b/addons/survey/data/survey_demo_quiz.xml index 6f4ce8a89c2..31e30bcff68 100644 --- a/addons/survey/data/survey_demo_quiz.xml +++ b/addons/survey/data/survey_demo_quiz.xml @@ -4,7 +4,6 @@ Quiz about our Company b137640d-9876-1234-abcd-344ca256531e - open public scoring_with_answers diff --git a/addons/survey/models/survey_survey.py b/addons/survey/models/survey_survey.py index ed7ad478bd1..1a1f3a849d1 100644 --- a/addons/survey/models/survey_survey.py +++ b/addons/survey/models/survey_survey.py @@ -55,10 +55,6 @@ class Survey(models.Model): help="This message will be displayed when survey is completed") background_image = fields.Binary("Background Image") active = fields.Boolean("Active", default=True) - state = fields.Selection(selection=[ - ('draft', 'Draft'), ('open', 'In Progress'), ('closed', 'Closed') - ], string="Survey Stage", default='draft', required=True, - group_expand='_read_group_states') # questions question_and_page_ids = fields.One2many('survey.question', 'survey_id', string='Sections and Questions', copy=True) page_ids = fields.One2many('survey.question', string='Pages', compute="_compute_page_and_question_ids") @@ -292,10 +288,6 @@ class Survey(models.Model): not survey.certification: survey.certification_give_badge = False - def _read_group_states(self, values, domain, order): - selection = self.env['survey.survey'].fields_get(allfields=['state'])['state']['selection'] - return [s[0] for s in selection] - # ------------------------------------------------------------ # CRUD # ------------------------------------------------------------ @@ -400,9 +392,7 @@ class Survey(models.Model): raise exceptions.UserError(_('Creating test token is not allowed for you.')) else: if not self.active: - raise exceptions.UserError(_('Creating token for archived surveys is not allowed.')) - elif self.state == 'closed': - raise exceptions.UserError(_('Creating token for closed surveys is not allowed.')) + raise exceptions.UserError(_('Creating token for closed/archived surveys is not allowed.')) if self.access_mode == 'authentication': # signup possible -> should have at least a partner to create an account if self.users_can_signup and not user and not partner: @@ -799,22 +789,13 @@ class Survey(models.Model): # ACTIONS # ------------------------------------------------------------ - def action_draft(self): - self.write({'state': 'draft'}) - - def action_open(self): - self.write({'state': 'open'}) - - def action_close(self): - self.write({'state': 'closed'}) - def action_send_survey(self): """ Open a window to compose an email, pre-filled with the survey message """ # Ensure that this survey has at least one page with at least one question. if (not self.page_ids and self.questions_layout == 'page_per_section') or not self.question_ids: raise exceptions.UserError(_('You cannot send an invitation for a survey that has no questions.')) - if self.state == 'closed': + if not self.active: raise exceptions.UserError(_("You cannot send invitations for closed surveys.")) template = self.env.ref('survey.mail_template_user_input_invite', raise_if_not_found=False) diff --git a/addons/survey/tests/common.py b/addons/survey/tests/common.py index 2ed13da1047..f30167113f4 100644 --- a/addons/survey/tests/common.py +++ b/addons/survey/tests/common.py @@ -247,7 +247,6 @@ class TestSurveyCommon(SurveyCase): 'access_mode': 'public', 'users_login_required': True, 'users_can_go_back': False, - 'state': 'open', }) self.page_0 = self.env['survey.question'].with_user(self.survey_manager).create({ 'title': 'First page', diff --git a/addons/survey/tests/test_certification_badge.py b/addons/survey/tests/test_certification_badge.py index cb5924e39e2..762feba5d7c 100644 --- a/addons/survey/tests/test_certification_badge.py +++ b/addons/survey/tests/test_certification_badge.py @@ -17,7 +17,6 @@ class TestCertificationBadge(common.TestSurveyCommon): 'users_login_required': True, 'scoring_type': 'scoring_with_answers', 'certification': True, - 'state': 'open', }) self.certification_survey_2 = self.env['survey.survey'].with_user(self.survey_manager).create({ @@ -26,7 +25,6 @@ class TestCertificationBadge(common.TestSurveyCommon): 'users_login_required': True, 'scoring_type': 'scoring_with_answers', 'certification': True, - 'state': 'open', }) self.certification_badge = self.env['gamification.badge'].with_user(self.survey_manager).create({ @@ -160,7 +158,6 @@ class TestCertificationBadge(common.TestSurveyCommon): 'certification': True, 'certification_give_badge': True, 'certification_badge_id': self.certification_badge.id, - 'state': 'open' } survey_1 = self.env['survey.survey'].create(vals.copy()) vals.update({'certification_badge_id': self.certification_badge_2.id}) diff --git a/addons/survey/tests/test_certification_flow.py b/addons/survey/tests/test_certification_flow.py index a88f2f8a19f..acf09aad3da 100644 --- a/addons/survey/tests/test_certification_flow.py +++ b/addons/survey/tests/test_certification_flow.py @@ -28,7 +28,6 @@ class TestCertificationFlow(common.TestSurveyCommon, HttpCase): 'certification_mail_template_id': self.env.ref('survey.mail_template_certification').id, 'is_time_limited': True, 'time_limit': 10, - 'state': 'open', }) q01 = self._add_question( @@ -135,7 +134,6 @@ class TestCertificationFlow(common.TestSurveyCommon, HttpCase): 'title': 'User randomized Certification', 'questions_layout': 'page_per_section', 'questions_selection': 'random', - 'state': 'open', 'scoring_type': 'scoring_without_answers', }) diff --git a/addons/survey/tests/test_survey_compute_pages_questions.py b/addons/survey/tests/test_survey_compute_pages_questions.py index d59dbf904d6..335683d445f 100644 --- a/addons/survey/tests/test_survey_compute_pages_questions.py +++ b/addons/survey/tests/test_survey_compute_pages_questions.py @@ -9,7 +9,6 @@ class TestSurveyComputePagesQuestions(common.TestSurveyCommon): with self.with_user('survey_manager'): survey = self.env['survey.survey'].create({ 'title': 'Test compute survey', - 'state': 'open', }) page_0 = self.env['survey.question'].create({ diff --git a/addons/survey/tests/test_survey_flow.py b/addons/survey/tests/test_survey_flow.py index d0c2921ae80..08a478fd37a 100644 --- a/addons/survey/tests/test_survey_flow.py +++ b/addons/survey/tests/test_survey_flow.py @@ -26,7 +26,6 @@ class TestSurveyFlow(common.TestSurveyCommon, HttpCase): 'access_mode': 'public', 'users_login_required': False, 'questions_layout': 'page_per_section', - 'state': 'open' }) # First page is about customer data diff --git a/addons/survey/tests/test_survey_invite.py b/addons/survey/tests/test_survey_invite.py index 6a93ee45d56..14c58d13c17 100644 --- a/addons/survey/tests/test_survey_invite.py +++ b/addons/survey/tests/test_survey_invite.py @@ -34,7 +34,7 @@ class TestSurveyInvite(common.TestSurveyCommon): # closed self.env['survey.survey'].with_user(self.survey_manager).create({ 'title': 'S0', - 'state': 'closed', + 'active': False, 'question_and_page_ids': [ (0, 0, {'is_page': True, 'title': 'P0', 'sequence': 1}), (0, 0, {'title': 'Q0', 'sequence': 2, 'question_type': 'text_box'}) diff --git a/addons/survey/tests/test_survey_security.py b/addons/survey/tests/test_survey_security.py index 191e8edd711..5ef21df853a 100644 --- a/addons/survey/tests/test_survey_security.py +++ b/addons/survey/tests/test_survey_security.py @@ -331,12 +331,9 @@ class TestSurveySecurityControllers(common.TestSurveyCommon, HttpCase): def test_survey_start_short(self): # avoid name clash with existing data surveys = self.env['survey.survey'].search([ - ('state', '=', 'open'), ('session_state', 'in', ['ready', 'in_progress']) ]) - surveys.write({'state': 'done'}) self.survey.write({ - 'state': 'open', 'session_state': 'ready', 'session_code': '123456', 'session_start_time': datetime.datetime.now(), @@ -353,12 +350,12 @@ class TestSurveySecurityControllers(common.TestSurveyCommon, HttpCase): response = self.url_open(f'/s/______') self.assertFalse(self.survey.title in response.text) - # right short token, but wrong state - self.survey.state = 'draft' + # right short token, but closed survey + self.survey.action_archive() response = self.url_open(f'/s/123456') self.assertFalse(self.survey.title in response.text) # right short token, but wrong `session_state` - self.survey.write({'state': 'open', 'session_state': False}) + self.survey.write({'session_state': False, 'active': True}) response = self.url_open(f'/s/123456') self.assertFalse(self.survey.title in response.text) diff --git a/addons/survey/tests/test_survey_ui_certification.py b/addons/survey/tests/test_survey_ui_certification.py index 9ba15c55a61..ceacd712134 100644 --- a/addons/survey/tests/test_survey_ui_certification.py +++ b/addons/survey/tests/test_survey_ui_certification.py @@ -14,7 +14,6 @@ class TestUiCertification(HttpCaseWithUserDemo): self.survey_certification = self.env['survey.survey'].create({ 'title': 'MyCompany Vendor Certification', 'access_token': '4ead4bc8-b8f2-4760-a682-1fde8daaaaac', - 'state': 'open', 'access_mode': 'public', 'users_can_go_back': True, 'users_login_required': True, diff --git a/addons/survey/tests/test_survey_ui_feedback.py b/addons/survey/tests/test_survey_ui_feedback.py index 90f86a48cbd..3b49af6a782 100644 --- a/addons/survey/tests/test_survey_ui_feedback.py +++ b/addons/survey/tests/test_survey_ui_feedback.py @@ -13,7 +13,6 @@ class TestUiFeedback(HttpCaseWithUserDemo): self.survey_feedback = self.env['survey.survey'].create({ 'title': 'User Feedback Form', 'access_token': 'b137640d-14d4-4748-9ef6-344caaaaaae', - 'state': 'open', 'access_mode': 'public', 'users_can_go_back': True, 'questions_layout': 'page_per_section', diff --git a/addons/survey/tests/test_survey_ui_session.py b/addons/survey/tests/test_survey_ui_session.py index 53dd81ea62b..8d259d3387b 100644 --- a/addons/survey/tests/test_survey_ui_session.py +++ b/addons/survey/tests/test_survey_ui_session.py @@ -35,7 +35,6 @@ class TestUiSession(HttpCase): survey_session = self.env['survey.survey'].create({ 'title': 'User Session Survey', 'access_token': 'b137640d-14d4-4748-9ef6-344caaaaafe', - 'state': 'open', 'access_mode': 'public', 'users_can_go_back': False, 'questions_layout': 'page_per_question', diff --git a/addons/survey/views/survey_survey_views.xml b/addons/survey/views/survey_survey_views.xml index 71a03990fff..e8a60d44398 100644 --- a/addons/survey/views/survey_survey_views.xml +++ b/addons/survey/views/survey_survey_views.xml @@ -9,21 +9,19 @@
-
@@ -165,7 +163,6 @@ - @@ -181,7 +178,6 @@ survey.survey - @@ -192,6 +188,7 @@ +
Edit Survey - Share + Share Delete
-
+
@@ -270,9 +267,6 @@ domain="[('activity_ids.date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/> - - - @@ -281,7 +275,6 @@ Surveys survey.survey kanban,tree,form,activity - {'search_default_groupby_state': 1}

Add a new survey diff --git a/addons/test_website_slides_full/tests/test_ui_wslides.py b/addons/test_website_slides_full/tests/test_ui_wslides.py index c3e999db7a8..9956f7e59c6 100644 --- a/addons/test_website_slides_full/tests/test_ui_wslides.py +++ b/addons/test_website_slides_full/tests/test_ui_wslides.py @@ -54,7 +54,6 @@ class TestUi(TestUICommon): furniture_survey = self.env['survey.survey'].create({ 'title': 'Furniture Creation Certification', 'access_token': '5632a4d7-48cf-aaaa-8c52-2174d58cf50b', - 'state': 'open', 'access_mode': 'public', 'users_can_go_back': True, 'users_login_required': True, diff --git a/addons/website_slides_survey/data/survey_demo.xml b/addons/website_slides_survey/data/survey_demo.xml index 114a3f3dab7..3efcc871c93 100644 --- a/addons/website_slides_survey/data/survey_demo.xml +++ b/addons/website_slides_survey/data/survey_demo.xml @@ -5,7 +5,6 @@ Furniture Creation Certification 5632a4d7-48cf-4d25-8c52-2174d58cf50b - open public diff --git a/addons/website_slides_survey/tests/test_course_certification_failure.py b/addons/website_slides_survey/tests/test_course_certification_failure.py index 8b206faefb8..749e2d74e0e 100644 --- a/addons/website_slides_survey/tests/test_course_certification_failure.py +++ b/addons/website_slides_survey/tests/test_course_certification_failure.py @@ -18,7 +18,6 @@ class TestCourseCertificationFailureFlow(TestSurveyCommon): 'is_attempts_limited': True, 'scoring_success_min': 100.0, 'attempts_limit': 2, - 'state': 'open', }) self._add_question( From f8738b70f44a7e0b3b3fa2d2eadaaa45d101f3f6 Mon Sep 17 00:00:00 2001 From: Dharmraj Jhala Date: Fri, 5 Feb 2021 12:16:50 +0000 Subject: [PATCH 2/2] [IMP] {hr_recruitment_,website_slides_}survey: add 'user_id' field This commit enable users to set a 'Responsible' for the survey by adding 'user_id' field. Demo data for the same is also updated. Task ID-2389434 COM PR odoo/odoo#62712 ENT PR odoo/enterprise#15217 UPG PR odoo/upgrade#2006 --- addons/hr_recruitment_survey/data/survey_demo.xml | 1 + addons/survey/data/survey_demo_certification.xml | 1 + addons/survey/data/survey_demo_conditional.xml | 1 + addons/survey/data/survey_demo_feedback.xml | 1 + addons/survey/data/survey_demo_quiz.xml | 1 + addons/survey/models/survey_survey.py | 1 + addons/survey/views/survey_survey_views.xml | 1 + addons/website_slides_survey/data/survey_demo.xml | 1 + 8 files changed, 8 insertions(+) diff --git a/addons/hr_recruitment_survey/data/survey_demo.xml b/addons/hr_recruitment_survey/data/survey_demo.xml index 0ef49338047..83a76d62f61 100644 --- a/addons/hr_recruitment_survey/data/survey_demo.xml +++ b/addons/hr_recruitment_survey/data/survey_demo.xml @@ -2,6 +2,7 @@ Recruitment Form + token diff --git a/addons/survey/data/survey_demo_certification.xml b/addons/survey/data/survey_demo_certification.xml index 3a2e6d1f1ba..8154e64bcb0 100644 --- a/addons/survey/data/survey_demo_certification.xml +++ b/addons/survey/data/survey_demo_certification.xml @@ -12,6 +12,7 @@ MyCompany Vendor Certification 4ead4bc8-b8f2-4760-a682-1fde8ddb95ac + public page_per_question diff --git a/addons/survey/data/survey_demo_conditional.xml b/addons/survey/data/survey_demo_conditional.xml index 130c4939385..740337ee0d1 100644 --- a/addons/survey/data/survey_demo_conditional.xml +++ b/addons/survey/data/survey_demo_conditional.xml @@ -4,6 +4,7 @@ Burger Quiz burger00-quiz-1234-abcd-344ca2tgb31e + public scoring_with_answers diff --git a/addons/survey/data/survey_demo_feedback.xml b/addons/survey/data/survey_demo_feedback.xml index 9ed4d1118a8..ed46b4bc92b 100644 --- a/addons/survey/data/survey_demo_feedback.xml +++ b/addons/survey/data/survey_demo_feedback.xml @@ -4,6 +4,7 @@ Feedback Form b135640d-14d4-4748-9ef6-344ca256531e + public page_per_section diff --git a/addons/survey/data/survey_demo_quiz.xml b/addons/survey/data/survey_demo_quiz.xml index 31e30bcff68..eb112e5677c 100644 --- a/addons/survey/data/survey_demo_quiz.xml +++ b/addons/survey/data/survey_demo_quiz.xml @@ -4,6 +4,7 @@ Quiz about our Company b137640d-9876-1234-abcd-344ca256531e + public scoring_with_answers diff --git a/addons/survey/models/survey_survey.py b/addons/survey/models/survey_survey.py index 1a1f3a849d1..771e23e70a7 100644 --- a/addons/survey/models/survey_survey.py +++ b/addons/survey/models/survey_survey.py @@ -55,6 +55,7 @@ class Survey(models.Model): help="This message will be displayed when survey is completed") background_image = fields.Binary("Background Image") active = fields.Boolean("Active", default=True) + user_id = fields.Many2one('res.users', string='Responsible', tracking=True, default=lambda self: self.env.user) # questions question_and_page_ids = fields.One2many('survey.question', 'survey_id', string='Sections and Questions', copy=True) page_ids = fields.One2many('survey.question', string='Pages', compute="_compute_page_and_question_ids") diff --git a/addons/survey/views/survey_survey_views.xml b/addons/survey/views/survey_survey_views.xml index e8a60d44398..826c359db1d 100644 --- a/addons/survey/views/survey_survey_views.xml +++ b/addons/survey/views/survey_survey_views.xml @@ -54,6 +54,7 @@

+ diff --git a/addons/website_slides_survey/data/survey_demo.xml b/addons/website_slides_survey/data/survey_demo.xml index 3efcc871c93..d08ed74615a 100644 --- a/addons/website_slides_survey/data/survey_demo.xml +++ b/addons/website_slides_survey/data/survey_demo.xml @@ -5,6 +5,7 @@ Furniture Creation Certification 5632a4d7-48cf-4d25-8c52-2174d58cf50b + public