diff options
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 |
commit | 603db834077d235e95ec6038f0d653d6e595878f (patch) | |
tree | c9f7f0dade728b4526f62b395fc891bdab55fc4e /ishtar_common | |
parent | 85d56615fd76f59fd4e239d3d74e7237649e1c05 (diff) | |
download | Ishtar-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.html | 46 | ||||
-rw-r--r-- | ishtar_common/views.py | 48 |
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" %} – {{import.name}} – {% 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: |