cashbook_dataexchange/qif_import_wiz.py

136 lines
4.7 KiB
Python
Raw Normal View History

# -*- 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
from trytond.model import ModelView, fields
from trytond.wizard import Wizard, StateTransition, StateView, Button
from trytond.transaction import Transaction
2022-08-29 09:05:59 +00:00
from trytond.i18n import gettext
class ImportQifWizardStart(ModelView):
'Import QIF-File'
__name__ = 'cashbook_dataexchange.qif_imp_wiz.start'
company = fields.Many2One(model_name='company.company',
string="Company", required=True,
states={'invisible': True})
file_ = fields.Binary(string="QIF-File", required=True,
help='Quicken Interchange Format')
@classmethod
def default_company(cls):
return Transaction().context.get('company')
# end ImportQifWizardStart
2022-08-29 09:05:59 +00:00
class ImportQifWizardInfo(ModelView):
'Import QIF-File'
__name__ = 'cashbook_dataexchange.qif_imp_wiz.info'
company = fields.Many2One(model_name='company.company',
string="Company", required=True,
states={'invisible': True})
info = fields.Text(string='Information', readonly=True)
# end ImportQifWizardInfo
class ImportQifWizard(Wizard):
'Import QIF-File'
__name__ = 'cashbook_dataexchange.qif_imp_wiz'
start_state = 'start'
start = StateView(model_name='cashbook_dataexchange.qif_imp_wiz.start', \
view='cashbook_dataexchange.qif_imp_wiz_start_form', \
buttons=[
Button(string='Cancel', state='end', icon='tryton-cancel'),
Button(string='Read File', state='readf', icon='tryton-forward', default=True),
])
2022-08-29 09:05:59 +00:00
showinfo = StateView(model_name='cashbook_dataexchange.qif_imp_wiz.info', \
view='cashbook_dataexchange.qif_imp_wiz_info_form', \
buttons=[
Button(string='Cancel', state='end', icon='tryton-cancel'),
Button(string='Import Categories', state='importf', icon='tryton-import', default=True),
])
readf = StateTransition()
importf = StateTransition()
def default_showinfo(self, fields):
""" show import-info
"""
values = {
'company': self.start.company.id,
'info': getattr(self.showinfo, 'info', None),
}
return values
def transition_readf(self):
""" read file, show number of objects
"""
pool = Pool()
QitTool = pool.get('cashbook_dataexchange.qiftool')
model = Transaction().context.get('active_model', '')
file_content = None
if isinstance(self.start.file_, bytes):
file_content = self.start.file_.decode('utf8')
if model == 'cashbook.category':
def get_catlist(catlist, parent_name=None):
""" generate list of categories
"""
names = []
for name1 in catlist.keys():
name_lst = []
if parent_name:
name_lst.append(parent_name)
name_lst.append(name1)
current_name = '/'.join(name_lst)
names.append(current_name)
names.extend(get_catlist(catlist[name1]['childs'], current_name))
return names
# read file content, extract categories
qif_content = QitTool.split_by_type(file_content)
if 'Cat' in qif_content.keys():
categories = QitTool.qif_read_categories(qif_content['Cat'])
self.showinfo.info = gettext(
'cashbook_dataexchange.msg_wiz_categories_found',
categories = '\n'.join(
[' '] +
['%s (in)' % x for x in get_catlist(categories['in'], None)]+
[' '] +
['%s (out)' % x for x in get_catlist(categories['out'], None)]
)
)
else :
self.showinfo.info = gettext('cashbook_dataexchange.msg_wiz_no_categories')
return 'showinfo'
def transition_importf(self):
""" read file, show number of objects
"""
pool = Pool()
Category = pool.get('cashbook.category')
model = Transaction().context.get('active_model', '')
file_content = None
if isinstance(self.start.file_, bytes):
file_content = self.start.file_.decode('utf8')
if model == 'cashbook.category':
if file_content:
records = Category.create_from_qif(file_content)
return 'end'
# end ImportQifWizard