line: anzig+einstellungen ok + test

This commit is contained in:
Frederik Jaeckel 2022-11-05 00:19:41 +01:00
parent 4d0dc9e7ac
commit a2d715a54d
10 changed files with 338 additions and 120 deletions

View file

@ -46,6 +46,7 @@ class Evaluation(ModelSQL, ModelView):
dtype = fields.Selection(string='Data type', required=True, dtype = fields.Selection(string='Data type', required=True,
sort=False, selection=sel_etype, sort=False, selection=sel_etype,
help='Type of data displayed') help='Type of data displayed')
dtype_string = dtype.translated('dtype')
chart = fields.Selection(string='Chart type', required=True, chart = fields.Selection(string='Chart type', required=True,
sort=False, selection=sel_chart, sort=False, selection=sel_chart,
help='Type of graphical presentation.') help='Type of graphical presentation.')
@ -185,7 +186,7 @@ class Evaluation(ModelSQL, ModelView):
else 'color="%s"' % evaluation.maincolor, else 'color="%s"' % evaluation.maincolor,
'lines': template_view_line % { 'lines': template_view_line % {
'fill': '1', 'fill': '1',
'string': evaluation.dtype, 'string': evaluation.dtype_string,
}, },
}, },
}]) }])

View file

@ -5,27 +5,12 @@ full copyright notices and license terms. -->
<tryton> <tryton>
<data> <data>
<!-- graph-view with context-form --> <!-- context-form for graph-view -->
<record model="ir.ui.view" id="evaluation_context_form"> <record model="ir.ui.view" id="evaluation_context_form">
<field name="model">cashbook_report.evaluation.context</field> <field name="model">cashbook_report.evaluation.context</field>
<field name="type">form</field> <field name="type">form</field>
<field name="name">evaluation_context_form</field> <field name="name">evaluation_context_form</field>
</record> </record>
<!-- action view - cashbook-graph -->
<record model="ir.action.act_window" id="act_evaluation_graph_view">
<field name="name">Evaluation</field>
<field name="res_model">cashbook_report.eval_line</field>
<field name="context_model">cashbook_report.evaluation.context</field>
<field name="domain"
eval="[('evaluation', '=', Eval('evaluation', -1))]"
pyson="1"/>
</record>
<record model="ir.action.act_window.view" id="act_evaluation_graph_view-1">
<field name="sequence" eval="10"/>
<field name="view" ref="evalline_view_graph"/>
<field name="act_window" ref="act_evaluation_graph_view"/>
</record>
</data> </data>
</tryton> </tryton>

13
line.py
View file

