From 95911e2b7fbda0dad54ca23ffaf741eb953f22fa Mon Sep 17 00:00:00 2001 From: Pierre-Yves Dufays Date: Wed, 21 Dec 2022 11:10:18 +0000 Subject: [PATCH] [FIX] survey: fix detect duplicate partner invitation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When sending the same survey to the same partner, the system detects it and allows the user to choose between sending a new invitation or resending the old one so that the user can continue the survey that might already be ongoing. The detection was not working anymore and this fixes the problem. Technical note: _compute_existing_partner_ids was intersecting record set partner_ids (the one currently added) and a record set of partner for which an invitation has already been sent. The intersection didn't work because partner_ids relation was not completely set and instead of id, had "origin" id. Comparing id using a filter solves the problem (using the trick that .ids, return also the origin ids). Task-3087702 closes odoo/odoo#111687 X-original-commit: fea798047118f0a482dc2421d92e73f51dd04816 Signed-off-by: Warnon Aurélien (awa) Signed-off-by: Dufays Pierre-Yves (pydu) --- addons/survey/tests/test_survey_invite.py | 11 +++++++++++ addons/survey/wizard/survey_invite.py | 3 +-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/addons/survey/tests/test_survey_invite.py b/addons/survey/tests/test_survey_invite.py index 9c8a29a709e..0b86bf3dbd0 100644 --- a/addons/survey/tests/test_survey_invite.py +++ b/addons/survey/tests/test_survey_invite.py @@ -84,6 +84,17 @@ class TestSurveyInvite(common.TestSurveyCommon): self.assertEqual(answers.mapped('partner_id'), self.customer) self.assertEqual(set(answers.mapped('deadline')), set([deadline])) + with self.subTest('Warning when inviting an already invited partner'): + action = self.survey.action_send_survey() + invite_form = Form(self.env[action['res_model']].with_context(action['context'])) + invite_form.send_email = True + invite_form.partner_ids.add(self.customer) + + self.assertIn(self.customer, invite_form.existing_partner_ids) + self.assertEqual(invite_form.existing_text, + 'The following customers have already received an invite: Caroline Customer.') + + @users('survey_manager') def test_survey_invite_authentication_nosignup(self): Answer = self.env['survey.user_input'] diff --git a/addons/survey/wizard/survey_invite.py b/addons/survey/wizard/survey_invite.py index a2192ec54ba..cbb81a121ec 100644 --- a/addons/survey/wizard/survey_invite.py +++ b/addons/survey/wizard/survey_invite.py @@ -71,8 +71,7 @@ class SurveyInvite(models.TransientModel): @api.depends('partner_ids', 'survey_id') def _compute_existing_partner_ids(self): - existing_answers = self.survey_id.user_input_ids - self.existing_partner_ids = existing_answers.mapped('partner_id') & self.partner_ids + self.existing_partner_ids = list(set(self.survey_id.user_input_ids.partner_id.ids) & set(self.partner_ids.ids)) @api.depends('emails', 'survey_id') def _compute_existing_emails(self):