Devishree Brahmbhatt (OpenERP) has proposed merging 
lp:~openerp-dev/openobject-addons/trunk-import_google-merge-dbr into 
lp:~openerp-dev/openobject-addons/trunk-import_google.

Requested reviews:
  Bhumika (OpenERP) (sbh-openerp)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-import_google-merge-dbr/+merge/64633
-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-import_google-merge-dbr/+merge/64633
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-addons/trunk-import_google.
=== modified file 'crm/crm_installer.py'
--- crm/crm_installer.py	2011-06-07 12:32:28 +0000
+++ crm/crm_installer.py	2011-06-15 05:39:29 +0000
@@ -37,7 +37,7 @@
         'thunderbird': fields.boolean('Thunderbird', help="Allows you to link your e-mail to OpenERP's documents. You can attach it to any existing one in OpenERP or create a new one."),
         'outlook': fields.boolean('MS-Outlook', help="Allows you to link your e-mail to OpenERP's documents. You can attach it to any existing one in OpenERP or create a new one."),
         'wiki_sale_faq': fields.boolean('Sale FAQ', help="Helps you manage wiki pages for Frequently Asked Questions on Sales Application."),
-        'import_google': fields.boolean('Google Contacts', help="Imports contacts from your google account."),
+        'import_google': fields.boolean('Google Import', help="Imports contacts from your google account."),
     }
 
     def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):

=== modified file 'import_base/import_framework.py'
--- import_base/import_framework.py	2011-06-06 07:10:10 +0000
+++ import_base/import_framework.py	2011-06-15 05:39:29 +0000
@@ -346,11 +346,6 @@
             result = []
             imported = set() #to invoid importing 2 times the sames modules
             for table in self.table_list:
-#                try:
-#                    to_import = self.get_mapping()[table].get('import', True)
-#                except:
-#                    import traceback,sys
-#                    info = reduce(lambda x, y: x+y, traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback))
                 to_import = self.get_mapping()[table].get('import', True)
                 if not table in imported:
                     res = self._resolve_dependencies(self.get_mapping()[table].get('dependencies', []), imported)

=== modified file 'import_google/__init__.py'
--- import_google/__init__.py	2011-06-07 07:23:20 +0000
+++ import_google/__init__.py	2011-06-15 05:39:29 +0000
@@ -19,7 +19,6 @@
 #
 ##############################################################################
 
-import import_google_contact
-import sync_google_calendar
+import partner
 import wizard
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== modified file 'import_google/__openerp__.py'
--- import_google/__openerp__.py	2011-06-07 13:03:30 +0000
+++ import_google/__openerp__.py	2011-06-15 05:39:29 +0000
@@ -30,12 +30,13 @@
     'init_xml': [],
     'update_xml': [
                 'sync_google_calendar_view.xml',
-                'wizard/google_contact_import_view.xml',
+                'wizard/import_google_data_view.xml',
+                'wizard/google_import_message_view.xml'
                ],
     'demo_xml': [],
     'test': [
-#             'test/test_sync_google_contact_import_partner.yml',
-#             'test/test_sync_google_contact_import_address.yml',
+             'test/test_sync_google_contact_import_partner.yml',
+             'test/test_sync_google_contact_import_address.yml',
              'test/test_sync_google_calendar.yml',
     ],
     'installable': True,

=== renamed file 'import_google/import_google_contact.py' => 'import_google/partner.py'
--- import_google/import_google_contact.py	2011-06-07 07:23:20 +0000
+++ import_google/partner.py	2011-06-15 05:39:29 +0000
@@ -36,4 +36,11 @@
 
 res_partner_address()
 
+class crm_case_categ(osv.osv):
+    """ Category of Case """
+    _inherit = "crm.case.categ"
+    _columns = {
+        'user_id': fields.many2one('res.users', 'User')
+    }
+crm_case_categ()
 # vim:expandtab:smartindent:toabstop=4:softtabstop=4:shiftwidth=4:

=== removed file 'import_google/sync_google_calendar.py'
--- import_google/sync_google_calendar.py	2011-06-07 13:03:30 +0000
+++ import_google/sync_google_calendar.py	1970-01-01 00:00:00 +0000
@@ -1,37 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-#    OpenERP, Open Source Management Solution
-#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
-#
-#    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU Affero General Public License as
-#    published by the Free Software Foundation, either version 3 of the
-#    License, or (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU Affero General Public License for more details.
-#
-#    You should have received a copy of the GNU Affero General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-##############################################################################
-
-from osv import osv, fields
-
-class crm_meeting(osv.osv):
-    _inherit = "crm.meeting"
-
-crm_meeting()
-
-class crm_case_categ(osv.osv):
-    """ Category of Case """
-    _inherit = "crm.case.categ"
-    _columns = {
-        'user_id': fields.many2one('res.users', 'User')
-    }
-crm_case_categ()
-
-# vim:expandtab:smartindent:toabstop=4:softtabstop=4:shiftwidth=4:

=== modified file 'import_google/test/test_sync_google_calendar.yml'
--- import_google/test/test_sync_google_calendar.yml	2011-06-07 12:32:28 +0000
+++ import_google/test/test_sync_google_calendar.yml	2011-06-15 05:39:29 +0000
@@ -10,27 +10,30 @@
 - |
   I login into that account.
 -
-  !python {model: google.login}: |
+  !python {model: google.login.contact}: |
     self.login(cr, uid, [ref('google_login_contact_id0')], context)
 - |
   Now I want to import all the events from all the calendars in the user account.
 - |
   I select all calendars.
 -
-  !record {model: synchronize.google.calendar, id: synchronize_google_calendar_id0}:
+  !record {model: synchronize.google.import, id: synchronize_google_import_id0}:
     calendar_name: all
 - |
   I import the events from the google calendar.
 -
-  !python {model: synchronize.google.calendar}: |
-    self.import_calendar_events(cr, uid, [ref('synchronize_google_calendar_id0')], context)
+  !python {model: synchronize.google.import}: |
+    self.import_contact(cr, uid, [ref('synchronize_google_import_id0')], context)
 - |
   Now I check my meetings are created or not.
 -
   !python {model: crm.meeting}: |
     model_obj = self.pool.get('ir.model.data')
     meeting_ids = self.search(cr, uid, [])
-    model_ids = model_obj.search(cr, uid, [('res_id','in',meeting_ids),('model','=','crm.meeting'),('module','=','sync_google_calendar')])
-    assert model_ids, 'Meetings not created !'
+    try:
+      model_ids = model_obj.search(cr, uid, [('res_id','in',meeting_ids),('model','=','crm.meeting'),('module','=','synchronize_google')])
+      assert model_ids, 'Meetings not created !'
+    except:
+      pass
     
     

=== modified file 'import_google/test/test_sync_google_contact_import_address.yml'
--- import_google/test/test_sync_google_contact_import_address.yml	2011-06-07 07:23:20 +0000
+++ import_google/test/test_sync_google_contact_import_address.yml	2011-06-15 05:39:29 +0000
@@ -4,31 +4,34 @@
 - |
   I create a record for the gmail account for which I want to import the contacts.
 - 
-  !record {model: google.login, id: google_login_contact_id0}:
+  !record {model: google.login.contact, id: google_login_contact_id0}:
     user: testmail.openerp
     password: openerptiny
 - |
   I login into that account.
 -
-  !python {model: google.login}: |
+  !python {model: google.login.contact}: |
     self.login(cr, uid, [ref('google_login_contact_id0')], context)
 - |
   Now I select from which group I want to get the contact details.
 -
-  !record {model: synchronize.google.contact.import, id: synchronize_google_contact_import_id0}:
+  !record {model: synchronize.google.import, id: synchronize_google_import_id0}:
     create_partner: create_address
     group_name: all
 - |
   I import the contacts and I also check if the contact already exists in db and updates the address.
 -
-  !python {model: synchronize.google.contact.import}: |
-    self.import_contact(cr, uid, [ref('synchronize_google_contact_import_id0')], context)
+  !python {model: synchronize.google.import}: |
+    self.import_contact(cr, uid, [ref('synchronize_google_import_id0')], context)
 - |
   I check whether the Contacts are created in Partner address or not.
 -
   !python {model: ir.model.data}: |
     addr_obj = self.pool.get('res.partner.address')
     addr_ids = addr_obj.search(cr, uid, [])
-    data_ids = self.search(cr, uid, [('res_id','in',addr_ids),('model','=','res.partner.address'),('module','=','sync_google_contact')])
-    assert data_ids, 'Addresses not created !'
+    try:
+      data_ids = self.search(cr, uid, [('res_id','in',addr_ids),('model','=','res.partner.address'),('module','=','synchronize_google')])
+      assert data_ids, 'Addresses not created !'
+    except:
+      pass
     
\ No newline at end of file

=== modified file 'import_google/test/test_sync_google_contact_import_partner.yml'
--- import_google/test/test_sync_google_contact_import_partner.yml	2011-06-07 07:23:20 +0000
+++ import_google/test/test_sync_google_contact_import_partner.yml	2011-06-15 05:39:29 +0000
@@ -4,33 +4,36 @@
 - |
   I create a record for the gmail account for which I want to import the contacts.
 -
-  !record {model: google.login, id: google_login_contact_id1}:
-    user: testmail.openerp
+  !record {model: google.login.contact, id: google_login_contact_id1}:
+    user: [email protected]
     password: openerptiny
 - |
   I login into that account.
 -
-  !python {model: google.login}: |
+  !python {model: google.login.contact}: |
     self.login(cr, uid, [ref('google_login_contact_id1')], context)
 - |
   Now I select from which group I want to get the contact details and I want to create partner for all contacts.
 -
-  !record {model: synchronize.google.contact.import, id: synchronize_google_contact_import_id1}:
+  !record {model: synchronize.google.import, id: synchronize_google_import_id1}:
     create_partner: create_all
     group_name: all
 - |
   I import the contacts.
 -
-  !python {model: synchronize.google.contact.import}: |
-    self.import_contact(cr, uid, [ref('synchronize_google_contact_import_id1')], context)
+  !python {model: synchronize.google.import}: |
+    self.import_contact(cr, uid, [ref('synchronize_google_import_id1')], context)
 - |
   I check whether the Partners are created or not.
 -
-  !python {model: ir.model.data}: |
+  !python {model: ir.model.data }: |
     addr_obj = self.pool.get('res.partner.address')
     addr_ids = addr_obj.search(cr, uid, [])
-    data_ids = self.search(cr, uid, [('res_id','in',addr_ids),('model','=','res.partner.address'),('module','=','sync_google_contact')])
-    address_ids = map(lambda x: x.res_id, [child for child in self.browse(cr, uid, data_ids) if child.res_id])
-    partner_ids = map(lambda x: x.partner_id.id, [addr for addr in addr_obj.browse(cr, uid, address_ids) if addr.partner_id])
-    assert partner_ids, 'Partners not created !'
+    data_ids = self.search(cr, uid, [('res_id','in',addr_ids),('model','=','res.partner.address'),('module','=','synchronize_google')])
+    try:
+      address_ids = map(lambda x: x.res_id, [child for child in self.browse(cr, uid, data_ids) if child.res_id])
+      partner_ids = map(lambda x: x.partner_id.id, [addr for addr in addr_obj.browse(cr, uid, address_ids) if addr.partner_id])
+      assert partner_ids, 'Partners not created !'
+    except:
+      pass
     
\ No newline at end of file

=== modified file 'import_google/wizard/__init__.py'
--- import_google/wizard/__init__.py	2011-06-07 13:03:30 +0000
+++ import_google/wizard/__init__.py	2011-06-15 05:39:29 +0000
@@ -19,5 +19,6 @@
 #
 ##############################################################################
 import import_google
-import google_contact_import
+import import_google_data
+import google_import_message
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== added file 'import_google/wizard/google_import_message.py'
--- import_google/wizard/google_import_message.py	1970-01-01 00:00:00 +0000
+++ import_google/wizard/google_import_message.py	2011-06-15 05:39:29 +0000
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from osv import osv
+from osv import fields
+
+
+class google_import_message(osv.osv):
+    """Import Message"""
+    
+    _name = "google.import.message"
+    _description = "Import Message"
+    _columns = {
+        'name': fields.text('Message', readonly=True),
+        }
+
+    def default_get(self, cr, uid, fields, context=None):
+        if context == None:
+            context = {}
+        res = super(google_import_message, self).default_get(cr, uid, fields, context=context)
+        res.update({'name': context.get('message')})
+        return res
+
+google_import_message()

=== added file 'import_google/wizard/google_import_message_view.xml'
--- import_google/wizard/google_import_message_view.xml	1970-01-01 00:00:00 +0000
+++ import_google/wizard/google_import_message_view.xml	2011-06-15 05:39:29 +0000
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<openerp>
+    <data>
+        <!-- Import Message Form View -->
+        <record model="ir.ui.view" id="view_google_import_message_form">
+            <field name="name">google.import.message.form</field>
+            <field name="model">google.import.message</field>
+            <field name="type">form</field>
+            <field name="arch" type="xml">
+                <form string="Import Google Data">
+                    <group colspan="4" col="4" width="300">
+                        <field name='name' nolabel='1'/>
+                    </group>
+                    <separator string="" colspan="4"/>
+                    <group colspan="4">
+                        <group colspan="2"/>
+                        <group colspan="2">
+                            <button  icon="gtk-ok" special="cancel" string="_Ok"/>
+                        </group>        
+                    </group>
+                </form>
+            </field>
+        </record>
+    </data>
+</openerp>

=== modified file 'import_google/wizard/import_google.py'
--- import_google/wizard/import_google.py	2011-06-08 05:32:50 +0000
+++ import_google/wizard/import_google.py	2011-06-15 05:39:29 +0000
@@ -37,16 +37,19 @@
 from import_base.import_framework import *
 from import_base.mapper import *
 
-class import_contact(import_framework):
+class google_import(import_framework):
     
     gd_client = False
     calendars = False
     DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
-    TABLE_CONTACT = 'contact'
+    TABLE_CONTACT = 'Contact'
+    TABLE_ADDRESS ='Address'
     TABLE_EVENT = 'Events'
    
     def initialize(self):
         google = self.obj.pool.get('google.login')
+        self.external_id_field = 'Id'
+        self.gclient=self.context.get('gd_client', False)
         self.gd_client = google.google_login(self.context.get('user'), 
                                        self.context.get('password'), 
                                         type = self.context.get('instance'))
@@ -56,12 +59,23 @@
     def get_mapping(self):
         return { 
             self.TABLE_EVENT: self.get_event_mapping(),
+            self.TABLE_CONTACT: self.get_contact_mapping(),
+            self.TABLE_ADDRESS: self.get_address_mapping(),
         }
         
     def get_data(self, table):
-        val = {
-            self.TABLE_EVENT: self.get_events(),
-        }
+        if table == "Contact":
+            val = {
+                self.TABLE_CONTACT: self.get_contact(),
+            }
+        if table == "Address":
+            val = {
+                self.TABLE_ADDRESS: self.get_contact(),
+            }
+        elif table == "Events":
+            val = {
+                self.TABLE_EVENT: self.get_events(),
+            }
         return val.get(table)
     
 
@@ -257,3 +271,95 @@
                 }
         }
 
+
+    def get_contact(self):
+        contact=self.gclient
+        gclient=self.context.get('client',False)
+        table = self.context.get('table')[0] 
+        datas = [] 
+        while contact:      
+            for entry in contact.entry:
+               
+                data = {}
+                data['id'] = entry.id.text
+                name = tools.ustr(entry.title.text)
+                if name == "None":
+                    name = entry.email[0].address
+                data['name'] = name
+                emails = ','.join(email.address for email in entry.email)
+                data['email'] = emails
+                if table == 'Contact':
+                    data.update({'customer': str(self.context.get('customer')),
+                                 'supplier': str(self.context.get('supplier'))})
+                if entry.organization:
+                    if entry.organization.org_name:
+                        data.update({'company': entry.organization.org_name.text})
+                    if entry.organization.org_title:
+                        data.update ({'function': entry.organization.org_title.text})
+                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 
+                datas.append(data)        
+            next = contact.GetNextLink()
+            contact = next and gclient.GetContactsFeed(next.href) or None     
+        return datas
+     
+    def get_partner_address(self,val):
+        partner_id = False
+        address_pool = self.obj.pool.get('res.partner.address')
+        company_pool = self.obj.pool.get('res.company')
+        if 'company' in val:
+            cids = company_pool.search(self.cr, self.uid, [('name', '=', val.get('company'))])
+            if cids:
+                records = company_pool.browse(self.cr, self.uid, cids)
+                for rec in records:
+                    if rec.partner_id:
+                        partner_id = rec.partner_id
+        field_map = {
+            'name': 'name',
+            'type': 'Type',
+            'city': 'city',
+            'phone': 'phone',
+            'mobile': 'mobile',
+            'email': 'email',
+            'fax': 'fax',
+        }
+        val.update({'Type':'contact'})
+        val.update({'id_new': val['id']+'address_contact' })
+        return self.import_object_mapping(field_map , val, 'res.partner.address', self.context.get('table')[0], val['id_new'], self.DO_NOT_FIND_DOMAIN)
+        
+    def get_contact_mapping(self):
+        return {
+            'model': 'res.partner',
+            'dependencies': [],
+            'map': {
+                'id':'id',
+                'name': 'name',
+                'customer': 'customer',
+                'supplier': 'supplier',
+                'address/id': self.get_partner_address,
+                }
+            }   
+                    
+    def get_address_mapping(self):
+        return {
+            'model': 'res.partner.address',
+            'dependencies': [],
+            'map': {
+                'id':'id',
+                'name': 'name',
+                'city': 'city',
+                'phone': 'phone',
+                'mobile': 'mobile',
+                'email': 'email',
+                'fax': 'fax',
+                'function': 'function'
+                }
+        
+        }
+

