diff --git a/.hgignore b/.gitignore
similarity index 87%
rename from .hgignore
rename to .gitignore
index e2b39b0..88532e8 100644
--- a/.hgignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
-syntax: glob
+*.pyc
build/*
mds_cashbook_bookcategory.egg-info/*
dist/*
diff --git a/README.rst b/README.rst
index 7b12126..8ef20d6 100644
--- a/README.rst
+++ b/README.rst
@@ -9,11 +9,11 @@ pip install mds-cashbook-bookcategory
Requires
========
-- Tryton 6.0
+- Tryton 7.0
Changes
=======
-*6.0.0 - 07.11.2022*
+*7.0.0 - 01.12.2023*
-- init
+- compatibilty to Tryton 7.0
diff --git a/__init__.py b/__init__.py
index 11bfdee..e5bafe6 100644
--- a/__init__.py
+++ b/__init__.py
@@ -6,10 +6,13 @@
from trytond.pool import Pool
from .category import Category
from .book import CategoryCashbookRel, Cashbook
+from .ir import Rule
+
def register():
Pool.register(
Category,
Cashbook,
CategoryCashbookRel,
+ Rule,
module='cashbook_bookcategory', type_='model')
diff --git a/book.py b/book.py
index 65f0839..ee219a4 100644
--- a/book.py
+++ b/book.py
@@ -3,14 +3,14 @@
# this repository contains the full copyright notices and license terms.
from trytond.model import ModelSQL, fields
-from trytond.transaction import Transaction
-from trytond.pool import Pool, PoolMeta
+from trytond.pool import PoolMeta
class Cashbook(metaclass=PoolMeta):
__name__ = 'cashbook.book'
- categories = fields.Many2Many(string='Categories',
+ categories = fields.Many2Many(
+ string='Categories',
relation_name='cashbook.bookcategory-rel',
origin='cashbook', target='category')
@@ -21,9 +21,11 @@ class CategoryCashbookRel(ModelSQL):
'Category Cashbook Relation'
__name__ = 'cashbook.bookcategory-rel'
- category = fields.Many2One(string='Category', required=True, select=True,
+ category = fields.Many2One(
+ string='Category', required=True,
model_name='cashbook.bookcategory', ondelete='CASCADE')
- cashbook = fields.Many2One(string='Cashbook', required=True, select=True,
+ cashbook = fields.Many2One(
+ string='Cashbook', required=True,
model_name='cashbook.book', ondelete='CASCADE')
# end CategoryCashbookRel
diff --git a/category.py b/category.py
index 06160cc..7b97dcb 100644
--- a/category.py
+++ b/category.py
@@ -11,31 +11,35 @@ class Category(tree(separator=' / '), ModelSQL, ModelView):
"Cashbook Category"
__name__ = "cashbook.bookcategory"
- company = fields.Many2One(string='Company', model_name='company.company',
+ company = fields.Many2One(
+ string='Company', model_name='company.company',
required=True, ondelete="RESTRICT")
name = fields.Char(string='Name', required=True, translate=True)
- parent = fields.Many2One(string='Parent', select=True,
- model_name='cashbook.bookcategory', ondelete='CASCADE',
- left='left', right='right')
- childs = fields.One2Many(string='Children', field='parent',
+ parent = fields.Many2One(
+ string='Parent',
+ model_name='cashbook.bookcategory', ondelete='CASCADE')
+ childs = fields.One2Many(
+ string='Children', field='parent',
model_name='cashbook.bookcategory')
- left = fields.Integer(string='Left', required=True, select=True)
- right = fields.Integer(string='Right', required=True, select=True)
+
+ cashbooks = fields.Many2Many(
+ string='Cashbooks',
+ relation_name='cashbook.bookcategory-rel',
+ origin='category', target='cashbook')
+
+ @classmethod
+ def __register__(cls, module_name):
+ super(Category, cls).__register__(module_name)
+ table = cls.__table_handler__(module_name)
+ table.drop_column('left')
+ table.drop_column('right')
@classmethod
def __setup__(cls):
super(Category, cls).__setup__()
cls._order.insert(0, ('rec_name', 'ASC'))
- @staticmethod
- def default_left():
- return 0
-
- @staticmethod
- def default_right():
- return 0
-
@staticmethod
def default_company():
return Transaction().context.get('company') or None
diff --git a/category.xml b/category.xml
index eab3ea6..41b5fbb 100644
--- a/category.xml
+++ b/category.xml
@@ -115,7 +115,7 @@
diff --git a/ir.py b/ir.py
new file mode 100644
index 0000000..182092e
--- /dev/null
+++ b/ir.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# This file is part of the cashbook-module from m-ds.de for Tryton.
+# The COPYRIGHT file at the top level of this repository contains the
+# full copyright notices and license terms.
+
+from trytond.pool import PoolMeta
+
+
+class Rule(metaclass=PoolMeta):
+ __name__ = 'ir.rule'
+
+ @classmethod
+ def _context_modelnames(cls):
+ """ list of models to add 'user_id' to context
+ """
+ result = super(Rule, cls)._context_modelnames()
+ return result | {
+ 'cashbook.bookcategory',
+ }
+
+# end Rule
diff --git a/locale/de.po b/locale/de.po
index 2372d4e..94fce9d 100644
--- a/locale/de.po
+++ b/locale/de.po
@@ -54,6 +54,10 @@ msgctxt "view:cashbook.bookcategory:"
msgid "General Information"
msgstr "Allgemein"
+msgctxt "view:cashbook.bookcategory:"
+msgid "Cashbooks"
+msgstr "Kassenbücher"
+
msgctxt "field:cashbook.bookcategory,name:"
msgid "Name"
msgstr "Name"
@@ -78,6 +82,10 @@ msgctxt "field:cashbook.bookcategory,right:"
msgid "Right"
msgstr "Rechts"
+msgctxt "field:cashbook.bookcategory,cashbooks:"
+msgid "Cashbooks"
+msgstr "Kassenbücher"
+
#################
# cashbook.book #
diff --git a/locale/en.po b/locale/en.po
index 97cfcf1..7374def 100644
--- a/locale/en.po
+++ b/locale/en.po
@@ -38,6 +38,10 @@ msgctxt "view:cashbook.bookcategory:"
msgid "General Information"
msgstr "General Information"
+msgctxt "view:cashbook.bookcategory:"
+msgid "Cashbooks"
+msgstr "Cashbooks"
+
msgctxt "field:cashbook.bookcategory,name:"
msgid "Name"
msgstr "Name"
@@ -62,6 +66,10 @@ msgctxt "field:cashbook.bookcategory,right:"
msgid "Right"
msgstr "Right"
+msgctxt "field:cashbook.bookcategory,cashbooks:"
+msgid "Cashbooks"
+msgstr "Cashbooks"
+
msgctxt "view:cashbook.book:"
msgid "Categories"
msgstr "Categories"
diff --git a/setup.py b/setup.py
index 235b3ab..043ba3f 100644
--- a/setup.py
+++ b/setup.py
@@ -2,7 +2,7 @@
"""
# Always prefer setuptools over distutils
-from setuptools import setup, find_packages
+from setuptools import setup
# 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 = 6
+major_version = 7
minor_version = 0
requires = []
@@ -51,56 +51,58 @@ 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 categories for cashbooks.',
long_description=long_description,
+ long_description_content_type='text/x-rst',
url='https://www.m-ds.de/',
+ download_url='https://scmdev.m-ds.de/Tryton/Extra/cashbook_bookcategory',
author='martin-data services',
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',
+ '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',
],
-
keywords='tryton cashbook category',
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',
- 'view/*.xml',
- 'versiondep.txt', 'README.rst']),
+ 'trytond.modules.%s' % MODULE: (info.get('xml', []) + [
+ 'tryton.cfg', 'locale/*.po', 'tests/*.py',
+ 'view/*.xml', 'versiondep.txt', 'README.rst']),
},
-
install_requires=requires,
zip_safe=False,
entry_points="""
diff --git a/tests/__init__.py b/tests/__init__.py
index ead6f2c..cf7e957 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -1,24 +1,4 @@
-# This file is part of 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 trytond.modules.cashbook_bookcategory.tests.test_category import CategoryTestCase
-
-
-__all__ = ['suite']
-
-
-class CashbookCategoryTestCase(\
- CategoryTestCase,\
- ):
- 'Test cashbook module'
- module = 'cashbook_bookcategory'
-
-# end CashbookCategoryTestCase
-
-def suite():
- suite = trytond.tests.test_tryton.suite()
- suite.addTests(unittest.TestLoader().loadTestsFromTestCase(CashbookCategoryTestCase))
- return suite
+# -*- 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.
diff --git a/tests/test_category.py b/tests/test_category.py
index 9677d39..ddc689d 100644
--- a/tests/test_category.py
+++ b/tests/test_category.py
@@ -3,11 +3,10 @@
# The COPYRIGHT file at the top level of this repository contains the
# full copyright notices and license terms.
-from trytond.tests.test_tryton import ModuleTestCase, with_transaction
+from trytond.tests.test_tryton import with_transaction
from trytond.pool import Pool
from trytond.transaction import Transaction
-from trytond.exceptions import UserError
-from trytond.modules.cashbook.tests import CashbookTestCase
+from trytond.modules.cashbook.tests.test_module import CashbookTestCase
class CategoryTestCase(CashbookTestCase):
@@ -22,8 +21,7 @@ class CategoryTestCase(CashbookTestCase):
company = self.prep_company()
with Transaction().set_context({
- 'company': company.id,
- }):
+ 'company': company.id}):
categories, = BookCategory.create([{
'name': 'Cat 0',
'childs': [('create', [{
@@ -56,8 +54,7 @@ class CategoryTestCase(CashbookTestCase):
types = self.prep_type()
company = self.prep_company()
with Transaction().set_context({
- 'company': company.id,
- }):
+ 'company': company.id}):
category, = BookCategory.create([{
'name': 'Cat 0',
'childs': [('create', [{
@@ -78,6 +75,11 @@ class CategoryTestCase(CashbookTestCase):
self.assertEqual(len(book.categories), 1)
self.assertEqual(book.categories[0].rec_name, 'Cat 0')
+ self.assertEqual(len(category.cashbooks), 1)
+ self.assertEqual(
+ category.cashbooks[0].rec_name,
+ 'Book 1 | 0.00 usd | Open')
+
# replace category
Book.write(*[
[book],
@@ -96,3 +98,6 @@ class CategoryTestCase(CashbookTestCase):
self.assertEqual(len(book.categories), 0)
# end CategoryTestCase
+
+
+del CashbookTestCase
diff --git a/tryton.cfg b/tryton.cfg
index ba1dc2c..8fb9398 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,5 +1,5 @@
[tryton]
-version=6.0.0
+version=7.0.0
depends:
cashbook
xml:
diff --git a/versiondep.txt b/versiondep.txt
index e56514a..afb67b8 100644
--- a/versiondep.txt
+++ b/versiondep.txt
@@ -1,2 +1,2 @@
-cashbook;6.0.19;6.0.999;mds
+cashbook;7.0.31;7.0.999;mds
diff --git a/view/category_form.xml b/view/category_form.xml
index 5366dfc..2d6d58d 100644
--- a/view/category_form.xml
+++ b/view/category_form.xml
@@ -12,6 +12,9 @@ full copyright notices and license terms. -->
+
+
+