From 0f83da289bc3e63db70f25b68707d2f1f4d46311 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20V=C3=A9zina?= Date: Wed, 1 Nov 2023 12:08:00 -0400 Subject: [PATCH] bemade_partner_email_domain --- bemade_partner_email_domain/__init__.py | 1 + bemade_partner_email_domain/__manifest__.py | 20 +++++++++ .../models/__init__.py | 1 + .../models/res_partner.py | 42 +++++++++++++++++++ .../views/res_partner_views.xml | 14 +++++++ 5 files changed, 78 insertions(+) create mode 100644 bemade_partner_email_domain/__init__.py create mode 100644 bemade_partner_email_domain/__manifest__.py create mode 100644 bemade_partner_email_domain/models/__init__.py create mode 100644 bemade_partner_email_domain/models/res_partner.py create mode 100644 bemade_partner_email_domain/views/res_partner_views.xml diff --git a/bemade_partner_email_domain/__init__.py b/bemade_partner_email_domain/__init__.py new file mode 100644 index 0000000..9a7e03e --- /dev/null +++ b/bemade_partner_email_domain/__init__.py @@ -0,0 +1 @@ +from . import models \ No newline at end of file diff --git a/bemade_partner_email_domain/__manifest__.py b/bemade_partner_email_domain/__manifest__.py new file mode 100644 index 0000000..f2b36bb --- /dev/null +++ b/bemade_partner_email_domain/__manifest__.py @@ -0,0 +1,20 @@ +{ + 'name': 'Partner Email Domain Auto-Set', + 'version': '15.0.0.0.0', + 'category': 'Extra Tools', + 'summary': 'Allow to autolink partner based on email domain', + 'description': """ + This module allows users to automatically link a partner to a company based on the email domain. + """, + 'depends': [ + 'base' + ], + 'data': [ + 'views/res_partner_views.xml' + ], + 'license': 'AGPL-3', + 'author': 'Bemade', + 'website': 'https://bemade.org/', + 'installable': True, + 'auto_install': False +} diff --git a/bemade_partner_email_domain/models/__init__.py b/bemade_partner_email_domain/models/__init__.py new file mode 100644 index 0000000..4c58886 --- /dev/null +++ b/bemade_partner_email_domain/models/__init__.py @@ -0,0 +1 @@ +from . import res_partner \ No newline at end of file diff --git a/bemade_partner_email_domain/models/res_partner.py b/bemade_partner_email_domain/models/res_partner.py new file mode 100644 index 0000000..5239c23 --- /dev/null +++ b/bemade_partner_email_domain/models/res_partner.py @@ -0,0 +1,42 @@ +from odoo import api, fields, models, Command + +class Partner(models.Model): + _inherit = 'res.partner' + + email_domain = fields.Char(string='Email Domain') + + @api.onchange('email') + def _check_parent_from_email_domain(self): + for rec in self: + try: + # Split the email address on '@' and get the domain part + if rec.email: + email_domain = rec.email.split('@')[1].strip() + else: + continue + except IndexError: + # If there's no '@' symbol, the email address is invalid + return False + + # Loop while there's more than one part in the domain (e.g., subdomain.domain.tld) + while '.' in email_domain: + # If the current email domain matches the main domain, return True + company_domain = self.env['res.partner'].search([('email_domain', 'ilike', email_domain)]) + if company_domain: + rec.parent_id = company_domain.id + return + + # If not, drop the part before the first '.' to check the next level + email_domain = email_domain.split('.', 1)[1] + + @api.model_create_multi + def create(self, vals_list): + res = super(Partner, self).create(vals_list) + res._check_parent_from_email_domain() + return res + + def write(self, vals): + res = super(Partner, self).write(vals) + if 'email' in vals: + self._check_parent_from_email_domain() + return res diff --git a/bemade_partner_email_domain/views/res_partner_views.xml b/bemade_partner_email_domain/views/res_partner_views.xml new file mode 100644 index 0000000..42b676b --- /dev/null +++ b/bemade_partner_email_domain/views/res_partner_views.xml @@ -0,0 +1,14 @@ + + + + bemade_partner_email_domain.partner.email.domain.form + res.partner + + + + + + \ No newline at end of file