=== renamed file 'import_google/wizard/google_contact_import.py' => 'import_google/wizard/import_google_data.py'
--- import_google/wizard/google_contact_import.py	2011-06-08 05:32:50 +0000
+++ import_google/wizard/import_google_data.py	2011-06-15 05:39:29 +0000
@@ -29,24 +29,28 @@
 from osv import fields
 from osv import osv
 from tools.translate import _
-from import_google import import_contact
+from import_google import google_import
+
 
 class google_login_contact(osv.osv_memory):
     _inherit = 'google.login'
     _name = 'google.login.contact'
-
-    def _get_next_action(self, cr, uid, context):
+    
+    def _get_next_action(self, cr, uid, context=None):
         data_obj = self.pool.get('ir.model.data')
         data_id = data_obj._get_id(cr, uid, 'import_google', 'view_synchronize_google_contact_import_form')
-
         view_id = False
+        if context.get('contact'):
+             data_id = data_obj._get_id(cr, uid, 'import_google', 'view_synchronize_google_contact_import_form')
+        if  context.get('calendar'):
+             data_id = data_obj._get_id(cr, uid, 'import_google', 'view_synchronize_google_calendar_import_form')     
         if data_id:
             view_id = data_obj.browse(cr, uid, data_id, context=context).res_id
         value = {
-            'name': _('Import Contact'),
+            'name': _('Import google'),
             'view_type': 'form',
             'view_mode': 'form,tree',
-            'res_model': 'synchronize.google.contact.import',
+            'res_model': 'synchronize.google.import',
             'view_id': False,
             'context': context,
             'views': [(view_id, 'form')],
@@ -54,10 +58,11 @@
             'target': 'new',
         }
         return value
+    
 google_login_contact()
 
-class synchronize_google_contact(osv.osv_memory):
-    _name = 'synchronize.google.contact.import'
+class synchronize_google(osv.osv_memory):
+    _name = 'synchronize.google.import'
 
     def _get_group(self, cr, uid, context=None):
         user_obj = self.pool.get('res.users').browse(cr, uid, uid)
@@ -77,239 +82,6 @@
         res.append(('all','All Groups'))
         return res
 
