diff --git a/survey_record_generation/models/survey_user_input.py b/survey_record_generation/models/survey_user_input.py index 06bb934..15dc299 100644 --- a/survey_record_generation/models/survey_user_input.py +++ b/survey_record_generation/models/survey_user_input.py @@ -82,6 +82,8 @@ class SurveyUserInput(models.Model): try: with self.env.cr.savepoint(): record = self.env[model].create(vals) + if model == "res.partner" and not self.partner_id: + self.partner_id = record.id except Exception: # This a broad exception because it could be IntegrityError, # EmptyNamesError in case partner_firstname is installed etc... diff --git a/survey_record_generation/tests/test_survey_record_creation.py b/survey_record_generation/tests/test_survey_record_creation.py index 69245c6..5b84ce2 100644 --- a/survey_record_generation/tests/test_survey_record_creation.py +++ b/survey_record_generation/tests/test_survey_record_creation.py @@ -375,7 +375,7 @@ class TestSurveyRecordCreation(SurveyCase): self.second_contact_creation = self.env["survey.record.creation"].create( { - "name": "Second contact", + "name": "Contact 2", "survey_id": self.survey.id, "model_id": self.res_partner_model.id, } @@ -828,3 +828,66 @@ class TestSurveyRecordCreation(SurveyCase): # No partner has been created, and no IntegrityError has been raised partner = self.env["res.partner"].search([("name", "=", "Jean")]) self.assertEqual(len(partner), 0) + + def test_fill_up_partner_id_in_survey_input(self): + # In this test, we check that the field partner_id is filled up + # when we create a res.partner + + self.answer = self._add_answer( + survey=self.survey, partner=False, email="jean@test.fr" + ) + self._add_answer_line( + question=self.question_name, answer=self.answer, answer_value="Jean" + ) + + self.answer._mark_done() + + partner = self.env["res.partner"].search([("name", "=", "Jean")]) + self.assertEqual(self.answer.partner_id, partner) + + def test_partner_id_in_survey_input_is_filled_up_by_first_contact_record_creation(self): + # In this test, we verify that when creating several contacts with the same survey, + # the 1st created contact is used to fill up survey_input.partner_id + self.second_question_name = self._add_question( + page=None, + name="Name of second person", + qtype="char_box", + survey_id=self.survey.id, + sequence=1, + ) + + self.second_contact_creation = self.env["survey.record.creation"].create( + { + "name": "Contact 2", + "survey_id": self.survey.id, + "model_id": self.res_partner_model.id, + } + ) + self.env["survey.record.creation.field.values"].create( + { + "survey_record_creation_id": self.second_contact_creation.id, + "survey_id": self.survey.id, + "model_id": self.res_partner_model.id, + "field_id": self.name_field.id, + "value_origin": "question", + "question_id": self.second_question_name.id, + } + ) + + self.answer = self._add_answer( + survey=self.survey, partner=False, email="jean@test.fr" + ) + self._add_answer_line( + question=self.question_name, + answer=self.answer, + answer_value="Jean", + ) + self._add_answer_line( + question=self.second_question_name, + answer=self.answer, + answer_value="Jeanne", + ) + self.answer._mark_done() + + partner = self.env["res.partner"].search([("name", "=", "Jean")]) + self.assertEqual(self.answer.partner_id, partner)