diff options
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r-- | ishtar_common/views.py | 60 |
1 files changed, 54 insertions, 6 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 4a76207f6..ca9df098c 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -1553,13 +1553,12 @@ class ImportListView(IshtarMixin, LoginRequiredMixin, ListView): return query.exclude(state="AC") def get_queryset(self): - q1 = self._queryset_filter(self.model.objects) - q2 = self._queryset_filter(models.ImportGroup.objects) - if not self.request.user.is_superuser: - user = models.IshtarUser.objects.get(pk=self.request.user.pk) - q1 = q1.filter(user=user) - q2 = q2.filter(user=user) + user = self.request.user + if not user.pk: + raise Http404() + q1 = self._queryset_filter(self.model.query_can_access(user)) q1 = q1.filter(group__isnull=True).order_by("-creation_date", "-pk") + q2 = self._queryset_filter(models.ImportGroup.query_can_access(user)) q2 = q2.order_by("-creation_date", "-pk") return list(reversed(sorted(list(q1) + list(q2), key=lambda x: x.creation_date))) @@ -2143,6 +2142,55 @@ class ImportGroupDeleteView(IshtarMixin, LoginRequiredMixin, DeleteView): return reverse("current_imports") +class ImportCSVView(IshtarMixin, LoginRequiredMixin, TemplateView): + template_name = "ishtar/blocks/view_import_csv.html" + ATTRIBUTES = { + "source": "imported_file", + "error": "error_file", + "result": "result_file", + "match": "match_file" + } + TITLES = { + "source": ("fa fa-file-text-o", _("Source")), + "error": ("text-danger fa fa-exclamation-triangle", _("Error")), + "result": ("fa fa-th", _("Result")) , + "match": ("fa fa-arrows-h", _("Match")), + } + + def get(self, request, *args, **kwargs): + user = self.request.user + if not user.pk: + raise Http404() + model = models.ImportGroup if kwargs.get("group", None) else models.Import + q = model.query_can_access(self.request.user).filter(pk=kwargs.get("pk", -1)) + if not q.count(): + raise Http404() + self.import_item = q.all()[0] + attribute = self.ATTRIBUTES[kwargs["target"]] + self.csv_file = getattr(self.import_item, attribute) + if not self.csv_file: + raise Http404() + return super().get(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + data = super().get_context_data(**kwargs) + encoding = "utf-8" + if self.kwargs["target"] == "source" and self.import_item.encoding: + encoding = self.import_item.encoding + data["icon"], data["target"] = self.TITLES[self.kwargs["target"]] + data["title"] = str(self.import_item) + data["content"] = [] + with open(self.csv_file.path, "r", encoding=encoding) as f: + reader = csv.reader(f) + for idx, line in enumerate(reader): + if not idx: + data["header"] = line + continue + data["content"].append(line) + data["window_id"] = "csv-view-" + (self.kwargs.get("group", "") or "") + str(self.import_item.pk) + return data + + class PersonCreate(LoginRequiredMixin, CreateView): model = models.Person form_class = forms.BasePersonForm |