Compare commits

...

11 commits
6.0 ... main

Author SHA1 Message Date
Frederik Jaeckel
1bfa987746 Use 'irrulecontext' to add 'user_id' to context of ir.rule 2024-07-19 16:02:19 +02:00
Frederik Jaeckel
f7fee173d7 update gitignore 2024-07-19 16:01:44 +02:00
Frederik Jaeckel
a98b4387c4 ir-rule: condition --> Eval('user_id', -1) 2023-12-04 20:05:06 +01:00
Frederik Jaeckel
176c8d93a7 Tryton 7.0 2023-12-01 12:15:17 +01:00
Frederik Jaeckel
126daacf0a formatting 2023-12-01 12:13:39 +01:00
Frederik Jaeckel
e0e1fd07a7 Tryton 6.8: indexes + tests changed 2023-06-05 21:28:09 +02:00
Frederik Jaeckel
4ae07b962f formatting 2023-06-05 21:06:03 +02:00
Frederik Jaeckel
91674d81e3 setup 2nd 2023-02-14 10:39:35 +01:00
Frederik Jaeckel
6457a8a4ac setup.py 2023-02-14 10:37:25 +01:00
Frederik Jaeckel
68961c4675 category: remove left/right 2023-02-05 14:07:54 +01:00
Frederik Jaeckel
a9c627a63b ansicht der verbundenen kassenbücher an der kategorie + test 2022-11-08 16:56:25 +01:00
15 changed files with 129 additions and 93 deletions

View file

