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.