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