summaryrefslogtreecommitdiff
path: root/ishtar_common/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r--ishtar_common/views.py84
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'&quot;'))
+ 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'