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.py138
1 files changed, 99 insertions, 39 deletions
diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py
index a33b599c7..5bd230d6b 100644
--- a/ishtar_common/models_imports.py
+++ b/ishtar_common/models_imports.py
@@ -964,7 +964,7 @@ class TargetKeyGroup(models.Model):
class TargetKey(models.Model):
"""
User's link between import source and ishtar database.
- Also temporary used for GeneralType to point missing link before adding
+ Used for GeneralType to point missing link before adding
them in ItemKey table.
A targetkey connection can be create to be applied to one particular
import (associated_import), one particular user (associated_user),
@@ -975,17 +975,17 @@ class TargetKey(models.Model):
target = models.ForeignKey(
ImportTarget, related_name="keys", on_delete=models.CASCADE
)
- key = models.TextField(_("Key"))
+ key = models.TextField(_("Key"), blank=True, default="")
value = models.TextField(_("Value"), blank=True, null=True)
is_set = models.BooleanField(_("Is set"), default=False)
associated_import = models.ForeignKey(
- "Import", blank=True, null=True, on_delete=models.SET_NULL
+ "Import", blank=True, null=True, on_delete=models.CASCADE
)
associated_user = models.ForeignKey(
- "IshtarUser", blank=True, null=True, on_delete=models.SET_NULL
+ "IshtarUser", blank=True, null=True, on_delete=models.CASCADE
)
associated_group = models.ForeignKey(
- TargetKeyGroup, blank=True, null=True, on_delete=models.SET_NULL
+ TargetKeyGroup, blank=True, null=True, on_delete=models.CASCADE
)
class Meta:
@@ -995,8 +995,8 @@ class TargetKey(models.Model):
"associated_user",
"associated_import",
)
- verbose_name = _("Importer - Target key")
- verbose_name_plural = _("Importer - Targets keys")
+ verbose_name = _("Import - Target key")
+ verbose_name_plural = _("Import - Targets keys")
ordering = ("target", "key")
ADMIN_SECTION = _("Imports")
@@ -1022,34 +1022,36 @@ class TargetKey(models.Model):
return
return self.value
- def save(self, *args, **kwargs):
- obj = super(TargetKey, self).save(*args, **kwargs)
+ def create_itemkey(self, force_importer_type=False, force_all=False):
if not self.value:
- return obj
+ return
v = None
associated_model = self.target.associated_model
- if associated_model and hasattr(self.target.associated_model, "add_key"):
- # pk is given
+ if not associated_model or not hasattr(self.target.associated_model, "add_key"):
+ return
+ # pk is given
+ try:
+ v = self.target.associated_model.objects.get(pk=str(int(self.value)))
+ except (ValueError, self.target.associated_model.DoesNotExist):
+ # try with txt_idx
try:
- v = self.target.associated_model.objects.get(pk=str(int(self.value)))
- except (ValueError, self.target.associated_model.DoesNotExist):
- # try with txt_idx
- try:
- v = self.target.associated_model.objects.get(
- txt_idx=str(self.value)
- )
- except self.target.associated_model.DoesNotExist:
- pass
- if v:
- keys = {}
- if self.associated_group:
- keys["group"] = self.associated_group
- if self.associated_user:
- keys["user"] = self.associated_user
- else:
- keys["importer"] = self.associated_import
- v.add_key(self.key, **keys)
- return obj
+ v = self.target.associated_model.objects.get(
+ txt_idx=str(self.value)
+ )
+ except self.target.associated_model.DoesNotExist:
+ return
+ if force_all:
+ keys = {}
+ elif force_importer_type:
+ keys = {"importer_type": self.associated_import.importer_type}
+ else:
+ keys = {"ishtar_import": self.associated_import}
+ if self.associated_user:
+ keys["user"] = self.associated_user
+ elif self.associated_group:
+ keys["group"] = self.associated_group
+ v.add_key(self.key, **keys)
+ return
TARGET_MODELS = [
@@ -2919,28 +2921,86 @@ class ImportColumnValue(models.Model):
class ItemKey(models.Model):
+ """
+ Importers: links Key -> Item
+ """
key = models.TextField(_("Key"))
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
- object_id = models.PositiveIntegerField()
+ object_id = models.PositiveIntegerField(verbose_name=_("Value ID"))
content_object = GenericForeignKey("content_type", "object_id")
- importer = models.ForeignKey(
+ importer_type = models.ForeignKey(
+ ImporterType,
+ null=True,
+ blank=True,
+ verbose_name=_("Importer type"),
+ on_delete=models.CASCADE,
+ )
+ ishtar_import = models.ForeignKey(
Import,
null=True,
blank=True,
- help_text=_("Specific key to an import"),
- on_delete=models.SET_NULL,
+ verbose_name=_("Import"),
+ on_delete=models.CASCADE,
)
user = models.ForeignKey(
- "IshtarUser", blank=True, null=True, on_delete=models.SET_NULL
+ "IshtarUser", blank=True, null=True, on_delete=models.SET_NULL,
+ verbose_name=_("User")
)
group = models.ForeignKey(
- TargetKeyGroup, blank=True, null=True, on_delete=models.SET_NULL
+ TargetKeyGroup, blank=True, null=True, on_delete=models.SET_NULL,
+ verbose_name=_("Group")
)
class Meta:
- verbose_name = _("Import - Item key")
- verbose_name_plural = _("Import - Item keys")
+ verbose_name = _("Importer - Item key")
+ verbose_name_plural = _("Importer - Item keys")
ADMIN_SECTION = _("Imports")
def __str__(self):
return self.key
+
+ @property
+ def content_slug(self):
+ item = self.content_object
+ if hasattr(item, "txt_idx"):
+ key = "txt_idx"
+ elif hasattr(item, "slug"):
+ key = "slug"
+ else:
+ key = "pk"
+ return getattr(item, key)
+
+ def content_type_model(self):
+ return self.content_type.model
+ content_type_model.short_description = _("Content type model")
+
+ def linked_to_all(self):
+ return not self.importer_type and not self.user and not self.group \
+ and not self.ishtar_import
+
+ linked_to_all.boolean = True
+ linked_to_all.short_description = _("Linked to all")
+
+ def linked_to_importer_type(self):
+ return bool(self.importer_type)
+
+ linked_to_importer_type.boolean = True
+ linked_to_importer_type.short_description = _("Linked to importer")
+
+ def linked_to_importer(self):
+ return bool(self.ishtar_import)
+
+ linked_to_importer.boolean = True
+ linked_to_importer.short_description = _("Linked to import")
+
+ def linked_to_user(self):
+ return bool(self.user)
+
+ linked_to_user.boolean = True
+ linked_to_user.short_description = _("Linked to user")
+
+ def linked_to_group(self):
+ return bool(self.group)
+
+ linked_to_group.boolean = True
+ linked_to_group.short_description = _("Linked to group")