diff --git a/pms/models/pms_checkin_partner.py b/pms/models/pms_checkin_partner.py index f2024b938a..08eb6c91a5 100644 --- a/pms/models/pms_checkin_partner.py +++ b/pms/models/pms_checkin_partner.py @@ -561,6 +561,18 @@ def set_partner_id(self): partner = self.env["res.partner"].create(partner_values) record.partner_id = partner + def _set_partner_contact_data(self): + # The email/mobile/phone inverses only reach an already linked partner, so + # the values saved together with the data that creates or links it are lost + for record in self.filtered("partner_id"): + vals = { + field: record[field] + for field in ("email", "mobile", "phone") + if record[field] and not record.partner_id[field] + } + if vals: + record.partner_id.write(vals) + @api.model_create_multi def create(self, vals_list): records = self.env["pms.checkin.partner"] @@ -598,6 +610,7 @@ def create(self, vals_list): records_without_partner = records.filtered(lambda r: not r.partner_id) if records_without_partner: records_without_partner.set_partner_id() + records_without_partner._set_partner_contact_data() for record in records: record.set_partner_address() return records @@ -615,6 +628,7 @@ def write(self, vals): records_without_partner.with_context( skip_set_partner_data=True ).set_partner_id() + records_without_partner._set_partner_contact_data() for record in self: record.set_partner_address(vals) return res diff --git a/pms/tests/test_pms_checkin_partner.py b/pms/tests/test_pms_checkin_partner.py index 7e178bd09e..93966740a2 100644 --- a/pms/tests/test_pms_checkin_partner.py +++ b/pms/tests/test_pms_checkin_partner.py @@ -871,6 +871,42 @@ def test_create_partner_when_checkin_has_enought_data(self): "Partner should have been created and associated with the checkin", ) + def test_contact_data_saved_in_partner_created_by_checkin(self): + """ + The email and mobile entered together with the data that creates + the partner are saved in the new partner + """ + # ACT + checkin = self.env["pms.checkin.partner"].create( + { + "firstname": "Pepe", + "lastname": "Paz", + "email": "pepe@example.com", + "mobile": "666777888", + "reservation_id": self.reservation_1.id, + } + ) + + # ASSERT + self.assertEqual(checkin.partner_id.email, "pepe@example.com") + self.assertEqual(checkin.partner_id.mobile, "666777888") + + def test_contact_data_saved_in_partner_created_on_checkin_write(self): + """ + The mobile written together with the names that create the partner + is saved in the new partner + """ + # ARRANGE + checkin = self.env["pms.checkin.partner"].create( + {"reservation_id": self.reservation_1.id} + ) + + # ACT + checkin.write({"firstname": "Pepe", "lastname": "Paz", "mobile": "666777888"}) + + # ASSERT + self.assertEqual(checkin.partner_id.mobile, "666777888") + def test_add_partner_data_from_checkin(self): """ If the checkin_partner has some data that the partner doesn't have,