diff --git a/addons/sugarcrm_syncro/__openerp__.py b/addons/sugarcrm_syncro/__openerp__.py index 58d9e846bf5..9e7a7435f87 100644 --- a/addons/sugarcrm_syncro/__openerp__.py +++ b/addons/sugarcrm_syncro/__openerp__.py @@ -26,7 +26,7 @@ 'description': """This Module Import SugarCRM "Leads", "Opportunity", "Accounts" and "contacts" Data into OpenERP Module.""", 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', - 'depends': [], + 'depends': ['crm'], 'init_xml': [], 'update_xml': ["wizard/sugarcrm_login_view.xml", "wizard/import_message_view.xml", diff --git a/addons/sugarcrm_syncro/import_sugarcrm.py b/addons/sugarcrm_syncro/import_sugarcrm.py index 9fd3977b4eb..5eca4174d20 100644 --- a/addons/sugarcrm_syncro/import_sugarcrm.py +++ b/addons/sugarcrm_syncro/import_sugarcrm.py @@ -29,17 +29,19 @@ class import_sugarcrm(osv.osv): _name = "import.sugarcrm" _description = __doc__ _columns = { - 'mod_name':fields.selection([ - ('lead','Leads'), - ('opportunity','Opportunities'), - ('accounts','Accounts'), - ('contact','Contacts'), - ],'Module Name', help="Module Name is used to specify which Module data want to Import"), + 'lead': fields.boolean('Leads', help="If Leads is checked, SugarCRM Leads data imported in openerp crm-Lead form"), + 'opportunity': fields.boolean('Opportunities', help="If Leads is checked, SugarCRM Leads data imported in openerp crm-Opportunity form"), 'username': fields.char('User Name', size=64), 'password': fields.char('Password', size=24), } + _defaults = { + 'lead': lambda *a: True, + 'opportunity': lambda *a: True, + } def _get_all(self, cr, uid, model, sugar_val, context=None): + if not context: + context = {} models = self.pool.get(model) all_model_ids = models.search(cr, uid, [('name', '=', sugar_val)]) output = [(False, '')] @@ -50,35 +52,66 @@ class import_sugarcrm(osv.osv): return output def _get_all_states(self, cr, uid, sugar_val, context=None): + if not context: + context = {} return self._get_all( cr, uid, 'res.country.state', sugar_val, context=context) def _get_all_countries(self, cr, uid, sugar_val, context=None): + if not context: + context = {} return self._get_all( cr, uid, 'res.country', sugar_val, context=context) - def _create_lead(self, cr, uid, sugar_val, country, state, context=None): + def _get_lead_status(self, cr, uid, sugar_val, context=None): + if not context: + context = {} + sugar_stage = '' + if sugar_val.get('status','') == 'New': + sugar_stage = 'New' + elif sugar_val.get('status','') == 'Assigned': + sugar_stage = 'Qualification' + elif sugar_val.get('status','') == 'In Progress': + sugar_stage = 'Proposition' + elif sugar_val.get('status','') == 'Recycled': + sugar_stage = 'Negotiation' + elif sugar_val.get('status','') == 'Dead': + sugar_stage = 'Lost' + else: + sugar_stage = '' + return sugar_stage + + def _get_opportunity_status(self, cr, uid, sugar_val, context=None): + if not context: + context = {} + sugar_stage = '' + if sugar_val.get('sales_stage','') == 'Need Analysis': + sugar_stage = 'New' + elif sugar_val.get('sales_stage','') == 'Closed Lost': + sugar_stage = 'Lost' + elif sugar_val.get('sales_stage','') == 'Closed Won': + sugar_stage = 'Won' + elif sugar_val.get('sales_stage','') == 'Value Proposition': + sugar_stage = 'Proposition' + elif sugar_val.get('sales_stage','') == 'Negotiation/Review': + sugar_stage = 'Negotiation' + else: + sugar_stage = '' + return sugar_stage + + def create_lead(self, cr, uid, sugar_val, country, state, context=None): + if not context: + context = {} + lead_pool = self.pool.get("crm.lead") - stage_id = '' + stage = self._get_lead_status(cr, uid, sugar_val, context=None) stage_pool = self.pool.get('crm.case.stage') - if sugar_val.get('status','') == 'New': - sugar_stage = 'New' - elif sugar_val.get('status','') == 'Assigned': - sugar_stage = 'Qualification' - elif sugar_val.get('status','') == 'In Progress': - sugar_stage = 'Proposition' - elif sugar_val.get('status','') == 'Recycled': - sugar_stage = 'Negotiation' - elif sugar_val.get('status','') == 'Dead': - sugar_stage = 'Lost' - else: - sugar_stage = '' - stage_ids = stage_pool.search(cr, uid, [("type", '=', 'lead'), ('name', '=', sugar_stage)]) + + stage_ids = stage_pool.search(cr, uid, [("type", '=', 'lead'), ('name', '=', stage)]) for stage in stage_pool.browse(cr, uid, stage_ids): stage_id = stage.id - vals = {'name': sugar_val.get('first_name','')+' '+ sugar_val.get('last_name',''), 'contact_name': sugar_val.get('first_name','')+' '+ sugar_val.get('last_name',''), 'user_id':sugar_val.get('created_by',''), @@ -99,24 +132,15 @@ class import_sugarcrm(osv.osv): new_lead_id = lead_pool.create(cr, uid, vals) return new_lead_id - def _create_opportunity(self, cr, uid, sugar_val, country, state, context=None): - + def create_opportunity(self, cr, uid, sugar_val, country, state, context=None): + if not context: + context = {} lead_pool = self.pool.get("crm.lead") stage_id = '' stage_pool = self.pool.get('crm.case.stage') - if sugar_val.get('sales_stage','') == 'Need Analysis': - sugar_stage = 'New' - elif sugar_val.get('sales_stage','') == 'Closed Lost': - sugar_stage = 'Lost' - elif sugar_val.get('sales_stage','') == 'Closed Won': - sugar_stage = 'Won' - elif sugar_val.get('sales_stage','') == 'Value Proposition': - sugar_stage = 'Proposition' - elif sugar_val.get('sales_stage','') == 'Negotiation/Review': - sugar_stage = 'Negotiation' - else: - sugar_stage = '' - stage_ids = stage_pool.search(cr, uid, [("type", '=', 'opportunity'), ('name', '=', sugar_stage)]) + stage = self._get_opportunity_status(cr, uid, sugar_val, context) + + stage_ids = stage_pool.search(cr, uid, [("type", '=', 'opportunity'), ('name', '=', stage)]) for stage in stage_pool.browse(cr, uid, stage_ids): stage_id = stage.id vals = {'name': sugar_val.get('name',''), @@ -131,70 +155,70 @@ class import_sugarcrm(osv.osv): new_opportunity_id = lead_pool.create(cr, uid, vals) return new_opportunity_id - def _create_contact(self, cr, uid, sugar_val, country, state, context=None): - addr_pool = self.pool.get("res.partner.address") - partner_pool = self.pool.get("res.partner") + def _get_sugar_module_name(self, cr, uid, ids, context=None): + + if not context: + context = {} - vals = {'name': sugar_val.get('first_name','')+' '+ sugar_val.get('last_name',''), - 'partner_id': sugar_val.get('account_id'), - } - new_partner_id = partner_pool.create(cr, uid, vals) - addr_vals = {'partner_id': new_partner_id, - 'name': sugar_val.get('first_name','')+' '+ sugar_val.get('last_name',''), - 'function':sugar_val.get('title',''), - 'phone': sugar_val.get('phone_home'), - 'mobile': sugar_val.get('phone_mobile'), - 'fax': sugar_val.get('phone_fax'), - 'street': sugar_val.get('primary_address_street',''), - 'zip': sugar_val.get('primary_address_postalcode',''), - 'city':sugar_val.get('primary_address_city',''), - 'country_id': country and country[0][0] or False, - 'state_id': state and state[0][0] or False, - 'email': sugar_val.get('email1'), - } - addr_pool.create(cr, uid, addr_vals) - return new_partner_id + sugar_name = [] + for current in self.read(cr, uid, ids): + if current.get('lead'): + sugar_name.append('Leads') + if current.get('opportunity'): + sugar_name.append('Opportunities') + + return sugar_name + + def _get_module_name(self, cr, uid, ids, context=None): + + if not context: + context = {} + module_name = [] + + for current in self.read(cr, uid, ids, ['lead', 'opportunity']): + if not current.get('lead') and not current.get('opportunity'): + raise osv.except_osv(_('Error !'), _('Please Select Module')) + + if current.get('lead'): + module_name.append('crm') + if current.get('opportunity'): + module_name.append('crm') + + ids = self.pool.get("ir.module.module").search(cr, uid, [('name', 'in', module_name),('state', '=', 'installed')]) + if not ids: + for module in module_name: + raise osv.except_osv(_('Error !'), _('Please Install %s Module') % ((module))) + + def get_create_method(self, cr, uid, sugar_name, sugar_val, country, state, context=None): + if not context: + context = {} + + if sugar_name == "Leads": + self.create_lead(cr, uid, sugar_val, country, state, context) + + elif sugar_name == "Opportunities": + self.create_opportunity(cr, uid, sugar_val, country, state,context) + return {} + def import_data(self, cr, uid, ids,context=None): if not context: context={} - for current in self.browse(cr, uid, ids): - if current.mod_name == 'lead' or current.mod_name == 'opportunity': - module_name = 'crm' - - elif current.mod_name == "accounts": - module_name = 'account' - else: - module_name = 'base' - - ids = self.pool.get("ir.module.module").search(cr, uid, [("name", '=', - module_name), ('state', '=', 'installed')]) - if not ids: - raise osv.except_osv(_('Error !'), _('Please Install %s Module') % (module_name)) - - if current.mod_name == 'lead': - sugar_name = "Leads" - elif current.mod_name == 'opportunity': - sugar_name="Opportunities" - elif current.mod_name == 'accounts': - sugar_name="Accounts" - elif current.mod_name == 'contact': - sugar_name="Contacts" + sugar_val = [] + + self._get_module_name(cr, uid, ids, context) + sugar_module = self._get_sugar_module_name(cr, uid, ids, context=None) + PortType,sessionid = sugar.login(context.get('username',''), context.get('password','')) - sugar_data = sugar.search(PortType,sessionid,sugar_name) - if sugar_data: - for sugar_val in sugar_data: - country = self._get_all_countries(cr, uid, sugar_val.get('primary_address_country'), context) - state = self._get_all_states(cr, uid, sugar_val.get('primary_address_state'), context) - if sugar_name == "Leads": - self._create_lead(cr, uid, sugar_val, country, state, context) - - elif sugar_name == "Opportunities": - self._create_opportunity(cr, uid, sugar_val, country, state,context) - - elif sugar_name == "Contacts": - self._create_contact(cr, uid, sugar_val, country, state, context) + for sugar_name in sugar_module: + sugar_data = sugar.search(PortType,sessionid,sugar_name) + + for val in sugar_data: + country = self._get_all_countries(cr, uid, val.get('primary_address_country'), context) + state = self._get_all_states(cr, uid, val.get('primary_address_state'), context) + self.get_create_method(cr, uid, sugar_name, val, country, state, context) + obj_model = self.pool.get('ir.model.data') model_data_ids = obj_model.search(cr,uid,[('model','=','ir.ui.view'),('name','=','import.message.form')]) diff --git a/addons/sugarcrm_syncro/import_sugarcrm_view.xml b/addons/sugarcrm_syncro/import_sugarcrm_view.xml index a716e6dfc2b..96c2043a9cf 100644 --- a/addons/sugarcrm_syncro/import_sugarcrm_view.xml +++ b/addons/sugarcrm_syncro/import_sugarcrm_view.xml @@ -11,7 +11,8 @@