diff --git a/evaluation.py b/evaluation.py
index 4408491..b36b8b3 100644
--- a/evaluation.py
+++ b/evaluation.py
@@ -46,6 +46,7 @@ class Evaluation(ModelSQL, ModelView):
dtype = fields.Selection(string='Data type', required=True,
sort=False, selection=sel_etype,
help='Type of data displayed')
+ dtype_string = dtype.translated('dtype')
chart = fields.Selection(string='Chart type', required=True,
sort=False, selection=sel_chart,
help='Type of graphical presentation.')
@@ -185,7 +186,7 @@ class Evaluation(ModelSQL, ModelView):
else 'color="%s"' % evaluation.maincolor,
'lines': template_view_line % {
'fill': '1',
- 'string': evaluation.dtype,
+ 'string': evaluation.dtype_string,
},
},
}])
diff --git a/evaluation_context.xml b/evaluation_context.xml
index 0b72704..3313c72 100644
--- a/evaluation_context.xml
+++ b/evaluation_context.xml
@@ -5,27 +5,12 @@ full copyright notices and license terms. -->
-
+
cashbook_report.evaluation.context
form
evaluation_context_form
-
-
- Evaluation
- cashbook_report.eval_line
- cashbook_report.evaluation.context
-
-
-
-
-
-
-
-
diff --git a/line.py b/line.py
index fa187b0..cb86ba8 100644
--- a/line.py
+++ b/line.py
@@ -56,7 +56,6 @@ class EvaluationLine(ModelSQL, ModelView):
def set_name_data(cls, lines, name, value):
""" store updated name
"""
- print('\n## set_name_data', lines, name, value)
cls.write(*[
lines,
{
@@ -185,31 +184,35 @@ class EvaluationLine(ModelSQL, ModelView):
(self.eval_currency is None) or (self.currency_digits is None):
return None
- lines = Lines.search([
- ('cashbook.btype.id', '=', self.dtype.id),
- ('cashbook.state', '=', 'open'),
- ('cashbook.owner.id', '=', Transaction().user),
- ], query=True)
-
- query = lines.join(tab_line, condition=lines.id==tab_line.id,
- ).join(tab_book, condition=tab_book.id==tab_line.cashbook,
- ).select(
- tab_book.currency,
- Sum(tab_line.credit - tab_line.debit).as_('balance'),
- group_by=[tab_book.currency],
- )
- cursor.execute(*query)
- balances = cursor.fetchall()
-
total_amount = Decimal('0.0')
- for balance in balances:
- (id_currency, bal1) = balance
+ with Transaction().set_context({
+ '_check_access': True,
+ }):
+ lines = Lines.search([
+ ('cashbook.btype.id', '=', self.dtype.id),
+ ('cashbook.state', '=', 'open'),
+ ('cashbook.owner.id', '=', Transaction().user),
+ ], query=True)
- total_amount += Currency.compute(
- Currency(id_currency),
- bal1,
- self.eval_currency,
+ query = lines.join(tab_line, condition=lines.id==tab_line.id,
+ ).join(tab_book, condition=tab_book.id==tab_line.cashbook,
+ ).select(
+ tab_book.currency,
+ Sum(tab_line.credit - tab_line.debit).as_('balance'),
+ group_by=[tab_book.currency],
)
+ cursor.execute(*query)
+ balances = cursor.fetchall()
+
+ for balance in balances:
+ (id_currency, bal1) = balance
+
+ if bal1 is not None:
+ total_amount += Currency.compute(
+ Currency(id_currency),
+ bal1,
+ self.eval_currency,
+ )
exp = Decimal(Decimal(1) / 10 ** self.currency_digits)
return total_amount.quantize(exp)
@@ -227,28 +230,32 @@ class EvaluationLine(ModelSQL, ModelView):
(self.eval_currency is None) or (self.currency_digits is None):
return None
- lines = Lines.search([
- ('cashbook.currency.id', '=', self.currency.id),
- ('cashbook.state', '=', 'open'),
- ('cashbook.owner.id', '=', Transaction().user),
- ], query=True)
-
- query = lines.join(tab_line, condition=lines.id==tab_line.id,
- ).select(
- Sum(tab_line.credit - tab_line.debit).as_('balance'),
- )
- cursor.execute(*query)
- balances = cursor.fetchall()
-
total_amount = Decimal('0.0')
- for balance in balances:
- (bal1,) = balance
+ with Transaction().set_context({
+ '_check_access': True,
+ }):
+ lines = Lines.search([
+ ('cashbook.currency.id', '=', self.currency.id),
+ ('cashbook.state', '=', 'open'),
+ ('cashbook.owner.id', '=', Transaction().user),
+ ], query=True)
- total_amount += Currency.compute(
- self.currency,
- bal1,
- self.eval_currency,
+ query = lines.join(tab_line, condition=lines.id==tab_line.id,
+ ).select(
+ Sum(tab_line.credit - tab_line.debit).as_('balance'),
)
+ cursor.execute(*query)
+ balances = cursor.fetchall()
+
+ for balance in balances:
+ (bal1,) = balance
+
+ if bal1 is not None:
+ total_amount += Currency.compute(
+ self.currency,
+ bal1,
+ self.eval_currency,
+ )
exp = Decimal(Decimal(1) / 10 ** self.currency_digits)
return total_amount.quantize(exp)
diff --git a/line.xml b/line.xml
index 5a5ca44..5aac1dd 100644
--- a/line.xml
+++ b/line.xml
@@ -9,15 +9,43 @@ full copyright notices and license terms. -->
cashbook_report.eval_line
graph
-
evalline_graph
cashbook_report.eval_line
tree
-
evalline_list
+
+ cashbook_report.eval_line
+ form
+ evalline_form
+
+
+
+
+ Evaluation
+ cashbook_report.eval_line
+ cashbook_report.evaluation.context
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/locale/de.po b/locale/de.po
index a878790..f01597e 100644
--- a/locale/de.po
+++ b/locale/de.po
@@ -233,3 +233,15 @@ msgstr "Zeilenwerte"
msgctxt "field:cashbook_report.evaluation,currency:"
msgid "Currency"
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"
diff --git a/locale/en.po b/locale/en.po
index 975a1a4..6af9624 100644
--- a/locale/en.po
+++ b/locale/en.po
@@ -18,6 +18,10 @@ msgctxt "model:ir.message,text:msg_dtype_currency"
msgid "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"
msgid "Administrators: Evaluation read/write"
msgstr "Administrators: Evaluation read/write"
@@ -34,74 +38,46 @@ msgctxt "model:ir.ui.menu,name:menu_evaluation"
msgid "Evaluation"
msgstr "Evaluation"
-msgctxt "model:cashbook_report.eval_book,name:"
-msgid "Evaluation Cashbook Relation"
-msgstr "Evaluation Cashbook Relation"
+msgctxt "model:cashbook_report.eval_line,name:"
+msgid "Evaluation Line Relation"
+msgstr "Evaluation Line Relation"
-msgctxt "field:cashbook_report.eval_book,evaluation:"
+msgctxt "field:cashbook_report.eval_line,evaluation:"
msgid "Evaluation"
msgstr "Evaluation"
-msgctxt "field:cashbook_report.eval_book,cashbook:"
+msgctxt "field:cashbook_report.eval_line,cashbook:"
msgid "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"
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"
msgstr "Currency Digits"
-msgctxt "model:cashbook_report.eval_type,name:"
-msgid "Evaluation Type Relation"
-msgstr "Evaluation Type Relation"
+msgctxt "field:cashbook_report.eval_line,eval_dtype:"
+msgid "Data type"
+msgstr "Data type"
-msgctxt "field:cashbook_report.eval_type,evaluation:"
-msgid "Evaluation"
-msgstr "Evaluation"
-
-msgctxt "field:cashbook_report.eval_type,dtype:"
-msgid "Type"
-msgstr "Type"
-
-msgctxt "field:cashbook_report.eval_type,name:"
+msgctxt "field:cashbook_report.eval_line,name:"
msgid "Name"
msgstr "Name"
-msgctxt "field:cashbook_report.eval_type,balance:"
+msgctxt "field:cashbook_report.eval_line,balance:"
msgid "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:"
msgid "Evaluation"
msgstr "Evaluation"
@@ -226,15 +202,19 @@ msgctxt "field:cashbook_report.evaluation,types:"
msgid "Types"
msgstr "Types"
-msgctxt "field:cashbook_report.evaluation,type_values:"
-msgid "Type Values"
-msgstr "Type Values"
-
msgctxt "field:cashbook_report.evaluation,currencies:"
msgid "Currencies"
msgstr "Currencies"
-msgctxt "field:cashbook_report.evaluation,currency_values:"
-msgid "Currency Values"
-msgstr "Currency Values"
+msgctxt "field:cashbook_report.evaluation,line_values:"
+msgid "Line 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"
diff --git a/tests/test_report.py b/tests/test_report.py
index 845e344..584f56a 100644
--- a/tests/test_report.py
+++ b/tests/test_report.py
@@ -170,6 +170,195 @@ class ReportTestCase(CashbookTestCase):
('cashbook_hasbookings', '=', True)
]), 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()
def test_report_dtype_update(self):
""" check unlink of cashbooks/types/currencies
@@ -317,7 +506,7 @@ class ReportTestCase(CashbookTestCase):
-
+
""")
diff --git a/view/evalline_form.xml b/view/evalline_form.xml
new file mode 100644
index 0000000..14d9011
--- /dev/null
+++ b/view/evalline_form.xml
@@ -0,0 +1,11 @@
+
+
+
diff --git a/view/evaluation_context_form.xml b/view/evaluation_context_form.xml
index 6f96e92..f9e9bbe 100644
--- a/view/evaluation_context_form.xml
+++ b/view/evaluation_context_form.xml
@@ -2,7 +2,6 @@
-
diff --git a/view/evaluation_form.xml b/view/evaluation_form.xml
index 3fac704..0d413cb 100644
--- a/view/evaluation_form.xml
+++ b/view/evaluation_form.xml
@@ -18,6 +18,12 @@ full copyright notices and license terms. -->
+
+
+
+
+
+