@ -1,4 +1,4 @@
syntax: glob *.pyc
build/* build/*
mds_cashbook_bookcategory.egg-info/* mds_cashbook_bookcategory.egg-info/*
dist/* dist/*

View file

@ -9,11 +9,11 @@ pip install mds-cashbook-bookcategory
Requires Requires
======== ========
- Tryton 6.0 - Tryton 7.0
Changes Changes
======= =======
*6.0.0 - 07.11.2022* *7.0.0 - 01.12.2023*
- init - compatibilty to Tryton 7.0

View file

@ -6,10 +6,13 @@
from trytond.pool import Pool from trytond.pool import Pool
from .category import Category from .category import Category
from .book import CategoryCashbookRel, Cashbook from .book import CategoryCashbookRel, Cashbook
from .ir import Rule
def register(): def register():
Pool.register( Pool.register(
Category, Category,
Cashbook, Cashbook,
CategoryCashbookRel, CategoryCashbookRel,
Rule,
module='cashbook_bookcategory', type_='model') module='cashbook_bookcategory', type_='model')

12
book.py
View file

@ -3,14 +3,14 @@
# this repository contains the full copyright notices and license terms. # this repository contains the full copyright notices and license terms.
from trytond.model import ModelSQL, fields from trytond.model import ModelSQL, fields
from trytond.transaction import Transaction from trytond.pool import PoolMeta
from trytond.pool import Pool, PoolMeta
class Cashbook(metaclass=PoolMeta): class Cashbook(metaclass=PoolMeta):
__name__ = 'cashbook.book' __name__ = 'cashbook.book'
categories = fields.Many2Many(string='Categories', categories = fields.Many2Many(
string='Categories',
relation_name='cashbook.bookcategory-rel', relation_name='cashbook.bookcategory-rel',
origin='cashbook', target='category') origin='cashbook', target='category')
@ -21,9 +21,11 @@ class CategoryCashbookRel(ModelSQL):
'Category Cashbook Relation' 'Category Cashbook Relation'
__name__ = 'cashbook.bookcategory-rel' __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') 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') model_name='cashbook.book', ondelete='CASCADE')
# end CategoryCashbookRel # end CategoryCashbookRel

View file

@ -11,31 +11,35 @@ class Category(tree(separator=' / '), ModelSQL, ModelView):
"Cashbook Category" "Cashbook Category"
__name__ = "cashbook.bookcategory" __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") required=True, ondelete="RESTRICT")
name = fields.Char(string='Name', required=True, translate=True) name = fields.Char(string='Name', required=True, translate=True)
parent = fields.Many2One(string='Parent', select=True, parent = fields.Many2One(
model_name='cashbook.bookcategory', ondelete='CASCADE', string='Parent',
left='left', right='right') model_name='cashbook.bookcategory', ondelete='CASCADE')
childs = fields.One2Many(string='Children', field='parent', childs = fields.One2Many(
string='Children', field='parent',
model_name='cashbook.bookcategory') 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 @classmethod
def __setup__(cls): def __setup__(cls):
super(Category, cls).__setup__() super(Category, cls).__setup__()
cls._order.insert(0, ('rec_name', 'ASC')) cls._order.insert(0, ('rec_name', 'ASC'))
@staticmethod
def default_left():
return 0
@staticmethod
def default_right():
return 0
@staticmethod @staticmethod
def default_company(): def default_company():
return Transaction().context.get('company') or None return Transaction().context.get('company') or None

View file

@ -115,7 +115,7 @@
</record> </record>
<record model="ir.rule" id="rg_category_rw_owner-1"> <record model="ir.rule" id="rg_category_rw_owner-1">
<field name="domain" eval="[ <field name="domain" eval="[
('create_uid.id', '=', Eval('user', {}).get('id', -1)), ('create_uid.id', '=', Eval('user_id', -1)),
]" pyson="1"/> ]" pyson="1"/>
<field name="rule_group" ref="rg_category_rw_owner"/> <field name="rule_group" ref="rg_category_rw_owner"/>
</record> </record>

21
ir.py Normal file
View file

@ -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

View file

@ -54,6 +54,10 @@ msgctxt "view:cashbook.bookcategory:"
msgid "General Information" msgid "General Information"
msgstr "Allgemein" msgstr "Allgemein"
msgctxt "view:cashbook.bookcategory:"
msgid "Cashbooks"
msgstr "Kassenbücher"
msgctxt "field:cashbook.bookcategory,name:" msgctxt "field:cashbook.bookcategory,name:"
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
@ -78,6 +82,10 @@ msgctxt "field:cashbook.bookcategory,right:"
msgid "Right" msgid "Right"
msgstr "Rechts" msgstr "Rechts"
msgctxt "field:cashbook.bookcategory,cashbooks:"
msgid "Cashbooks"
msgstr "Kassenbücher"
################# #################
# cashbook.book # # cashbook.book #

View file

@ -38,6 +38,10 @@ msgctxt "view:cashbook.bookcategory:"
msgid "General Information" msgid "General Information"
msgstr "General Information" msgstr "General Information"
msgctxt "view:cashbook.bookcategory:"
msgid "Cashbooks"
msgstr "Cashbooks"
msgctxt "field:cashbook.bookcategory,name:" msgctxt "field:cashbook.bookcategory,name:"
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
@ -62,6 +66,10 @@ msgctxt "field:cashbook.bookcategory,right:"
msgid "Right" msgid "Right"
msgstr "Right" msgstr "Right"
msgctxt "field:cashbook.bookcategory,cashbooks:"
msgid "Cashbooks"
msgstr "Cashbooks"
msgctxt "view:cashbook.book:" msgctxt "view:cashbook.book:"
msgid "Categories" msgid "Categories"
msgstr "Categories" msgstr "Categories"

View file

@ -2,7 +2,7 @@
""" """
# Always prefer setuptools over distutils # Always prefer setuptools over distutils
from setuptools import setup, find_packages from setuptools import setup
# To use a consistent encoding # To use a consistent encoding
from codecs import open from codecs import open
from os import path from os import path
@ -36,10 +36,10 @@ with open(path.join(here, 'versiondep.txt'), encoding='utf-8') as f:
l2 = i.strip().split(';') l2 = i.strip().split(';')
if len(l2) < 4: if len(l2) < 4:
continue 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 # tryton-version
major_version = 6 major_version = 7
minor_version = 0 minor_version = 0
requires = [] requires = []
@ -51,23 +51,27 @@ for dep in info.get('depends', []):
prefix = modversion[dep]['prefix'] prefix = modversion[dep]['prefix']
if len(modversion[dep]['max']) > 0: if len(modversion[dep]['max']) > 0:
requires.append('%s_%s >= %s, <= %s' % requires.append('%s_%s >= %s, <= %s' % (
(prefix, dep, modversion[dep]['min'], modversion[dep]['max'])) prefix, dep, modversion[dep]['min'],
else : modversion[dep]['max']))
requires.append('%s_%s >= %s' % else:
(prefix, dep, modversion[dep]['min'])) requires.append('%s_%s >= %s' % (
else : prefix, dep, modversion[dep]['min']))
requires.append('%s_%s >= %s.%s, < %s.%s' % else:
('trytond', dep, major_version, minor_version, requires.append('%s_%s >= %s.%s, < %s.%s' % (
'trytond', dep, major_version, minor_version,
major_version, minor_version + 1)) major_version, minor_version + 1))
requires.append('trytond >= %s.%s, < %s.%s' % requires.append('trytond >= %s.%s, < %s.%s' % (
(major_version, minor_version, major_version, minor_version + 1)) 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'), version=info.get('version', '0.0.1'),
description='Tryton module to add categories for cashbooks.', description='Tryton module to add categories for cashbooks.',
long_description=long_description, long_description=long_description,
long_description_content_type='text/x-rst',
url='https://www.m-ds.de/', url='https://www.m-ds.de/',
download_url='https://scmdev.m-ds.de/Tryton/Extra/cashbook_bookcategory',
author='martin-data services', author='martin-data services',
author_email='service@m-ds.de', author_email='service@m-ds.de',
license='GPL-3', license='GPL-3',
@ -87,20 +91,18 @@ setup(name='%s_%s' % (PREFIX, MODULE),
'License :: OSI Approved :: GNU General Public License (GPL)', 'License :: OSI Approved :: GNU General Public License (GPL)',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
], ],
keywords='tryton cashbook category', keywords='tryton cashbook category',
package_dir={'trytond.modules.%s' % MODULE: '.'}, package_dir={'trytond.modules.%s' % MODULE: '.'},
packages=[ packages=[
'trytond.modules.%s' % MODULE, 'trytond.modules.%s' % MODULE,
], ],
package_data={ package_data={
'trytond.modules.%s' % MODULE: (info.get('xml', []) 'trytond.modules.%s' % MODULE: (info.get('xml', []) + [
+ ['tryton.cfg', 'locale/*.po', 'tests/*.py', 'tryton.cfg', 'locale/*.po', 'tests/*.py',
'view/*.xml', 'view/*.xml', 'versiondep.txt', 'README.rst']),
'versiondep.txt', 'README.rst']),
}, },
install_requires=requires, install_requires=requires,
zip_safe=False, zip_safe=False,
entry_points=""" entry_points="""

View file

@ -1,24 +1,4 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of # -*- coding: utf-8 -*-
# this repository contains the full copyright notices and license terms. # 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
import trytond.tests.test_tryton # full copyright notices and license terms.
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

View file

@ -3,11 +3,10 @@
# The COPYRIGHT file at the top level of this repository contains the # The COPYRIGHT file at the top level of this repository contains the
# full copyright notices and license terms. # 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.pool import Pool
from trytond.transaction import Transaction from trytond.transaction import Transaction
from trytond.exceptions import UserError from trytond.modules.cashbook.tests.test_module import CashbookTestCase
from trytond.modules.cashbook.tests import CashbookTestCase
class CategoryTestCase(CashbookTestCase): class CategoryTestCase(CashbookTestCase):
@ -22,8 +21,7 @@ class CategoryTestCase(CashbookTestCase):
company = self.prep_company() company = self.prep_company()
with Transaction().set_context({ with Transaction().set_context({
'company': company.id, 'company': company.id}):
}):
categories, = BookCategory.create([{ categories, = BookCategory.create([{
'name': 'Cat 0', 'name': 'Cat 0',
'childs': [('create', [{ 'childs': [('create', [{
@ -56,8 +54,7 @@ class CategoryTestCase(CashbookTestCase):
types = self.prep_type() types = self.prep_type()
company = self.prep_company() company = self.prep_company()
with Transaction().set_context({ with Transaction().set_context({
'company': company.id, 'company': company.id}):
}):
category, = BookCategory.create([{ category, = BookCategory.create([{
'name': 'Cat 0', 'name': 'Cat 0',
'childs': [('create', [{ 'childs': [('create', [{
@ -78,6 +75,11 @@ class CategoryTestCase(CashbookTestCase):
self.assertEqual(len(book.categories), 1) self.assertEqual(len(book.categories), 1)
self.assertEqual(book.categories[0].rec_name, 'Cat 0') 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 # replace category
Book.write(*[ Book.write(*[
[book], [book],
@ -96,3 +98,6 @@ class CategoryTestCase(CashbookTestCase):
self.assertEqual(len(book.categories), 0) self.assertEqual(len(book.categories), 0)
# end CategoryTestCase # end CategoryTestCase
del CashbookTestCase

View file

@ -1,5 +1,5 @@
[tryton] [tryton]
version=6.0.0 version=7.0.0
depends: depends:
cashbook cashbook
xml: xml:

View file

@ -1,2 +1,2 @@
cashbook;6.0.19;6.0.999;mds cashbook;7.0.31;7.0.999;mds

View file

@ -12,6 +12,9 @@ full copyright notices and license terms. -->
<field name="parent"/> <field name="parent"/>
<field name="childs" colspan="4"/> <field name="childs" colspan="4"/>
</page> </page>
<page string="Cashbooks" name="cashbooks" col="1">
<field name="cashbooks"/>
</page>
</notebook> </notebook>
<field name="company" invisible="1"/> <field name="company" invisible="1"/>