Skip to Content

Welcome!

Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together.

Sign up

You need to be registered to interact with the community.
This question has been flagged
1 Reply
34 Views

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

Avatar
Discard

You need to change the Python code

  1. To use the updated command for raising a user error in v14 onwards 
  2. To ignore the current record (not needed if only triggered on creation)
for record in records:
    if record.email_from:
        leads = env['crm.lead'].search([('id','!=',record.id),('email_from', '=', record.email_from)])
        if leads:
            raise UserError("Duplicate email address")

https://odootricks.tips/automated-action-to-prevent-duplicates/

Avatar
Discard

Your Answer

Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!