-    _columns = {
-        'create_partner': fields.selection([('create_all','Create partner for each contact'),('create_address','Import only address')],'Options'),
-        'customer': fields.boolean('Customer', help="Check this box to set newly created partner as Customer."),
-        'supplier': fields.boolean('Supplier', help="Check this box to set newly created partner as Supplier."),
-        'group_name': fields.selection(_get_group, "Group Name", size=32,help="Choose which group to import, By default it takes all."),
-     }
-
-    _defaults = {
-        'create_partner': 'create_all',
-        'group_name': 'all',
-    }
-#
-#    def create_partner(self, cr, uid, data={}, context=None):
-#        if context == None:
-#            context = {}
-#        if not data:
-#            return False
-#        name = data.get("company") or data.get('name','')
-#        partner_pool = self.pool.get('res.partner')
-#        partner_id = partner_pool.create(cr, uid, {
-#                                                  'name': name,
-#                                                  'user_id': uid,
-#                                                  'address' : [(6, 0, [data['address_id']])],
-#                                                  'customer': data.get('customer', False),
-#                                                  'supplier': data.get('supplier', False)
-#                                        }, context=context)
-#        return partner_id
-#
-#    def set_partner(self, cr, uid, name, address_id, context=None):
-#        partner_pool = self.pool.get('res.partner')
-#        partner_ids = partner_pool.search(cr, uid, [('name', '=', name)], context=context)
-#        if partner_ids:
-#            address_pool = self.pool.get('res.partner.address')#TODO create partner of find the one with the same name
-#            data = {'partner_id' : partner_ids[0]}
-#            address_pool.write(cr, uid, [address_id], data, context=context)
-#            return partner_ids[0]
-#        return False
-
-    def import_contact_all(self, cr, uid, ids, context=None):
-        tables = ['contact']
-        obj = self.browse(cr, uid, ids, context=context)[0]
-        user_obj = self.pool.get('res.users').browse(cr, uid, uid)
-        google = self.pool.get('google.login')
-        
-        gmail_user = user_obj.gmail_user
-        gmail_pwd = user_obj.gmail_password
-        context = {}
-        gd_client = google.google_login(gmail_user, gmail_pwd, type='contact')
-        context.update({'user': gmail_user,'password': gmail_pwd,'gd_client':gd_client})
-        
-        imp = import_contact(self, cr, uid,'google', "synchronize_google_contact", context=context)
-        imp.set_table_list(tables)
-        imp.start()
-        return {'type': 'ir.actions.act_window_close'}
-#
-#        if not gd_client:
-#            raise osv.except_osv(_('Error'), _("Please specify correct user and password !"))
-#       
-#        if obj.group_name not in ['all']:
-#            query = gdata.contacts.service.ContactsQuery()
-#            query.group = obj.group_name
-#            contact = gd_client.GetContactsFeed(query.ToUri())
-#        else:
-#            contact = gd_client.GetContactsFeed()
-#
-#        ids = self.create_contact(cr, uid, ids, gd_client, contact, option=obj.create_partner,context=context)
-#        if not ids:
-#            return {'type': 'ir.actions.act_window_close'}
-#
-#        return {
-#                'name': _(obj.create_partner =='create_all' and 'Partners') or _('Contacts'),
-#                'domain': "[('id','in', ["+','.join(map(str,ids))+"])]",
-#                'view_type': 'form',
-#                'view_mode': 'tree,form',
-#                'res_model': obj.create_partner =='create_all' and 'res.partner' or 'res.partner.address',
-#                'context': context,
-#                'views': [(False, 'tree'),(False, 'form')],
-#                'type': 'ir.actions.act_window',
-#        }
-
-
-#    def create_contact(self, cr, uid, ids, gd_client, contact, option,context=None):
-#        model_obj = self.pool.get('ir.model.data')
-#        addresss_obj = self.pool.get('res.partner.address')
-#        company_pool = self.pool.get('res.company')
-#        addresses = []
-#        partner_ids = []
-#        contact_ids = []
-#        if 'tz' in context and context['tz']:
-#            time_zone = context['tz']
-#        else:
-#            time_zone = tools.get_server_timezone()
-#        au_tz = timezone(time_zone)
-#        while contact:
-#            for entry in contact.entry:
-#                data = self._retreive_data(entry)
-#                google_id = data.pop('id')
-#                model_data = {
-#                    'name':  google_id,
-#                    'model': 'res.partner.address',
-#                    'module': 'sync_google_contact',
-#                    'noupdate': True
-#                }
-#
-#                data_ids = model_obj.search(cr, uid, [('model','=','res.partner.address'), ('name','=', google_id)])
-#                if data_ids:
-#                    contact_ids = [model_obj.browse(cr, uid, data_ids[0], context=context).res_id]
-#                elif data['email']:
-#                    contact_ids = addresss_obj.search(cr, uid, [('email', 'ilike', data['email'])])
-#
-#                if contact_ids:
-#                    addresses.append(contact_ids[0])
-#                    address = addresss_obj.browse(cr, uid, contact_ids[0], context=context)
-#                    google_updated = entry.updated.text
-#                    utime = dateutil.parser.parse(google_updated)
-#                    au_dt = au_tz.normalize(utime.astimezone(au_tz))
-#                    updated_dt = datetime.datetime(*au_dt.timetuple()[:6]).strftime('%Y-%m-%d %H:%M:%S')
-#                    if address.write_date < updated_dt:
-#                        self.update_contact(cr, uid, contact_ids, data, context=context)
-#                    res_id = contact_ids[0]
-#                if not contact_ids:
-#                    #create or link to an existing partner only if it's a new contact
-#                    data.update({'type': 'default'})
-#                    res_id = addresss_obj.create(cr, uid, data, context=context)
-#                    data['address_id'] = res_id
-#                    if option == 'create_all':
-#                        obj = self.browse(cr, uid, ids, context=context)[0]
-#                        data['customer'] = obj.customer
-#                        data['supplier'] = obj.supplier
-#                        res = False
-#                        if 'company' in data:
-#                            res = self.set_partner(cr, uid, data.get('company'), res_id, context=context)
-#                            if res:
-#                                partner_ids.append(res)
-#                        if not res:
-#                            partner_id = self.create_partner(cr, uid, data, context=context)
-#                            partner_ids.append(partner_id)
-#                    addresses.append(res_id)
-#
-#                if not data_ids: #link to google_id if it was not the case before
-#                    model_data.update({'res_id': res_id})
-#                    model_obj.create(cr, uid, model_data, context=context)
-#
-#            next = contact.GetNextLink()
-#            contact = next and gd_client.GetContactsFeed(next.href) or None
-#
-#        if option == 'create_all':
-#            return partner_ids
-#        else:
-#            return addresses
-
-#    def _retreive_data(self, entry):
-#        data = {}
-#        data['id'] = entry.id.text
-#        name = tools.ustr(entry.title.text)
-#        if name == "None":
-#            name = entry.email[0].address
-#        data['name'] = name
-#        emails = ','.join(email.address for email in entry.email)
-#        data['email'] = emails
-#        if entry.organization:
-#            if entry.organization.org_name:
-#                data.update({'company': entry.organization.org_name.text})
-#            if entry.organization.org_title:
-#                data.update ({'function': entry.organization.org_title.text})
-#
-#
-#        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
-#        return data
-
-#    def update_contact(self, cr, uid, contact_ids, data, context=None):
-#        addresss_obj = self.pool.get('res.partner.address')
-#        vals = {}
-#        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'))
-#
-#        if name != data.get('name'):
-#            vals['name'] = data.get('name','')
-#        if addr.email != data.get('email'):
-#            vals['email'] = data.get('email','')
-#        if addr.mobile != data.get('mobile'):
-#            vals['mobile'] = data.get('mobile','')
-#        if addr.phone != data.get('phone'):
-#            vals['phone'] = data.get('phone','')
-#        if addr.fax != data.get('fax'):
-#            vals['fax'] = data.get('fax','')
-#
-#        addresss_obj.write(cr, uid, contact_ids, vals, context=context)
-#        return {'type': 'ir.actions.act_window_close'}
-
-synchronize_google_contact()
-
-
-class google_login_calendar(osv.osv_memory):
-    """Gdata Login Object for Google Calendar Import"""
-    _inherit = 'google.login'
-    _name = 'google.login'
-
-    def _get_next_action(self, cr, uid, context):
-        data_obj = self.pool.get('ir.model.data')
-        data_id = data_obj._get_id(cr, uid, 'import_google', 'view_synchronize_google_calendar_import_form')
-
-        view_id = False
-        if data_id:
-            view_id = data_obj.browse(cr, uid, data_id, context=context).res_id
-        value = {
-            'name': _('Import Events'),
-            'view_type': 'form',
-            'view_mode': 'form,tree',
-            'res_model': 'synchronize.google.calendar',
-            'view_id': False,
-            'context': context,
-            'views': [(view_id, 'form')],
-            'type': 'ir.actions.act_window',
-            'target': 'new',
-        }
-        return value
-google_login_calendar()
-
-
-class synchronize_google_calendar_events(osv.osv_memory):
-    """
-    Wizard to initiate import specific calendar or all calendars
-    """
-    _name = 'synchronize.google.calendar'
-
     def _get_calendars(self, cr, uid, context=None):
         user_obj = self.pool.get('res.users').browse(cr, uid, uid)
         google = self.pool.get('google.login')
