Skip to content

Commit 37f2afb

Browse files
committed
[FIX] website_event_attendee_fields: учитываем все контакты с введенной почтой при проверке на существующую регистрацию
1 parent 125980c commit 37f2afb

4 files changed

Lines changed: 71 additions & 12 deletions

File tree

website_event_attendee_fields/controllers/main.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,7 @@ def check_email(self, event_id, email):
5555
return {"email_not_allowed": _("Invalid email")}
5656

5757
current_user = request.env.user
58-
if email == current_user.email:
59-
partner = current_user.partner_id
60-
else:
61-
partner = Partners.search([("email", "=", email)], limit=1)
58+
partner = Partners.search([("email", "=", email)])
6259

6360
if not partner:
6461

@@ -76,7 +73,6 @@ def remove_spaces(s):
7673
("email", "=ilike", "% " + email + " %"),
7774
("email", "=ilike", email + " %"),
7875
],
79-
limit=1,
8076
)
8177
if not partner:
8278
return {}
@@ -85,10 +81,15 @@ def remove_spaces(s):
8581
partner.write({"email": partner_email})
8682

8783
event = request.env["event.event"].sudo().browse(event_id)
88-
error_msg = event.check_partner_for_new_ticket(partner.id)
84+
error_msg = event.check_partner_for_new_ticket(partner.ids)
8985
if error_msg:
9086
return {"email_not_allowed": error_msg}
9187

88+
if current_user.partner_id in partner:
89+
partner = current_user.partner_id
90+
else:
91+
partner = partner.sorted("id", reverse=True)[0]
92+
9293
known_fields = {}
9394
do_not_disable_fields = {}
9495

website_event_attendee_fields/models/event_event.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ def _compute_partner_questions(self):
1515
lambda q: q.question_type == "partner_field"
1616
)
1717

18-
def check_partner_for_new_ticket(self, partner_id):
19-
if self.partner_is_participating(partner_id):
18+
def check_partner_for_new_ticket(self, partner_ids):
19+
if self.partners_are_participating(partner_ids):
2020
return _("This email address is already signed up for the event")
2121
return None
2222

23-
def partner_is_participating(self, partner_id):
23+
def partners_are_participating(self, partner_ids):
2424
self.ensure_one()
2525
registration = (
2626
self.env["event.registration"]
@@ -29,10 +29,10 @@ def partner_is_participating(self, partner_id):
2929
[
3030
("event_id", "=", self.id),
3131
"|",
32-
("attendee_partner_id", "=", partner_id),
32+
("attendee_partner_id", "in", partner_ids),
3333
"&",
3434
("attendee_partner_id", "=", False),
35-
("partner_id", "=", partner_id),
35+
("partner_id", "in", partner_ids),
3636
("state", "=", "open"),
3737
]
3838
)

website_event_attendee_fields/models/ir_ui_view.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def _render_template(self, template, values=None):
1515
if (
1616
are_tickets_different
1717
or user._is_public()
18-
or event.partner_is_participating(user.partner_id.id)
18+
or event.partners_are_participating(user.partner_id.ids)
1919
):
2020
values["default_first_attendee"] = {}
2121

website_event_attendee_fields/tests/test_backend.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,61 @@ def test_emails_duplicates(self):
6666
with MockRequest(self.env), self.assertRaises(AssertionError):
6767
obj = WebsiteEventControllerExtended()
6868
obj.registration_confirm(event, **post)
69+
70+
def test_check_email_01(self):
71+
event = self.env["event.event"].create(
72+
{
73+
"name": "Test Default Event",
74+
}
75+
)
76+
77+
with MockRequest(self.env):
78+
obj = WebsiteEventControllerExtended()
79+
res = obj.check_email(event.id, "attendee01@example.com")
80+
self.assertNotIn("email_not_allowed", res)
81+
82+
self.env["event.registration"].create(
83+
{
84+
"name": "Attendee Name",
85+
"email": "attendee01@example.com",
86+
"event_id": event.id,
87+
}
88+
)
89+
90+
with MockRequest(self.env):
91+
obj = WebsiteEventControllerExtended()
92+
res = obj.check_email(event.id, "attendee01@example.com")
93+
self.assertIn("email_not_allowed", res)
94+
95+
def test_check_email_02(self):
96+
slavik_email = "slavik@slavik.ru"
97+
slavik1, slavik2 = self.env["res.partner"].create(
98+
[
99+
{"name": "Slavik 01", "email": slavik_email},
100+
{"name": "Slavik 02", "email": slavik_email},
101+
]
102+
)
103+
104+
event = self.env["event.event"].create(
105+
{
106+
"name": "Test Default Event",
107+
}
108+
)
109+
110+
with MockRequest(self.env):
111+
obj = WebsiteEventControllerExtended()
112+
res = obj.check_email(event.id, slavik_email)
113+
self.assertNotIn("email_not_allowed", res)
114+
115+
self.env["event.registration"].create(
116+
{
117+
"name": "Attendee Name",
118+
"attendee_partner_id": slavik2.id,
119+
"event_id": event.id,
120+
}
121+
)
122+
123+
with MockRequest(self.env):
124+
obj = WebsiteEventControllerExtended()
125+
res = obj.check_email(event.id, slavik_email)
126+
self.assertIn("email_not_allowed", res)

0 commit comments

Comments
 (0)