summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-03-27 19:30:49 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-03-27 19:30:49 +0200
commit603db834077d235e95ec6038f0d653d6e595878f (patch)
treec9f7f0dade728b4526f62b395fc891bdab55fc4e /ishtar_common
parent85d56615fd76f59fd4e239d3d74e7237649e1c05 (diff)
downloadIshtar-603db834077d235e95ec6038f0d653d6e595878f.tar.bz2
Ishtar-603db834077d235e95ec6038f0d653d6e595878f.zip
Step by step import: pagination (refs #3975)
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/templates/ishtar/import_step_by_step.html46
-rw-r--r--ishtar_common/views.py48
2 files changed, 74 insertions, 20 deletions
diff --git a/ishtar_common/templates/ishtar/import_step_by_step.html b/ishtar_common/templates/ishtar/import_step_by_step.html
index 2d80f2386..44c5389d3 100644
--- a/ishtar_common/templates/ishtar/import_step_by_step.html
+++ b/ishtar_common/templates/ishtar/import_step_by_step.html
@@ -3,21 +3,39 @@
{% block content %}
-{% comment %}
-<nav aria-label="Page navigation example">
- <ul class="pagination justify-content-center">
- <li class="page-item disabled">
- <a class="page-link" href="#" tabindex="-1">Previous</a>
- </li>
- <li class="page-item"><a class="page-link" href="#">1</a></li>
- <li class="page-item"><a class="page-link" href="#">2</a></li>
- <li class="page-item"><a class="page-link" href="#">3</a></li>
- <li class="page-item">
- <a class="page-link" href="#">Next</a>
- </li>
- </ul>
+<nav class="row">
+ <ul class="pagination col-md-6 justify-content-center">
+ {% for label, page_number, enabled, imported in page_numbers %}
+ <li class="page-item{% if not enabled %} disabled{% endif %}"
+ {% if not enabled %} tabindex="-1"{% endif %}>
+ <a class="page-link{% if imported %} imported-page{% endif %}{% if page_number == line_number_displayed %} current-page{% endif %}"
+ {% if imported %}title="{% trans 'Already imported' %}"{% endif %}
+ href="{% url 'import_step_by_step' import.pk page_number %}">
+ {{label}}
+ </a>
+ </li>
+ {% endfor %}
+ </ul>
+ <div class="col-md-6 justify-content-center">
+ <form action="." method="post" name='step-by-step-page'>
+ {% csrf_token %}
+ <div class="input-group">
+ <div class="input-group-prepend">
+ <span class="input-group-text">{% trans "Line" %}</span>
+ </div>
+ <input type="number" class="form-control small-input"
+ name="line-to-go"
+ required="required"/>
+ <div class="input-group-append">
+ <button type="submit" name="valid"
+ value="change-page" class="btn btn-secondary">
+ {% trans "Go" %}
+ </button>
+ </div>
+ </div>
+ </form>
+ </div>
</nav>
-{% endcomment %}
<h2>{% trans "Import step by step" %} &ndash; {{import.name}} &ndash; {% trans "line " %} {{line_number_displayed}}</h2>
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 9ff53e89a..1536868d4 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -1890,25 +1890,30 @@ class ImportStepByStepView(IshtarMixin, LoginRequiredMixin, TemplateView):
self.errors = [e.message]
return super(ImportStepByStepView, self).get(request, *args,
**kwargs)
- is_current = self.current_line_number == self.imprt_obj.current_line
if self.imprt_obj.get_number_of_lines() >= self.current_line_number:
self.current_line_number += 1
else:
self.current_line_number = None
- if is_current:
- self.imprt_obj.current_line = self.current_line_number
- self.imprt_obj.save()
+ self.imprt_obj.current_line = self.current_line_number
+ self.imprt_obj.save()
return self.current_line_number
def post(self, request, *args, **kwargs):
if not request.POST or request.POST.get('valid', None) not in (
- 'change-csv', 'import'):
+ 'change-csv', 'import', 'change-page'):
return self.get(request, *args, **kwargs)
-
self.get_import()
+
+ if request.POST.get('valid') == 'change-page':
+ return HttpResponseRedirect(
+ reverse('import_step_by_step',
+ args=[self.imprt_obj.pk,
+ request.POST.get('line-to-go', None)]))
+
if request.POST.get('valid') == 'change-csv':
self.update_csv(request)
return self.get(request, *args, **kwargs)
+
if not self.import_line(request, *args, **kwargs):
return HttpResponseRedirect(reverse('current_imports'))
else:
@@ -1932,16 +1937,47 @@ class ImportStepByStepView(IshtarMixin, LoginRequiredMixin, TemplateView):
**kwargs)
if not data or not data[0]:
self.errors = self.imprt.errors
+ if not self.errors:
+ self.errors = [("", "", _(u"No data provided"))]
else:
self.new_data = data[:]
return super(ImportStepByStepView, self).get(request, *args, **kwargs)
+ def get_pagination(self, dct):
+ pagination_step = 10
+ line_nb = self.imprt_obj.get_number_of_lines()
+ total_line_nb = self.imprt_obj.skip_lines + line_nb
+ delta = int((self.current_line_number + 1) / pagination_step)
+ already_imported = self.imprt_obj.imported_line_numbers.split(',')
+
+ dct['page_is_last'] = self.current_line_number == line_nb
+ dct['page_numbers'] = [] # label, number, enabled, is_imported
+ if delta > 0:
+ dct['page_numbers'].append(
+ (_(u"Previous"), delta * pagination_step - 1, True, False)
+ )
+ else:
+ dct['page_numbers'].append(
+ (_(u"Previous"), self.imprt_obj.skip_lines, False, False)
+ )
+ for idx in range(0, 10):
+ nb = idx + delta * pagination_step
+ if nb > self.imprt_obj.skip_lines and nb <= total_line_nb:
+ imported = str(nb) in already_imported
+ dct['page_numbers'].append((nb, nb, True, imported))
+ if nb + 1 <= total_line_nb:
+ dct['page_numbers'].append((_(u"Next"), nb + 1, True, False))
+ else:
+ dct['page_numbers'].append((_(u"Next"), total_line_nb, False,
+ False))
+
def get_context_data(self, **kwargs):
dct = super(ImportStepByStepView, self).get_context_data(**kwargs)
dct['import'] = self.imprt_obj
dct['line_number_displayed'] = self.current_line_number + 1
dct['line_is_imported'] = self.imprt_obj.line_is_imported(
self.current_line_number)
+ self.get_pagination(dct)
dct['errors'] = self.errors
if self.errors:
if self.imprt.current_csv_line: