From 9c4dd0565b805472e8c8a393fde73499afdf70f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 13 Jul 2012 15:04:54 +0200 Subject: [PATCH] [IMP] res_partner: overrided name_create to support custom creation: info@openerp.com (name and email), and Raoul . bzr revid: tde@openerp.com-20120713130454-2x5fsvz7az3p1jln --- openerp/addons/base/res/res_partner.py | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index 2165c8ad16d..698e0596a28 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -61,6 +61,38 @@ class res_partner_category(osv.osv): res.append((record['id'], name)) return res + def name_create(self, cr, uid, name, context=None): + """ Overrider of orm's name_create method for partners. The purpose is + to handle some basic syntaxic tricks to create partners using the + name_create. + Supported syntax: + - 'info@mail.com': create a partner with name info@mail.com, and + sets its email to info@mail.com + - 'Raoul Grosbedon ': create a partner with name + Raoul Grosbedon, and set its email to raoul@grosbedon.fr + - anything else: fall back on the default name_create + Regex : + - (^|\s)([\w|\.]+)@([\w|\.]*): (void), info, openerp.com + - (^|\s)([\w|\.|\s]+)[\<]([\w|\.]+)@([\w|\.]*)[\>]: (void), Raoul + Grosbedon, raoul, grosbedon.fr + """ + contact_regex = re.compile('(^|\s)([\w|\.|\s]+)[\<]([\w|\.]+)@([\w|\.]*)[\>]') + email_regex = re.compile('(^|\s)([\w|\.]+)@([\w|\.]*)') + contact_regex_res = contact_regex.findall(name) + email_regex_res = email_regex.findall(name) + if contact_regex_res: + name = contact_regex_res[0][1] + name = name.rstrip(' ') # remove extra spaces on the right + email = '%s@%s' % (contact_regex_res[0][2], contact_regex_res[0][3]) + rec_id = self.create(cr, uid, {self._rec_name: name, 'email': email}, context); + return self.name_get(cr, uid, [rec_id], context)[0] + elif email_regex: + email = '%s@%s' % (email_regex_res[0][1], email_regex_res[0][2]) + rec_id = self.create(cr, uid, {self._rec_name: email, 'email': email}, context); + return self.name_get(cr, uid, [rec_id], context)[0] + else: + return super(res_partner, self).create(cr, uid, name, context) + def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100): if not args: args=[]