summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authortfr@openerp.com <>2011-10-24 11:48:12 +0200
committertfr@openerp.com <>2011-10-24 11:48:12 +0200
commit3fd701e82a3d59c76663daa2ac080fc1cb3e6fcd (patch)
tree0e137e16f5df8d357d5f6d7b6612ce2043bc6a04 /addons
parent62c52bf0c21f07a75734bb18872e3047f7191f67 (diff)
[FIX] adapt sugarcrm-import with new mail system and new stage structure + Improve logging
bzr revid: tfr@openerp.com-20111024094812-jts3o1re1o738fjw
Diffstat (limited to 'addons')
-rw-r--r--addons/import_base/import_framework.py31
-rw-r--r--addons/import_sugarcrm/import_sugarcrm.py28
-rw-r--r--addons/import_sugarcrm/sugar.py10
3 files changed, 39 insertions, 30 deletions
diff --git a/addons/import_base/import_framework.py b/addons/import_base/import_framework.py
index b558b24696f..1f627d2ad58 100644
--- a/addons/import_base/import_framework.py
+++ b/addons/import_base/import_framework.py
@@ -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:
diff --git a/addons/import_sugarcrm/import_sugarcrm.py b/addons/import_sugarcrm/import_sugarcrm.py
index b27748d48be..d5f487c5377 100644
--- a/addons/import_sugarcrm/import_sugarcrm.py
+++ b/addons/import_sugarcrm/import_sugarcrm.py
@@ -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')
diff --git a/addons/import_sugarcrm/sugar.py b/addons/import_sugarcrm/sugar.py
index 783878723e9..4ce5e0048ea 100644
--- a/addons/import_sugarcrm/sugar.py
+++ b/addons/import_sugarcrm/sugar.py
@@ -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