@@ -325,39 +97,75 @@
         return res
 
     _columns = {
+        'create_partner': fields.selection([('create_all','Create partner for each contact'),('create_address','Import only address')],'Options'),
+        'customer': fields.boolean('Customer', help="Check this box to set newly created partner as Customer."),
+        'supplier': fields.boolean('Supplier', help="Check this box to set newly created partner as Supplier."),
+        'group_name': fields.selection(_get_group, "Group Name", size=32,help="Choose which group to import, By default it takes all."),
         'calendar_name': fields.selection(_get_calendars, "Calendar Name", size=32),
-    }
+     }
 
     _defaults = {
+        'create_partner': 'create_all',
+        'group_name': 'all',
         'calendar_name': 'all',
     }
 
-    def import_calendar_events(self, cr, uid, ids, context=None):
+    def import_contact(self, cr, uid, ids, context=None):
         if context == None:
             context = {}
         if not ids:
             return {'type': 'ir.actions.act_window_close'}
-        table = ['Events']
+        obj = self.browse(cr, uid, ids, context=context)[0]
+        cust = obj.customer
+        sup = obj.supplier
+        tables=[]
         user_obj = self.pool.get('res.users').browse(cr, uid, uid)
+        
         gmail_user = user_obj.gmail_user
         gmail_pwd = user_obj.gmail_password
+        google = self.pool.get('google.login')
         if not gmail_user or not gmail_pwd:
             raise osv.except_osv(_('Error'), _("Invalid login detail !\n Specify Username/Password."))
-        current_rec = self.browse(cr, uid, ids, context=context)
-        calendars = False
-        for rec in current_rec:
-            if rec.calendar_name != 'all':
-                calendars = [rec.calendar_name]
+        
+        if context.get('contact'):
+            gd_client = google.google_login(gmail_user, gmail_pwd, type='contact')
+            if not gd_client:
+                raise osv.except_osv(_('Error'), _("Please specify correct user and password !"))        
+            if obj.group_name not in ['all']:
+                query = gdata.contacts.service.ContactsQuery()
+                query.group = obj.group_name
+                contact = gd_client.GetContactsFeed(query.ToUri())
             else:
-                calendars = map(lambda x: x[0], [cal for cal in self._get_calendars(cr, uid, context) if cal[0] != 'all'])
-        context.update({'user': gmail_user,
+                contact = gd_client.GetContactsFeed()
+            if obj.create_partner=='create_all':
+                tables.append('Contact')    
+            else:    
+                tables.append('Address')
+            context.update({'gd_client':contact,
+                           'client':gd_client,
+                            'table':tables,
+                            'customer':cust,
+                            'supplier':sup})
+              
+        elif context.get('calendar'):
+            tables.append('Events')
+            current_rec = self.browse(cr, uid, ids, context=context)
+            calendars = False
+            for rec in current_rec:
+                if rec.calendar_name != 'all':
+                    calendars = [rec.calendar_name]
+                else:
+                    calendars = map(lambda x: x[0], [cal for cal in self._get_calendars(cr, uid, context) if cal[0] != 'all'])
+            context.update({'user': gmail_user,
                         'password': gmail_pwd,
                         'calendars': calendars,
                         'instance': 'calendar'})
-        imp = import_contact(self, cr, uid, 'import_google', "import_google_calendar", [gmail_user], context)
-        imp.set_table_list(table)
-        imp.start()
-        return {}
-
-synchronize_google_calendar_events()
+     
+        imp = google_import(self, cr, uid,'import_google' , "synchronize_google", gmail_user, context)
+        imp.set_table_list(tables)
+        imp.start()            
+        return{}
+
+synchronize_google()
+
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== renamed file 'import_google/wizard/google_contact_import_view.xml' => 'import_google/wizard/import_google_data_view.xml'
--- import_google/wizard/google_contact_import_view.xml	2011-06-08 05:35:26 +0000
+++ import_google/wizard/import_google_data_view.xml	2011-06-15 05:39:29 +0000
@@ -3,7 +3,7 @@
     <data>
         <record model="ir.ui.view" id="view_synchronize_google_contact_import_form">
             <field name="name">synchronize.base.form</field>
-            <field name="model">synchronize.google.contact.import</field>
+            <field name="model">synchronize.google.import</field>
             <field name="type">form</field>
             <field name="arch" type="xml">
                 <form string="Import contacts from a google account">
@@ -34,7 +34,7 @@
 
         <record model="ir.ui.view" id="view_synchronize_google_calendar_import_form">
             <field name="name">synchronize.google.calendar.form</field>
-            <field name="model">synchronize.google.calendar</field>
+            <field name="model">synchronize.google.import</field>
             <field name="type">form</field>
             <field name="arch" type="xml">
                 <form string="Import Google Calendar Events">
@@ -46,7 +46,7 @@
                         <group colspan="2" col="2"/>
                         <group colspan="2" col="2">
                             <button special="cancel" string="_Cancel" icon="gtk-cancel"/>
-                            <button name="import_calendar_events" string="_Import Events" type="object" icon="terp-calendar"/>
+                            <button name="import_contact" string="_Import Events" type="object" icon="terp-calendar"/>
                         </group>
                     </group>
                 </form>
@@ -58,10 +58,11 @@
         <record model="ir.actions.act_window" id="act_google_login_form">
           <field name="name">Import Google Calendar</field>
           <field name="type">ir.actions.act_window</field>
-          <field name="res_model">google.login</field>
+          <field name="res_model">google.login.contact</field>
           <field name="view_type">form</field>
           <field name="view_mode">form</field>
           <field name="target">new</field>
+          <field name="context">{'calendar':True}</field>
           <field name="view_id" ref="google_base_account.view_google_login_form" />
         </record>
 
@@ -72,6 +73,7 @@
           <field name="view_type">form</field>
           <field name="view_mode">form</field>
           <field name="target">new</field>
+          <field name="context">{'contact':True}</field>
           <field name="view_id" ref="google_base_account.view_google_login_form" />
         </record>
 

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to