summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-04-16 16:38:25 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2024-04-16 16:38:25 +0200
commit57e35ce0c26ee36f0345e6adf00ea3f63e7235f0 (patch)
tree2d397a8db24bfb9797da316daa95f6ba17cee006 /ishtar_common
parent3cf74dc30fee9347720b8e2072d185aeab40e6f8 (diff)
downloadIshtar-57e35ce0c26ee36f0345e6adf00ea3f63e7235f0.tar.bz2
Ishtar-57e35ce0c26ee36f0345e6adf00ea3f63e7235f0.zip
✨ Imports groups - form: new import group
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/admin.py14
-rw-r--r--ishtar_common/forms_common.py73
-rw-r--r--ishtar_common/models.py2
-rw-r--r--ishtar_common/templates/ishtar/import_list.html3
-rw-r--r--ishtar_common/urls.py5
-rw-r--r--ishtar_common/views.py7
6 files changed, 88 insertions, 16 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py
index 2b706f10a..cf4366bd8 100644
--- a/ishtar_common/admin.py
+++ b/ishtar_common/admin.py
@@ -1684,7 +1684,6 @@ class ImporterTypeAdmin(admin.ModelAdmin):
inlines = [ImporterGroupImporterInline]
-
class RegexpAdmin(admin.ModelAdmin):
list_display = ("name", "regexp", "description")
@@ -1907,6 +1906,19 @@ class ImportAdmin(admin.ModelAdmin):
admin_site.register(models.Import, ImportAdmin)
+@admin.register(models.ImportGroup, site=admin_site)
+class ImportGroupAdmin(admin.ModelAdmin):
+ list_display = (
+ "name",
+ "importer_type",
+ "imported_file",
+ "user",
+ "state",
+ "creation_date",
+ )
+ autocomplete_fields = ["user"]
+
+
class TargetKeyGroupAdmin(admin.ModelAdmin):
list_display = ("name", "all_user_can_use", "all_user_can_modify", "available")
search_fields = ("name",)
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index 197b5a03c..1b62dcf49 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -217,12 +217,12 @@ class BaseImportForm(IshtarForm, forms.ModelForm):
"name",
"importer_type",
"imported_file",
+ "associated_group",
"encoding",
"csv_sep",
+ "skip_lines",
"imported_images",
"imported_images_link",
- "associated_group",
- "skip_lines",
)
widgets = {
"imported_file": widgets.BSClearableFileInput,
@@ -231,11 +231,28 @@ class BaseImportForm(IshtarForm, forms.ModelForm):
HEADERS = {
"name": FormHeader(_("Import (table)")),
+ "encoding": FormHeader(_("CSV options")),
}
def __init__(self, *args, **kwargs):
user = kwargs.pop("user")
super(BaseImportForm, self).__init__(*args, **kwargs)
+ self._filter_group(user)
+ self._filter_importer_type()
+ if "imported_images" in self.fields:
+ self.fields["imported_images"].validators = [file_size_validator]
+
+ self.fields["imported_file"].validators = [file_size_validator]
+ self._post_init()
+
+ def _filter_importer_type(self):
+ self.fields["importer_type"].choices = [("", "--")] + [
+ (imp.pk, imp.name)
+ for imp in models.ImporterType.objects.filter(available=True,
+ type=self.importer_type)
+ ]
+
+ def _filter_group(self, user):
groups = models.TargetKeyGroup.objects.filter(available=True)
if not user.is_superuser:
groups = groups.filter(all_user_can_use=True)
@@ -245,16 +262,6 @@ class BaseImportForm(IshtarForm, forms.ModelForm):
self.fields["associated_group"].choices = [(None, "--")] + [
(g.pk, str(g)) for g in groups.all()
]
- self.fields["importer_type"].choices = [("", "--")] + [
- (imp.pk, imp.name)
- for imp in models.ImporterType.objects.filter(available=True,
- type=self.importer_type)
- ]
- if "imported_images" in self.fields:
- self.fields["imported_images"].validators = [file_size_validator]
-
- self.fields["imported_file"].validators = [file_size_validator]
- self._post_init()
BAD_CHARS = ["é", "³", "ô", "Ã\xa0", "é"]
@@ -312,16 +319,18 @@ class NewImportForm(BaseImportForm):
"name",
"importer_type",
"imported_file",
+ "associated_group",
"encoding",
"csv_sep",
+ "skip_lines",
"imported_images",
"imported_images_link",
- "associated_group",
- "skip_lines",
)
HEADERS = {
"name": FormHeader(_("Import (table)")),
+ "encoding": FormHeader(_("CSV options")),
+ "imported_images": FormHeader(_("Documents/Images")),
}
def clean(self):
@@ -389,14 +398,15 @@ class NewImportGISForm(BaseImportForm):
"name",
"importer_type",
"imported_file",
+ "associated_group",
"encoding",
"csv_sep",
- "associated_group",
"skip_lines",
)
HEADERS = {
"name": FormHeader(_("Import (GIS)")),
+ "encoding": FormHeader(_("CSV options")),
}
def __init__(self, *args, **kwargs):
@@ -439,6 +449,39 @@ class NewImportGISForm(BaseImportForm):
return item
+class NewImportGroupForm(NewImportForm):
+ error_css_class = "error"
+ required_css_class = "required"
+
+ class Meta:
+ model = models.ImportGroup
+ fields = (
+ "name",
+ "importer_type",
+ "imported_file",
+ "encoding",
+ "csv_sep",
+ "skip_lines",
+ "imported_images",
+ "imported_images_link",
+ )
+
+ HEADERS = {
+ "name": FormHeader(_("Import (group)")),
+ "encoding": FormHeader(_("CSV options")),
+ "imported_images": FormHeader(_("Documents/Images")),
+ }
+
+ def _filter_importer_type(self):
+ self.fields["importer_type"].choices = [("", "--")] + [
+ (imp.pk, imp.name)
+ for imp in models.ImporterGroup.objects.filter(available=True)
+ ]
+
+ def _filter_group(self, user):
+ pass
+
+
class TargetKeyForm(forms.ModelForm):
class Meta:
model = models.TargetKey
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 6cc31216c..607184e41 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -120,6 +120,7 @@ from ishtar_common.models_imports import (
TargetKey,
FormaterType,
Import,
+ ImportGroup,
TargetKeyGroup,
ValueFormater,
ItemKey,
@@ -177,6 +178,7 @@ __all__ = [
"ImporterModel",
"ImporterType",
"ImporterGroup",
+ "ImportGroup",
"ImporterGroupImporter",
"ImporterDefault",
"ImporterDefaultValues",
diff --git a/ishtar_common/templates/ishtar/import_list.html b/ishtar_common/templates/ishtar/import_list.html
index 2f1872610..1b78e62c4 100644
--- a/ishtar_common/templates/ishtar/import_list.html
+++ b/ishtar_common/templates/ishtar/import_list.html
@@ -23,6 +23,9 @@
<a href="{% url 'new_import_gis' %}" class="btn btn-success">
<i class="fa fa-plus"></i> {% trans 'import (GIS)' %}
</a>
+ <a href="{% url 'new_import_group' %}" class="btn btn-success">
+ <i class="fa fa-plus"></i> {% trans 'import (group)' %}
+ </a>
</div>
<div id="import-container">
{% include "ishtar/import_table.html" %}
diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py
index 7b0c69a68..9209eea09 100644
--- a/ishtar_common/urls.py
+++ b/ishtar_common/urls.py
@@ -224,6 +224,11 @@ urlpatterns = [
name="new_import_gis",
),
url(
+ r"^import-new-group/$",
+ check_rights(["change_import"])(views.NewImportGroupView.as_view()),
+ name="new_import_group",
+ ),
+ url(
r"^import-list/$",
check_rights(["change_import"])(views.ImportListView.as_view()),
name="current_imports",
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index db493fd37..b58ab024a 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -1513,6 +1513,13 @@ class NewImportGISView(NewImportView):
page_name = _("Import: create (GIS)")
+class NewImportGroupView(NewImportView):
+ template_name = "ishtar/form.html"
+ model = models.Import
+ form_class = forms.NewImportGroupForm
+ page_name = _("Import: create (group)")
+
+
class ImportListView(IshtarMixin, LoginRequiredMixin, ListView):
template_name = "ishtar/import_list.html"
model = models.Import