summaryrefslogtreecommitdiff
path: root/ishtar_common/models_imports.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-05-06 18:16:05 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-06-17 13:21:28 +0200
commit8e44059bec779007f8aed357a8ddfb155bcd989b (patch)
treec9fb03cb05f7febf5278982a9d19ab19a959f316 /ishtar_common/models_imports.py
parent43ab0a3ebf23480184bdfb50da0ddf13aa10f751 (diff)
downloadIshtar-8e44059bec779007f8aed357a8ddfb155bcd989b.tar.bz2
Ishtar-8e44059bec779007f8aed357a8ddfb155bcd989b.zip
Generate libreoffice template for importer from admin
Diffstat (limited to 'ishtar_common/models_imports.py')
-rw-r--r--ishtar_common/models_imports.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py
index 23057e6f5..74a7653f1 100644
--- a/ishtar_common/models_imports.py
+++ b/ishtar_common/models_imports.py
@@ -125,6 +125,59 @@ class ImporterType(models.Model):
def __str__(self):
return self.name
+ def get_libreoffice_template(self):
+ if not settings.USE_LIBREOFFICE:
+ return
+ from ishtar_common.libreoffice import UnoCalc
+ ROW_NUMBER = 500
+ uno = UnoCalc()
+ calc = uno.create_calc()
+
+ main_sheet = uno.get_sheet(calc, 0, self.name)
+ lst_sheet = uno.get_sheet(calc, 1, str(_("List types")))
+
+ if not calc:
+ return
+ col_number = 1 # user number so we start with 1
+ lst_col_number = 0
+ for column in self.columns.order_by('col_number').all():
+ while column.col_number > col_number:
+ col_number += 1
+ # header
+ cell = main_sheet.getCellByPosition(col_number - 1, 0)
+ cell.CharWeight = 150
+ cell.setString(column.label)
+
+ # only managing the first target...
+ ft = None
+ for target in column.targets.all():
+ ft = target.formater_type
+ if ft:
+ break
+ if not ft:
+ continue
+ # first we only manage TypeFormater
+ if ft.formater_type != 'TypeFormater':
+ continue
+ if not ft.options: # bad configuration
+ continue
+ model = import_class(ft.options)
+ if not model:
+ continue
+ lst = []
+ for typ in model.get_types(instances=True):
+ lst.append(str(typ))
+ end_row = uno.create_list(lst_sheet, lst_col_number, 0,
+ str(model._meta.verbose_name), lst)
+ uno.set_cell_validation_list(
+ main_sheet, col_number, 1, ROW_NUMBER + 1,
+ lst_sheet, lst_col_number, [1, end_row])
+ lst_col_number += 1
+ tmpdir = tempfile.mkdtemp(prefix="ishtar-templates-")
+ dest_filename = "{}{}{}.ods".format(tmpdir, os.sep, self.name)
+ uno.save_calc(calc, dest_filename)
+ return dest_filename
+
def get_importer_class(self, import_instance=None):
OBJECT_CLS = import_class(self.associated_models.klass)
DEFAULTS = dict([(default.keys, default.values)