[FIX] adapt sugarcrm-import with new mail system and new stage structure + Improve logging

bzr revid: tfr@openerp.com-20111024094812-jts3o1re1o738fjw
This commit is contained in:
tfr@openerp.com 2011-10-24 11:48:12 +02:00
parent 62c52bf0c2
commit 3fd701e82a
3 changed files with 39 additions and 30 deletions

View File

@ -60,7 +60,7 @@ class import_framework(Thread):
self.context = context or {}
self.email = email_to_notify
self.table_list = []
self.logger = logging.getLogger('import_framework')
self.logger = logging.getLogger(module_name)
self.initialize()
"""
@ -165,6 +165,7 @@ class import_framework(Thread):
data_i is a map external field_name => value
and each data_i have a external id => in data_id['id']
"""
self.logger.info(' Importing %s into %s' % (table, model))
if not datas:
return (0, 'No data found')
mapping['id'] = 'id_new'
@ -187,8 +188,7 @@ class import_framework(Thread):
model_obj = self.obj.pool.get(model)
if not model_obj:
raise ValueError(_("%s is not a valid model name") % model)
self.logger.debug(_("fields imported : "))
self.logger.debug(fields)
self.logger.debug(_(" fields imported : ") + str(fields))
(p, r, warning, s) = model_obj.import_data(self.cr, self.uid, fields, res, mode='update', current_module=self.module_name, noupdate=True, context=self.context)
for (field, field_name) in self_dependencies:
self._import_self_dependencies(model_obj, field, datas)
@ -330,7 +330,6 @@ class import_framework(Thread):
xml_ref = self.mapped_id_if_exist(model, domain_search, table, name)
fields.append('id')
data.append(xml_id)
obj.import_data(self.cr, self.uid, fields, [data], mode='update', current_module=self.module_name, noupdate=True, context=self.context)
return xml_ref or xml_id
@ -385,7 +384,6 @@ class import_framework(Thread):
res = self._resolve_dependencies(self.get_mapping()[table].get('dependencies', []), imported)
result.extend(res)
if to_import:
self.logger.debug(_("import : ") + table )
(position, warning) = self._import_table(table)
result.append((table, position, warning))
imported.add(table)
@ -396,12 +394,13 @@ class import_framework(Thread):
traceback.print_exc(file=sh)
error = sh.getvalue()
print error
finally:
self.cr.close()
self.date_ended = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
self._send_notification_email(result, error)
self.cr.close()
def _resolve_dependencies(self, dep, imported):
"""
import dependencies recursively
@ -414,7 +413,6 @@ class import_framework(Thread):
res = self._resolve_dependencies(self.get_mapping()[dependency].get('dependencies', []), imported)
result.extend(res)
if to_import:
self.logger.debug("import dependency : " + dependency)
r = self._import_table(dependency)
(position, warning) = r
result.append((dependency, position, warning))
@ -422,15 +420,16 @@ class import_framework(Thread):
return result
def _send_notification_email(self, result, error):
if not self.email or not self.email[0]:
if not self.email:
return False
tools.email_send(
'import@module.openerp',
self.email,
self.get_email_subject(result, error),
self.get_email_body(result, error),
)
email_obj = self.obj.pool.get('mail.message')
email_id = email_obj.create(self.cr, self.uid, {
'email_from' : 'import@module.openerp',
'email_to' : self.email,
'body_text' : self.get_email_body(result, error),
'subject' : self.get_email_subject(result, error),
'auto_delete' : True})
email_obj.send(self.cr, self.uid, [email_id])
if error:
self.logger.error(_("Import failed due to an unexpected error"))
else:

View File

@ -210,12 +210,12 @@ class sugar_import(import_framework):
def get_email_mapping(self):
return {
'model' : 'mailgate.message',
'model' : 'mail.message',
'dependencies' : [self.TABLE_USER, self.TABLE_ACCOUNT, self.TABLE_CONTACT, self.TABLE_LEAD, self.TABLE_OPPORTUNITY, self.TABLE_MEETING, self.TABLE_CALL],
'hook' : self.import_email,
'map' : {
'name':'name',
'history' : const("1"),
'subject':'name',
'state' : const('received'),
'date':'date_sent',
'email_from': 'from_addr_name',
'email_to': 'to_addrs_names',
@ -226,7 +226,9 @@ class sugar_import(import_framework):
'model': 'model',
'partner_id/.id': 'partner_id/.id',
'user_id/id': ref(self.TABLE_USER, 'assigned_user_id'),
'description': ppconcat('description', 'description_html'),
'body_text': 'description',
'body_html' : 'description_html',
}
}
@ -575,10 +577,10 @@ class sugar_import(import_framework):
}
def get_opportunity_status(self, sugar_val):
fields = ['name', 'type']
fields = ['name', 'case_default']
name = 'Opportunity_' + sugar_val['sales_stage']
data = [sugar_val['sales_stage'], 'Opportunity']
return self.import_object(fields, data, 'crm.case.stage', self.TABLE_STAGE, name, [('type', '=', 'opportunity'), ('name', 'ilike', sugar_val['sales_stage'])])
data = [sugar_val['sales_stage'], '1']
return self.import_object(fields, data, 'crm.case.stage', self.TABLE_STAGE, name, [('name', 'ilike', sugar_val['sales_stage'])])
def import_opportunity_contact(self, val):
sugar_opportunities_contact = set(sugar.relation_search(self.context.get('port'), self.context.get('session_id'), 'Opportunities', module_id=val.get('id'), related_module='Contacts', query=None, deleted=None))
@ -647,11 +649,11 @@ class sugar_import(import_framework):
import lead
"""
def get_lead_status(self, sugar_val):
fields = ['name', 'type']
fields = ['name', 'case_default']
name = 'lead_' + sugar_val.get('status', '')
data = [sugar_val.get('status', ''), 'lead']
return self.import_object(fields, data, 'crm.case.stage', self.TABLE_STAGE, name, [('type', '=', 'lead'), ('name', 'ilike', sugar_val.get('status', ''))])
data = [sugar_val.get('status', ''), '1']
return self.import_object(fields, data, 'crm.case.stage', self.TABLE_STAGE, name, [('name', 'ilike', sugar_val.get('status', ''))])
lead_state = {
'New' : 'draft',
'Assigned':'open',
@ -1085,7 +1087,7 @@ class import_sugarcrm(osv.osv):
scheduler Method
"""
context = {'username': args[4], 'password': args[5], 'url': args[3], 'instance_name': args[3]}
imp = sugar_import(self, cr, uid, args[2], "import_sugarcrm", [args[1]], context)
imp = sugar_import(self, cr, uid, args[2], "import_sugarcrm", args[1], context)
imp.set_table_list(args[0])
imp.start()
return True
@ -1129,7 +1131,7 @@ class import_sugarcrm(osv.osv):
raise osv.except_osv(_('Error !!'), _("%s data required %s Module to be installed, Please install %s module") %(keys,module,module))
url = self.parse_valid_url(context)
context.update({'url': url})
imp = sugar_import(self, cr, uid, context.get('instance_name'), "import_sugarcrm", [context.get('email_user')], context)
imp = sugar_import(self, cr, uid, context.get('instance_name'), "import_sugarcrm", context.get('email_user'), context)
imp.set_table_list(keys)
imp.start()
obj_model = self.pool.get('ir.model.data')

View File

@ -32,13 +32,21 @@ import import_sugarcrm
import logging
import sys
debug = False
class LoginError(Exception): pass
def login(username, password, url):
setURL(url)
loc = sugarsoapLocator()
portType = loc.getsugarsoapPortType(url)
if debug:
portType = loc.getsugarsoapPortType(url, tracefile=sys.stdout)
else:
portType = loc.getsugarsoapPortType(url)
request = loginRequest()
uauth = ns0.user_auth_Def(request)
request._user_auth = uauth