@ -56,7 +56,6 @@ class EvaluationLine(ModelSQL, ModelView):
def set_name_data(cls, lines, name, value): def set_name_data(cls, lines, name, value):
""" store updated name """ store updated name
""" """
print('\n## set_name_data', lines, name, value)
cls.write(*[ cls.write(*[
lines, lines,
{ {
@ -185,6 +184,10 @@ class EvaluationLine(ModelSQL, ModelView):
(self.eval_currency is None) or (self.currency_digits is None): (self.eval_currency is None) or (self.currency_digits is None):
return None return None
total_amount = Decimal('0.0')
with Transaction().set_context({
'_check_access': True,
}):
lines = Lines.search([ lines = Lines.search([
('cashbook.btype.id', '=', self.dtype.id), ('cashbook.btype.id', '=', self.dtype.id),
('cashbook.state', '=', 'open'), ('cashbook.state', '=', 'open'),
@ -201,10 +204,10 @@ class EvaluationLine(ModelSQL, ModelView):
cursor.execute(*query) cursor.execute(*query)
balances = cursor.fetchall() balances = cursor.fetchall()
total_amount = Decimal('0.0')
for balance in balances: for balance in balances:
(id_currency, bal1) = balance (id_currency, bal1) = balance
if bal1 is not None:
total_amount += Currency.compute( total_amount += Currency.compute(
Currency(id_currency), Currency(id_currency),
bal1, bal1,
@ -227,6 +230,10 @@ class EvaluationLine(ModelSQL, ModelView):
(self.eval_currency is None) or (self.currency_digits is None): (self.eval_currency is None) or (self.currency_digits is None):
return None return None
total_amount = Decimal('0.0')
with Transaction().set_context({
'_check_access': True,
}):
lines = Lines.search([ lines = Lines.search([
('cashbook.currency.id', '=', self.currency.id), ('cashbook.currency.id', '=', self.currency.id),
('cashbook.state', '=', 'open'), ('cashbook.state', '=', 'open'),
@ -240,10 +247,10 @@ class EvaluationLine(ModelSQL, ModelView):
cursor.execute(*query) cursor.execute(*query)
balances = cursor.fetchall() balances = cursor.fetchall()
total_amount = Decimal('0.0')
for balance in balances: for balance in balances:
(bal1,) = balance (bal1,) = balance
if bal1 is not None:
total_amount += Currency.compute( total_amount += Currency.compute(
self.currency, self.currency,
bal1, bal1,

View file

@ -9,15 +9,43 @@ full copyright notices and license terms. -->
<record model="ir.ui.view" id="evalline_view_graph"> <record model="ir.ui.view" id="evalline_view_graph">
<field name="model">cashbook_report.eval_line</field> <field name="model">cashbook_report.eval_line</field>
<field name="type">graph</field> <field name="type">graph</field>
<field name="priority" eval="10"/>
<field name="name">evalline_graph</field> <field name="name">evalline_graph</field>
</record> </record>
<record model="ir.ui.view" id="evalline_view_list"> <record model="ir.ui.view" id="evalline_view_list">
<field name="model">cashbook_report.eval_line</field> <field name="model">cashbook_report.eval_line</field>
<field name="type">tree</field> <field name="type">tree</field>
<field name="priority" eval="20"/>
<field name="name">evalline_list</field> <field name="name">evalline_list</field>
</record> </record>
<record model="ir.ui.view" id="evalline_view_form">
<field name="model">cashbook_report.eval_line</field>
<field name="type">form</field>
<field name="name">evalline_form</field>
</record>
<!-- action view - for graph view -->
<record model="ir.action.act_window" id="act_evaluation_graph_view">
<field name="name">Evaluation</field>
<field name="res_model">cashbook_report.eval_line</field>
<field name="context_model">cashbook_report.evaluation.context</field>
<field name="domain"
eval="[('evaluation', '=', Eval('evaluation', -1))]"
pyson="1"/>
</record>
<record model="ir.action.act_window.view" id="act_evaluation_graph_view-1">
<field name="sequence" eval="10"/>
<field name="view" ref="evalline_view_graph"/>
<field name="act_window" ref="act_evaluation_graph_view"/>
</record>
<record model="ir.action.act_window.view" id="act_evaluation_graph_view-2">
<field name="sequence" eval="20"/>
<field name="view" ref="evalline_view_list"/>
<field name="act_window" ref="act_evaluation_graph_view"/>
</record>
<record model="ir.action.act_window.view" id="act_evaluation_graph_view-3">
<field name="sequence" eval="30"/>
<field name="view" ref="evalline_view_form"/>
<field name="act_window" ref="act_evaluation_graph_view"/>
</record>
</data> </data>
</tryton> </tryton>

View file

@ -233,3 +233,15 @@ msgstr "Zeilenwerte"
msgctxt "field:cashbook_report.evaluation,currency:" msgctxt "field:cashbook_report.evaluation,currency:"
msgid "Currency" msgid "Currency"
msgstr "Währung" msgstr "Währung"
######################################
# cashbook_report.evaluation.context #
######################################
msgctxt "model:cashbook_report.evaluation.context,name:"
msgid "Evaluation Context"
msgstr "Auswertung Kontext"
msgctxt "field:cashbook_report.evaluation.context,evaluation:"
msgid "Evaluation"
msgstr "Auswertung"

View file

@ -18,6 +18,10 @@ msgctxt "model:ir.message,text:msg_dtype_currency"
msgid "Currencies" msgid "Currencies"
msgstr "Currencies" msgstr "Currencies"
msgctxt "model:ir.message,text:msg_name_graph"
msgid "Graph: %(gname)s"
msgstr "Graph: %(gname)s"
msgctxt "model:ir.rule.group,name:rg_eval_write_adm" msgctxt "model:ir.rule.group,name:rg_eval_write_adm"
msgid "Administrators: Evaluation read/write" msgid "Administrators: Evaluation read/write"
msgstr "Administrators: Evaluation read/write" msgstr "Administrators: Evaluation read/write"
@ -34,74 +38,46 @@ msgctxt "model:ir.ui.menu,name:menu_evaluation"
msgid "Evaluation" msgid "Evaluation"
msgstr "Evaluation" msgstr "Evaluation"
msgctxt "model:cashbook_report.eval_book,name:" msgctxt "model:cashbook_report.eval_line,name:"
msgid "Evaluation Cashbook Relation" msgid "Evaluation Line Relation"
msgstr "Evaluation Cashbook Relation" msgstr "Evaluation Line Relation"
msgctxt "field:cashbook_report.eval_book,evaluation:" msgctxt "field:cashbook_report.eval_line,evaluation:"
msgid "Evaluation" msgid "Evaluation"
msgstr "Evaluation" msgstr "Evaluation"
msgctxt "field:cashbook_report.eval_book,cashbook:" msgctxt "field:cashbook_report.eval_line,cashbook:"
msgid "Cashbook" msgid "Cashbook"
msgstr "Cashbook" msgstr "Cashbook"
msgctxt "field:cashbook_report.eval_book,eval_currency:" msgctxt "field:cashbook_report.eval_line,dtype:"
msgid "Data type"
msgstr "Data type"
msgctxt "field:cashbook_report.eval_line,currency:"
msgid "Currency" msgid "Currency"
msgstr "Currency" msgstr "Currency"
msgctxt "field:cashbook_report.eval_book,currency_digits:" msgctxt "field:cashbook_report.eval_line,eval_currency:"
msgid "Currency"
msgstr "Currency"
msgctxt "field:cashbook_report.eval_line,currency_digits:"
msgid "Currency Digits" msgid "Currency Digits"
msgstr "Currency Digits" msgstr "Currency Digits"
msgctxt "model:cashbook_report.eval_type,name:" msgctxt "field:cashbook_report.eval_line,eval_dtype:"
msgid "Evaluation Type Relation" msgid "Data type"
msgstr "Evaluation Type Relation" msgstr "Data type"
msgctxt "field:cashbook_report.eval_type,evaluation:" msgctxt "field:cashbook_report.eval_line,name:"
msgid "Evaluation"
msgstr "Evaluation"
msgctxt "field:cashbook_report.eval_type,dtype:"
msgid "Type"
msgstr "Type"
msgctxt "field:cashbook_report.eval_type,name:"
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
msgctxt "field:cashbook_report.eval_type,balance:" msgctxt "field:cashbook_report.eval_line,balance:"
msgid "Balance" msgid "Balance"
msgstr "Balance" msgstr "Balance"
msgctxt "field:cashbook_report.eval_type,eval_currency:"
msgid "Currency"
msgstr "Currency"
msgctxt "field:cashbook_report.eval_type,currency_digits:"
msgid "Currency Digits"
msgstr "Currency Digits"
msgctxt "model:cashbook_report.eval_currency,name:"
msgid "Evaluation Currency Relation"
msgstr "Evaluation Currency Relation"
msgctxt "field:cashbook_report.eval_currency,evaluation:"
msgid "Evaluation"
msgstr "Evaluation"
msgctxt "field:cashbook_report.eval_currency,currency:"
msgid "Currency"
msgstr "Currency"
msgctxt "field:cashbook_report.eval_currency,eval_currency:"
msgid "Currency"
msgstr "Currency"
msgctxt "field:cashbook_report.eval_currency,currency_digits:"
msgid "Currency Digits"
msgstr "Currency Digits"
msgctxt "model:cashbook_report.evaluation,name:" msgctxt "model:cashbook_report.evaluation,name:"
msgid "Evaluation" msgid "Evaluation"
msgstr "Evaluation" msgstr "Evaluation"
@ -226,15 +202,19 @@ msgctxt "field:cashbook_report.evaluation,types:"
msgid "Types" msgid "Types"
msgstr "Types" msgstr "Types"
msgctxt "field:cashbook_report.evaluation,type_values:"
msgid "Type Values"
msgstr "Type Values"
msgctxt "field:cashbook_report.evaluation,currencies:" msgctxt "field:cashbook_report.evaluation,currencies:"
msgid "Currencies" msgid "Currencies"
msgstr "Currencies" msgstr "Currencies"
msgctxt "field:cashbook_report.evaluation,currency_values:" msgctxt "field:cashbook_report.evaluation,line_values:"
msgid "Currency Values" msgid "Line Values"
msgstr "Currency Values" msgstr "Line Values"
msgctxt "field:cashbook_report.evaluation,currency:"
msgid "Currency"
msgstr "Currency"
msgctxt "model:cashbook_report.evaluation.context,name:"
msgid "Evaluation Context"
msgstr "Evaluation Context"

View file

@ -170,6 +170,195 @@ class ReportTestCase(CashbookTestCase):
('cashbook_hasbookings', '=', True) ('cashbook_hasbookings', '=', True)
]), 0) ]), 0)
@with_transaction()
def test_report_check_limited_access(self):
""" check query of cashbook-lines selected by
cashbook-type, limited by user-permissions
"""
pool = Pool()
ResUser = pool.get('res.user')
ResGroup = pool.get('res.group')
ModelData = pool.get('ir.model.data')
Currency = pool.get('currency.currency')
Evaluation = pool.get('cashbook_report.evaluation')
Type = pool.get('cashbook.type')
Cashbook = pool.get('cashbook.book')
Line = pool.get('cashbook_report.eval_line')
books = self.prep_report_3books()
company = self.prep_company()
# add 2x user, set owner of cashbooks to them
group_cashbook = ResGroup(ModelData.get_id('cashbook', 'group_cashbook'))
users = ResUser.create([{
'name': 'User 1',
'login': 'user1',
'password': 'test1234',
'groups': [('add', [group_cashbook.id])],
'company': company.id,
'companies': [('add', [company.id])],
}, {
'name': 'User 2',
'login': 'user2',
'password': 'test1234',
'groups': [('add', [group_cashbook.id])],
'company': company.id,
'companies': [('add', [company.id])],
}])
Cashbook.write(*[
[books[0], books[1]],
{
'owner': users[0].id,
},
[books[2]],
{
'owner': users[1].id,
},
])
# check access to data
with Transaction().set_user(users[0].id):
with Transaction().set_context({
'_check_access': True,
'company': company.id,
}):
books_owner1 = Cashbook.search([])
self.assertEqual(len(books_owner1), 2)
self.assertEqual(books_owner1[0].name, 'Book 1')
self.assertEqual(books_owner1[0].balance, Decimal('25.0'))
self.assertEqual(books_owner1[1].name, 'Book 2')
self.assertEqual(books_owner1[1].balance, Decimal('12.5'))
evaluation1, = Evaluation.create([{
'name': 'Evaluation User 1 - Cashbooks',
'dtype': 'cashbooks',
'cashbooks': [('add', [x.id for x in books_owner1])],
}])
self.assertEqual(len(evaluation1.cashbooks), 2)
self.assertEqual(evaluation1.currency.rec_name, 'Euro')
self.assertEqual(len(evaluation1.line_values), 2)
self.assertEqual(evaluation1.line_values[0].name, 'Book 1 | 25.00 usd | Open')
self.assertEqual(evaluation1.line_values[0].balance, Decimal('23.81'))
self.assertEqual(evaluation1.line_values[1].name, 'Book 2 | 12.50 usd | Open')
self.assertEqual(evaluation1.line_values[1].balance, Decimal('11.9'))
evaluation2, = Evaluation.create([{
'name': 'Evaluation User 1 - Types',
'dtype': 'types',
'types': [('add', [x.id for x in Type.search([])])],
}])
self.assertEqual(len(evaluation2.types), 2)
self.assertEqual(evaluation2.currency.rec_name, 'Euro')
self.assertEqual(len(evaluation2.line_values), 2)
self.assertEqual(evaluation2.line_values[0].name, 'BK - Bank')
self.assertEqual(evaluation2.line_values[0].balance, Decimal('0.0'))
self.assertEqual(evaluation2.line_values[1].name, 'CAS - Cash')
self.assertEqual(evaluation2.line_values[1].balance, Decimal('35.71'))
evaluation3, = Evaluation.create([{
'name': 'Evaluation User 1 - Currencies',
'dtype': 'currencies',
'currencies': [('add', [x.id for x in Currency.search([])])],
}])
self.assertEqual(len(evaluation3.currencies), 2)
self.assertEqual(evaluation3.currency.rec_name, 'Euro')
self.assertEqual(len(evaluation3.line_values), 2)
self.assertEqual(evaluation3.line_values[0].name, 'Euro')
self.assertEqual(evaluation3.line_values[0].balance, Decimal('0.0'))
self.assertEqual(evaluation3.line_values[1].name, 'usd')
self.assertEqual(evaluation3.line_values[1].balance, Decimal('35.71'))
with Transaction().set_user(users[1].id):
with Transaction().set_context({
'_check_access': True,
'company': company.id,
}):
books_owner2 = Cashbook.search([])
self.assertEqual(len(books_owner2), 1)
self.assertEqual(books_owner2[0].name, 'Book 3')
evaluation1, = Evaluation.create([{
'name': 'Evaluation User 2 - Cashbooks',
'dtype': 'cashbooks',
'cashbooks': [('add', [x.id for x in books_owner2])],
}])
self.assertEqual(len(evaluation1.cashbooks), 1)
self.assertEqual(evaluation1.currency.rec_name, 'Euro')
self.assertEqual(len(evaluation1.line_values), 1)
self.assertEqual(evaluation1.line_values[0].name, 'Book 3 | 23.00 € | Open')
self.assertEqual(evaluation1.line_values[0].balance, Decimal('23.0'))
evaluation2, = Evaluation.create([{
'name': 'Evaluation User 2 - Types',
'dtype': 'types',
'types': [('add', [x.id for x in Type.search([])])],
}])
self.assertEqual(len(evaluation2.types), 2)
self.assertEqual(evaluation2.currency.rec_name, 'Euro')
self.assertEqual(len(evaluation2.line_values), 2)
self.assertEqual(evaluation2.line_values[0].name, 'BK - Bank')
self.assertEqual(evaluation2.line_values[0].balance, Decimal('23.0'))
self.assertEqual(evaluation2.line_values[1].name, 'CAS - Cash')
self.assertEqual(evaluation2.line_values[1].balance, Decimal('0.0'))
evaluation3, = Evaluation.create([{
'name': 'Evaluation User 3 - Currencies',
'dtype': 'currencies',
'currencies': [('add', [x.id for x in Currency.search([])])],
}])
self.assertEqual(len(evaluation3.currencies), 2)
self.assertEqual(evaluation3.currency.rec_name, 'Euro')
self.assertEqual(len(evaluation3.line_values), 2)
self.assertEqual(evaluation3.line_values[0].name, 'Euro')
self.assertEqual(evaluation3.line_values[0].balance, Decimal('23.0'))
self.assertEqual(evaluation3.line_values[1].name, 'usd')
self.assertEqual(evaluation3.line_values[1].balance, Decimal('0.0'))
@with_transaction()
def test_report_update_name_of_line(self):
""" check replace rec_name-value on line with
manually updates value
"""
pool = Pool()
Evaluation = pool.get('cashbook_report.evaluation')
Line = pool.get('cashbook_report.eval_line')
books = self.prep_report_3books()
company = self.prep_company()
with Transaction().set_context({
'company': company.id,
}):
evaluation, = Evaluation.create([{
'name': 'Evaluation 1',
'dtype': 'cashbooks',
'cashbooks': [('add', [x.id for x in books])],
}])
self.assertEqual(len(evaluation.cashbooks), 3)
self.assertEqual(len(evaluation.line_values), 3)
self.assertEqual(evaluation.line_values[0].name, 'Book 1 | 25.00 usd | Open')
self.assertEqual(evaluation.line_values[0].name_line, None)
# update 'name'
Line.write(*[
[evaluation.line_values[0]],
{
'name': 'Book updated',
}])
self.assertEqual(evaluation.line_values[0].name, 'Book updated')
self.assertEqual(evaluation.line_values[0].name_line, 'Book updated')
# delete 'name' value to reset to origin
Line.write(*[
[evaluation.line_values[0]],
{
'name': None,
}])
self.assertEqual(evaluation.line_values[0].name, 'Book 1 | 25.00 usd | Open')
self.assertEqual(evaluation.line_values[0].name_line, None)
@with_transaction() @with_transaction()
def test_report_dtype_update(self): def test_report_dtype_update(self):
""" check unlink of cashbooks/types/currencies """ check unlink of cashbooks/types/currencies
@ -317,7 +506,7 @@ class ReportTestCase(CashbookTestCase):
<field name="name"/> <field name="name"/>
</x> </x>
<y> <y>
<field name="balance" fill="1" empty="0" string="cashbooks"/> <field name="balance" fill="1" empty="0" string="Cashbooks"/>
</y> </y>
</graph> </graph>
""") """)

11
view/evalline_form.xml Normal file
View file

@ -0,0 +1,11 @@
<?xml version="1.0"?>
<!-- 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. -->
<form>
<label name="name"/>
<field name="name"/>
<label name="balance"/>
<field name="balance"/>
<field name="name_line"/>
</form>

View file

@ -2,7 +2,6 @@
<!-- This file is part of the cashbook-module from m-ds for Tryton. <!-- 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 The COPYRIGHT file at the top level of this repository contains the
full copyright notices and license terms. --> full copyright notices and license terms. -->
<form col="2"> <form>
<label name="evaluation"/> <field name="evaluation" invisible="1"/>
<field name="evaluation"/>
</form> </form>

View file

@ -18,6 +18,12 @@ full copyright notices and license terms. -->
<label name="legend"/> <label name="legend"/>
<field name="legend"/> <field name="legend"/>
<label name="bgcolor"/>
<field name="bgcolor"/>
<label name="posted"/>
<field name="posted"/>
<newline/>
<field name="cashbooks" colspan="6"/> <field name="cashbooks" colspan="6"/>
<field name="types" colspan="6"/> <field name="types" colspan="6"/>
<field name="currencies" colspan="6"/> <field name="currencies" colspan="6"/>