[IMP]sync_google_contact: ref code

bzr revid: bhumikaopenerp-20110223102955-xvw81jg5fpz00k75
This commit is contained in:
Bhumika(OpenERP)
2011-02-23 15:59:55 +05:30
parent 7d193d99cd
commit 891382472e
@@ -23,6 +23,7 @@ from osv import fields,osv
from tools.translate import _
import tools
import gdata.contacts
import gdata.contacts.client
class google_base_import(osv.osv_memory):
_inherit = 'synchronize.base.contact.wizard.import'
@@ -100,12 +101,14 @@ class synchronize_google_contact(osv.osv_memory):
_name = 'synchronize.google.contact.import'
def _get_group(self, cr, uid, context=None):
user_obj = self.pool.get('res.users').browse(cr, uid, uid)
google=self.pool.get('google.login')
gd_client = google.google_login(cr,uid,user_obj.gmail_user,user_obj.gmail_password)
gd_client = gdata.contacts.client.ContactsClient('OpenERP')
gd_client.ClientLogin(user_obj.gmail_user,user_obj.gmail_password,gd_client.source)
query = gdata.contacts.client.ContactsQuery(feed='/m8/feeds/groups/default/full')
groups = gd_client.GetGroups(q=query)
res = []
if gd_client:
groups = gd_client.GetGroupsFeed()
for grp in groups.entry:
res.append((grp.id.text, grp.title.text))
res.append(('none','None'))
@@ -136,7 +139,8 @@ class synchronize_google_contact(osv.osv_memory):
def import_contact(self, cr, uid, ids, context=None):
addresss_obj = self.pool.get('res.partner.address')
partner_obj = self.pool.get('res.partner')
partner_ids=False
addresses=False
user_obj = self.pool.get('res.users').browse(cr, uid, uid)
gmail_user = user_obj.gmail_user
@@ -149,84 +153,24 @@ class synchronize_google_contact(osv.osv_memory):
raise osv.except_osv(_('Error'), _("Please specify the user and password !"))
contact = gd_client.GetContactsFeed()
partner_id = []
addresses = []
partner_ids = []
for obj in self.browse(cr, uid, ids, context=context):
while contact:
for entry in contact.entry:
data={}
partner_id = False
name = tools.ustr(entry.title.text)
google_id = entry.id.text
phone_numbers = ','.join(phone_number.text for phone_number in entry.phone_number)
emails = ','.join(email.address for email in entry.email)
data['name'] = ''
if name and name != 'None':
data['name'] = name
if google_id:
data['google_id'] =google_id
if entry.phone_number:
for phone in entry.phone_number:
if phone.rel == gdata.contacts.REL_WORK:
data['phone'] = phone.text
if phone.rel == gdata.contacts.PHONE_MOBILE:
data['mobile'] = phone.text
if phone.rel == gdata.contacts.PHONE_WORK_FAX:
data['fax'] = phone.text
if emails:
data['email'] = emails
contact_ids = addresss_obj.search(cr, uid, [('email','ilike',emails)])
else:
contact_ids = addresss_obj.search(cr, uid, [('google_id','=',google_id)])
if contact_ids :
res={}
addr=addresss_obj.browse(cr,uid,contact_ids)[0]
name = str((addr.name or addr.partner_id and addr.partner_id.name or '').encode('utf-8'))
email = addr.email
phone = addr.phone
mobile = addr.mobile
fax = addr.fax
if not name:
res['name']=data.get('name','')
if not email:
res['email']=data.get('email','')
if not mobile:
res['mobile']=data.get('mobile','')
if not phone:
res['phone']=data.get('phone','')
if not fax:
res['fax']=data.get('fax','')
addresss_obj.write(cr,uid,contact_ids,res,context=context)
if obj.create_partner and obj.group_name == 'all':
if name:
partner_id, data = self.create_partner(cr, uid, ids, data, context=context)
partner_ids.append(partner_id[0])
if not contact_ids :
addresses.append(addresss_obj.create(cr, uid, data, context=context))
if contact_ids:
addresss_obj.write(cr,uid,contact_ids,{'partner_id':partner_id[0]})
if obj.group_name and entry.group_membership_info and not contact_ids:
for grp in entry.group_membership_info:
if grp.href == obj.group_name:
if obj.create_partner:
partner_id, data = self.create_partner(cr, uid, ids, data, context=context)
partner_ids.append(partner_id[0])
addresses.append(addresss_obj.create(cr, uid, data, context=context))
else:
if obj.group_name == 'all' and not contact_ids:
addresses.append(addresss_obj.create(cr, uid, data, context=context))
if not contact:
break
next = contact.GetNextLink()
contact = next and gd_client.GetContactsFeed(next.href) or None
obj=self.browse(cr, uid, ids, context=context)[0]
if obj.group_name != 'all' or obj.group_name != 'None':
query = gdata.contacts.service.ContactsQuery()
query.group =obj.group_name
contact = gd_client.GetContactsFeed(query.ToUri())
if not contact:
raise osv.except_osv(_('Error'), _("No contact in this group!"))
if obj.create_partner:
partner_ids = self.create_contact( cr, uid, gd_client,contact, partner_id=True,context=context)
else :
addresses=self.create_contact( cr, uid, gd_client,contact, partner_id=False,context=context)
if obj.group_name == 'all':
contact = gd_client.GetContactsFeed()
if obj.create_partner:
partner_ids = self.create_contact( cr, uid, gd_client,contact, partner_id=True,context=context)
else:
addresses = self.create_contact( cr, uid, gd_client,contact, partner_id=True,context=context)
if partner_ids:
return {
'name': _('Partner'),
@@ -251,7 +195,79 @@ class synchronize_google_contact(osv.osv_memory):
}
else:
return {'type': 'ir.actions.act_window_close'}
def create_contact(self, cr, uid, gd_client,contact, partner_id=False,context=None):
addresss_obj = self.pool.get('res.partner.address')
partner_obj = self.pool.get('res.partner')
partner_id = []
addresses = []
partner_ids = []
while contact:
for entry in contact.entry:
data={}
name = tools.ustr(entry.title.text)
google_id = entry.id.text
phone_numbers = ','.join(phone_number.text for phone_number in entry.phone_number)
emails = ','.join(email.address for email in entry.email)
data['name'] = ''
if name and name != 'None':
data['name'] = name
if google_id:
data['google_id'] =google_id
if entry.phone_number:
for phone in entry.phone_number:
if phone.rel == gdata.contacts.REL_WORK:
data['phone'] = phone.text
if phone.rel == gdata.contacts.PHONE_MOBILE:
data['mobile'] = phone.text
if phone.rel == gdata.contacts.PHONE_WORK_FAX:
data['fax'] = phone.text
if emails:
data['email'] = emails
contact_ids = addresss_obj.search(cr, uid, [('email','ilike',emails)])
else:
contact_ids = addresss_obj.search(cr, uid, [('google_id','=',google_id)])
if partner_id:
partner_id, data = self.create_partner(cr, uid, ids, data, context=context)
partner_ids.append(partner_id[0])
if contact_ids:
self.update_contact( cr, uid, contact_ids, data,context=context)
if not contact_ids:
addresses.append(addresss_obj.create(cr, uid, data, context=context))
if not contact:
break
next = contact.GetNextLink()
contact = next and gd_client.GetContactsFeed(next.href) or None
if partner_id:
return partner_ids
else:
return addresses
def update_contact(self, cr, uid, contact_ids, data,context=None):
addresss_obj = self.pool.get('res.partner.address')
if context==None:
context={}
res={}
addr=addresss_obj.browse(cr,uid,contact_ids)[0]
name = str((addr.name or addr.partner_id and addr.partner_id.name or '').encode('utf-8'))
email = addr.email
phone = addr.phone
mobile = addr.mobile
fax = addr.fax
if not name:
res['name']=data.get('name','')
if not email:
res['email']=data.get('email','')
if not mobile:
res['mobile']=data.get('mobile','')
if not phone:
res['phone']=data.get('phone','')
if not fax:
res['fax']=data.get('fax','')
addresss_obj.write(cr,uid,contact_ids,res,context=context)
pass
synchronize_google_contact()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: