From 464cfbef4a1e1f3f5d32ff83d700118b0653a2b9 Mon Sep 17 00:00:00 2001 From: "Ysa (Open ERP)" Date: Wed, 12 May 2010 18:43:17 +0530 Subject: [PATCH] [IMP] Thunderbird :- improve code and plugin. bzr revid: ysa@tinyerp.co.in-20100512131317-yvaljazytslylsav --- addons/thunderbird/installer.py | 2 +- addons/thunderbird/partner/partner.py | 39 ++++++++++-------- addons/thunderbird/plugin/tiny_plugin-2.0.xpi | Bin 68790 -> 68817 bytes 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/addons/thunderbird/installer.py b/addons/thunderbird/installer.py index 7e6aac6f8c1..f5f04b86fe9 100644 --- a/addons/thunderbird/installer.py +++ b/addons/thunderbird/installer.py @@ -41,7 +41,7 @@ class thunderbird_installer(osv.osv_memory): 'name':fields.char('File name', size=34), 'pdf_name':fields.char('File name', size=64), 'thunderbird':fields.boolean('Thunderbird Module ', help="Allows you to select an object that you’d like to add to your email and its attachments."), - 'plugin_file':fields.binary('Thunderbird Plug-in', readonly=True, help="Thunderbird plug-in file. Save as this file and install this plug-in in thunderbir."), + 'plugin_file':fields.binary('Thunderbird Plug-in', readonly=True, help="Thunderbird plug-in file. Save as this file and install this plug-in in thunderbird."), 'pdf_file':fields.binary('Installation Manual', help="The documentation file :- how to install Thunderbird Plug-in.", readonly=True), 'description':fields.text('Description', readonly=True) } diff --git a/addons/thunderbird/partner/partner.py b/addons/thunderbird/partner/partner.py index 80d2b7eacbd..f91a4e29737 100644 --- a/addons/thunderbird/partner/partner.py +++ b/addons/thunderbird/partner/partner.py @@ -92,7 +92,7 @@ class tinythunderbird_partner(osv.osv): partner=add_obj.read(cr,user,partner_ids,['partner_id']) if partner and partner[0] and partner[0]['partner_id']: dictcreate.update({'partner_id':partner[0]['partner_id'][0]}) - create_id = self.pool.get(dictcreate.get('object','crm.case')).create(cr, user, dictcreate) + create_id = case_pool.create(cr, user, dictcreate) cases=case_pool.browse(cr,user,[create_id]) case_pool._history(cr, user, cases, _('Archive'), history=True, email=False) return create_id @@ -104,10 +104,11 @@ class tinythunderbird_partner(osv.osv): def thunderbird_createpartner(self,cr,user,vals): dictcreate = dict(vals) - search_id = self.pool.get('res.partner').search(cr, user,[('name','=',dictcreate['name'])]) + address_obj = self.pool.get('res.partner') + search_id = address_obj.search(cr, user,[('name','=',dictcreate['name'])]) if search_id: return 0 - create_id = self.pool.get('res.partner').create(cr, user, dictcreate) + create_id = address_obj.create(cr, user, dictcreate) return create_id def thunderbird_searchobject(self,cr,user,vals): @@ -116,12 +117,13 @@ class tinythunderbird_partner(osv.osv): return (search_id and search_id[0]) or 0 def thunderbird_searchcontact(self,cr,user,vals): - search_id1 = self.pool.get('res.partner.address').search(cr,user,[('name','ilike',vals)]) - search_id2 = self.pool.get('res.partner.address').search(cr,user,[('email','=',vals)]) + address_obj = self.pool.get('res.partner.address') + search_id1 = address_obj.search(cr,user,[('name','ilike',vals)]) + search_id2 = address_obj.search(cr,user,[('email','=',vals)]) if search_id1: - return self.pool.get('res.partner.address').name_get(cr, user, search_id1) + return address_obj.name_get(cr, user, search_id1) elif search_id2: - return self.pool.get('res.partner.address').name_get(cr, user, search_id2) + return address_obj.name_get(cr, user, search_id2) return [] def thunderbird_tempsearch(self,cr,user,vals): @@ -132,21 +134,22 @@ class tinythunderbird_partner(osv.osv): name_get=[] er_val=[] for object in obj: + dyn_object = self.pool.get(object) if object == 'res.partner.address': - search_id1 = self.pool.get(object).search(cr,user,[('name','ilike',value)]) - search_id2 = self.pool.get(object).search(cr,user,[('email','=',value)]) + search_id1 = dyn_object.search(cr,user,[('name','ilike',value)]) + search_id2 = dyn_object.search(cr,user,[('email','=',value)]) if search_id1: name_get.append(object) - name_get.append(self.pool.get(object).name_get(cr, user, search_id1)) + name_get.append(dyn_object.name_get(cr, user, search_id1)) elif search_id2: name_get.append(object) - name_get.append(self.pool.get(object).name_get(cr, user, search_id2)) + name_get.append(dyn_object.name_get(cr, user, search_id2)) else: try: - search_id1 = self.pool.get(object).search(cr,user,[('name','ilike',value)]) + search_id1 = dyn_object.search(cr,user,[('name','ilike',value)]) if search_id1: name_get.append(object) - name_get.append(self.pool.get(object).name_get(cr, user, search_id1)) + name_get.append(dyn_object.name_get(cr, user, search_id1)) except: er_val.append(object) continue @@ -179,17 +182,19 @@ class tinythunderbird_partner(osv.osv): def read(self, cr, user, ids, fields=None, context={}, load='_classic_read'): ret_read = super(tinythunderbird_partner, self).read(cr, user, ids,fields,context,load) + attach_obj = self.pool.get('ir.attachment') for read_data in ret_read: - attachments = self.pool.get('ir.attachment').search(cr,user,[('res_model','=',self._name),('res_id','=',read_data['id'])]) - attechments_data = self.pool.get('ir.attachment').read(cr,user,attachments,['name']) + attachments = attach_obj.search(cr,user,[('res_model','=',self._name),('res_id','=',read_data['id'])]) + attechments_data = sattach_obj.read(cr,user,attachments,['name']) file_names = [a['name'] for a in attechments_data] text_atteched = '\n'.join(file_names) read_data['attachments'] = text_atteched return ret_read def unlink(self, cr, uid, ids, context={}): - attachments = self.pool.get('ir.attachment').search(cr,uid,[('res_model','=',self._name),('res_id','in',ids)]) - self.pool.get('ir.attachment').unlink(cr,uid,attachments) + attach_obj = self.pool.get('ir.attachment') + attachments = attach_obj.search(cr,uid,[('res_model','=',self._name),('res_id','in',ids)]) + attach_obj.unlink(cr,uid,attachments) return super(tinythunderbird_partner, self).unlink(cr, uid, ids,context) def thunderbird_objectsearch(self,cr,user,vals): diff --git a/addons/thunderbird/plugin/tiny_plugin-2.0.xpi b/addons/thunderbird/plugin/tiny_plugin-2.0.xpi index ffb2536552549a120f6637d8f7bbc1d276077c0f..ef42a9a0c14731016d00c69f2abaf2f1d90e4281 100644 GIT binary patch delta 10129 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 delta 10090 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