I found an older post related to Odoo 13: https://www.odoo.com/forum/help-1/prevent-leads-duplicate-172132
This is similar to what I'm looking to do (but on a custom field) but in Odoo 16. The python script referenced in the answer isn't working for me in my DEV environment using the example given. I'm curious if it needs to be updated for Odoo 16.
Here's the script I'm testing in 16:
leads = model.search([('email_from', '=', record.email_from)])
if leads:
raise Warning("Email Already Exists")
And here's the error I get:
Traceback (most recent call last): File "/home/odoo/src/odoo/odoo/http.py", line 1658, in _serve_db return service_model.retrying(self._serve_ir_http, self.env) File "/home/odoo/src/odoo/odoo/service/model.py", line 152, in retrying result = func() File "/home/odoo/src/odoo/odoo/http.py", line 1686, in _serve_ir_http response = self.dispatcher.dispatch(rule.endpoint, args) File "/home/odoo/src/odoo/odoo/http.py", line 1890, in dispatch result = self.request.registry['ir.http']._dispatch(endpoint) File "/home/odoo/src/odoo/odoo/addons/base/models/ir_http.py", line 154, in _dispatch result = endpoint(**request.params) File "/home/odoo/src/odoo/odoo/http.py", line 734, in route_wrapper result = endpoint(self, *args, **params_ok) File "/home/odoo/src/odoo/addons/web/controllers/dataset.py", line 43, in call_kw return self._call_kw(model, method, args, kwargs) File "/home/odoo/src/odoo/addons/web/controllers/dataset.py", line 34, in _call_kw return call_kw(Model, method, args, kwargs) File "/home/odoo/src/odoo/odoo/api.py", line 482, in call_kw result = _call_kw_model_create(method, model, args, kwargs) File "/home/odoo/src/odoo/odoo/api.py", line 460, in _call_kw_model_create result = method(recs, *args, **kwargs) File "<decorator-gen-315>", line 2, in create File "/home/odoo/src/odoo/odoo/api.py", line 430, in _model_create_multi return create(self, [arg]) File "/home/odoo/src/odoo/addons/base_automation/models/base_automation.py", line 390, in create action._process(action._filter_post(records)) File "/home/odoo/src/odoo/addons/base_automation/models/base_automation.py", line 340, in _process raise e File "/home/odoo/src/odoo/addons/base_automation/models/base_automation.py", line 337, in _process action_server.sudo().with_context(**ctx).run() File "/home/odoo/src/odoo/odoo/addons/base/models/ir_actions.py", line 675, in run res = runner(run_self, eval_context=eval_context) File "/home/odoo/src/odoo/odoo/addons/base/models/ir_actions.py", line 545, in _run_action_code_multi safe_eval(self.code.strip(), eval_context, mode="exec", nocopy=True, filename=str(self)) # nocopy allows to return 'action' File "/home/odoo/src/odoo/odoo/tools/safe_eval.py", line 399, in safe_eval return unsafe_eval(c, globals_dict, locals_dict) File "ir.actions.server(934,)", line 3, in <module> odoo.exceptions.Warning: Email Already Exists The above server error caused the following client error: null
Ugh, looks scarier than I'd want to present to my users. Anyway to present a smaller, more clear message so the user knows "oh, it's already exists"?
see below
Probably, this app - https://apps.odoo.com/apps/modules/16.0/crm_duplicates - might be helpful. It lets both warn of duplicates or restrict duplciates' creation based on flexible field rules.