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' |