diff options
| -rw-r--r-- | ishtar_common/templates/ishtar/import_step_by_step.html | 46 | ||||
| -rw-r--r-- | ishtar_common/views.py | 48 | ||||
| -rw-r--r-- | scss/custom.scss | 17 | 
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" %} – {{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: 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%; | 
