2011-03-24 04:29:43 +00:00
# -*- 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 fields , osv
from operator import itemgetter
import sugar
import sugarcrm_fields_mapping
2011-03-29 04:34:57 +00:00
from tools . translate import _
2011-03-24 04:29:43 +00:00
import pprint
pp = pprint . PrettyPrinter ( indent = 4 )
def create_mapping ( obj , cr , uid , res_model , open_id , sugar_id , context ) :
model_data = {
' name ' : sugar_id ,
' model ' : res_model ,
' module ' : ' sugarcrm_import ' ,
' res_id ' : open_id
}
model_obj = obj . pool . get ( ' ir.model.data ' )
model_obj . create ( cr , uid , model_data , context = context )
def find_mapped_id ( obj , cr , uid , res_model , sugar_id , context ) :
model_obj = obj . pool . get ( ' ir.model.data ' )
return model_obj . search ( cr , uid , [ ( ' model ' , ' = ' , res_model ) , ( ' module ' , ' = ' , ' sugarcrm_import ' ) , ( ' name ' , ' = ' , sugar_id ) ] , context = context )
def get_all ( sugar_obj , cr , uid , model , sugar_val , context = None ) :
models = sugar_obj . pool . get ( model )
2011-04-04 05:45:47 +00:00
model_code = sugar_val [ 0 : 2 ]
all_model_ids = models . search ( cr , uid , [ ( ' name ' , ' = ' , sugar_val ) ] ) or models . search ( cr , uid , [ ( ' code ' , ' = ' , model_code . upper ( ) ) ] )
2011-03-24 04:29:43 +00:00
output = sorted ( [ ( o . id , o . name )
for o in models . browse ( cr , uid , all_model_ids ,
context = context ) ] ,
key = itemgetter ( 1 ) )
return output
2011-03-31 14:02:39 +00:00
def get_all_states ( sugar_obj , cr , uid , sugar_val , country_id , context = None ) :
2011-04-01 05:18:58 +00:00
""" Get states or create new state """
2011-03-31 14:02:39 +00:00
state_id = False
res_country_state_obj = sugar_obj . pool . get ( ' res.country.state ' )
state = get_all ( sugar_obj ,
2011-03-24 04:29:43 +00:00
cr , uid , ' res.country.state ' , sugar_val , context = context )
2011-03-31 14:02:39 +00:00
if state :
state_id = state and state [ 0 ] [ 0 ]
else :
state_id = res_country_state_obj . create ( cr , uid , { ' name ' : sugar_val , ' code ' : sugar_val , ' country_id ' : country_id } )
return state_id
def get_all_countries ( sugar_obj , cr , uid , sugar_country_val , context = None ) :
2011-04-01 05:18:58 +00:00
""" Get Country or Create new country """
2011-03-31 14:02:39 +00:00
res_country_obj = sugar_obj . pool . get ( ' res.country ' )
country_id = False
2011-04-04 05:45:47 +00:00
country_code = sugar_country_val [ 0 : 2 ]
2011-03-31 14:02:39 +00:00
country = get_all ( sugar_obj ,
cr , uid , ' res.country ' , sugar_country_val , context = context )
if country :
country_id = country and country [ 0 ] [ 0 ]
else :
2011-04-04 05:45:47 +00:00
country_id = res_country_obj . create ( cr , uid , { ' name ' : sugar_country_val , ' code ' : country_code } )
2011-03-31 14:02:39 +00:00
return country_id
2011-03-24 04:29:43 +00:00
def import_partner_address ( sugar_obj , cr , uid , context = None ) :
if not context :
context = { }
map_partner_address = {
' id ' : ' id ' ,
' name ' : [ ' first_name ' , ' last_name ' ] ,
' phone ' : ' phone_work ' ,
' mobile ' : ' phone_mobile ' ,
' fax ' : ' phone_fax ' ,
' function ' : ' title ' ,
' street ' : ' primary_address_street ' ,
' zip ' : ' primary_address_postalcode ' ,
' city ' : ' primary_address_city ' ,
2011-03-25 12:50:15 +00:00
' country_id/.id ' : ' country_id/.id ' ,
' state_id/.id ' : ' state_id/id '
2011-03-24 04:29:43 +00:00
}
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 , ' Contacts ' )
for val in sugar_data :
2011-03-31 14:02:39 +00:00
country_id = get_all_countries ( sugar_obj , cr , uid , val . get ( ' primary_address_country ' ) , context )
state = get_all_states ( sugar_obj , cr , uid , val . get ( ' primary_address_state ' ) , country_id , context )
2011-03-25 12:50:15 +00:00
val [ ' country_id/.id ' ] = country_id
2011-03-31 14:02:39 +00:00
val [ ' state_id/.id ' ] = state
2011-03-24 04:29:43 +00:00
fields , datas = sugarcrm_fields_mapping . sugarcrm_fields_mapp ( val , map_partner_address )
2011-04-04 05:45:47 +00:00
address_obj . import_data ( cr , uid , fields , [ datas ] , mode = ' update ' , current_module = ' sugarcrm_import ' , noupdate = True , context = context )
2011-04-04 08:34:41 +00:00
return True
2011-04-01 05:18:58 +00:00
def get_users_department ( sugar_obj , cr , uid , val , context = None ) :
if not context :
context = { }
department_id = False
department_obj = sugar_obj . pool . get ( ' hr.department ' )
department_ids = department_obj . search ( cr , uid , [ ( ' name ' , ' = ' , val ) ] )
if department_ids :
department_id = department_ids [ 0 ]
elif val :
department_id = department_obj . create ( cr , uid , { ' name ' : val } )
return department_id
2011-03-24 04:29:43 +00:00
def import_users ( sugar_obj , cr , uid , context = None ) :
if not context :
context = { }
2011-03-31 14:02:39 +00:00
department_id = False
2011-03-24 04:29:43 +00:00
map_user = { ' id ' : ' id ' ,
' name ' : [ ' first_name ' , ' last_name ' ] ,
' login ' : ' user_name ' ,
' context_lang ' : ' context_lang ' ,
' password ' : ' password ' ,
' .id ' : ' .id ' ,
2011-03-30 06:43:42 +00:00
' context_department_id.id ' : ' context_department_id.id ' ,
2011-03-24 04:29:43 +00:00
}
user_obj = sugar_obj . pool . get ( ' res.users ' )
PortType , sessionid = sugar . login ( context . get ( ' username ' , ' ' ) , context . get ( ' password ' , ' ' ) , context . get ( ' url ' , ' ' ) )
sugar_data = sugar . search ( PortType , sessionid , ' Users ' )
for val in sugar_data :
user_ids = user_obj . search ( cr , uid , [ ( ' login ' , ' = ' , val . get ( ' user_name ' ) ) ] )
if user_ids :
2011-03-29 12:41:37 +00:00
val [ ' .id ' ] = str ( user_ids [ 0 ] )
2011-03-24 04:29:43 +00:00
else :
val [ ' password ' ] = ' sugarcrm ' #default password for all user
2011-04-01 05:18:58 +00:00
department_id = get_users_department ( sugar_obj , cr , uid , val . get ( ' department ' ) , context = context )
2011-03-31 14:02:39 +00:00
val [ ' context_department_id.id ' ] = department_id
2011-03-29 12:41:37 +00:00
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
2011-04-04 05:45:47 +00:00
user_obj . import_data ( cr , uid , fields , [ datas ] , mode = ' update ' , current_module = ' sugarcrm_import ' , noupdate = True , context = context )
2011-04-04 08:34:41 +00:00
return True
2011-03-24 04:29:43 +00:00
def get_lead_status ( surgar_obj , cr , uid , sugar_val , context = None ) :
if not context :
context = { }
stage_id = ' '
stage_dict = { ' status ' : #field in the sugarcrm database
{ #Mapping of sugarcrm stage : openerp opportunity stage
' New ' : ' New ' ,
' Assigned ' : ' Qualification ' ,
' In Progress ' : ' Proposition ' ,
' Recycled ' : ' Negotiation ' ,
' Dead ' : ' Lost '
} , }
stage = stage_dict [ ' status ' ] . get ( sugar_val [ ' status ' ] , ' ' )
stage_pool = surgar_obj . pool . get ( ' crm.case.stage ' )
stage_ids = stage_pool . search ( cr , uid , [ ( ' type ' , ' = ' , ' lead ' ) , ( ' name ' , ' = ' , stage ) ] )
for stage in stage_pool . browse ( cr , uid , stage_ids , context ) :
stage_id = stage . id
return stage_id
2011-03-24 13:46:24 +00:00
def get_lead_state ( surgar_obj , cr , uid , sugar_val , context = None ) :
if not context :
context = { }
2011-04-01 05:18:58 +00:00
state = False
2011-03-24 13:46:24 +00:00
state_dict = { ' status ' : #field in the sugarcrm database
{ #Mapping of sugarcrm stage : openerp opportunity stage
' New ' : ' draft ' ,
' Assigned ' : ' open ' ,
' In Progress ' : ' open ' ,
' Recycled ' : ' cancel ' ,
' Dead ' : ' done '
} , }
state = state_dict [ ' status ' ] . get ( sugar_val [ ' status ' ] , ' ' )
return state
2011-03-24 04:29:43 +00:00
def get_opportunity_status ( surgar_obj , cr , uid , sugar_val , context = None ) :
if not context :
context = { }
2011-04-01 05:18:58 +00:00
stage_id = False
2011-03-24 04:29:43 +00:00
stage_dict = { ' sales_stage ' :
{ #Mapping of sugarcrm stage : openerp opportunity stage Mapping
' Need Analysis ' : ' New ' ,
' Closed Lost ' : ' Lost ' ,
' Closed Won ' : ' Won ' ,
' Value Proposition ' : ' Proposition ' ,
' Negotiation/Review ' : ' Negotiation '
} ,
}
stage = stage_dict [ ' sales_stage ' ] . get ( sugar_val [ ' sales_stage ' ] , ' ' )
stage_pool = surgar_obj . pool . get ( ' crm.case.stage ' )
stage_ids = stage_pool . search ( cr , uid , [ ( ' type ' , ' = ' , ' opportunity ' ) , ( ' name ' , ' = ' , stage ) ] )
for stage in stage_pool . browse ( cr , uid , stage_ids , context ) :
stage_id = stage . id
return stage_id
2011-03-24 13:46:24 +00:00
def get_user_address ( sugar_obj , cr , uid , val , context = None ) :
address_obj = sugar_obj . pool . get ( ' res.partner.address ' )
map_user_address = {
' name ' : [ ' first_name ' , ' last_name ' ] ,
' city ' : ' address_city ' ,
2011-03-31 14:02:39 +00:00
' country_id ' : ' country_id ' ,
' state_id ' : ' state_id ' ,
2011-03-24 13:46:24 +00:00
' street ' : ' address_street ' ,
' zip ' : ' address_postalcode ' ,
}
address_ids = address_obj . search ( cr , uid , [ ( ' name ' , ' = ' , val . get ( ' first_name ' ) + ' ' + val . get ( ' last_name ' ) ) ] )
2011-03-31 14:02:39 +00:00
country_id = get_all_countries ( sugar_obj , cr , uid , val . get ( ' address_country ' ) , context )
state_id = get_all_states ( sugar_obj , cr , uid , val . get ( ' address_state ' ) , country_id , context )
val [ ' country_id ' ] = country_id
val [ ' state_id ' ] = state_id
2011-03-24 13:46:24 +00:00
fields , datas = sugarcrm_fields_mapping . sugarcrm_fields_mapp ( val , map_user_address )
dict_val = dict ( zip ( fields , datas ) )
if address_ids :
address_obj . write ( cr , uid , address_ids , dict_val )
else :
new_address_id = address_obj . create ( cr , uid , dict_val )
return new_address_id
2011-03-29 04:34:57 +00:00
def get_address_type ( sugar_obj , cr , uid , val , map_partner_address , type , context = None ) :
address_obj = sugar_obj . pool . get ( ' res.partner.address ' )
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
2011-03-31 14:02:39 +00:00
country_id = 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 ' ) , country_id , context )
val [ ' country_id ' ] = country_id
2011-04-01 05:18:58 +00:00
val [ ' state_id ' ] = state
2011-03-29 04:34:57 +00:00
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
2011-03-24 04:29:43 +00:00
def get_address ( sugar_obj , cr , uid , val , context = None ) :
map_partner_address = { }
address_id = [ ]
address_obj = sugar_obj . pool . get ( ' res.partner.address ' )
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
else :
map_partner_address = {
' id ' : ' id ' ,
' name ' : ' name ' ,
' partner_id/id ' : ' account_id ' ,
' phone ' : ' phone_office ' ,
' mobile ' : ' phone_mobile ' ,
' fax ' : ' phone_fax ' ,
2011-03-25 12:33:53 +00:00
' type ' : ' type ' ,
2011-03-24 04:29:43 +00:00
}
2011-03-29 04:34:57 +00:00
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 ) )
2011-03-24 04:29:43 +00:00
return address_id
def import_partners ( sugar_obj , cr , uid , context = None ) :
if not context :
context = { }
2011-03-24 13:46:24 +00:00
map_partner = {
2011-03-24 04:29:43 +00:00
' id ' : ' id ' ,
' name ' : ' name ' ,
' website ' : ' website ' ,
' user_id/id ' : ' assigned_user_id ' ,
' ref ' : ' sic_code ' ,
' comment ' : [ ' description ' , ' employees ' , ' ownership ' , ' annual_revenue ' , ' rating ' , ' industry ' , ' ticker_symbol ' ] ,
2011-03-29 04:34:57 +00:00
' customer ' : ' customer ' ,
' supplier ' : ' supplier ' ,
2011-03-24 04:29:43 +00:00
}
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 )
2011-03-29 04:34:57 +00:00
if val . get ( ' account_type ' ) in ( ' Customer ' , ' Prospect ' , ' Other ' ) :
val [ ' customer ' ] = ' 1 '
2011-03-25 12:33:53 +00:00
else :
2011-03-29 04:34:57 +00:00
val [ ' supplier ' ] = ' 1 '
2011-03-25 12:33:53 +00:00
fields , datas = sugarcrm_fields_mapping . sugarcrm_fields_mapp ( val , map_partner )
2011-04-04 05:45:47 +00:00
partner_obj . import_data ( cr , uid , fields , [ datas ] , mode = ' update ' , current_module = ' sugarcrm_import ' , noupdate = True , context = context )
2011-03-29 04:34:57 +00:00
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 ' ) ) ] )
2011-03-25 12:33:53 +00:00
if data_id :
2011-03-29 04:34:57 +00:00
address_obj . write ( cr , uid , address . id , { ' partner_id ' : data_id [ 0 ] } )
2011-03-25 12:33:53 +00:00
return True
2011-03-24 04:29:43 +00:00
2011-04-06 13:22:20 +00:00
def get_category ( sugar_obj , cr , uid , model , name , context = None ) :
categ_id = False
categ_obj = sugar_obj . pool . get ( ' crm.case.categ ' )
categ_ids = categ_obj . search ( cr , uid , [ ( ' object_id.model ' , ' = ' , model ) , ( ' name ' , ' like ' , name ) ] )
if categ_ids :
categ_id = categ_ids [ 0 ]
else :
categ_id = categ_obj . create ( cr , uid , { ' name ' : name , ' object_id.model ' : model } )
return categ_id
2011-04-06 07:32:08 +00:00
def get_alarm_id ( sugar_obj , cr , uid , val , context = None ) :
alarm_dict = { ' 60 ' : ' 1 minute before ' ,
' 300 ' : ' 5 minutes before ' ,
' 600 ' : ' 10 minutes before ' ,
' 900 ' : ' 15 minutes before ' ,
' 1800 ' : ' 30 minutes before ' ,
' 3600 ' : ' 1 hour before ' ,
}
alarm_id = False
alarm_obj = sugar_obj . pool . get ( ' res.alarm ' )
if alarm_dict . get ( val ) :
alarm_ids = alarm_obj . search ( cr , uid , [ ( ' name ' , ' like ' , alarm_dict . get ( val ) ) ] )
for alarm in alarm_obj . browse ( cr , uid , alarm_ids , context ) :
alarm_id = alarm . id
return alarm_id
def get_meeting_state ( sugar_obj , cr , uid , val , context = None ) :
if not context :
context = { }
state = False
state_dict = { ' status ' : #field in the sugarcrm database
{ #Mapping of sugarcrm stage : openerp meeting stage
' Planned ' : ' draft ' ,
' Held ' : ' open ' ,
' Not Held ' : ' draft ' ,
} , }
state = state_dict [ ' status ' ] . get ( val , ' ' )
return state
def get_task_state ( sugar_obj , cr , uid , val , context = None ) :
if not context :
context = { }
state = False
state_dict = { ' status ' : #field in the sugarcrm database
{ #Mapping of sugarcrm stage : openerp meeting stage
' Completed ' : ' done ' ,
' Not Started ' : ' draft ' ,
' In Progress ' : ' open ' ,
' Pending Input ' : ' draft ' ,
' deferred ' : ' cancel '
} , }
state = state_dict [ ' status ' ] . get ( val , ' ' )
return state
2011-04-06 13:22:20 +00:00
def get_account ( sugar_obj , cr , uid , val , context = None ) :
if not context :
context = { }
partner_id = False
partner_address_id = False
model_obj = sugar_obj . pool . get ( ' ir.model.data ' )
if val . get ( ' parent_type ' ) == ' Accounts ' :
model_ids = model_obj . search ( cr , uid , [ ( ' name ' , ' = ' , val . get ( ' parent_id ' ) ) , ( ' model ' , ' = ' , ' res.partner ' ) ] )
if model_ids :
model = model_obj . browse ( cr , uid , model_ids ) [ 0 ]
partner_id = model . res_id
if val . get ( ' parent_type ' ) == ' Contacts ' :
model_ids = model_obj . search ( cr , uid , [ ( ' name ' , ' = ' , val . get ( ' parent_id ' ) ) , ( ' model ' , ' = ' , ' res.partner.address ' ) ] )
for model in model_obj . browse ( cr , uid , model_ids ) :
partner_address_id = model . res_id
return partner_id , partner_address_id
2011-04-06 07:32:08 +00:00
def import_tasks ( sugar_obj , cr , uid , context = None ) :
if not context :
context = { }
2011-04-06 13:22:20 +00:00
partner_id = False
partner_address_id = False
2011-04-06 07:32:08 +00:00
map_task = { ' id ' : ' id ' ,
' name ' : ' name ' ,
' date ' : ' date_entered ' ,
' user_id/id ' : ' assigned_user_id ' ,
' categ_id/.id ' : ' categ_id/.id ' ,
2011-04-06 13:22:20 +00:00
' partner_id/.id ' : ' partner_id/.id ' ,
' partner_address_id/.id ' : ' partner_address_id/.id ' ,
2011-04-06 07:32:08 +00:00
' state ' : ' state '
}
meeting_obj = sugar_obj . pool . get ( ' crm.meeting ' )
2011-04-06 13:22:20 +00:00
model_obj = sugar_obj . pool . get ( ' ir.model.data ' )
2011-04-06 07:32:08 +00:00
PortType , sessionid = sugar . login ( context . get ( ' username ' , ' ' ) , context . get ( ' password ' , ' ' ) , context . get ( ' url ' , ' ' ) )
2011-04-06 13:22:20 +00:00
categ_id = get_category ( sugar_obj , cr , uid , ' crm.meeting ' , ' Tasks ' )
2011-04-06 07:32:08 +00:00
sugar_data = sugar . search ( PortType , sessionid , ' Tasks ' )
for val in sugar_data :
partner_xml_id = find_mapped_id ( sugar_obj , cr , uid , ' res.partner.address ' , val . get ( ' contact_id ' ) , context )
if not partner_xml_id :
2011-04-06 13:22:20 +00:00
raise osv . except_osv ( _ ( ' Warning ! ' ) , _ ( ' Reference Contact %s cannot be created, due to Lower Record Limit in SugarCRM Configuration. ' ) % val . get ( ' contact_name ' ) )
partner_id , partner_address_id = get_account ( sugar_obj , cr , uid , val , context )
val [ ' partner_id/.id ' ] = partner_id
val [ ' partner_address_id/.id ' ] = partner_address_id
2011-04-06 07:32:08 +00:00
val [ ' categ_id/.id ' ] = categ_id
val [ ' state ' ] = get_task_state ( sugar_obj , cr , uid , val . get ( ' status ' ) , context = None )
fields , datas = sugarcrm_fields_mapping . sugarcrm_fields_mapp ( val , map_task )
meeting_obj . import_data ( cr , uid , fields , [ datas ] , mode = ' update ' , current_module = ' sugarcrm_import ' , noupdate = True , context = context )
return True
def import_meetings ( sugar_obj , cr , uid , context = None ) :
if not context :
context = { }
2011-04-06 13:22:20 +00:00
partner_id = False
partner_address_id = False
2011-04-06 07:32:08 +00:00
map_meeting = { ' id ' : ' id ' ,
' name ' : ' name ' ,
' date ' : ' date_start ' ,
' duration ' : [ ' duration_hours ' , ' duration_minutes ' ] ,
' location ' : ' location ' ,
' alarm_id/.id ' : ' alarm_id/.id ' ,
' user_id/id ' : ' assigned_user_id ' ,
2011-04-06 13:22:20 +00:00
' partner_id/.id ' : ' partner_id/.id ' ,
' partner_address_id/.id ' : ' partner_address_id/.id ' ,
2011-04-06 07:32:08 +00:00
' state ' : ' state '
}
meeting_obj = sugar_obj . pool . get ( ' crm.meeting ' )
2011-04-06 13:22:20 +00:00
model_obj = sugar_obj . pool . get ( ' ir.model.data ' )
2011-04-06 07:32:08 +00:00
PortType , sessionid = sugar . login ( context . get ( ' username ' , ' ' ) , context . get ( ' password ' , ' ' ) , context . get ( ' url ' , ' ' ) )
sugar_data = sugar . search ( PortType , sessionid , ' Meetings ' )
for val in sugar_data :
2011-04-06 13:22:20 +00:00
partner_id , partner_address_id = get_account ( sugar_obj , cr , uid , val , context )
val [ ' partner_id/.id ' ] = partner_id
val [ ' partner_address_id/.id ' ] = partner_address_id
2011-04-06 07:32:08 +00:00
val [ ' state ' ] = get_meeting_state ( sugar_obj , cr , uid , val . get ( ' status ' ) , context )
val [ ' alarm_id/.id ' ] = get_alarm_id ( sugar_obj , cr , uid , val . get ( ' reminder_time ' ) , context )
fields , datas = sugarcrm_fields_mapping . sugarcrm_fields_mapp ( val , map_meeting )
meeting_obj . import_data ( cr , uid , fields , [ datas ] , mode = ' update ' , current_module = ' sugarcrm_import ' , noupdate = True , context = context )
return True
2011-04-06 13:22:20 +00:00
def get_calls_state ( sugar_obj , cr , uid , val , context = None ) :
if not context :
context = { }
state = False
state_dict = { ' status ' : #field in the sugarcrm database
{ #Mapping of sugarcrm stage : openerp calls stage
' Planned ' : ' open ' ,
' Held ' : ' done ' ,
' Not Held ' : ' pending ' ,
} , }
state = state_dict [ ' status ' ] . get ( val , ' ' )
return state
2011-04-06 07:32:08 +00:00
def import_calls ( sugar_obj , cr , uid , context = None ) :
if not context :
context = { }
2011-04-06 13:22:20 +00:00
partner_id = False
partner_address_id = False
2011-04-06 07:32:08 +00:00
map_calls = { ' id ' : ' id ' ,
' name ' : ' name ' ,
' date ' : ' date_start ' ,
' duration ' : [ ' duration_hours ' , ' duration_minutes ' ] ,
' user_id/id ' : ' assigned_user_id ' ,
2011-04-06 13:22:20 +00:00
' partner_id/.id ' : ' partner_id/.id ' ,
' partner_address_id/.id ' : ' partner_address_id/.id ' ,
2011-04-06 07:32:08 +00:00
' categ_id/.id ' : ' categ_id/.id ' ,
' state ' : ' state ' ,
}
phonecall_obj = sugar_obj . pool . get ( ' crm.phonecall ' )
2011-04-06 13:22:20 +00:00
partner_address_obj = sugar_obj . pool . get ( ' res.partner.address ' )
model_obj = sugar_obj . pool . get ( ' ir.model.data ' )
2011-04-06 07:32:08 +00:00
PortType , sessionid = sugar . login ( context . get ( ' username ' , ' ' ) , context . get ( ' password ' , ' ' ) , context . get ( ' url ' , ' ' ) )
sugar_data = sugar . search ( PortType , sessionid , ' Calls ' )
for val in sugar_data :
2011-04-06 13:22:20 +00:00
categ_id = get_category ( sugar_obj , cr , uid , ' crm.phonecall ' , val . get ( ' direction ' ) )
val [ ' categ_id/.id ' ] = categ_id
partner_id , partner_address_id = get_account ( sugar_obj , cr , uid , val , context )
val [ ' partner_id/.id ' ] = partner_id
val [ ' partner_address_id/.id ' ] = partner_address_id
val [ ' state ' ] = get_calls_state ( sugar_obj , cr , uid , val . get ( ' status ' ) , context )
2011-04-06 07:32:08 +00:00
fields , datas = sugarcrm_fields_mapping . sugarcrm_fields_mapp ( val , map_calls )
phonecall_obj . import_data ( cr , uid , fields , [ datas ] , mode = ' update ' , current_module = ' sugarcrm_import ' , noupdate = True , context = context )
2011-04-06 13:22:20 +00:00
return True
2011-03-24 13:46:24 +00:00
def import_resources ( sugar_obj , cr , uid , context = None ) :
if not context :
context = { }
2011-04-01 05:18:58 +00:00
map_resource = { ' id ' : ' user_hash ' ,
2011-03-24 13:46:24 +00:00
' name ' : [ ' first_name ' , ' last_name ' ] ,
}
resource_obj = sugar_obj . pool . get ( ' resource.resource ' )
PortType , sessionid = sugar . login ( context . get ( ' username ' , ' ' ) , context . get ( ' password ' , ' ' ) , context . get ( ' url ' , ' ' ) )
sugar_data = sugar . search ( PortType , sessionid , ' Employees ' )
for val in sugar_data :
fields , datas = sugarcrm_fields_mapping . sugarcrm_fields_mapp ( val , map_resource )
2011-04-04 05:45:47 +00:00
resource_obj . import_data ( cr , uid , fields , [ datas ] , mode = ' update ' , current_module = ' sugarcrm_import ' , noupdate = True , context = context )
2011-04-04 08:34:41 +00:00
return True
2011-03-24 13:46:24 +00:00
def import_employees ( sugar_obj , cr , uid , context = None ) :
if not context :
context = { }
2011-03-31 14:02:39 +00:00
job_id = False
2011-04-01 05:18:58 +00:00
map_employee = { ' id ' : ' user_hash ' ,
2011-03-29 11:53:57 +00:00
' resource_id/.id ' : ' resource_id/.id ' ,
2011-03-24 13:46:24 +00:00
' name ' : [ ' first_name ' , ' last_name ' ] ,
' work_phone ' : ' phone_work ' ,
' mobile_phone ' : ' phone_mobile ' ,
' user_id/name ' : [ ' first_name ' , ' last_name ' ] ,
' address_home_id/.id ' : ' address_home_id/.id ' ,
' notes ' : ' description ' ,
#TODO: Creation of Employee create problem.
# 'coach_id/id': 'reports_to_id',
2011-03-24 14:16:41 +00:00
' job_id/.id ' : ' job_id/.id '
2011-03-24 13:46:24 +00:00
}
employee_obj = sugar_obj . pool . get ( ' hr.employee ' )
2011-03-24 14:16:41 +00:00
job_obj = sugar_obj . pool . get ( ' hr.job ' )
2011-03-24 13:46:24 +00:00
PortType , sessionid = sugar . login ( context . get ( ' username ' , ' ' ) , context . get ( ' password ' , ' ' ) , context . get ( ' url ' , ' ' ) )
sugar_data = sugar . search ( PortType , sessionid , ' Employees ' )
for val in sugar_data :
address_id = get_user_address ( sugar_obj , cr , uid , val , context )
val [ ' address_home_id/.id ' ] = address_id
2011-04-01 05:18:58 +00:00
model_ids = find_mapped_id ( sugar_obj , cr , uid , ' resource.resource ' , val . get ( ' user_hash ' ) + ' _resource_resource ' , context )
2011-03-25 07:15:57 +00:00
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
2011-03-31 14:02:39 +00:00
job_ids = job_obj . search ( cr , uid , [ ( ' name ' , ' = ' , val . get ( ' title ' ) ) ] )
if job_ids :
job_id = job_ids [ 0 ]
else :
job_id = job_obj . create ( cr , uid , { ' name ' : val . get ( ' title ' ) } )
val [ ' job_id/.id ' ] = job_id
2011-03-24 13:46:24 +00:00
fields , datas = sugarcrm_fields_mapping . sugarcrm_fields_mapp ( val , map_employee )
2011-04-04 05:45:47 +00:00
employee_obj . import_data ( cr , uid , fields , [ datas ] , mode = ' update ' , current_module = ' sugarcrm_import ' , noupdate = True , context = context )
2011-04-04 08:34:41 +00:00
return True
2011-03-24 13:46:24 +00:00
2011-03-30 06:43:42 +00:00
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
2011-04-06 13:22:20 +00:00
def import_emails ( sugar_obj , cr , uid , context = None ) :
map_emails = { ' id ' : ' id ' ,
' name ' : ' name ' ,
' date ' : ' date_sent ' ,
' email_from ' : ' from_addr_name ' ,
' email_to ' : ' reply_to_addr ' ,
' email_cc ' : ' cc_addrs_names ' ,
' email_bcc ' : ' bcc_addrs_names ' ,
' message_id ' : ' message_id ' ,
' user_id/id ' : ' assigned_user_id ' ,
' description ' : ' description_html ' ,
' res_id ' : ' res_id ' ,
' model ' : ' model ' ,
}
mailgate_obj = sugar_obj . pool . get ( ' mailgate.message ' )
model_obj = sugar_obj . pool . get ( ' ir.model.data ' )
PortType , sessionid = sugar . login ( context . get ( ' username ' , ' ' ) , context . get ( ' password ' , ' ' ) , context . get ( ' url ' , ' ' ) )
sugar_data = sugar . search ( PortType , sessionid , ' Emails ' )
for val in sugar_data :
model_ids = model_obj . search ( cr , uid , [ ( ' name ' , ' like ' , val . get ( ' parent_id ' ) ) ] )
for model in model_obj . browse ( cr , uid , model_ids ) :
val [ ' res_id ' ] = model . res_id
val [ ' model ' ] = model . model
fields , datas = sugarcrm_fields_mapping . sugarcrm_fields_mapp ( val , map_emails )
mailgate_obj . import_data ( cr , uid , fields , [ datas ] , mode = ' update ' , current_module = ' sugarcrm_import ' , noupdate = True , context = context )
return True
2011-03-24 04:29:43 +00:00
def import_leads ( sugar_obj , cr , uid , context = None ) :
if not context :
context = { }
2011-03-30 06:43:42 +00:00
title_id = False
2011-03-24 04:29:43 +00:00
map_lead = {
' id ' : ' id ' ,
' name ' : [ ' first_name ' , ' last_name ' ] ,
' contact_name ' : [ ' first_name ' , ' last_name ' ] ,
2011-03-29 11:53:57 +00:00
' description ' : [ ' description ' , ' refered_by ' , ' lead_source ' , ' lead_source_description ' , ' website ' ] ,
2011-03-24 13:46:24 +00:00
' partner_name ' : ' account_name ' ,
2011-03-24 04:29:43 +00:00
' email_from ' : ' email1 ' ,
' phone ' : ' phone_work ' ,
' mobile ' : ' phone_mobile ' ,
2011-03-30 06:43:42 +00:00
' title.id ' : ' title.id ' ,
2011-03-24 04:29:43 +00:00
' function ' : ' title ' ,
' street ' : ' primary_address_street ' ,
2011-03-29 11:53:57 +00:00
' street2 ' : ' alt_address_street ' ,
2011-03-24 04:29:43 +00:00
' zip ' : ' primary_address_postalcode ' ,
' city ' : ' primary_address_city ' ,
' user_id/id ' : ' assigned_user_id ' ,
' stage_id.id ' : ' stage_id.id ' ,
' type ' : ' type ' ,
2011-03-24 13:46:24 +00:00
' state ' : ' state ' ,
2011-03-24 04:29:43 +00:00
}
lead_obj = sugar_obj . pool . get ( ' crm.lead ' )
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 :
2011-04-04 05:45:47 +00:00
if val . get ( ' opportunity_id ' ) :
continue
2011-03-30 06:43:42 +00:00
title_id = get_contact_title ( sugar_obj , cr , uid , val . get ( ' salutation ' ) , ' contact ' , context )
val [ ' title.id ' ] = title_id
2011-03-24 04:29:43 +00:00
val [ ' type ' ] = ' lead '
stage_id = get_lead_status ( sugar_obj , cr , uid , val , context )
val [ ' stage_id.id ' ] = stage_id
2011-03-24 13:46:24 +00:00
val [ ' state ' ] = get_lead_state ( sugar_obj , cr , uid , val , context )
2011-03-24 04:29:43 +00:00
fields , datas = sugarcrm_fields_mapping . sugarcrm_fields_mapp ( val , map_lead )
2011-04-04 05:45:47 +00:00
lead_obj . import_data ( cr , uid , fields , [ datas ] , mode = ' update ' , current_module = ' sugarcrm_import ' , noupdate = True , context = context )
2011-04-04 08:34:41 +00:00
return True
2011-03-31 14:02:39 +00:00
def get_opportunity_contact ( sugar_obj , cr , uid , PortType , sessionid , val , partner_xml_id , context = None ) :
if not context :
context = { }
partner_contact_name = False
model_obj = sugar_obj . pool . get ( ' ir.model.data ' )
partner_address_obj = sugar_obj . pool . get ( ' res.partner.address ' )
sugar_opportunity_contact = sugar . relation_search ( PortType , sessionid , ' Opportunities ' , module_id = val . get ( ' id ' ) , related_module = ' Contacts ' , query = None , deleted = None )
for contact in sugar_opportunity_contact :
model_ids = find_mapped_id ( sugar_obj , cr , uid , ' res.partner.address ' , contact , context )
if model_ids :
model_id = model_obj . browse ( cr , uid , model_ids ) [ 0 ] . res_id
address_id = partner_address_obj . browse ( cr , uid , model_id )
partner_address_obj . write ( cr , uid , [ address_id . id ] , { ' partner_id ' : partner_xml_id [ 0 ] } )
partner_contact_name = address_id . name
else :
partner_contact_name = val . get ( ' account_name ' )
return partner_contact_name
2011-03-24 04:29:43 +00:00
def import_opportunities ( sugar_obj , cr , uid , context = None ) :
if not context :
context = { }
2011-03-29 11:53:57 +00:00
categ_id = False
2011-03-31 14:02:39 +00:00
partner_contact_name = False
2011-03-24 04:29:43 +00:00
map_opportunity = { ' id ' : ' id ' ,
' name ' : ' name ' ,
' probability ' : ' probability ' ,
2011-03-24 13:46:24 +00:00
' partner_id/name ' : ' account_name ' ,
' title_action ' : ' next_step ' ,
2011-03-31 14:02:39 +00:00
' partner_address_id/name ' : ' partner_address_id/name ' ,
2011-03-29 11:53:57 +00:00
' planned_revenue ' : ' amount ' ,
2011-03-24 04:29:43 +00:00
' date_deadline ' : ' date_closed ' ,
' user_id/id ' : ' assigned_user_id ' ,
' stage_id.id ' : ' stage_id.id ' ,
' type ' : ' type ' ,
2011-03-30 06:43:42 +00:00
' categ_id.id ' : ' categ_id.id '
2011-03-24 04:29:43 +00:00
}
2011-03-31 14:02:39 +00:00
2011-03-24 04:29:43 +00:00
lead_obj = sugar_obj . pool . get ( ' crm.lead ' )
2011-03-29 06:45:41 +00:00
partner_obj = sugar_obj . pool . get ( ' res.partner ' )
2011-03-29 11:53:57 +00:00
categ_obj = sugar_obj . pool . get ( ' crm.case.categ ' )
2011-03-24 04:29:43 +00:00
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 :
2011-03-29 06:45:41 +00:00
partner_xml_id = partner_obj . search ( cr , uid , [ ( ' name ' , ' like ' , val . get ( ' account_name ' ) ) ] )
2011-03-29 04:34:57 +00:00
if not partner_xml_id :
2011-04-01 05:34:11 +00:00
raise osv . except_osv ( _ ( ' Warning ! ' ) , _ ( ' Reference Partner %s cannot be created, due to Lower Record Limit in SugarCRM Configuration. ' ) % val . get ( ' account_name ' ) )
2011-04-01 05:18:58 +00:00
partner_contact_name = get_opportunity_contact ( sugar_obj , cr , uid , PortType , sessionid , val , partner_xml_id , context )
val [ ' partner_address_id/name ' ] = partner_contact_name
2011-03-29 11:53:57 +00:00
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 :
2011-03-31 14:02:39 +00:00
categ_id = categ_obj . create ( cr , uid , { ' name ' : val . get ( ' opportunity_type ' ) , ' object_id.model ' : ' crm.lead ' } )
2011-03-30 06:43:42 +00:00
val [ ' categ_id.id ' ] = categ_id
2011-03-24 04:29:43 +00:00
val [ ' type ' ] = ' opportunity '
stage_id = get_opportunity_status ( sugar_obj , cr , uid , val , context )
val [ ' stage_id.id ' ] = stage_id
fields , datas = sugarcrm_fields_mapping . sugarcrm_fields_mapp ( val , map_opportunity )
2011-04-04 05:45:47 +00:00
lead_obj . import_data ( cr , uid , fields , [ datas ] , mode = ' update ' , current_module = ' sugarcrm_import ' , noupdate = True , context = context )
2011-04-04 08:34:41 +00:00
return True
2011-03-24 04:29:43 +00:00
MAP_FIELDS = { ' Opportunities ' : #Object Mapping name
2011-03-24 13:46:24 +00:00
{ ' dependencies ' : [ ' Users ' , ' Accounts ' ] , #Object to import before this table
2011-03-24 04:29:43 +00:00
' process ' : import_opportunities ,
} ,
' Leads ' :
2011-03-24 13:46:24 +00:00
{ ' dependencies ' : [ ' Users ' , ' Accounts ' , ' Contacts ' ] , #Object to import before this table
2011-03-24 04:29:43 +00:00
' process ' : import_leads ,
} ,
' Contacts ' :
{ ' dependencies ' : [ ' Users ' ] , #Object to import before this table
' process ' : import_partner_address ,
} ,
' Accounts ' :
{ ' dependencies ' : [ ' Users ' ] , #Object to import before this table
' process ' : import_partners ,
} ,
' Users ' :
{ ' dependencies ' : [ ] ,
' process ' : import_users ,
} ,
2011-04-06 07:32:08 +00:00
' Meetings ' :
{ ' dependencies ' : [ ' Users ' , ' Tasks ' ] ,
' process ' : import_meetings ,
} ,
' Tasks ' :
{ ' dependencies ' : [ ' Users ' , ' Accounts ' , ' Contacts ' ] ,
' process ' : import_tasks ,
} ,
' Calls ' :
2011-04-06 13:22:20 +00:00
{ ' dependencies ' : [ ' Users ' , ' Accounts ' , ' Contacts ' ] ,
2011-04-06 07:32:08 +00:00
' process ' : import_calls ,
} ,
2011-03-24 13:46:24 +00:00
' Employees ' :
{ ' dependencies ' : [ ' Resources ' ] ,
' process ' : import_employees ,
2011-04-06 13:22:20 +00:00
} ,
' Emails ' :
{ ' dependencies ' : [ ' Users ' ] ,
' process ' : import_emails ,
2011-03-24 13:46:24 +00:00
} ,
2011-04-06 13:22:20 +00:00
2011-03-24 13:46:24 +00:00
' Resources ' :
{ ' dependencies ' : [ ' Users ' ] ,
' process ' : import_resources ,
} ,
2011-03-24 04:29:43 +00:00
}
class import_sugarcrm ( osv . osv ) :
""" Import SugarCRM DATA """
2011-03-29 04:34:57 +00:00
2011-03-24 04:29:43 +00:00
_name = " import.sugarcrm "
_description = __doc__
_columns = {
2011-04-04 05:45:47 +00:00
' lead ' : fields . boolean ( ' Leads ' , help = " If Leads are checked, SugarCRM Leads data imported in openERP crm-Lead form " ) ,
' opportunity ' : fields . boolean ( ' Opportunities ' , help = " If Opportunities are checked, SugarCRM opportunities data imported in openERP crm-Opportunity form " ) ,
' user ' : fields . boolean ( ' User ' , help = " If Users are checked, SugarCRM Users data imported in openERP Users form " ) ,
' contact ' : fields . boolean ( ' Contacts ' , help = " If Contacts are checked, SugarCRM Contacts data imported in openERP partner address form " ) ,
' account ' : fields . boolean ( ' Accounts ' , help = " If Accounts are checked, SugarCRM Accounts data imported in openERP partners form " ) ,
' employee ' : fields . boolean ( ' Employee ' , help = " If Employees is checked, SugarCRM Employees data imported in openERP employees form " ) ,
2011-04-06 07:32:08 +00:00
' meeting ' : fields . boolean ( ' Meetings ' , help = " If Meetings is checked, SugarCRM Meetings data imported in openERP meetings form " ) ,
' call ' : fields . boolean ( ' Calls ' , help = " If Calls is checked, SugarCRM Calls data imported in openERP phonecalls form " ) ,
2011-04-06 13:22:20 +00:00
' email ' : fields . boolean ( ' Emails ' , help = " If Emails is checked, SugarCRM Emails data imported in openERP Emails form " ) ,
2011-03-24 04:29:43 +00:00
' username ' : fields . char ( ' User Name ' , size = 64 ) ,
' password ' : fields . char ( ' Password ' , size = 24 ) ,
}
_defaults = {
' lead ' : True ,
' opportunity ' : True ,
' user ' : True ,
' contact ' : True ,
2011-03-24 13:46:24 +00:00
' account ' : True ,
2011-04-06 07:32:08 +00:00
' employee ' : True ,
' meeting ' : True ,
2011-04-06 13:22:20 +00:00
' call ' : True ,
' email ' : True ,
2011-04-06 07:32:08 +00:00
2011-03-24 04:29:43 +00:00
}
def get_key ( self , cr , uid , ids , context = None ) :
""" Select Key as For which Module data we want import data. """
if not context :
context = { }
key_list = [ ]
for current in self . browse ( cr , uid , ids , context ) :
if current . lead :
key_list . append ( ' Leads ' )
if current . opportunity :
key_list . append ( ' Opportunities ' )
if current . user :
key_list . append ( ' Users ' )
if current . contact :
key_list . append ( ' Contacts ' )
if current . account :
2011-03-24 13:46:24 +00:00
key_list . append ( ' Accounts ' )
if current . employee :
2011-04-06 07:32:08 +00:00
key_list . append ( ' Employees ' )
if current . meeting :
key_list . append ( ' Meetings ' )
if current . call :
2011-04-06 13:22:20 +00:00
key_list . append ( ' Calls ' )
if current . email :
key_list . append ( ' Emails ' )
2011-03-24 04:29:43 +00:00
return key_list
def import_all ( self , cr , uid , ids , context = None ) :
""" Import all sugarcrm data into openerp module """
if not context :
context = { }
keys = self . get_key ( cr , uid , ids , context )
imported = set ( ) #to invoid importing 2 times the sames modules
for key in keys :
if not key in imported :
self . resolve_dependencies ( cr , uid , MAP_FIELDS , MAP_FIELDS [ key ] [ ' dependencies ' ] , imported , context = context )
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 ' ] )
return {
' view_type ' : ' form ' ,
' view_mode ' : ' form ' ,
' res_model ' : ' import.message ' ,
' views ' : [ ( resource_id , ' form ' ) ] ,
' type ' : ' ir.actions.act_window ' ,
' target ' : ' new ' ,
}
def resolve_dependencies ( self , cr , uid , dict , dep , imported , context = None ) :
for dependency in dep :
if not dependency in imported :
self . resolve_dependencies ( cr , uid , dict , dict [ dependency ] [ ' dependencies ' ] , imported , context = context )
dict [ dependency ] [ ' process ' ] ( self , cr , uid , context )
imported . add ( dependency )
2011-04-04 08:34:41 +00:00
return True
2011-03-24 04:29:43 +00:00
import_sugarcrm ( )