[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:
parent
62c52bf0c2
commit
3fd701e82a
|
@ -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:
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue