diff options
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 |
commit | 0e14ea23407a6b99fba0fce091b31567979311f9 (patch) | |
tree | c9fb03cb05f7febf5278982a9d19ab19a959f316 /ishtar_common/models_imports.py | |
parent | c2efcd641e59ef43a496eb66871de0595a51ff33 (diff) | |
download | Ishtar-0e14ea23407a6b99fba0fce091b31567979311f9.tar.bz2 Ishtar-0e14ea23407a6b99fba0fce091b31567979311f9.zip |
Generate libreoffice template for importer from admin
Diffstat (limited to 'ishtar_common/models_imports.py')
-rw-r--r-- | ishtar_common/models_imports.py | 53 |
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) |