diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2023-09-12 12:48:15 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-04-16 16:38:32 +0200 | 
| commit | c2764f756035048756866fa4e4d4c75908e5b392 (patch) | |
| tree | f75b6a596b7c9ac2a8962046a2e90a4eac5085e8 /ishtar_common/views.py | |
| parent | 771abf03b429e236640bd3a66426246a60fb471d (diff) | |
| download | Ishtar-c2764f756035048756866fa4e4d4c75908e5b392.tar.bz2 Ishtar-c2764f756035048756866fa4e4d4c75908e5b392.zip  | |
✨ Pre-import form: form and view
Diffstat (limited to 'ishtar_common/views.py')
| -rw-r--r-- | ishtar_common/views.py | 65 | 
1 files changed, 44 insertions, 21 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 1ab5931e4..c590532b9 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -1464,17 +1464,18 @@ class GlobalVarEdit(IshtarMixin, AdminLoginRequiredMixin, ModelFormSetView):  """ -class NewImportView(IshtarMixin, LoginRequiredMixin, CreateView): +class BaseImportView(IshtarMixin, LoginRequiredMixin):      template_name = "ishtar/form.html"      model = models.Import      form_class = forms.NewImportForm -    page_name = _("Import: create (table)")      def get_success_url(self): +        if self.object.has_pre_import_form: +            return reverse("import_pre_import_form", args=[self.object.pk])          return reverse("current_imports")      def get_form_kwargs(self): -        kwargs = super(NewImportView, self).get_form_kwargs() +        kwargs = super().get_form_kwargs()          kwargs["user"] = self.request.user          return kwargs @@ -1484,26 +1485,12 @@ class NewImportView(IshtarMixin, LoginRequiredMixin, CreateView):          return HttpResponseRedirect(self.get_success_url()) -class EditImportView(IshtarMixin, LoginRequiredMixin, UpdateView): -    template_name = "ishtar/form.html" -    model = models.Import -    form_class = forms.NewImportForm -    page_name = _("Edit import") - -    def get_success_url(self): -        return reverse("current_imports") - -    def get_form_kwargs(self): -        kwargs = super(EditImportView, self).get_form_kwargs() -        kwargs["user"] = self.request.user - -        return kwargs +class NewImportView(BaseImportView, CreateView): +    page_name = _("Import: create (table)") -    def form_valid(self, form): -        user = models.IshtarUser.objects.get(pk=self.request.user.pk) -        self.object = form.save(user=user) -        return HttpResponseRedirect(self.get_success_url()) +class EditImportView(BaseImportView, UpdateView): +    page_name = _("Import: edit (table)")  class NewImportGISView(NewImportView): @@ -1520,6 +1507,42 @@ class NewImportGroupView(NewImportView):      page_name = _("Import: create (group)") +class ImportPreFormView(IshtarMixin, LoginRequiredMixin, FormView): +    template_name = "ishtar/form.html" +    form_class = forms.PreImportForm +    page_name = _("Import: pre-form") + +    def get_success_url(self): +        return reverse("current_imports") + +    def dispatch(self, request, *args, **kwargs): +        self.user = models.IshtarUser.objects.get(pk=self.request.user.pk) +        try: +            self.import_item = models.Import.objects.get(pk=self.kwargs["import_id"]) +        except models.Import.DoesNotExist: +            raise Http404() +        if not self.import_item.is_available(self.user): +            raise Http404() +        if not self.import_item.importer_type.columns.filter(col_number__lte=0).count(): +            # no pre-form fields +            raise Http404() +        return super().dispatch(request, *args, **kwargs) + +    def get_form_kwargs(self): +        kwargs = super().get_form_kwargs() +        kwargs["import_item"] = self.import_item +        return kwargs + +    def get_context_data(self, **kwargs): +        data = super().get_context_data(**kwargs) +        data["page_name"] = self.page_name +        return data + +    def form_valid(self, form): +        self.object = form.save() +        return HttpResponseRedirect(self.get_success_url()) + +  class ImportListView(IshtarMixin, LoginRequiredMixin, ListView):      template_name = "ishtar/import_list.html"      model = models.Import  | 
