diff options
Diffstat (limited to 'ishtar_common/views.py')
| -rw-r--r-- | ishtar_common/views.py | 84 | 
1 files changed, 84 insertions, 0 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 8b0d51601..1af2f58ae 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -1819,6 +1819,14 @@ class ImportListView(IshtarMixin, LoginRequiredMixin, ListView):                      imprt.delayed_importation(request.session.session_key)                  else:                      imprt.importation() +            elif action == 'IS': +                if imprt.current_line is None: +                    imprt.current_line = imprt.skip_lines +                    imprt.save() +                return HttpResponseRedirect( +                    reverse('import_step_by_step', +                            args=[imprt.pk, imprt.current_line + 1]) +                )              elif action == 'AC':                  imprt.archive()          return HttpResponseRedirect(reverse(self.current_url)) @@ -1829,6 +1837,82 @@ class ImportListView(IshtarMixin, LoginRequiredMixin, ListView):          return dct +class ImportStepByStepView(IshtarMixin, LoginRequiredMixin, TemplateView): +    template_name = 'ishtar/import_step_by_step.html' +    page_name = _(u"Import step by step") +    current_url = 'import_step_by_step' + +    def get(self, request, *args, **kwargs): +        try: +            self.imprt_obj = models.Import.objects.get( +                pk=int(self.kwargs['pk']) +            ) +        except (models.Import.DoesNotExist, ValueError): +            raise Http404 +        if not self.request.user.is_superuser: +            # user can only edit his own imports +            user = models.IshtarUser.objects.get(pk=self.request.user.pk) +            if self.imprt_obj.user != user: +                raise Http404 +        self.current_line_number = int(self.kwargs['line_number']) - 1 +        self.imprt = None +        try: +            self.imprt, data = self.imprt_obj.importation( +                simulate=True, +                line_to_process=self.current_line_number, +                return_importer_and_data=True +            ) +        except IOError as e: +            self.errors = [e.message] +            return +        self.errors, self.new_data = None, None +        if not data: +            self.errors = self.imprt.errors +        else: +            self.new_data = data[:] +        return super(ImportStepByStepView, self).get(request, *args, **kwargs) + +    def get_context_data(self, **kwargs): +        dct = super(ImportStepByStepView, self).get_context_data(**kwargs) +        dct['import'] = self.imprt_obj +        dct['line_number_displayed'] = self.kwargs['line_number'] +        dct['errors'] = self.errors +        if self.errors: +            if self.imprt.current_csv_line: +                headers = [f.label for f in self.imprt.get_formaters()] +                dct['values'] = zip(headers, self.imprt.current_csv_line) +            return dct +        headers, interpreted_values = [], [] +        for formater in self.imprt.get_formaters(): +            lbl = formater.label +            if formater.comment: +                lbl += u' <i data-toggle="tooltip" class="fa ' +                lbl += u'fa-question-circle"' +                lbl += u' aria-hidden="true" title="{}">'.format( +                    formater.comment.replace(u'"', u'"')) +                lbl += u'</i>' +            headers.append(lbl) +            field_name = formater.field_name[0] +            if formater.export_field_name: +                field_name = formater.export_field_name[0] +            value = self.new_data[0].copy() +            for key in field_name.split('__'): +                if key in value: +                    value = value[key] +                else: +                    value = u"-" +            if value in (None, [], [None]): +                value = _(u"* empty *") +            if isinstance(value, list): +                value = u" ; ".join(value) +            interpreted_values.append(value) +        dct['values'] = zip( +            range(1, len(headers) + 1), headers, self.imprt.current_csv_line, +            interpreted_values +        ) +        return dct + +  class ImportListTableView(ImportListView):      template_name = 'ishtar/import_table.html'      current_url = 'current_imports_table'  | 
