diff --git a/addons/import_base/import_framework.py b/addons/import_base/import_framework.py
index febfbb68d44..097cff211ec 100644
--- a/addons/import_base/import_framework.py
+++ b/addons/import_base/import_framework.py
@@ -20,12 +20,20 @@
##############################################################################
import pprint
import mapper
+import pooler
+import tools
+
+
+from threading import Thread
+import datetime
+from reportlab.lib import logger
+import logging
pp = pprint.PrettyPrinter(indent=4)
-class import_framework():
+class import_framework(Thread):
"""
This class should be extends,
get_data and get_mapping have to extends
@@ -39,13 +47,15 @@ class import_framework():
"""
DO_NOT_FIND_DOMAIN = [('id', '=', 0)]
- def __init__(self, obj, cr, uid, instance_name, module_name, context):
+ def __init__(self, obj, cr, uid, instance_name, module_name, email_to_notify=False, context=None):
+ Thread.__init__(self)
self.obj = obj
self.cr = cr
self.uid = uid
self.instance_name = instance_name
self.module_name = module_name
self.context = context or {}
+ self.email = email_to_notify
self.initialize()
@@ -115,7 +125,7 @@ class import_framework():
res = hook(val)
if res:
final_data.append(res)
- self._save_data(model, map, final_data, table)
+ return self._save_data(model, map, final_data, table)
def _save_data(self, model, mapping, datas, table):
"""
@@ -149,9 +159,10 @@ class import_framework():
if not model_obj:
raise ValueError("%s is not a valid model name" % model)
- model_obj.import_data(self.cr, self.uid, fields, res, mode='update', current_module=self.module_name, noupdate=True, context=self.context)
+ (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 in self_dependencies:
self._import_self_dependencies(model_obj, field, datas)
+ return (len(res), warning)
def _import_self_dependencies(self, obj, parent_field, datas):
"""
@@ -313,22 +324,38 @@ class import_framework():
return False
- def import_all(self, table_list):
+ def set_table_list(self, table_list):
+ self.table_list = table_list
+
+ def run(self):
"""Import all data into openerp,
this is the Entry point to launch the process of import
@param table_list: the list of external table to import
['Leads', 'Opportunity']
"""
- imported = set() #to invoid importing 2 times the sames modules
- for table in table_list:
- to_import = self.get_mapping()[table].get('import', True)
- if not table in imported:
- self._resolve_dependencies(self.get_mapping()[table].get('dependencies', []), imported)
- if to_import:
- self._import_table(table)
- imported.add(table)
-
+
+ self.data_started = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
+ self.cr = pooler.get_db(self.cr.dbname).cursor()
+ try:
+ result = []
+ imported = set() #to invoid importing 2 times the sames modules
+ for table in self.table_list:
+ to_import = self.get_mapping()[table].get('import', True)
+ if not table in imported:
+ self._resolve_dependencies(self.get_mapping()[table].get('dependencies', []), imported)
+ if to_import:
+ (position, warning) = self._import_table(table)
+ result.append((table, position, warning))
+ imported.add(table)
+ self.cr.commit()
+
+ finally:
+ self.cr.close()
+ self.date_ended = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
+ self._send_notification_email(result)
+
+
def _resolve_dependencies(self, dep, imported):
"""
import dependencies recursively
@@ -341,8 +368,30 @@ class import_framework():
if to_import:
self._import_table(dependency)
imported.add(dependency)
+
+ def _send_notification_email(self, result):
+ if not self.email:
+ return
+ subject = "Openerp has finish to import your data at %s" % self.date_ended
+ tools.email_send(
+ 'import_sugarcrm@module.openerp',
+ self.email,
+ subject,
+ self._get_email_body(result),
+ )
+ logger = logging.getLogger('import_sugarcam')
+ logger.info("Import finished, notification email sended")
-
+ def _get_email_body(self, result):
+ header = "The import of sugarcrm data \n instance name : %s \n started at %s is finished at %s" % (self.instance_name, self.data_started, self.date_ended)
+ body = ""
+ for (table, nb, warning) in result:
+ if not warning:
+ warning = "with no warning"
+ else:
+ warning = "with warning : %s" % warning
+ body += "%s records were imported from table %s, %s \n" % (nb, table, warning)
+ return header + "\n\n" + body
class dummy_import(import_framework):
diff --git a/addons/import_sugarcrm/import_sugarcrm.py b/addons/import_sugarcrm/import_sugarcrm.py
index 056486b07a1..a65825b28e0 100644
--- a/addons/import_sugarcrm/import_sugarcrm.py
+++ b/addons/import_sugarcrm/import_sugarcrm.py
@@ -823,8 +823,10 @@ class import_sugarcrm(osv.osv):
# """Import all sugarcrm data into openerp module"""
keys = self.get_key(cr, uid, ids, context)
- imp = sugar_import(self, cr, uid, "sugarcrm", "import_sugarcrm", context)
- imp.import_all(keys)
+
+ imp = sugar_import(self, cr, uid, "sugarcrm", "import_sugarcrm", ["tfr@openerp.com"], context)
+ imp.set_table_list(keys)
+ imp.start()
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/import_sugarcrm/wizard/import_message_view.xml b/addons/import_sugarcrm/wizard/import_message_view.xml
index ac619ef428d..a3ec860e728 100644
--- a/addons/import_sugarcrm/wizard/import_message_view.xml
+++ b/addons/import_sugarcrm/wizard/import_message_view.xml
@@ -9,7 +9,7 @@
form