· 6 years ago · Jan 09, 2020, 11:07 AM
1Error:
2Odoo Server Error
3
4Traceback (most recent call last):
5 File "/home/odoo/src/odoo/13.0/odoo/tools/cache.py", line 85, in lookup
6 r = d[key]
7 File "/home/odoo/src/odoo/13.0/odoo/tools/func.py", line 69, in wrapper
8 return func(self, *args, **kwargs)
9 File "/home/odoo/src/odoo/13.0/odoo/tools/lru.py", line 44, in __getitem__
10 a = self.d[obj].me
11KeyError: ('ir.model.data', <function IrModelData.xmlid_lookup at 0x7ff049a0b9d8>, 'crm.crm_case_form_view_oppor')
12
13During handling of the above exception, another exception occurred:
14
15Traceback (most recent call last):
16 File "/home/odoo/src/odoo/13.0/odoo/tools/safe_eval.py", line 349, in safe_eval
17 return unsafe_eval(c, globals_dict, locals_dict)
18 File "", line 86, in <module>
19 File "/home/odoo/src/odoo/13.0/odoo/api.py", line 509, in ref
20 return self['ir.model.data'].xmlid_to_object(xml_id, raise_if_not_found=raise_if_not_found)
21 File "/home/odoo/src/odoo/13.0/odoo/addons/base/models/ir_model.py", line 1673, in xmlid_to_object
22 t = self.xmlid_to_res_model_res_id(xmlid, raise_if_not_found)
23 File "/home/odoo/src/odoo/13.0/odoo/addons/base/models/ir_model.py", line 1657, in xmlid_to_res_model_res_id
24 return self.xmlid_lookup(xmlid)[1:3]
25 File "<decorator-gen-24>", line 2, in xmlid_lookup
26 File "/home/odoo/src/odoo/13.0/odoo/tools/cache.py", line 90, in lookup
27 value = d[key] = self.method(*args, **kwargs)
28 File "/home/odoo/src/odoo/13.0/odoo/addons/base/models/ir_model.py", line 1646, in xmlid_lookup
29 raise ValueError('External ID not found in the system: %s' % xmlid)
30ValueError: External ID not found in the system: crm.crm_case_form_view_oppor
31
32During handling of the above exception, another exception occurred:
33
34Traceback (most recent call last):
35 File "/home/odoo/src/odoo/13.0/odoo/http.py", line 619, in _handle_exception
36 return super(JsonRequest, self)._handle_exception(exception)
37 File "/home/odoo/src/odoo/13.0/odoo/http.py", line 309, in _handle_exception
38 raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
39 File "/home/odoo/src/odoo/13.0/odoo/tools/pycompat.py", line 14, in reraise
40 raise value
41 File "/home/odoo/src/odoo/13.0/odoo/http.py", line 664, in dispatch
42 result = self._call_function(**self.params)
43 File "/home/odoo/src/odoo/13.0/odoo/http.py", line 345, in _call_function
44 return checked_call(self.db, *args, **kwargs)
45 File "/home/odoo/src/odoo/13.0/odoo/service/model.py", line 93, in wrapper
46 return f(dbname, *args, **kwargs)
47 File "/home/odoo/src/odoo/13.0/odoo/http.py", line 338, in checked_call
48 result = self.endpoint(*a, **kw)
49 File "/home/odoo/src/odoo/13.0/odoo/http.py", line 909, in __call__
50 return self.method(*args, **kw)
51 File "/home/odoo/src/odoo/13.0/odoo/http.py", line 510, in response_wrap
52 response = f(*args, **kw)
53 File "/home/odoo/src/odoo/13.0/addons/web/controllers/main.py", line 1646, in run
54 result = request.env['ir.actions.server'].browse([action_id]).run()
55 File "/home/odoo/src/odoo/13.0/odoo/addons/base/models/ir_actions.py", line 545, in run
56 res = func(action, eval_context=eval_context)
57 File "/home/odoo/src/odoo/13.0/addons/website/models/ir_actions.py", line 59, in run_action_code_multi
58 res = super(ServerAction, self).run_action_code_multi(action, eval_context)
59 File "/home/odoo/src/odoo/13.0/odoo/addons/base/models/ir_actions.py", line 430, in run_action_code_multi
60 safe_eval(action.sudo().code.strip(), eval_context, mode="exec", nocopy=True) # nocopy allows to return 'action'
61 File "/home/odoo/src/odoo/13.0/odoo/tools/safe_eval.py", line 372, in safe_eval
62 pycompat.reraise(ValueError, ValueError('%s: "%s" while evaluating\n%r' % (ustr(type(e)), ustr(e), expr)), exc_info[2])
63 File "/home/odoo/src/odoo/13.0/odoo/tools/pycompat.py", line 13, in reraise
64 raise value.with_traceback(tb)
65 File "/home/odoo/src/odoo/13.0/odoo/tools/safe_eval.py", line 349, in safe_eval
66 return unsafe_eval(c, globals_dict, locals_dict)
67 File "", line 86, in <module>
68 File "/home/odoo/src/odoo/13.0/odoo/api.py", line 509, in ref
69 return self['ir.model.data'].xmlid_to_object(xml_id, raise_if_not_found=raise_if_not_found)
70 File "/home/odoo/src/odoo/13.0/odoo/addons/base/models/ir_model.py", line 1673, in xmlid_to_object
71 t = self.xmlid_to_res_model_res_id(xmlid, raise_if_not_found)
72 File "/home/odoo/src/odoo/13.0/odoo/addons/base/models/ir_model.py", line 1657, in xmlid_to_res_model_res_id
73 return self.xmlid_lookup(xmlid)[1:3]
74 File "<decorator-gen-24>", line 2, in xmlid_lookup
75 File "/home/odoo/src/odoo/13.0/odoo/tools/cache.py", line 90, in lookup
76 value = d[key] = self.method(*args, **kwargs)
77 File "/home/odoo/src/odoo/13.0/odoo/addons/base/models/ir_model.py", line 1646, in xmlid_lookup
78 raise ValueError('External ID not found in the system: %s' % xmlid)
79ValueError: <class 'ValueError'>: "External ID not found in the system: crm.crm_case_form_view_oppor" while evaluating
80'# Available variables:\n# - env: Odoo Environment on which the action is triggered\n# - model: Odoo Model of the record on which the action is triggered; is a void recordset\n# - record: record on which the action is triggered; may be void\n# - records: recordset of all records on which the action is triggered in multi-mode; may be void\n# - time, datetime, dateutil, timezone: useful Python libraries\n# - log: log(message, level=\'info\'): logging function to record debug information in ir.logging table\n# - Warning: Warning Exception to use with raise\n# To return an action, assign: action = {...}\n\n# Extracted from our CRM: https://gist.github.com/odony/df23ff9e8cb0caa4f586fd0980c43fee\nmost_common_email_domains = set([\'gmail.com\', \'hotmail.com\', \'yahoo.com\', \'qq.com\', \'outlook.com\', \'163.com\', \'yahoo.fr\', \'live.com\', \'hotmail.fr\',\n\'icloud.com\', \'126.com\', \'me.com\', \'free.fr\', \'ymail.com\', \'msn.com\', \'mail.com\', \'orange.fr\', \'aol.com\', \'wanadoo.fr\', \'live.fr\', \'mail.ru\',\n\'yahoo.co.in\', \'rediffmail.com\', \'hku.hk\', \'googlemail.com\', \'gmx.de\', \'sina.com\', \'skynet.be\', \'laposte.net\', \'yahoo.co.uk\', \'yahoo.co.id\', \'web.de\',\n\'gmail.com \', \'outlook.fr\', \'telenet.be\', \'yahoo.es\', \'naver.com\', \'hotmail.co.uk\', \'gmai.com\', \'foxmail.com\', \'hku.hku\', \'bluewin.ch\', \'sfr.fr\',\n\'libero.it\', \'mac.com\', \'rocketmail.com\', \'protonmail.com\', \'gmx.com\', \'gamil.com\', \'hotmail.es\', \'gmx.net\', \'comcast.net\', \'yahoo.com.mx\',\n\'linkedin.com\', \'yahoo.com.br\', \'yahoo.in\', \'yahoo.ca\', \'t-online.de\', \'139.com\', \'yandex.ru\', \'yahoo.com.hk\',\'yahoo.de\', \'yeah.net\', \'yandex.com\',\n\'nwytg.net\', \'neuf.fr\', \'yahoo.com.ar\', \'outlook.es\', \'abv.bg\', \'aliyun.com\', \'yahoo.com.tw\', \'ukr.net\', \'live.nl\', \'wp.pl\', \'hotmail.it\',\n\'live.com.mx\', \'zoho.com\', \'live.co.uk\', \'sohu.com\', \'twoomail.com\', \'yahoo.com.sg\', \'odoo.com\', \'yahoo.com.vn\', \'windowslive.com\', \'gmail\',\n\'vols.utk.edu\', \'email.com\', \'tiscali.it\', \'yahoo.it\', \'gmx.ch\', \'trbvm.com\', \'nwytg.com\', \'mvrht.com\', \'nyit.edu\', \'o2.pl\', \'live.cn\', \'gmial.com\',\n\'seznam.cz\', \'live.be\', \'videotron.ca\', \'gmil.com\', \'live.ca\', \'hotmail.de\', \'sbcglobal.net\', \'connect.hku.hk\', \'yahoo.com.au\', \'att.net\', \'live.in\',\n\'btinternet.com\', \'gmx.fr\', \'voila.fr\', \'shaw.ca\', \'prodigy.net.mx\', \'vip.qq.com\', \'yahoo.com.ph\', \'bigpond.com\', \'7thcomputing.com\', \'freenet.de\',\n\'alice.it\', \'esi.dz\', \'bk.ru\', \'mail.odoo.com\', \'gmail.con\', \'fiu.edu\', \'gmal.com\', \'useemlikefun.com\', \'google.com\', \'trbvn.com\', \'yopmail.com\',\n\'ya.ru\', \'hotmail.co.th\', \'arcor.de\', \'hotmail.ca\', \'21cn.com\', \'live.de\', \'outlook.de\', \'gmailcom\', \'unal.edu.co\', \'tom.com\', \'yahoo.gr\', \'gmx.at\',\n\'inbox.lv\', \'ziggo.nl\', \'xs4all.nl\', \'sapo.pt\', \'live.com.au\', \'nate.com\', \'online.de\', \'sina.cn\', \'gmail.co\', \'rogers.com\', \'mailinator.com\',\n\'cox.net\', \'hotmail.be\', \'verizon.net\', \'yahoo.co.jp\', \'usa.com\', \'consultant.com\', \'hotmai.com\', \'189.cn\', \'sky.com\', \'eezee-it.com\', \'opayq.com\',\n\'maildrop.cc\', \'home.nl\', \'virgilio.it\', \'outlook.be\', \'hanmail.net\', \'uol.com.br\', \'hec.ca\', \'terra.com.br\', \'inbox.ru\', \'tin.it\', \'list.ru\',\n\'hotmail.com \', \'safecoms.com\', \'smile.fr\', \'sprintit.fi\', \'uniminuto.edu.co\', \'bol.com.br\', \'bellsouth.net\', \'nirmauni.ac.in\', \'ldc.edu.in\',\n\'ig.com.br\', \'engineer.com\', \'scarlet.be\', \'inbox.com\', \'gmaill.com\', \'freemail.hu\', \'live.it\', \'blackwaretech.com\', \'byom.de\', \'dispostable.com\',\n\'dayrep.com\', \'aim.com\', \'prixgen.com\', \'gmail.om\', \'asterisk-tech.mn\', \'in.com\', \'aliceadsl.fr\', \'lycos.com\', \'topnet.tn\', \'teleworm.us\',\n\'kedgebs.com\', \'supinfo.com\', \'posteo.de\', \'yahoo.com \', \'op.pl\', \'gmail.fr\', \'grr.la\', \'oci.fr\', \'aselcis.com\', \'optusnet.com.au\', \'mailcatch.com\',\n\'rambler.ru\', \'protonmail.ch\', \'prisme.ch\', \'bbox.fr\', \'orbitalu.com\', \'netcourrier.com\', \'iinet.net.au\'])\n\ndef get_email_domain(email):\n parts = (email or "").rsplit("@", maxsplit=1)\n return parts[-1] if len(parts) > 1 else None\n\nif len(records) > 1:\n raise Warning("Run this on a single lead from the form view.")\n\n# consider results relevant if they return 20 (<21) results\nLIMIT = 21\n\ncommon_domain = [("id", "!=", record.id), ("type", "=", "opportunity")]\npotential_dups = model\n\n# include archived leads\nmodel = model.with_context(active_test=False)\n\n# in case it\'s something like "Joren <jov@odoo.com>" parse out the email \nemail = env["res.partner"]._parse_partner_name(record.partner_address_email or record.email_from or "")[1]\n\n# there is not a single real lead with < 7 chars in the email\nif len(email) >= 7:\n email_domain = get_email_domain(email)\n if email_domain:\n email_search = "@{}".format(email_domain)\n \n # if a common domain, replace with the entire email\n if email_domain in most_common_email_domains:\n email_search = email\n\n # search both the email on the partner and the email the opp is opened with. Ideally we do 2 searches, one with partner_address_email\n # and one with email_from but for now this should do.\n potential_email_dups = model.search(common_domain + ["|", ("email_from", "ilike", email_search), ("partner_address_email", "ilike", email_search)], limit=LIMIT)\n if len(potential_email_dups) < LIMIT:\n potential_dups |= potential_email_dups\n\n# can\'t get meaninful results with shorter names, this also ensures the crm_lead trigram index is used\nMIN_NAME_LENGTH = 6\n\nif record.partner_name and len(record.partner_name) >= MIN_NAME_LENGTH:\n potential_partner_name_dups = model.search(common_domain + [("partner_name", "ilike", record.partner_name)], limit=LIMIT)\n if len(potential_partner_name_dups) < LIMIT:\n potential_dups |= potential_partner_name_dups\n\nif record.contact_name and len(record.contact_name) >= MIN_NAME_LENGTH:\n potential_contact_name_dups = model.search(common_domain + [("contact_name", "ilike", record.contact_name)], limit=LIMIT)\n if len(potential_contact_name_dups) < LIMIT:\n potential_dups |= potential_contact_name_dups\n\naction = {\n "name": "Potential Duplicates",\n "type": "ir.actions.act_window",\n "res_model": "crm.lead",\n "views": [[env.ref("crm.crm_case_tree_view_oppor").id, "tree"], [env.ref("crm.crm_case_form_view_oppor").id, "form"]],\n "domain": ["|", ["active", "=", True], ["active", "=", False], ["id", "in", potential_dups.ids]],\n}'