← Back to team overview

openerp-dev-web team mailing list archive

lp:~openerp-dev/openobject-addons/trunk-import_sugarcrm-backlogs3_corrections-atp into lp:~openerp-dev/openobject-addons/trunk-import_sugarcrm

 

Atul Patel(OpenERP) has proposed merging lp:~openerp-dev/openobject-addons/trunk-import_sugarcrm-backlogs3_corrections-atp into lp:~openerp-dev/openobject-addons/trunk-import_sugarcrm.

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

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-import_sugarcrm-backlogs3_corrections-atp/+merge/55481

Hello,

Backlogs3 Improvement:
----------------------
1) Improve code for Partner Billing and shipping Address.
2) Raise exception for config.php limit in sugarcrm.
3) Correct problem: Put Customer in 'Customer' and 'Supplier' in Supplier
4) Add Title field in Leads.






-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-import_sugarcrm-backlogs3_corrections-atp/+merge/55481
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-addons/trunk-import_sugarcrm.
=== modified file 'import_sugarcrm/import_sugarcrm.py'
--- import_sugarcrm/import_sugarcrm.py	2011-03-25 12:50:15 +0000
+++ import_sugarcrm/import_sugarcrm.py	2011-03-30 07:37:30 +0000
@@ -22,7 +22,9 @@
 from operator import itemgetter
 import sugar
 import sugarcrm_fields_mapping
+from tools.translate import _
 import pprint
+import tools
 pp = pprint.PrettyPrinter(indent=4)
 
 def create_mapping(obj, cr, uid, res_model, open_id, sugar_id, context):
@@ -90,8 +92,6 @@
         val['state_id/.id'] =  state and state[0][0] or False        
         fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_partner_address)
         address_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', context=context)
-        
-
 
 def import_users(sugar_obj, cr, uid, context=None):
     if not context:
@@ -103,7 +103,7 @@
             'context_lang' : 'context_lang',
             'password' : 'password',
             '.id' : '.id',
-            'context_department_id': 'department'
+            'context_department_id.id': 'context_department_id.id',
             } 
     user_obj = sugar_obj.pool.get('res.users')
     department_obj = sugar_obj.pool.get('hr.department')
@@ -115,9 +115,8 @@
             val['.id'] = str(user_ids[0])
         else:
             val['password'] = 'sugarcrm' #default password for all user
-#            cr.execute('SELECT * FROM users_signatures u LIMIT 0,1000')
         new_department_id = department_obj.create(cr, uid, {'name': val.get('department')})
-        val['context_department_id'] = new_department_id     
+        val['context_department_id.id'] = new_department_id     
         val['context_lang'] = context.get('lang','en_US')
         fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_user)
         #All data has to be imported separatly because they don't have the same field
@@ -177,56 +176,6 @@
         stage_id = stage.id
     return stage_id
 
