summaryrefslogtreecommitdiff
path: root/ishtar_common/models_imports.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/models_imports.py')
-rw-r--r--ishtar_common/models_imports.py71
1 files changed, 67 insertions, 4 deletions
diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py
index 3fbd7653d..454bed7e8 100644
--- a/ishtar_common/models_imports.py
+++ b/ishtar_common/models_imports.py
@@ -195,6 +195,9 @@ class ImporterType(models.Model):
"1 key.")
)
available = models.BooleanField(_("Available"), default=True)
+ pre_import_message = models.TextField(
+ _("Pre-import form message"), blank=True, default="", max_length=500
+ )
objects = SlugModelManager()
SERIALIZATION_EXCLUDE = ["users"]
@@ -630,7 +633,10 @@ class ImporterColumn(models.Model):
importer_type = models.ForeignKey(
ImporterType, related_name="columns", on_delete=models.CASCADE
)
- col_number = models.IntegerField(_("Column number"), default=1)
+ col_number = models.SmallIntegerField(
+ _("Column number"), default=1,
+ help_text=_("Column number in the table. Put 0 or negative number for pre-importer field.")
+ )
description = models.TextField(_("Description"), blank=True, null=True)
regexp_pre_filter = models.ForeignKey(
"Regexp",
@@ -1080,6 +1086,21 @@ DATE_FORMATS = (
IMPORTER_TYPES_CHOICES = {"TypeFormater": TARGET_MODELS, "DateFormater": DATE_FORMATS}
+FORMATER_WIDGETS_DCT = {
+ "IntegerFormater": ("IntegerField", None),
+ "FloatFormater": ("FloatField", None),
+ "UnicodeFormater": ("CharField", None),
+ "DateFormater": ("DateField", None),
+ "TypeFormater": ("ChoiceField", None),
+ "YearFormater": ("IntegerField", None),
+ "StrToBoolean": ("BooleanField", None),
+ "FileFormater": ("FileField", None),
+ "InseeFormater": ("IntegerField", None),
+ "UpperFormater": ("CharField", None),
+ "LowerFormater": ("CharField", None),
+ "UnknowType": ("CharField", None),
+}
+
class FormaterTypeManager(models.Manager):
def get_by_natural_key(self, formater_type, options, many_split):
@@ -1090,7 +1111,7 @@ class FormaterTypeManager(models.Manager):
class FormaterType(models.Model):
formater_type = models.CharField(
- "Formater type", max_length=20, choices=IMPORTER_TYPES
+ _("Formater type"), max_length=20, choices=IMPORTER_TYPES
)
options = models.CharField(_("Options"), max_length=500, blank=True, null=True)
many_split = models.CharField(
@@ -1328,6 +1349,10 @@ class ImportGroup(BaseImport):
return f"{self.name} ({self.importer_type.name})"
@property
+ def has_pre_import_form(self) -> bool:
+ return False
+
+ @property
def import_id(self):
return f"group-{self.id}"
@@ -1547,6 +1572,11 @@ class Import(BaseImport):
def __str__(self):
return "{} | {}".format(self.name or "-", self.importer_type)
+ def is_available(self, ishtar_user) -> bool:
+ if ishtar_user.is_superuser or self.user == ishtar_user:
+ return True
+ return False
+
@property
def import_id(self):
return str(self.id)
@@ -1569,6 +1599,21 @@ class Import(BaseImport):
errors.append(row)
return errors
+ @property
+ def has_pre_import_form(self) -> bool:
+ """
+ Check if a pre-import form is available
+ """
+ return bool(self.importer_type.columns.filter(col_number__lte=0).count())
+
+ @property
+ def pre_import_form_is_valid(self) -> bool:
+ for column in self.importer_type.columns.filter(col_number__lte=0, required=True):
+ q = ImportColumnValue.objects.filter(column=column, import_item=self)
+ if not q.count() or q.all()[0].value == "":
+ return False
+ return True
+
def get_number_of_lines(self):
if self.number_of_line:
return self.number_of_line
@@ -2186,6 +2231,24 @@ def pre_delete_import(sender, **kwargs):
pre_delete.connect(pre_delete_import, sender=Import)
+class ImportColumnValue(models.Model):
+ """
+ Value in a column for pre-import columns
+ """
+ column = models.ForeignKey(ImporterColumn, on_delete=models.CASCADE)
+ import_item = models.ForeignKey(Import, on_delete=models.CASCADE)
+ value = models.TextField(default="", blank=True)
+
+ class Meta:
+ verbose_name = _("Import - Pre-import value")
+ verbose_name_plural = _("Import - Pre-import values")
+ unique_together = ("column", "import_item")
+ ADMIN_SECTION = _("Imports")
+
+ def __str__(self):
+ return f"{self.import_item} - {self.column} - {self.value}"
+
+
class ItemKey(models.Model):
key = models.TextField(_("Key"))
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
@@ -2206,8 +2269,8 @@ class ItemKey(models.Model):
)
class Meta:
- verbose_name = _("Importer - Item key")
- verbose_name_plural = _("Imports - Item keys")
+ verbose_name = _("Import - Item key")
+ verbose_name_plural = _("Import - Item keys")
ADMIN_SECTION = _("Imports")
def __str__(self):