From 89c07c34691b71f5cf572134244fd7e272631013 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 8 Mar 2018 13:49:08 +0100 Subject: Manage autorefresh for import page (refs #3951) --- ishtar_common/context_processors.py | 3 +- ishtar_common/models_imports.py | 33 +++++++--- ishtar_common/static/js/ishtar.js | 48 ++++++++++++++ ishtar_common/static/media/styles.css | 2 +- ishtar_common/templates/base.html | 7 +- ishtar_common/templates/ishtar/import_list.html | 71 +++------------------ ishtar_common/templates/ishtar/import_table.html | 81 ++++++++++++++++++++++++ ishtar_common/urls.py | 4 ++ ishtar_common/utils.py | 13 ++++ ishtar_common/views.py | 24 ++++++- 10 files changed, 210 insertions(+), 76 deletions(-) create mode 100644 ishtar_common/templates/ishtar/import_table.html (limited to 'ishtar_common') diff --git a/ishtar_common/context_processors.py b/ishtar_common/context_processors.py index 90817776f..7619363dc 100644 --- a/ishtar_common/context_processors.py +++ b/ishtar_common/context_processors.py @@ -52,7 +52,8 @@ def get_base_context(request): # messages dct['MESSAGES'] = [] - if 'messages' in request.session and request.session['messages']: + if not request.is_ajax() and 'messages' in request.session and \ + request.session['messages']: for message, message_type in request.session['messages']: dct['MESSAGES'].append((message, message_type)) request.session['messages'] = [] diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py index e0a144adc..b6b68d5a6 100644 --- a/ishtar_common/models_imports.py +++ b/ishtar_common/models_imports.py @@ -39,7 +39,8 @@ from django.utils.functional import cached_property from django.utils.translation import ugettext_lazy as _, pgettext_lazy from ishtar_common.utils import create_slug, \ - get_all_related_m2m_objects_with_model, put_session_message + get_all_related_m2m_objects_with_model, put_session_message, \ + put_session_var, get_session_var from ishtar_common.data_importer import Importer, ImportFormater, \ IntegerFormater, FloatFormater, UnicodeFormater, DateFormater, \ TypeFormater, YearFormater, StrToBoolean, FileFormater, InseeFormater @@ -822,8 +823,8 @@ class Import(models.Model): help_text=_(u'If set to true, do not overload existing values.')) creation_date = models.DateTimeField( _(u"Creation date"), auto_now_add=True, blank=True, null=True) - end_date = models.DateTimeField(_(u"End date"), blank=True, - null=True, editable=False) + end_date = models.DateTimeField(_(u"End date"), auto_now_add=True, + blank=True, null=True, editable=False) seconds_remaining = models.IntegerField( _(u"Remaining seconds"), blank=True, null=True, editable=False) @@ -922,24 +923,29 @@ class Import(models.Model): def initialize(self, user=None): self.state = 'AP' + self.end_date = datetime.datetime.now() self.save() self.get_importer_instance().initialize(self.data_table, user=user, output='db') self.state = 'A' + self.end_date = datetime.datetime.now() self.save() def delayed_importation(self, session_key): if not settings.USE_BACKGROUND_TASK: return self.importation(session_key=session_key) - put_session_message(session_key, - unicode(_(u"Import added to the queue")), - "warning") + put_session_message( + session_key, + unicode(_(u"Import {} added to the queue")).format(self.name), + "info") self.state = 'IQ' + self.end_date = datetime.datetime.now() self.save() return delayed_import(self.pk, session_key) def importation(self, session_key=None): self.state = 'IP' + self.end_date = datetime.datetime.now() self.save() importer = self.get_importer_instance() try: @@ -952,6 +958,11 @@ class Import(models.Model): self.imported_file), "warning" ) + ids = get_session_var(session_key, 'current_import_id') + if not ids: + ids = [] + ids.append(self.pk) + put_session_var(session_key, 'current_import_id', ids) self.state = 'FE' self.save() return @@ -970,26 +981,32 @@ class Import(models.Model): ContentFile(importer.get_csv_errors().encode('utf-8')) ) msg = unicode(_(u"Import {} finished with errors")).format( - self.imported_file) + self.name) msg_cls = "warning" else: self.state = 'F' self.error_file = None msg = unicode(_(u"Import {} finished with no errors")).format( - self.imported_file) + self.name) msg_cls = "primary" if session_key: put_session_message(session_key, msg, msg_cls) + ids = self.request.session['current_import_id'] \ + if 'current_import_id' in self.request.session else [] + ids.append(self.pk) + put_session_var(session_key, 'current_import_id', ids) if importer.match_table: match_file = filename + "_match_%s.csv" % now self.match_file.save( match_file, ContentFile(importer.get_csv_matches().encode('utf-8')) ) + self.end_date = datetime.datetime.now() self.save() def archive(self): self.state = 'AC' + self.end_date = datetime.datetime.now() self.save() def get_all_imported(self): diff --git a/ishtar_common/static/js/ishtar.js b/ishtar_common/static/js/ishtar.js index fbf1ddc17..126373b94 100644 --- a/ishtar_common/static/js/ishtar.js +++ b/ishtar_common/static/js/ishtar.js @@ -188,6 +188,21 @@ function display_info(msg){ }, 5000); } +function add_message(message, message_type){ + if (!message_type) message_type = 'info'; + + var html = $("#message_list").html(); + html += '
{% endcompress %} {% compress css %} @@ -67,9 +69,6 @@

{{lbl}}{% trans ":"%} {{value}}

{% endfor %}
{%endif%} - @@ -97,6 +96,7 @@
+
{% if MESSAGES %}{% for message, message_type in MESSAGES %} {% endfor %}{% endif %} +
{% if warnings %}{% for warning in warnings %}