-def get_billing_address(sugar_obj,cr, uid, val, map_partner_address, context=None):
-    fields=[]
-    datas=[]
-    
-    address_obj = sugar_obj.pool.get('res.partner.address')
-    res_country_obj = sugar_obj.pool.get('res.country')
-    str = val.get('billing_address_country')[0:2]
-    map_partner_address.update({
-        'street': 'billing_address_street',
-        'zip': 'billing_address_postalcode',
-        'city': 'billing_address_city',
-        'country_id': 'country_id',
-        'type': 'type'
-            })
-    val['type'] = 'invoice'
-    country = get_all_countries(sugar_obj,cr, uid, val.get('billing_address_country'), context)
-    state = get_all_states(sugar_obj, cr, uid, val.get('billing_address_state'), context)
-    #Need to Fix bcz code create problem.
-    val['country_id'] =  country and country[0][0] or res_country_obj.create(cr, uid, {'name': val.get('billing_address_country'), 'code': str}),
-    val['state_id'] =  state and state[0][0] or  False,           
-    fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_partner_address)
-    dict_val = dict(zip(fields,datas))
-    new_address_id = address_obj.create(cr,uid, dict_val)
-    
-    return new_address_id
-
-def get_shipping_address(sugar_obj,cr, uid, val, map_partner_address, context=None):
-    fields=[]
-    datas=[]
-    str = ''
-    address_obj = sugar_obj.pool.get('res.partner.address')
-    res_country_obj = sugar_obj.pool.get('res.country')
-    str = val.get('shipping_address_country')[0:2]
-    map_partner_address.update({
-        'street': 'shipping_address_street',
-        'zip': 'shipping_address_postalcode',
-        'city': 'shipping_address_city',
-         'country_id': 'country_id',
-         'type': 'type'
-        })
-    val['type'] = 'delivery'
-    country = get_all_countries(sugar_obj, cr, uid, val.get('shipping_address_country'), context)
-    state = get_all_states(sugar_obj, cr, uid, val.get('shipping_address_state'), context)
-    val['country_id'] =  country and country[0][0] or res_country_obj.create(cr, uid, {'name': val.get('shipping_address_country'), 'code': str}),
-    val['state_id'] =  state and state[0][0] or  False,
-    fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_partner_address)
-    dict_val = dict(zip(fields,datas))
-    new_address_id = address_obj.create(cr,uid, dict_val)
-    return new_address_id
-
 def get_user_address(sugar_obj, cr, uid, val, context=None):
     address_obj = sugar_obj.pool.get('res.partner.address')
     
@@ -249,13 +198,38 @@
         new_address_id = address_obj.create(cr,uid, dict_val)
         return new_address_id
     
+def get_address_type(sugar_obj, cr, uid, val, map_partner_address, type, context=None):
+        address_obj = sugar_obj.pool.get('res.partner.address')
+        res_country_obj = sugar_obj.pool.get('res.country')
+        new_address_id = False
+        if type == 'invoice':
+            type_address = 'billing'
+        else:
+            type_address = 'shipping'     
+    
+        map_partner_address.update({
+            'street': type_address + '_address_street',
+            'zip': type_address +'_address_postalcode',
+            'city': type_address +'_address_city',
+             'country_id': 'country_id',
+             'type': 'type',
+            })
+        val['type'] = type
+        str = val.get(type_address +'_address_country')[0:2]
+        country = get_all_countries(sugar_obj, cr, uid, val.get(type_address +'_address_country'), context)
+        state = get_all_states(sugar_obj, cr, uid, val.get(type_address +'_address_state'), context)
+        val['country_id'] =  country and country[0][0] or res_country_obj.create(cr, uid, {'name': val.get(type_address +'_address_country'), 'code': str}),
+        val['state_id'] =  state and state[0][0] or  False,
+        fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_partner_address)
+        #Convert To list into Dictionary(Key, val). value pair.
+        dict_val = dict(zip(fields,datas))
+        new_address_id = address_obj.create(cr,uid, dict_val)
+        return new_address_id
+    
 def get_address(sugar_obj, cr, uid, val, context=None):
     map_partner_address={}
     address_id=[]
-    fields=[]
-    datas=[]
     address_obj = sugar_obj.pool.get('res.partner.address')
-    model_obj = sugar_obj.pool.get('ir.model.data')
     address_ids = address_obj.search(cr, uid, [('name', '=',val.get('name')), ('type', 'in', ('invoice', 'delivery')), ('street', '=', val.get('billing_address_street'))])
     if address_ids:
         return address_ids 
@@ -269,8 +243,11 @@
             'fax': 'phone_fax',
             'type': 'type',
             }
-        address_id.append(get_billing_address(sugar_obj,cr, uid, val, map_partner_address, context))
-        address_id.append(get_shipping_address(sugar_obj,cr, uid, val, map_partner_address, context))
+        if val.get('billing_address_street'):
+            address_id.append(get_address_type(sugar_obj, cr, uid, val, map_partner_address, 'invoice', context))
+            
+        if val.get('shipping_address_street'):
+            address_id.append(get_address_type(sugar_obj, cr, uid, val, map_partner_address, 'delivery', context))
         return address_id
 
 def import_partners(sugar_obj, cr, uid, context=None):
@@ -283,34 +260,32 @@
                 'user_id/id': 'assigned_user_id',
                 'ref': 'sic_code',
                 'comment': ['description', 'employees', 'ownership', 'annual_revenue', 'rating', 'industry', 'ticker_symbol'],
-                'customer': False,
-                'supplier': False
+                'customer': 'customer',
+                'supplier': 'supplier', 
                 }
-        
     partner_obj = sugar_obj.pool.get('res.partner')
     address_obj = sugar_obj.pool.get('res.partner.address')
     PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
     sugar_data = sugar.search(PortType, sessionid, 'Accounts')
-    
     for val in sugar_data:
         add_id = get_address(sugar_obj, cr, uid, val, context)
-        if val.get('account_type') in  ('customer', 'prospect', 'other'):
-            val['customer'] = True
+        if val.get('account_type') in  ('Customer', 'Prospect', 'Other'):
+            val['customer'] = '1'
         else:
-            val['supplier'] = True
+            val['supplier'] = '1'
         fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_partner)
         partner_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', context=context)
-        for a in  address_obj.browse(cr,uid,add_id):
-            data_id=partner_obj.search(cr,uid,[('name','like',a.name),('website','like',val.get('website'))])
+        for address in  address_obj.browse(cr,uid,add_id):
+            data_id = partner_obj.search(cr,uid,[('name','like',address.name),('website','like',val.get('website'))])
             if data_id:
-                address_obj.write(cr,uid,a.id,{'partner_id':data_id[0]})                
+                address_obj.write(cr,uid,address.id,{'partner_id':data_id[0]})                
     return True
 
 
 def import_resources(sugar_obj, cr, uid, context=None):
     if not context:
         context = {}
