diff --git a/__init__.py b/__init__.py index 04b3213..7f0fd4a 100644 --- a/__init__.py +++ b/__init__.py @@ -4,9 +4,10 @@ # full copyright notices and license terms. from trytond.pool import Pool -from .evaluation import Evaluation +from .evaluation import Evaluation, EvaluationCashbookRel def register(): Pool.register( Evaluation, + EvaluationCashbookRel, module='cashbook_report', type_='model') diff --git a/evaluation.py b/evaluation.py index ab2536f..a7edb3d 100644 --- a/evaluation.py +++ b/evaluation.py @@ -53,11 +53,21 @@ class Evaluation(ModelSQL, ModelView): bgcolor = fields.Selection(string='Background Color', required=True, help='Background color of the chart area.', sort=False, selection=sel_bgcolor) + posted = fields.Boolean(string='Posted', help='Posted amounts only.') + lines = fields.Many2Many(string='Cashbooks', + relation_name='cashbook_report.eval_book', + origin='evaluation', target='cashbook') @staticmethod def default_company(): return Transaction().context.get('company') or None + @classmethod + def default_posted(cls): + """ default: False + """ + return False + @classmethod def default_bgcolor(cls): """ default: Yellow 5 @@ -77,15 +87,29 @@ class Evaluation(ModelSQL, ModelView): return True @classmethod - def default_etype(cls): + def default_dtype(cls): """ default 'book' """ return 'book' @classmethod def default_chart(cls): - """ default 'pir' + """ default 'pie' """ return 'pie' # end Evaluation + + +class EvaluationCashbookRel(ModelSQL): + 'Evaluation Cashbook Relation' + __name__ = 'cashbook_report.eval_book' + + evaluation = fields.Many2One(string='Evaluation', required=True, + select=True, ondelete='CASCADE', + model_name='cashbook_report.evaluation') + cashbook = fields.Many2One(string='Cashbook', required=True, + select=True, ondelete='CASCADE', + model_name='cashbook.book') + +# end EvaluationCashbookRel diff --git a/graph.xml b/graph.xml new file mode 100644 index 0000000..23c6516 --- /dev/null +++ b/graph.xml @@ -0,0 +1,17 @@ + + + + + + + + cashbook.book + graph + + book_graph + + + + diff --git a/locale/de.po b/locale/de.po index 8fadbb9..7b25302 100644 --- a/locale/de.po +++ b/locale/de.po @@ -27,6 +27,22 @@ msgid "Evaluation" msgstr "Auswertung" +############################# +# cashbook_report.eval_book # +############################# +msgctxt "model:cashbook_report.eval_book,name:" +msgid "Evaluation Cashbook Relation" +msgstr "Auswertung Kassenbuch Verknüpfung" + +msgctxt "field:cashbook_report.eval_book,evaluation:" +msgid "Evaluation" +msgstr "Auswertung" + +msgctxt "field:cashbook_report.eval_book,cashbook:" +msgid "Cashbook" +msgstr "Kassenbuch" + + ############################## # cashbook_report.evaluation # ############################## @@ -34,6 +50,14 @@ msgctxt "model:cashbook_report.evaluation,name:" msgid "Evaluation" msgstr "Auswertung" +msgctxt "view:cashbook_report.evaluation:" +msgid "Chart" +msgstr "Diagramm" + +msgctxt "view:cashbook_report.evaluation:" +msgid "Settings" +msgstr "Einstellungen" + msgctxt "view:cashbook_report.evaluation:" msgid "Representation" msgstr "Darstellung" @@ -129,3 +153,15 @@ msgstr "Hintergrundfarbe" msgctxt "help:cashbook_report.evaluation,bgcolor:" msgid "Background color of the chart area. (hex number, e.g. #ffffc0)" msgstr "Hintergrundfarbe der Diagrammfläche. (Hexzahl, z.B. #ffffc0)" + +msgctxt "field:cashbook_report.evaluation,posted:" +msgid "Posted" +msgstr "Festgeschrieben" + +msgctxt "help:cashbook_report.evaluation,posted:" +msgid "Posted amounts only." +msgstr "Nur festgeschriebene Beträge." + +msgctxt "field:cashbook_report.evaluation,lines:" +msgid "Cashbooks" +msgstr "Kassenbücher" diff --git a/locale/en.po b/locale/en.po index 5e20200..afb24b8 100644 --- a/locale/en.po +++ b/locale/en.po @@ -2,10 +2,30 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" +msgctxt "model:ir.rule.group,name:rg_eval_write_adm" +msgid "Administrators: Evaluation read/write" +msgstr "Administrators: Evaluation read/write" + +msgctxt "model:ir.rule.group,name:rg_eval_rw_owner" +msgid "Owners: Evaluation read/write" +msgstr "Owners: Evaluation read/write" + +msgctxt "model:ir.rule.group,name:rg_eval_companies" +msgid "User in companies" +msgstr "User in companies" + +msgctxt "model:ir.ui.menu,name:menu_evaluation" +msgid "Evaluation" +msgstr "Evaluation" + msgctxt "model:cashbook_report.evaluation,name:" msgid "Evaluation" msgstr "Evaluation" +msgctxt "view:cashbook_report.evaluation:" +msgid "Representation" +msgstr "Representation" + msgctxt "field:cashbook_report.evaluation,name:" msgid "Name" msgstr "Name" @@ -14,3 +34,91 @@ msgctxt "field:cashbook_report.evaluation,dtype:" msgid "Data type" msgstr "Data type" +msgctxt "selection:cashbook_report.evaluation,dtype:" +msgid "Cashbooks" +msgstr "Cashbooks" + +msgctxt "selection:cashbook_report.evaluation,dtype:" +msgid "Types of Cashbooks" +msgstr "Types of Cashbooks" + +msgctxt "selection:cashbook_report.evaluation,dtype:" +msgid "Currencys" +msgstr "Currencys" + +msgctxt "help:cashbook_report.evaluation,dtype:" +msgid "Type of data displayed" +msgstr "Type of data displayed" + +msgctxt "field:cashbook_report.evaluation,chart:" +msgid "Chart type" +msgstr "Chart type" + +msgctxt "help:cashbook_report.evaluation,chart:" +msgid "Type of graphical presentation." +msgstr "Type of graphical presentation." + +msgctxt "selection:cashbook_report.evaluation,chart:" +msgid "Pie" +msgstr "Pie" + +msgctxt "selection:cashbook_report.evaluation,chart:" +msgid "Line" +msgstr "Line" + +msgctxt "selection:cashbook_report.evaluation,chart:" +msgid "Vertical Bars" +msgstr "Vertical Bars" + +msgctxt "selection:cashbook_report.evaluation,chart:" +msgid "Horizontal Bars" +msgstr "Horizontal Bars" + +msgctxt "field:cashbook_report.evaluation,legend:" +msgid "Legend" +msgstr "Legend" + +msgctxt "field:cashbook_report.evaluation,maincolor:" +msgid "Color scheme" +msgstr "Color scheme" + +msgctxt "help:cashbook_report.evaluation,maincolor:" +msgid "The color scheme determines the hue of all components of the chart." +msgstr "The color scheme determines the hue of all components of the chart." + +msgctxt "selection:cashbook_report.evaluation,maincolor:" +msgid "Default" +msgstr "Default" + +msgctxt "selection:cashbook_report.evaluation,maincolor:" +msgid "Red" +msgstr "Red" + +msgctxt "selection:cashbook_report.evaluation,maincolor:" +msgid "Green" +msgstr "Green" + +msgctxt "selection:cashbook_report.evaluation,maincolor:" +msgid "Grey" +msgstr "Grey" + +msgctxt "selection:cashbook_report.evaluation,maincolor:" +msgid "Black" +msgstr "Black" + +msgctxt "selection:cashbook_report.evaluation,maincolor:" +msgid "Dark Cyan" +msgstr "Dark Cyan" + +msgctxt "field:cashbook_report.evaluation,bgcolor:" +msgid "Background Color" +msgstr "Background Color" + +msgctxt "help:cashbook_report.evaluation,bgcolor:" +msgid "Background color of the chart area. (hex number, e.g. #ffffc0)" +msgstr "Background color of the chart area. (hex number, e.g. #ffffc0)" + +msgctxt "field:cashbook_report.evaluation,posted:" +msgid "Posted" +msgstr "Posted" + diff --git a/templates.py b/templates.py new file mode 100644 index 0000000..7f0e2a8 --- /dev/null +++ b/templates.py @@ -0,0 +1,18 @@ +# -*- 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. + + +template_view_line = '' + +template_view_point = """ + + + + + + %(lines)s + + +""" diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..48e2d3c --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1,24 @@ +# 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_report.tests.test_report import ReportTestCase + + +__all__ = ['suite'] + + +class CashbookReportTestCase(\ + ReportTestCase,\ + ): + 'Test cashbook report module' + module = 'cashbook_report' + +# end CashbookReportTestCase + +def suite(): + suite = trytond.tests.test_tryton.suite() + suite.addTests(unittest.TestLoader().loadTestsFromTestCase(CashbookReportTestCase)) + return suite diff --git a/tests/test_report.py b/tests/test_report.py new file mode 100644 index 0000000..a03f27d --- /dev/null +++ b/tests/test_report.py @@ -0,0 +1,136 @@ +# -*- 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.tests.test_tryton import ModuleTestCase, 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 datetime import date +from decimal import Decimal + + +class ReportTestCase(CashbookTestCase): + 'Test cashbook book report module' + module = 'cashbook_report' + + def prep_report_3books(self): + """ create 3x cashbooks, add bookings, + """ + pool = Pool() + Book = pool.get('cashbook.book') + + types = self.prep_type() + company = self.prep_company() + sequ_id = self.prep_sequence().id + category = self.prep_category(cattype='in') + party = self.prep_party() + books = Book.create([{ + 'name': 'Book 1', + 'btype': types.id, + 'company': company.id, + 'currency': company.currency.id, + 'number_sequ': sequ_id, + 'start_date': date(2022, 4, 1), + 'lines': [('create', [{ + 'date': date(2022, 5, 5), + 'description': 'Income 1a', + 'bookingtype': 'in', + 'amount': Decimal('10.0'), + 'category': category.id, + 'party': party.id, + }, { + 'date': date(2022, 5, 5), + 'description': 'Income 1b', + 'bookingtype': 'in', + 'amount': Decimal('15.0'), + 'category': category.id, + 'party': party.id, + }])], + }, { + 'name': 'Book 2', + 'btype': types.id, + 'company': company.id, + 'currency': company.currency.id, + 'number_sequ': sequ_id, + 'start_date': date(2022, 4, 1), + 'lines': [('create', [{ + 'date': date(2022, 5, 5), + 'description': 'Income 2a', + 'bookingtype': 'in', + 'amount': Decimal('5.0'), + 'category': category.id, + 'party': party.id, + }, { + 'date': date(2022, 5, 5), + 'description': 'Income 2b', + 'bookingtype': 'in', + 'amount': Decimal('7.5'), + 'category': category.id, + 'party': party.id, + }])], + }, { + 'name': 'Book 3', + 'btype': types.id, + 'company': company.id, + 'currency': company.currency.id, + 'number_sequ': sequ_id, + 'start_date': date(2022, 4, 1), + 'lines': [('create', [{ + 'date': date(2022, 5, 5), + 'description': 'Income 3a', + 'bookingtype': 'in', + 'amount': Decimal('12.5'), + 'category': category.id, + 'party': party.id, + }, { + 'date': date(2022, 5, 5), + 'description': 'Income 3b', + 'bookingtype': 'in', + 'amount': Decimal('10.5'), + 'category': category.id, + 'party': party.id, + }])], + }]) + self.assertEqual(len(books), 3) + self.assertEqual(books[0].name, 'Book 1') + self.assertEqual(len(books[0].lines), 2) + self.assertEqual(books[0].balance, Decimal('25.0')) + + self.assertEqual(books[1].name, 'Book 2') + self.assertEqual(len(books[1].lines), 2) + self.assertEqual(books[1].balance, Decimal('12.5')) + + self.assertEqual(books[2].name, 'Book 3') + self.assertEqual(len(books[2].lines), 2) + self.assertEqual(books[2].balance, Decimal('23.0')) + return books + + @with_transaction() + def test_report_chart_pie_book_red(self): + """ create 3x cashbooks, add bookings, + create report, check + """ + Evaluation = Pool().get('cashbook_report.evaluation') + + books = self.prep_report_3books() + + company = self.prep_company() + with Transaction().set_context({ + 'company': company.id, + }): + evaluation, = Evaluation.create([{ + 'name': 'Evaluation 1', + 'lines': [('add', [x.id for x in books])], + }]) + self.assertEqual(len(evaluation.lines), 3) + self.assertEqual(evaluation.dtype, 'book') + self.assertEqual(evaluation.chart, 'pie') + self.assertEqual(evaluation.legend, True) + self.assertEqual(evaluation.posted, False) + self.assertEqual(evaluation.maincolor, 'default') + self.assertEqual(evaluation.bgcolor, '#ffffc0') + +# end ReportTestCase diff --git a/tryton.cfg b/tryton.cfg index 43086ad..e1814a4 100644 --- a/tryton.cfg +++ b/tryton.cfg @@ -4,5 +4,6 @@ depends: cashbook xml: icon.xml + graph.xml evaluation.xml menu.xml diff --git a/view/book_graph.xml b/view/book_graph.xml new file mode 100644 index 0000000..48f450d --- /dev/null +++ b/view/book_graph.xml @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/view/evaluation_form.xml b/view/evaluation_form.xml index da65a28..6560e0e 100644 --- a/view/evaluation_form.xml +++ b/view/evaluation_form.xml @@ -2,19 +2,27 @@ -
-