summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar_common/templates/ishtar/import_step_by_step.html46
-rw-r--r--ishtar_common/views.py48
-rw-r--r--scss/custom.scss17
3 files changed, 91 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:
diff --git a/scss/custom.scss b/scss/custom.scss
index bcc808637..5aadfee48 100644
--- a/scss/custom.scss
+++ b/scss/custom.scss
@@ -10,6 +10,7 @@ $action-color: #ffe484;
$action-button-color: darken($action-color, 20%);
$ishtar-color: darken($purple, 20%);
$ishtar-secondary-color: $purple;
+$ishtar-light-color: lighten($purple, 20%);
$dark-secondary-color: rgba(255,255,255,0.8);
html{
@@ -27,10 +28,26 @@ label {
min-height: 1.5rem;
}
+.form-control.small-input,
+.input-group > .form-control.small-input{
+ width: 110px;
+ flex: none;
+}
+
.input-group > input[type=checkbox]{
margin: 0.5em 1em;
}
+.page-link.imported-page {
+ color: $ishtar-light-color;
+}
+
+.page-link.imported-page.current-page,
+.page-link.current-page {
+ color: black;
+ font-weight: bold;
+}
+
.modal-dialog.full {
width: 98%;
height: 98%;