-    map_resource = {'id' : 'user_hash',
+    map_resource = {'id' : 'id',
                     'name': ['first_name', 'last_name'],
     }
     resource_obj = sugar_obj.pool.get('resource.resource')
@@ -324,12 +299,12 @@
 def import_employees(sugar_obj, cr, uid, context=None):
     if not context:
         context = {}
-    map_employee = {'id' : 'user_hash',
+    map_employee = {'id' : 'id',
+                    'resource_id/.id': 'resource_id/.id',
                     'name': ['first_name', 'last_name'],
                     'work_phone': 'phone_work',
                     'mobile_phone':  'phone_mobile',
                     'user_id/name': ['first_name', 'last_name'], 
-                    'resource_id/.id': 'resource_id/.id', 
                     'address_home_id/.id': 'address_home_id/.id',
                     'notes': 'description',
                     #TODO: Creation of Employee create problem.
@@ -343,7 +318,7 @@
     for val in sugar_data:
         address_id = get_user_address(sugar_obj, cr, uid, val, context)
         val['address_home_id/.id'] = address_id
-        model_ids = find_mapped_id(sugar_obj, cr, uid, 'resource.resource', val.get('user_hash')+ '_resource_resource', context)
+        model_ids = find_mapped_id(sugar_obj, cr, uid, 'resource.resource', val.get('id')+ '_resource_resource', context)
         resource_id = sugar_obj.pool.get('ir.model.data').browse(cr, uid, model_ids)
         if resource_id:
             val['resource_id/.id'] = resource_id[0].res_id
@@ -352,21 +327,36 @@
         fields, datas = sugarcrm_fields_mapping.sugarcrm_fields_mapp(val, map_employee)
         employee_obj.import_data(cr, uid, fields, [datas], mode='update', current_module='sugarcrm_import', context=context)
 
+def get_contact_title(sugar_obj, cr, uid, salutation, domain, context=None):
+    if not context:
+        context = {}
+    contact_title_obj = sugar_obj.pool.get('res.partner.title')        
+    title_id = False
+    title_ids = contact_title_obj.search(cr, uid, [('shortcut', '=', salutation), ('domain', '=', domain)])
+    if title_ids:
+         title_id = title_ids[0]
+    elif salutation:
+         title_id = contact_title_obj.create(cr, uid, {'name': salutation, 'shortcut': salutation, 'domain': domain})
+    return title_id
+    
     
 def import_leads(sugar_obj, cr, uid, context=None):
     if not context:
         context = {}
+    title_id = False   
     map_lead = {
             'id' : 'id',
             'name': ['first_name', 'last_name'],
             'contact_name': ['first_name', 'last_name'],
-            'description': 'description',
+            'description': ['description', 'refered_by', 'lead_source', 'lead_source_description', 'website'],
             'partner_name': 'account_name',
             'email_from': 'email1',
             'phone': 'phone_work',
             'mobile': 'phone_mobile',
+            'title.id': 'title.id',
             'function':'title',
             'street': 'primary_address_street',
+            'street2': 'alt_address_street',
             'zip': 'primary_address_postalcode',
             'city':'primary_address_city',
             'user_id/id' : 'assigned_user_id',
@@ -379,6 +369,8 @@
     PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
     sugar_data = sugar.search(PortType, sessionid, 'Leads')
     for val in sugar_data:
+        title_id = get_contact_title(sugar_obj, cr, uid, val.get('salutation'), 'contact', context)
+        val['title.id'] = title_id
         val['type'] = 'lead'
         stage_id = get_lead_status(sugar_obj, cr, uid, val, context)
         val['stage_id.id'] = stage_id
@@ -389,22 +381,35 @@
 def import_opportunities(sugar_obj, cr, uid, context=None):
     if not context:
         context = {}
+    categ_id = False    
     map_opportunity = {'id' : 'id',
         'name': 'name',
         'probability': 'probability',
         'partner_id/name': 'account_name',
         'title_action': 'next_step',
         'partner_address_id/name': 'account_name',
-        'planned_revenue': 'amount_usdollar',
+        'planned_revenue': 'amount',
         'date_deadline':'date_closed',
         'user_id/id' : 'assigned_user_id',
         'stage_id.id' : 'stage_id.id',
         'type' : 'type',
+        'categ_id.id': 'categ_id.id'
     }
     lead_obj = sugar_obj.pool.get('crm.lead')
+    partner_obj = sugar_obj.pool.get('res.partner')
+    categ_obj = sugar_obj.pool.get('crm.case.categ')
     PortType, sessionid = sugar.login(context.get('username', ''), context.get('password', ''), context.get('url',''))
     sugar_data = sugar.search(PortType, sessionid, 'Opportunities')
     for val in sugar_data:
+        partner_xml_id = partner_obj.search(cr, uid, [('name', 'like', val.get('account_name'))])
+        if not partner_xml_id:
+            raise osv.except_osv(_('Warning !'), _('Partner %s not Found') % val.get('account_name'))
+        categ_ids = categ_obj.search(cr, uid, [('object_id.model','=','crm.lead'), ('name', 'like',val.get('opportunity_type'))])
+        if categ_ids:
+            categ_id = categ_ids[0]
+        else:
+            categ_id = categ_obj.create(cr, uid, {'name': val.get('opportunity_type'), 'object_id.model': 'crm.lead'})     
+        val['categ_id.id'] = categ_id                    
         val['type'] = 'opportunity'
         stage_id = get_opportunity_status(sugar_obj, cr, uid, val, context)
         val['stage_id.id'] = stage_id
@@ -444,8 +449,7 @@
 
 class import_sugarcrm(osv.osv):
     """Import SugarCRM DATA"""
-
-
+    
     _name = "import.sugarcrm"
     _description = __doc__
     _columns = {
@@ -485,8 +489,6 @@
                 key_list.append('Accounts') 
             if current.employee:
                 key_list.append('Employees')       
-                           
-
         return key_list
 
     def import_all(self, cr, uid, ids, context=None):
@@ -501,7 +503,6 @@
                 MAP_FIELDS[key]['process'](self, cr, uid, context)
                 imported.add(key)
 
-
         obj_model = self.pool.get('ir.model.data')
         model_data_ids = obj_model.search(cr,uid,[('model','=','ir.ui.view'),('name','=','import.message.form')])
         resource_id = obj_model.read(cr, uid, model_data_ids, fields=['res_id'])