summaryrefslogtreecommitdiff
path: root/ishtar_common/models_imports.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2023-10-05 13:14:56 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2024-02-05 10:51:52 +0100
commit71d9b6fdc1b48f0a31c3c2f348bb715d9dde155b (patch)
tree79753e031ae9f190bde9e17429ce302379979a86 /ishtar_common/models_imports.py
parent6393088eb7490f6dbb9a74a12184ca5cb0e11433 (diff)
downloadIshtar-71d9b6fdc1b48f0a31c3c2f348bb715d9dde155b.tar.bz2
Ishtar-71d9b6fdc1b48f0a31c3c2f348bb715d9dde155b.zip
✨ improve import and import group sheet
- link to errors, match, result files - pre import values - link to associated imports and group imports
Diffstat (limited to 'ishtar_common/models_imports.py')
-rw-r--r--ishtar_common/models_imports.py84
1 files changed, 66 insertions, 18 deletions
diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py
index 84ea42112..1723fc5bf 100644
--- a/ishtar_common/models_imports.py
+++ b/ishtar_common/models_imports.py
@@ -1499,6 +1499,20 @@ class ImportGroup(BaseImport):
return False
@property
+ def pre_import_items(self) -> list:
+ """
+ Get list of tuple : (label, value) of pre-import values for this group import. Cached in memory.
+ :return: pre import as a list of 2-tuple
+ """
+ if hasattr(self, "_pre_import_items"):
+ return self._pre_import_items
+ values = []
+ for imprt in self.imports.all():
+ values += imprt.pre_import_items
+ self._pre_import_items = values
+ return values
+
+ @property
def has_error(self) -> bool:
return any(1 for imprt in self.imports.all() if imprt.has_error)
@@ -1949,6 +1963,55 @@ class Import(BaseImport):
return False
return True
+ def _get_pre_import_value(self, value, target):
+ if value == "":
+ return
+ many = target.formater_type.many_split
+ if many:
+ if value.startswith("['") and value.endswith("']"):
+ value = value[2:-2].split("', '")
+ associated_model = target.formater_type.associated_model
+ if associated_model:
+ if many:
+ try:
+ value = [associated_model.objects.get(pk=int(pk)) for pk in value]
+ except (associated_model.DoesNotExist, ValueError):
+ return
+ else:
+ try:
+ value = associated_model.objects.get(pk=value)
+ except (associated_model.DoesNotExist, ValueError):
+ return
+ return value
+
+ @property
+ def pre_import_items(self) -> list:
+ """
+ Get list of tuple : (label, value) of pre-import values for this import. Cached in memory.
+ :return: pre import as a list of 2-tuple
+ """
+ if hasattr(self, "_pre_import_items"):
+ return self._pre_import_items
+ values = []
+ for column in self.importer_type.columns.filter(col_number__lte=0):
+ q = ImportColumnValue.objects.filter(column=column, import_item=self)
+ if not q.count():
+ continue
+ column_value = q.all()[0]
+ q = column_value.column.targets.all()
+ if not q.count():
+ continue
+
+ target = q.all()[0]
+ value = column_value.value
+ value = self._get_pre_import_value(value, target)
+ if value is None:
+ continue
+
+ values.append((column_value.column.label, value))
+ self._pre_import_items = values
+ return values
+
@property
def pre_import_values(self) -> dict:
"""
@@ -1966,27 +2029,12 @@ class Import(BaseImport):
q = column_value.column.targets.all()
if not q.count():
continue
- target = q.all()[0]
+ target = q.all()[0]
value = column_value.value
- if value == "":
+ value = self._get_pre_import_value(value, target)
+ if value is None:
continue
- many = target.formater_type.many_split
- if many:
- if value.startswith("['") and value.endswith("']"):
- value = value[2:-2].split("', '")
- associated_model = target.formater_type.associated_model
- if associated_model:
- if many:
- try:
- value = [associated_model.objects.get(pk=int(pk)) for pk in value]
- except (associated_model.DoesNotExist, ValueError):
- continue
- else:
- try:
- value = associated_model.objects.get(pk=value)
- except (associated_model.DoesNotExist, ValueError):
- continue
keys = target.target.split("__")
dct = generate_dict_from_list(keys, value)