diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2023-09-11 15:16:06 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-04-16 16:38:32 +0200 | 
| commit | 37a23f20320eea2d6b85fa9bb326846aea68d7ed (patch) | |
| tree | 80396859180edd9602e8e1ff1a4bec71134e21d6 /ishtar_common/models_imports.py | |
| parent | 4423f127ac503c8a28d91cd279a20019acb8023a (diff) | |
| download | Ishtar-37a23f20320eea2d6b85fa9bb326846aea68d7ed.tar.bz2 Ishtar-37a23f20320eea2d6b85fa9bb326846aea68d7ed.zip | |
✨ Pre-import form: modify models - admin
Diffstat (limited to 'ishtar_common/models_imports.py')
| -rw-r--r-- | ishtar_common/models_imports.py | 71 | 
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): | 
