From 59c91b98ccdf3116d476530eac86679c8979600f Mon Sep 17 00:00:00 2001 From: "Sbh (OpenERP)" Date: Thu, 17 Feb 2011 16:58:36 +0530 Subject: [PATCH 1/4] [IMP] ADD selection of google group bzr revid: sbh@tinyerp.com-20110217112836-sdtc478n0eftaf8i --- .../wizard/google_login.py | 11 +++- addons/sync_google_contact/__openerp__.py | 2 +- .../wizard/google_contact_import.py | 63 ++++++++++++++++--- .../wizard/google_contact_import_view.xml | 33 +++++++--- 4 files changed, 91 insertions(+), 18 deletions(-) diff --git a/addons/google_base_account/wizard/google_login.py b/addons/google_base_account/wizard/google_login.py index 23602be0403..3b7a376f1be 100644 --- a/addons/google_base_account/wizard/google_login.py +++ b/addons/google_base_account/wizard/google_login.py @@ -31,7 +31,16 @@ class google_login(osv.osv_memory): 'user': fields.char('User Name', size=64, required=True), 'password': fields.char('Password', size=64), } - + def google_login(self,cr,uid,user,password,context=None): + gd_client = gdata.contacts.service.ContactsService() + gd_client.email = user + gd_client.password = password + gd_client.source = 'OpenERP' + try: + gd_client.ProgrammaticLogin() + except Exception, e: + return False + return gd_client def check_login(self, cr, uid, ids, context=None): if context == None: context = {} diff --git a/addons/sync_google_contact/__openerp__.py b/addons/sync_google_contact/__openerp__.py index 4d0d98a48a0..b40f787cdf8 100644 --- a/addons/sync_google_contact/__openerp__.py +++ b/addons/sync_google_contact/__openerp__.py @@ -27,7 +27,7 @@ 'description': """The module adds google contact in partner address""", 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', - 'depends': ['base','google_base_account'], + 'depends': ['base','google_base_account','sync_base'], 'init_xml': [], 'update_xml': [ 'wizard/google_contact_import_view.xml' diff --git a/addons/sync_google_contact/wizard/google_contact_import.py b/addons/sync_google_contact/wizard/google_contact_import.py index 764cffcb18c..f3589b9c050 100644 --- a/addons/sync_google_contact/wizard/google_contact_import.py +++ b/addons/sync_google_contact/wizard/google_contact_import.py @@ -23,10 +23,8 @@ from osv import fields,osv from tools.translate import _ class google_contact_import(osv.osv_memory): - _name = "google.import.contact" _inherit = 'google.login' _columns = { - 'create_partner': fields.boolean('Create Partner', help="It will create Partner for given gmail user otherwise only adds contacts in Partner Addresses.") } def default_get(self, cr, uid, fields, context=None): @@ -37,19 +35,60 @@ class google_contact_import(osv.osv_memory): if 'password' in fields: res.update({'password': user_obj.gmail_password}) return res - def import_contact(self, cr, uid, ids, context=None): - # Only see the result, we will change the code - gd_client = self.check_login(cr, uid, ids, context=context) if not gd_client: - return {'type': 'ir.actions.act_window_close'} + raise osv.except_osv(_('Error'), _("Authication fail check the user and password !")) + data_obj = self.pool.get('ir.model.data') + data_id = data_obj._get_id(cr, uid, 'sync_google_contact', 'view_synchronize_google_contact_import_form') + view_id = False + if data_id: + view_id = data_obj.browse(cr, uid, data_id, context=context).res_id + value = { + 'name': _('Import Contact'), + 'view_type': 'form', + 'view_mode': 'form,tree', + 'res_model': 'synchronize.base', + 'view_id': False, + 'context': context, + 'views': [(view_id, 'form')], + 'type': 'ir.actions.act_window', + 'target': 'new', + } + return value + +google_contact_import() +class synchronize_google_contact(osv.osv_memory): + _name = "synchronize.base" + _inherit = 'synchronize.base' + 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) + 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')) + res.append(('all','All Group')) + return res + _columns = { + 'tools': fields.selection([('gmail','Gmail')], 'Tools'), + 'create_partner': fields.boolean('Create Partner', help="It will create Partner for given gmail user otherwise only adds contacts in Partner Addresses.") , + 'group_name': fields.selection(_get_group, "Group Name", size=32,help="Choose which group to import, By defult it take all "), + + } + + def import_contact(self, cr, uid, ids, context=None): addresss_obj = self.pool.get('res.partner.address') partner_obj = self.pool.get('res.partner') user_obj = self.pool.get('res.users').browse(cr, uid, uid) gmail_user = user_obj.gmail_user gamil_pwd = user_obj.gmail_password + google=self.pool.get('google.login') + gd_client=google.google_login(cr,uid,user_obj.gmail_user,user_obj.gmail_password) if not gmail_user or not gamil_pwd: raise osv.except_osv(_('Error'), _("Please specify the user and password !")) @@ -58,6 +97,7 @@ class google_contact_import(osv.osv_memory): addresses = [] for obj in self.browse(cr, uid, ids, context=context): + if obj.create_partner: for user in contact.author: partner_name = user.name.text @@ -76,8 +116,13 @@ class google_contact_import(osv.osv_memory): 'partner_id': partner_id and partner_id[0] } contact_ids = addresss_obj.search(cr, uid, [('email','ilike',emails)]) - if not contact_ids: - addresses.append(addresss_obj.create(cr, uid, data, context=context)) + 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: + addresss_obj.create(cr, uid, data, context=context) + else: + if obj.group_name=='all': + addresses.append(addresss_obj.create(cr, uid, data, context=context)) if not contact: break next = contact.GetNextLink() @@ -110,6 +155,6 @@ class google_contact_import(osv.osv_memory): else: return {'type': 'ir.actions.act_window_close'} -google_contact_import() +synchronize_google_contact() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sync_google_contact/wizard/google_contact_import_view.xml b/addons/sync_google_contact/wizard/google_contact_import_view.xml index 370636864a3..0c9149c2a4b 100644 --- a/addons/sync_google_contact/wizard/google_contact_import_view.xml +++ b/addons/sync_google_contact/wizard/google_contact_import_view.xml @@ -2,9 +2,9 @@ - - google.import.contact.form - google.import.contact + + google.import.login.form + google.login form
@@ -13,8 +13,6 @@ - -