# -*- coding: utf-8 -*- # This file is part of the cashbook-module from m-ds for Tryton. # The COPYRIGHT file at the top level of this repository contains the # full copyright notices and license terms. from trytond.transaction import Transaction from trytond.pool import Pool, PoolMeta class Category(metaclass=PoolMeta): __name__ = 'cashbook.category' @classmethod def create_from_qif(cls, qifdata): """ add categories from QIF-File-content """ pool = Pool() QifTool = pool.get('cashbook_dataexchange.qiftool') Category2 = pool.get('cashbook.category') def get_create(ctype, catdict, parent, do_search): """ check if category exists, generate create-data """ result = [] for catname in catdict.keys(): if do_search == True: c_lst = Category2.search([ ('cattype', '=', ctype), ('name', '=', catname), ('parent', '=', None) if parent is None else ('parent.id', '=', parent.id), ]) else : c_lst = [] if len(c_lst) == 0: cat1 = { 'cattype': ctype, 'name': catname, } if parent is not None: cat1['parent'] = parent.id if len(catdict[catname]['childs']) > 0: childs = get_create(ctype, catdict[catname]['childs'], None, False) if len(childs) > 0: cat1['childs'] = [('create', childs)] result.append(cat1) else : if len(catdict[catname]['childs']) > 0: result.extend(get_create(ctype, catdict[catname]['childs'], c_lst[0], True)) return result type_data = QifTool.split_by_type(qifdata) if not 'Cat' in type_data.keys(): return None cat_tree = QifTool.qif_read_categories(type_data['Cat']) to_create = [] for typ1 in ['in', 'out']: to_create.extend(get_create(typ1, cat_tree[typ1], None, True)) return Category2.create(to_create) # end Category