From fbfe9109e2e4a4b502ee83a7cdd0d0a0afbc9335 Mon Sep 17 00:00:00 2001 From: jvm-odoo Date: Mon, 11 May 2020 10:51:29 +0000 Subject: [PATCH] [FIX] survey: fix email sent multiples time Issue - Install Survey & Contacts - Have 2 contacts with the same email address (e.g. test@example.com) - Create a survey, send it only to that email address Email sent 2 times Cause When looking for partners linked to that email address, we do not provide any limit so the system send the email to all partners found. Solution If I set one email address, I expect one email to be sent. So, the solution would be to apply a limit of 1 when login is not required. OPW-2247693 closes odoo/odoo#51155 X-original-commit: 55b1cc3108d6b672f10ece26db7e13a65ff655d3 Signed-off-by: Thibault Delavallee (tde) Signed-off-by: Jason Van Malder (jvm) --- addons/survey/tests/test_survey_invite.py | 27 +++++++++++++++++++++++ addons/survey/wizard/survey_invite.py | 3 ++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/addons/survey/tests/test_survey_invite.py b/addons/survey/tests/test_survey_invite.py index ca4307bc46e..6a93ee45d56 100644 --- a/addons/survey/tests/test_survey_invite.py +++ b/addons/survey/tests/test_survey_invite.py @@ -194,3 +194,30 @@ class TestSurveyInvite(common.TestSurveyCommon): set(answers.mapped('email')), set([self.user_emp.email])) self.assertEqual(answers.mapped('partner_id'), self.user_emp.partner_id) + + def test_survey_invite_token_by_email_nosignup(self): + """ + Case: have multiples partners with the same email address + If I set one email address, I expect one email to be sent + """ + + first_partner = self.env['res.partner'].create({ + 'name': 'Test 1', + 'email': 'test@example.com', + }) + + self.env['res.partner'].create({ + 'name': 'Test 2', + 'email': '"Raoul Poilvache" ', + }) + + self.survey.write({'access_mode': 'token', 'users_login_required': False}) + action = self.survey.action_send_survey() + invite_form = Form(self.env[action['res_model']].with_context(action['context'])) + invite_form.emails = 'test@example.com' + invite = invite_form.save() + invite.action_invite() + + answers = self.env['survey.user_input'].search([('survey_id', '=', self.survey.id)]) + self.assertEqual(len(answers), 1) + self.assertEqual(answers.partner_id.display_name, first_partner.display_name) diff --git a/addons/survey/wizard/survey_invite.py b/addons/survey/wizard/survey_invite.py index da42a9a6860..b9c6759f246 100644 --- a/addons/survey/wizard/survey_invite.py +++ b/addons/survey/wizard/survey_invite.py @@ -252,7 +252,8 @@ class SurveyInvite(models.TransientModel): partner = False email_normalized = tools.email_normalize(email) if email_normalized: - partner = Partner.search([('email_normalized', '=', email_normalized)]) + limit = None if self.survey_users_login_required else 1 + partner = Partner.search([('email_normalized', '=', email_normalized)], limit=limit) if partner: valid_partners |= partner else: