Compare commits
26 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
5931736b16 | ||
![]() |
761083cbbe | ||
![]() |
da211efd93 | ||
![]() |
b4a02d92d6 | ||
![]() |
978823faf7 | ||
![]() |
492befca04 | ||
![]() |
0c2bae0663 | ||
![]() |
70c4741c9d | ||
![]() |
eb8c1baa1b | ||
![]() |
803262e202 | ||
![]() |
c5b3277622 | ||
![]() |
3796c7b7bc | ||
![]() |
5544433b81 | ||
![]() |
e56b4f0cf8 | ||
![]() |
40ee9ed169 | ||
![]() |
63108a34eb | ||
![]() |
5216cecba7 | ||
![]() |
491678da69 | ||
![]() |
e9cde133c2 | ||
![]() |
8bb396f1d8 | ||
![]() |
78d02a60b7 | ||
![]() |
a26e7119eb | ||
![]() |
be9c584fea | ||
![]() |
ac9400c085 | ||
![]() |
cdc0dfa49d | ||
![]() |
3eb4aebe0a |
11 changed files with 108 additions and 71 deletions
28
README.rst
28
README.rst
|
@ -9,11 +9,33 @@ pip install mds-cashbook-dataexchange
|
|||
|
||||
Requires
|
||||
========
|
||||
- Tryton 7.0
|
||||
- Tryton 6.0
|
||||
|
||||
Changes
|
||||
=======
|
||||
|
||||
*7.0.0 - 01.12.2023*
|
||||
*6.0.5 - 06.06.2023*
|
||||
|
||||
- compatibility to Tryton 7.0
|
||||
- optimize code
|
||||
|
||||
*6.0.4 - 14.02.2023*
|
||||
|
||||
- fix: test
|
||||
|
||||
*6.0.3 - 13.09.2022*
|
||||
|
||||
- add: import of split-bookings
|
||||
- updt: transfers
|
||||
|
||||
*6.0.2 - 05.09.2022*
|
||||
|
||||
- category: qif-export
|
||||
- party, transactions: qif-import/export
|
||||
|
||||
*6.0.1 - 31.08.2022*
|
||||
|
||||
- add: qif - category - import
|
||||
|
||||
*6.0.0 - 28.08.2022*
|
||||
|
||||
- init
|
||||
|
|
|
@ -7,11 +7,9 @@ from trytond.pool import Pool
|
|||
from .category import Category
|
||||
from .book import Book
|
||||
from .qiftool import QifTool
|
||||
from .qif_import_wiz import (
|
||||
ImportQifWizard, ImportQifWizardStart, ImportQifWizardInfo)
|
||||
from .qif_import_wiz import ImportQifWizard, ImportQifWizardStart, ImportQifWizardInfo
|
||||
from .qif_export import QifCategoryExport, QifBookExport
|
||||
|
||||
|
||||
def register():
|
||||
Pool.register(
|
||||
QifTool,
|
||||
|
|
|
@ -24,7 +24,8 @@ class ImportQifWizardStart(ModelView):
|
|||
string='Cashbook', readonly=True,
|
||||
model_name='cashbook.book',
|
||||
states={
|
||||
'invisible': ~Bool(Eval('book'))})
|
||||
'invisible': ~Bool(Eval('book')),
|
||||
})
|
||||
file_ = fields.Binary(
|
||||
string="QIF-File", required=True,
|
||||
help='Quicken Interchange Format')
|
||||
|
@ -46,7 +47,8 @@ class ImportQifWizardInfo(ModelView):
|
|||
book = fields.Many2One(
|
||||
string='Cash Book', readonly=True, model_name='cashbook.book',
|
||||
states={
|
||||
'invisible': ~Bool(Eval('book'))})
|
||||
'invisible': ~Bool(Eval('book')),
|
||||
})
|
||||
allowimport = fields.Boolean(
|
||||
string='Import Enabled',
|
||||
states={'invisible': True})
|
||||
|
@ -67,7 +69,8 @@ class ImportQifWizard(Wizard):
|
|||
Button(string='Cancel', state='end', icon='tryton-cancel'),
|
||||
Button(
|
||||
string='Read File', state='readf',
|
||||
icon='tryton-forward', default=True)])
|
||||
icon='tryton-forward', default=True),
|
||||
])
|
||||
showinfo = StateView(
|
||||
model_name='cashbook_dataexchange.qif_imp_wiz.info',
|
||||
view='cashbook_dataexchange.qif_imp_wiz_info_form',
|
||||
|
@ -76,7 +79,10 @@ class ImportQifWizard(Wizard):
|
|||
Button(
|
||||
string='Import Data', state='importf',
|
||||
icon='tryton-import', default=True,
|
||||
states={'readonly': ~Eval('allowimport', False)})])
|
||||
states={
|
||||
'readonly': Eval('allowimport', False) == False,
|
||||
}),
|
||||
])
|
||||
|
||||
readf = StateTransition()
|
||||
importf = StateTransition()
|
||||
|
@ -88,7 +94,8 @@ class ImportQifWizard(Wizard):
|
|||
|
||||
values = {
|
||||
'company': Transaction().context.get('company'),
|
||||
'book': None}
|
||||
'book': None,
|
||||
}
|
||||
|
||||
model = context.get('active_model', '')
|
||||
if model == 'cashbook.book':
|
||||
|
@ -163,7 +170,8 @@ class ImportQifWizard(Wizard):
|
|||
['%s (in)' % x for x in in_categories] +
|
||||
[''] +
|
||||
['%s (out)' % x for x in out_categories]
|
||||
))
|
||||
)
|
||||
)
|
||||
if len(to_create) > 0:
|
||||
self.showinfo.allowimport = True
|
||||
else:
|
||||
|
@ -174,7 +182,8 @@ class ImportQifWizard(Wizard):
|
|||
qif_content = QifTool.split_by_type(file_content)
|
||||
if 'Bank' in qif_content.keys():
|
||||
to_create = QifTool.convert_parties_to_create(
|
||||
QifTool.qif_read_transactions(qif_content['Bank']))
|
||||
QifTool.qif_read_transactions(qif_content['Bank'])
|
||||
)
|
||||
self.showinfo.info = gettext(
|
||||
'cashbook_dataexchange.msg_wiz_parties_found',
|
||||
numparties=len(to_create),
|
||||
|
@ -257,7 +266,8 @@ class ImportQifWizard(Wizard):
|
|||
Book.create_from_qif(self.showinfo.book, file_content)
|
||||
lines = Line.search([
|
||||
('cashbook.id', '=', self.showinfo.book.id),
|
||||
('state', '=', 'edit')])
|
||||
('state', '=', 'edit'),
|
||||
])
|
||||
if len(lines) > 0:
|
||||
Line.wfcheck(lines)
|
||||
elif model == 'party.party':
|
||||
|
|
71
setup.py
71
setup.py
|
@ -2,7 +2,7 @@
|
|||
"""
|
||||
|
||||
# Always prefer setuptools over distutils
|
||||
from setuptools import setup
|
||||
from setuptools import setup, find_packages
|
||||
# To use a consistent encoding
|
||||
from codecs import open
|
||||
from os import path
|
||||
|
@ -36,10 +36,10 @@ with open(path.join(here, 'versiondep.txt'), encoding='utf-8') as f:
|
|||
l2 = i.strip().split(';')
|
||||
if len(l2) < 4:
|
||||
continue
|
||||
modversion[l2[0]] = {'min': l2[1], 'max': l2[2], 'prefix': l2[3]}
|
||||
modversion[l2[0]] = {'min':l2[1], 'max':l2[2], 'prefix':l2[3]}
|
||||
|
||||
# tryton-version
|
||||
major_version = 7
|
||||
major_version = 6
|
||||
minor_version = 0
|
||||
|
||||
requires = ['python-slugify']
|
||||
|
@ -51,21 +51,19 @@ for dep in info.get('depends', []):
|
|||
prefix = modversion[dep]['prefix']
|
||||
|
||||
if len(modversion[dep]['max']) > 0:
|
||||
requires.append('%s_%s >= %s, <= %s' % (
|
||||
prefix, dep, modversion[dep]['min'],
|
||||
modversion[dep]['max']))
|
||||
else:
|
||||
requires.append('%s_%s >= %s' % (
|
||||
prefix, dep, modversion[dep]['min']))
|
||||
else:
|
||||
requires.append('%s_%s >= %s.%s, < %s.%s' % (
|
||||
'trytond', dep, major_version, minor_version,
|
||||
requires.append('%s_%s >= %s, <= %s' %
|
||||
(prefix, dep, modversion[dep]['min'], modversion[dep]['max']))
|
||||
else :
|
||||
requires.append('%s_%s >= %s' %
|
||||
(prefix, dep, modversion[dep]['min']))
|
||||
else :
|
||||
requires.append('%s_%s >= %s.%s, < %s.%s' %
|
||||
('trytond', dep, major_version, minor_version,
|
||||
major_version, minor_version + 1))
|
||||
requires.append('trytond >= %s.%s, < %s.%s' % (
|
||||
major_version, minor_version, major_version, minor_version + 1))
|
||||
requires.append('trytond >= %s.%s, < %s.%s' %
|
||||
(major_version, minor_version, major_version, minor_version + 1))
|
||||
|
||||
setup(
|
||||
name='%s_%s' % (PREFIX, MODULE),
|
||||
setup(name='%s_%s' % (PREFIX, MODULE),
|
||||
version=info.get('version', '0.0.1'),
|
||||
description='Tryton module to add import/export to cashbook.',
|
||||
long_description=long_description,
|
||||
|
@ -76,34 +74,35 @@ setup(
|
|||
author_email='service@m-ds.de',
|
||||
license='GPL-3',
|
||||
classifiers=[
|
||||
'Development Status :: 5 - Production/Stable',
|
||||
'Environment :: Plugins',
|
||||
'Framework :: Tryton',
|
||||
'Intended Audience :: Developers',
|
||||
'Intended Audience :: Customer Service',
|
||||
'Intended Audience :: Information Technology',
|
||||
'Intended Audience :: Financial and Insurance Industry',
|
||||
'Topic :: Office/Business',
|
||||
'Topic :: Office/Business :: Financial :: Accounting',
|
||||
'Natural Language :: German',
|
||||
'Natural Language :: English',
|
||||
'Operating System :: OS Independent',
|
||||
'License :: OSI Approved :: GNU General Public License (GPL)',
|
||||
'Programming Language :: Python :: 3.7',
|
||||
'Programming Language :: Python :: 3.8',
|
||||
'Programming Language :: Python :: 3.9',
|
||||
'Development Status :: 5 - Production/Stable',
|
||||
'Environment :: Plugins',
|
||||
'Framework :: Tryton',
|
||||
'Intended Audience :: Developers',
|
||||
'Intended Audience :: Customer Service',
|
||||
'Intended Audience :: Information Technology',
|
||||
'Intended Audience :: Financial and Insurance Industry',
|
||||
'Topic :: Office/Business',
|
||||
'Topic :: Office/Business :: Financial :: Accounting',
|
||||
'Natural Language :: German',
|
||||
'Natural Language :: English',
|
||||
'Operating System :: OS Independent',
|
||||
'License :: OSI Approved :: GNU General Public License (GPL)',
|
||||
'Programming Language :: Python :: 3.7',
|
||||
'Programming Language :: Python :: 3.8',
|
||||
],
|
||||
|
||||
keywords='tryton cashbook import export',
|
||||
package_dir={'trytond.modules.%s' % MODULE: '.'},
|
||||
packages=[
|
||||
'trytond.modules.%s' % MODULE,
|
||||
],
|
||||
package_data={
|
||||
'trytond.modules.%s' % MODULE: (info.get('xml', []) + [
|
||||
'tryton.cfg', 'locale/*.po', 'tests/*.py',
|
||||
'report/*.fods', 'view/*.xml',
|
||||
'versiondep.txt', 'README.rst']),
|
||||
'trytond.modules.%s' % MODULE: (info.get('xml', [])
|
||||
+ ['tryton.cfg', 'locale/*.po', 'tests/*.py',
|
||||
'report/*.fods', 'view/*.xml',
|
||||
'versiondep.txt', 'README.rst']),
|
||||
},
|
||||
|
||||
install_requires=requires,
|
||||
zip_safe=False,
|
||||
entry_points="""
|
||||
|
|
|
@ -2,3 +2,17 @@
|
|||
# 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.
|
||||
|
||||
import trytond.tests.test_tryton
|
||||
import unittest
|
||||
|
||||
from .test_module import CashbookExchangeTestCase
|
||||
|
||||
__all__ = ['suite']
|
||||
|
||||
|
||||
def suite():
|
||||
suite = trytond.tests.test_tryton.suite()
|
||||
suite.addTests(unittest.TestLoader().loadTestsFromTestCase(
|
||||
CashbookExchangeTestCase))
|
||||
return suite
|
||||
|
|
|
@ -21,8 +21,7 @@ class CategoryTestCase(object):
|
|||
"""
|
||||
pool = Pool()
|
||||
Category = pool.get('cashbook.category')
|
||||
ImportWiz = pool.get(
|
||||
'cashbook_dataexchange.qif_imp_wiz', type='wizard')
|
||||
ImportWiz = pool.get('cashbook_dataexchange.qif_imp_wiz', type='wizard')
|
||||
|
||||
company = self.prep_company()
|
||||
with Transaction().set_context({
|
||||
|
@ -359,8 +358,7 @@ I
|
|||
'bookingtype': 'mvout',
|
||||
'booktransf': books[1].id,
|
||||
'description':
|
||||
'GA NR00002168 BLZ10000000 0; 05.12/06.42UHR ' +
|
||||
'TT TELTOW',
|
||||
'GA NR00002168 BLZ10000000 0; 05.12/06.42UHR TT TELTOW',
|
||||
}, {
|
||||
'date': date(2013, 12, 5),
|
||||
'amount': Decimal('56.37'),
|
||||
|
@ -477,8 +475,7 @@ I
|
|||
|
||||
result = QifTool.qif_read_categories(
|
||||
'NGehalt\nI\n^\nNGehalt:Zulagen\nI\n^' +
|
||||
'NTelekommunikation\nE\n^\nNTelekommunikation:' +
|
||||
'Online-Dienste\nE\n^')
|
||||
'NTelekommunikation\nE\n^\nNTelekommunikation:Online-Dienste\nE\n^')
|
||||
self.assertEqual(result, {
|
||||
'in': {
|
||||
'Gehalt': {
|
||||
|
|
|
@ -19,8 +19,7 @@ class PartyTestCase(object):
|
|||
"""
|
||||
pool = Pool()
|
||||
Party = pool.get('party.party')
|
||||
ImportWiz = pool.get(
|
||||
'cashbook_dataexchange.qif_imp_wiz', type='wizard')
|
||||
ImportWiz = pool.get('cashbook_dataexchange.qif_imp_wiz', type='wizard')
|
||||
|
||||
company = self.prep_company()
|
||||
with Transaction().set_context({
|
||||
|
@ -46,9 +45,8 @@ class PartyTestCase(object):
|
|||
|
||||
self.assertEqual(list(result.keys()), ['view'])
|
||||
self.assertEqual(result['view']['defaults']['company'], company.id)
|
||||
self.assertEqual(
|
||||
result['view']['defaults']['info'],
|
||||
"""The following 3 parties are now imported:\n
|
||||
self.assertEqual(result['view']['defaults']['info'],
|
||||
"""The following 3 parties are now imported:\n
|
||||
Opening Balance
|
||||
GA NR00002168 BLZ10000000 0
|
||||
Foodshop Zehlendorf""")
|
||||
|
@ -63,8 +61,7 @@ Foodshop Zehlendorf""")
|
|||
self.assertEqual(len(records), 4)
|
||||
|
||||
self.assertEqual(records[0].rec_name, 'Foodshop Zehlendorf')
|
||||
self.assertEqual(
|
||||
records[1].rec_name, 'GA NR00002168 BLZ10000000 0')
|
||||
self.assertEqual(records[1].rec_name, 'GA NR00002168 BLZ10000000 0')
|
||||
self.assertEqual(records[2].rec_name, 'm-ds')
|
||||
self.assertEqual(records[3].rec_name, 'Opening Balance')
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
# full copyright notices and license terms.
|
||||
|
||||
|
||||
from trytond.tests.test_tryton import ModuleTestCase
|
||||
from trytond.modules.cashbook.tests.test_module import CashbookTestCase
|
||||
from .category import CategoryTestCase
|
||||
from .party import PartyTestCase
|
||||
|
@ -14,11 +15,12 @@ class CashbookExchangeTestCase(
|
|||
CashbookTestCase,
|
||||
CategoryTestCase,
|
||||
PartyTestCase,
|
||||
TransactionTestCase):
|
||||
TransactionTestCase,
|
||||
ModuleTestCase):
|
||||
'Test cashbook exchange module'
|
||||
module = 'cashbook_dataexchange'
|
||||
|
||||
# end CashbookExchangeTestCase
|
||||
|
||||
|
||||
del CashbookTestCase
|
||||
del ModuleTestCase
|
||||
|
|
|
@ -84,8 +84,7 @@ class TransactionTestCase(object):
|
|||
Party = pool.get('party.party')
|
||||
Category = pool.get('cashbook.category')
|
||||
Book = pool.get('cashbook.book')
|
||||
ImportWiz = pool.get(
|
||||
'cashbook_dataexchange.qif_imp_wiz', type='wizard')
|
||||
ImportWiz = pool.get('cashbook_dataexchange.qif_imp_wiz', type='wizard')
|
||||
|
||||
company = self.prep_company()
|
||||
with Transaction().set_context({
|
||||
|
@ -224,8 +223,7 @@ Mreturn of bottles
|
|||
Party = pool.get('party.party')
|
||||
Category = pool.get('cashbook.category')
|
||||
Book = pool.get('cashbook.book')
|
||||
ImportWiz = pool.get(
|
||||
'cashbook_dataexchange.qif_imp_wiz', type='wizard')
|
||||
ImportWiz = pool.get('cashbook_dataexchange.qif_imp_wiz', type='wizard')
|
||||
|
||||
company = self.prep_company()
|
||||
with Transaction().set_context({
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[tryton]
|
||||
version=7.0.0
|
||||
version=6.0.5
|
||||
depends:
|
||||
cashbook
|
||||
xml:
|
||||
|
|
|
@ -1 +1 @@
|
|||
cashbook;7.0.31;7.0.999;mds
|
||||
cashbook;6.0.28;6.0.999;mds
|
||||
|
|
Loading…
Reference in a new issue