2022-08-28 12:54:14 +00:00
|
|
|
# -*- 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
|
|
|
|
|
|
|
|
|
2022-08-28 20:16:34 +00:00
|
|
|
class Category(metaclass=PoolMeta):
|
2022-08-28 12:54:14 +00:00
|
|
|
__name__ = 'cashbook.category'
|
|
|
|
|
2022-08-28 20:16:34 +00:00
|
|
|
@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)
|
2022-08-28 12:54:14 +00:00
|
|
|
|
|
|
|
# end Category
|