Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions partner_event/README.rst
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association

======================
Link partner to events
======================
Expand All @@ -17,7 +13,7 @@ Link partner to events
.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
:target: https://odoo-community.org/page/development-status
:alt: Production/Stable
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fevent-lightgray.png?logo=github
Expand Down Expand Up @@ -111,6 +107,10 @@ Contributors

- Bhavesh Heliconia

- `INVITU <https://www.invitu.com>`__

- Cyril Vinh-Tung

Maintainers
-----------

Expand Down
54 changes: 35 additions & 19 deletions partner_event/models/event_registration.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,29 +54,45 @@ def action_create_attendee_partner(self):
@api.model
def _update_attendee_partner_id(self, vals):
# Don't update if doing a partner merging
if (
not vals.get("attendee_partner_id")
and vals.get("email")
and not self.env.context.get("partner_event_merging")
if not vals.get("attendee_partner_id") and not self.env.context.get(
"partner_event_merging"
):
Partner = self.env["res.partner"]
Event = self.env["event.event"]
# Look for a partner with that email
email = vals.get("email").replace("%", "").replace("_", "\\_")
# Order was done for avoiding extra queries for sorting the results
attendee_partner = Partner.search(
[("email", "=ilike", email)], limit=1, order="id"
)
event = Event.browse()
if vals.get("event_id"):
event = Event.browse(vals["event_id"])
attendee_partner = Partner.browse()
attendee_email = vals.get("email")
if attendee_email:
# Don't search by email if it belongs to partner_id:
# the attendee may be a different person (e.g. a child
# registered with partner_id's email as fallback).
partner_email = False
if vals.get("partner_id"):
partner_email = Partner.browse(vals["partner_id"]).email
if attendee_email != partner_email:
# Look for a partner with that email
clean_email = attendee_email.replace("%", "").replace("_", "\\_")
# Order was done for avoiding extra queries for sorting
attendee_partner = Partner.search(
[("email", "=ilike", clean_email)], limit=1, order="id"
)
if attendee_partner:
for field in {"name", "phone"}:
vals[field] = vals.get(field) or attendee_partner[field]
if not attendee_partner:
event = Event.browse()
if vals.get("event_id"):
event = Event.browse(vals["event_id"])
if (
event
and event.create_partner
and (vals.get("name") or vals.get("email"))
):
# Create partner
attendee_partner = Partner.sudo().create(
self._prepare_partner(vals)
)
if attendee_partner:
for field in {"name", "phone"}:
vals[field] = vals.get(field) or attendee_partner[field]
elif event and event.create_partner:
# Create partner
attendee_partner = Partner.sudo().create(self._prepare_partner(vals))
vals["attendee_partner_id"] = attendee_partner.id
vals["attendee_partner_id"] = attendee_partner.id
return vals

@api.model_create_multi
Expand Down
2 changes: 2 additions & 0 deletions partner_event/readme/CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,5 @@
- Anil Kesariya
- [Heliconia Solutions Pvt. Ltd.](https://www.heliconia.io)
- Bhavesh Heliconia
- [INVITU](https://www.invitu.com)
- Cyril Vinh-Tung
30 changes: 14 additions & 16 deletions partner_event/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>README.rst</title>
<title>Link partner to events</title>
<style type="text/css">

/*
Expand Down Expand Up @@ -360,21 +360,16 @@
</style>
</head>
<body>
<div class="document">
<div class="document" id="link-partner-to-events">
<h1 class="title">Link partner to events</h1>


<a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
<img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
</a>
<div class="section" id="link-partner-to-events">
<h1>Link partner to events</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:93ac2b5eb449c41685d5b1995dd0aed714928e70176b312749d6e722931a0ebc
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/event/tree/18.0/partner_event"><img alt="OCA/event" src="https://img.shields.io/badge/github-OCA%2Fevent-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/event-18-0/event-18-0-partner_event"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/event&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/event/tree/18.0/partner_event"><img alt="OCA/event" src="https://img.shields.io/badge/github-OCA%2Fevent-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/event-18-0/event-18-0-partner_event"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/event&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module links partners with the events they are registered through a
smart button.</p>
<p>It also includes:</p>
Expand Down Expand Up @@ -404,7 +399,7 @@ <h1>Link partner to events</h1>
</ul>
</div>
<div class="section" id="configuration">
<h2><a class="toc-backref" href="#toc-entry-1">Configuration</a></h2>
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
<p>There is a new option in event form view, “Create Partners in
registration”. If this option is checked, when you add registrations to
this event, partners will be created automatically with name, email,
Expand All @@ -416,23 +411,23 @@ <h2><a class="toc-backref" href="#toc-entry-1">Configuration</a></h2>
hasn’t passed yet.</p>
</div>
<div class="section" id="bug-tracker">
<h2><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h2>
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/event/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/event/issues/new?body=module:%20partner_event%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h2><a class="toc-backref" href="#toc-entry-3">Credits</a></h2>
<h1><a class="toc-backref" href="#toc-entry-3">Credits</a></h1>
<div class="section" id="authors">
<h3><a class="toc-backref" href="#toc-entry-4">Authors</a></h3>
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
<ul class="simple">
<li>Tecnativa</li>
</ul>
</div>
<div class="section" id="contributors">
<h3><a class="toc-backref" href="#toc-entry-5">Contributors</a></h3>
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<ul class="simple">
<li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
<li>Pedro M. Baeza</li>
Expand All @@ -456,10 +451,14 @@ <h3><a class="toc-backref" href="#toc-entry-5">Contributors</a></h3>
<li>Bhavesh Heliconia</li>
</ul>
</li>
<li><a class="reference external" href="https://www.invitu.com">INVITU</a><ul>
<li>Cyril Vinh-Tung</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
<h3><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h3>
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
Expand All @@ -472,6 +471,5 @@ <h3><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h3>
</div>
</div>
</div>
</div>
</body>
</html>
56 changes: 56 additions & 0 deletions partner_event/tests/test_event_registration.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,3 +169,59 @@ def test_action_merge(self):
wizard.action_merge()
self.assertEqual(self.registration_01.partner_id, partner_2)
self.assertEqual(self.registration_02.partner_id, partner_2)

def test_attendee_with_partner_id_email_gets_own_partner(self):
"""When attendee uses partner_id email as fallback, a new partner is created
instead of matching partner_id."""
reg = self.env["event.registration"].create(
{
"event_id": self.event_0.id,
"partner_id": self.partner_01.id,
"name": "Child Attendee with partner email",
"email": self.partner_01.email,
}
)
self.assertNotEqual(reg.attendee_partner_id, self.partner_01)
self.assertEqual(
reg.attendee_partner_id.name, "Child Attendee with partner email"
)

def test_attendee_without_email_gets_own_partner(self):
"""When attendee has no email, a partner is still created if create_partner
is checked."""
reg = self.env["event.registration"].create(
{
"event_id": self.event_0.id,
"partner_id": self.partner_01.id,
"name": "Child No Email",
}
)
self.assertEqual(reg.attendee_partner_id.name, "Child No Email")

def test_attendee_with_own_email_still_gets_matched(self):
"""When attendee has their own email, normal matching still occurs."""
reg = self.env["event.registration"].create(
{
"event_id": self.event_0.id,
"partner_id": self.partner_01.id,
"name": "Child Attendee with email",
"email": self.registration_02.attendee_partner_id.email,
}
)
self.assertEqual(
reg.attendee_partner_id, self.registration_02.attendee_partner_id
)

def test_write_without_email_preserves_attendee_partner(self):
"""Writing to a registration without email must not clear
attendee_partner_id."""
reg = self.env["event.registration"].create(
{
"event_id": self.event_0.id,
"email": self.registration_02.attendee_partner_id.email,
}
)
existing_attendee = reg.attendee_partner_id
self.assertTrue(existing_attendee)
reg.write({"name": "Updated Name"})
self.assertEqual(reg.attendee_partner_id, existing_attendee)
Loading