Skip to Content
मेन्यू
This question has been flagged
3 Replies
767 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
Author

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"?

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.

Best Answer

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
Author

works perfectly in Odoo 16. Thanks so much.

Best Answer

Hi,

Refer the app:

https://apps.odoo.com/apps/modules/16.0/crm_duplicates_real_time_search


This Module helps to prevent and alert when creating duplicated datas in the leads module.


Hope it helps

Avatar
Discard
Author

Does this work for custom fields in CRM too?

Best Answer

The three lines of code you've posted do exactly what is in your "error".

 raise Warning("Email Already Exists")

opens a pop-up showing a traceback and the message "Email Already Exists". The fact that you raise it prevents any further action.


~ About the looks:

from odoo.exceptions import UserError  # you should do this above the initial class() definition
raise UserError('Email Already Exists')
Avatar
Discard
Author

I did a test and when the automated action is active, no new leads can be created at all. The error message pops up with or without the email populated. So not sure if the script is doing what's intended, which is checking for dupes in the email field.

Related Posts Replies Views Activity
2
दिस॰ 24
2640
1
सित॰ 24
1552
0
सित॰ 24
686
0
मई 24
1542
1
अक्तू॰ 23
6042