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) | 
