report ok, auf book und line

berechtigungen optimiert
This commit is contained in:
Frederik Jaeckel 2022-08-17 17:16:23 +02:00
parent 70038eb15e
commit ab43044f64
21 changed files with 1339 additions and 115 deletions

View file

@ -8,10 +8,11 @@ from .book import Book
from .types import Type
from .line import Line, LineContext
from .wizard_openline import OpenCashBook, OpenCashBookStart
from .wizard_runreport import RunCbReport, RunCbReportStart
from .configuration import Configuration, UserConfiguration
from .category import Category
from .reconciliation import Reconciliation
from .cbreport import CashbookReport
from .cbreport import ReconciliationReport
def register():
Pool.register(
@ -24,10 +25,12 @@ def register():
Line,
Reconciliation,
OpenCashBookStart,
RunCbReportStart,
module='cashbook', type_='model')
Pool.register(
CashbookReport,
ReconciliationReport,
module='cashbook', type_='report')
Pool.register(
OpenCashBook,
RunCbReport,
module='cashbook', type_='wizard')

331
book.xml
View file

@ -44,21 +44,21 @@ full copyright notices and license terms. -->
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<!-- admin: read/write -->
<record model="ir.model.access" id="access_book-group_admin">
<!-- group_cashbook_admin: read/write -->
<record model="ir.model.access" id="access_book-group_cashbook_admin">
<field name="model" search="[('model', '=', 'cashbook.book')]"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="True"/>
</record>
<!-- cashbook: read -->
<!-- cashbook: read/write, no: create/delete -->
<record model="ir.model.access" id="access_book-group_cashbook">
<field name="model" search="[('model', '=', 'cashbook.book')]"/>
<field name="group" ref="group_cashbook"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
@ -78,15 +78,37 @@ full copyright notices and license terms. -->
<field name="domain" eval="[]" pyson="1"/>
<field name="rule_group" ref="rg_book_write_adm"/>
</record>
<record model="ir.rule.group-res.group" id="rg_book_write_adm-group_admin">
<record model="ir.rule.group-res.group" id="rg_book_write_adm-group_cashbook_admin">
<field name="rule_group" ref="rg_book_write_adm"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<!-- permission by rule - read: owner, reviewer, observer -->
<record model="ir.rule.group" id="rg_book_read">
<!-- permission by rule - read/write: owner -->
<record model="ir.rule.group" id="rg_book_rw_owner">
<field name="model" search="[('model', '=', 'cashbook.book')]"/>
<field name="name">Owners, observers and reviewers: Cashbook read</field>
<field name="name">Owners: Cashbook read/write</field>
<field name="global_p" eval="False"/>
<field name="default_p" eval="False"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.rule" id="rg_book_rw_owner-1">
<field name="domain" eval="[
('owner.id', '=', Eval('user', {}).get('id', -1)),
]" pyson="1"/>
<field name="rule_group" ref="rg_book_rw_owner"/>
</record>
<record model="ir.rule.group-res.group" id="rg_book_rw_owner-group_cashbook">
<field name="rule_group" ref="rg_book_rw_owner"/>
<field name="group" ref="group_cashbook"/>
</record>
<!-- permission by rule - read: reviewer, observer -->
<record model="ir.rule.group" id="rg_book_read_nonowner">
<field name="model" search="[('model', '=', 'cashbook.book')]"/>
<field name="name">Observers and Reviewers: Cashbook read</field>
<field name="global_p" eval="False"/>
<field name="default_p" eval="False"/>
<field name="perm_read" eval="True"/>
@ -94,16 +116,15 @@ full copyright notices and license terms. -->
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.rule" id="rg_book_read-1">
<record model="ir.rule" id="rg_book_read_nonowner-1">
<field name="domain" eval="['OR',
('owner.id', '=', Eval('user', {}).get('id', -1)),
('observer.id', 'in', Eval('user', {}).get('groups', [])),
('reviewer.id', 'in', Eval('user', {}).get('groups', [])),
]" pyson="1"/>
<field name="rule_group" ref="rg_book_read"/>
<field name="rule_group" ref="rg_book_read_nonowner"/>
</record>
<record model="ir.rule.group-res.group" id="rg_book_read-group_cashbook">
<field name="rule_group" ref="rg_book_read"/>
<record model="ir.rule.group-res.group" id="rg_book_read_nonowner-group_cashbook">
<field name="rule_group" ref="rg_book_read_nonowner"/>
<field name="group" ref="group_cashbook"/>
</record>
@ -127,9 +148,9 @@ full copyright notices and license terms. -->
<field name="model" search="[('model', '=', 'cashbook.book')]"/>
</record>
<record model="ir.model.button-res.group"
id="book_wfopen_button-group_admin">
id="book_wfopen_button-group_cashbook_admin">
<field name="button" ref="book_wfopen_button"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<!-- button - close -->
@ -139,9 +160,9 @@ full copyright notices and license terms. -->
<field name="model" search="[('model', '=', 'cashbook.book')]"/>
</record>
<record model="ir.model.button-res.group"
id="book_wfclosed_button-group_admin">
id="book_wfclosed_button-group_cashbook_admin">
<field name="button" ref="book_wfclosed_button"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<!-- button - done -->
@ -151,9 +172,9 @@ full copyright notices and license terms. -->
<field name="model" search="[('model', '=', 'cashbook.book')]"/>
</record>
<record model="ir.model.button-res.group"
id="book_wfarchive_button-group_admin">
id="book_wfarchive_button-group_cashbook_admin">
<field name="button" ref="book_wfarchive_button"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<!-- sequence-type -->
@ -161,9 +182,273 @@ full copyright notices and license terms. -->
<field name="name">Cashbook Line</field>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_cashbook_line-group_admin">
id="sequence_type_cashbook_line-group_cashbook_admin">
<field name="sequence_type" ref="sequence_type_cashbook_line"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<!-- field-access - anon -->
<record model="ir.model.field.access" id="fa_book-company-anon">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'company')]"/>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-name-anon">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'name')]"/>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-btype-anon">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'btype')]"/>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-owner-anon">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'owner')]"/>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-reviewer-anon">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'reviewer')]"/>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-observer-anon">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'observer')]"/>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-lines-anon">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'lines')]"/>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-reconciliations-anon">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'reconciliations')]"/>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-number_sequ-anon">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'number_sequ')]"/>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-number_atcheck-anon">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'number_atcheck')]"/>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-start_balance-anon">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'start_balance')]"/>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-currency-anon">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'currency')]"/>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
</record>
<!-- field-access - group_cashbook_admin -->
<record model="ir.model.field.access" id="fa_book-company-group_cashbook_admin">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'company')]"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
</record>
<record model="ir.model.field.access" id="fa_book-name-group_cashbook_admin">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'name')]"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
</record>
<record model="ir.model.field.access" id="fa_book-btype-group_cashbook_admin">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'btype')]"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
</record>
<record model="ir.model.field.access" id="fa_book-owner-group_cashbook_admin">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'owner')]"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
</record>
<record model="ir.model.field.access" id="fa_book-reviewer-group_cashbook_admin">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'reviewer')]"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
</record>
<record model="ir.model.field.access" id="fa_book-observer-group_cashbook_admin">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'observer')]"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
</record>
<record model="ir.model.field.access" id="fa_book-lines-group_cashbook_admin">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'lines')]"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
</record>
<record model="ir.model.field.access" id="fa_book-reconciliations-group_cashbook_admin">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'reconciliations')]"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
</record>
<record model="ir.model.field.access" id="fa_book-number_sequ-group_cashbook_admin">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'number_sequ')]"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
</record>
<record model="ir.model.field.access" id="fa_book-number_atcheck-group_cashbook_admin">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'number_atcheck')]"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
</record>
<record model="ir.model.field.access" id="fa_book-start_balance-group_cashbook_admin">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'start_balance')]"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
</record>
<record model="ir.model.field.access" id="fa_book-currency-group_cashbook_admin">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'currency')]"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
</record>
<!-- field-access - group_cashbook -->
<record model="ir.model.field.access" id="fa_book-company-group_cashbook">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'company')]"/>
<field name="group" ref="group_cashbook"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-name-group_cashbook">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'name')]"/>
<field name="group" ref="group_cashbook"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-btype-group_cashbook">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'btype')]"/>
<field name="group" ref="group_cashbook"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-owner-group_cashbook">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'owner')]"/>
<field name="group" ref="group_cashbook"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-reviewer-group_cashbook">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'reviewer')]"/>
<field name="group" ref="group_cashbook"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-observer-group_cashbook">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'observer')]"/>
<field name="group" ref="group_cashbook"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-lines-group_cashbook">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'lines')]"/>
<field name="group" ref="group_cashbook"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-reconciliations-group_cashbook">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'reconciliations')]"/>
<field name="group" ref="group_cashbook"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-number_sequ-group_cashbook">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'number_sequ')]"/>
<field name="group" ref="group_cashbook"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-number_atcheck-group_cashbook">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'number_atcheck')]"/>
<field name="group" ref="group_cashbook"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-start_balance-group_cashbook">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'start_balance')]"/>
<field name="group" ref="group_cashbook"/>
<field name="perm_read" eval="False"/>
<field name="perm_write" eval="False"/>
</record>
<record model="ir.model.field.access" id="fa_book-currency-group_cashbook">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'currency')]"/>
<field name="group" ref="group_cashbook"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
</record>
<!-- field-access - group_cashbook_checkline (user must be in group_cashbook too) -->
<record model="ir.model.field.access" id="fa_book-reconciliations-group_cashbook_checkline">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'reconciliations')]"/>
<field name="group" ref="group_cashbook_checkline"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
</record>
<!-- field-access - group_cashbook_doneline (user must be in group_cashbook too) -->
<record model="ir.model.field.access" id="fa_book-reconciliations-group_cashbook_doneline">
<field name="field"
search="[('model.model', '=', 'cashbook.book'), ('name', '=', 'reconciliations')]"/>
<field name="group" ref="group_cashbook_doneline"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
</record>
</data>

View file

@ -68,10 +68,10 @@ full copyright notices and license terms. -->
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<!-- admin: read/write -->
<record model="ir.model.access" id="access_category-group_admin">
<!-- group_cashbook_admin: read/write -->
<record model="ir.model.access" id="access_category-group_cashbook_admin">
<field name="model" search="[('model', '=', 'cashbook.category')]"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>

View file

@ -5,11 +5,24 @@
from trytond.report import Report
from trytond.i18n import gettext
from trytond.pool import Pool
from trytond.transaction import Transaction
from slugify import slugify
class CashbookReport(Report):
__name__ = 'cashbook.repbook'
class ReconciliationReport(Report):
__name__ = 'cashbook.reprecon'
@classmethod
def get_context(cls, records, header, data):
""" update context
"""
Company = Pool().get('company.company')
context2 = Transaction().context
context = super(ReconciliationReport, cls).get_context(records, header, data)
context['company'] = Company(context2['company'])
return context
@classmethod
def execute(cls, ids, data):
@ -17,9 +30,25 @@ class CashbookReport(Report):
"""
pool = Pool()
IrDate = pool.get('ir.date')
ExpObj = pool.get(data['model'])(data['id'])
(ext1, cont1, dirprint, title) = super(CashbookReport, cls).execute(ids, data)
if data['model'] == 'cashbook.book':
ExpObj = pool.get(data['model'])(data['id'])
rep_name = ExpObj.rec_name[:50]
elif data['model'] == 'cashbook.line':
line_obj = pool.get(data['model'])(data['id'])
rep_name = line_obj.cashbook.rec_name[:50]
elif data['model'] == 'cashbook.recon':
recon_obj = pool.get(data['model'])(data['id'])
rep_name = gettext(
'cashbook.msg_rep_reconciliation_fname',
recname = recon_obj.cashbook.rec_name[:50],
date_from = recon_obj.date_from.isoformat(),
date_to = recon_obj.date_to.isoformat(),
)
else :
raise ValueError('invalid model')
(ext1, cont1, dirprint, title) = super(ReconciliationReport, cls).execute(ids, data)
return (
ext1,
@ -28,9 +57,11 @@ class CashbookReport(Report):
slugify('%(date)s-%(book)s-%(descr)s' % {
'date': IrDate.today().isoformat().replace('-', ''),
'book': gettext('cashbook.msg_name_cashbook'),
'descr': ExpObj.name[:15],
'descr': rep_name,
},
max_length=75, word_boundary=True, save_order=True),
max_length=100, word_boundary=True, save_order=True),
)
# end CashbookReport
# end ReconciliationReport

View file

@ -5,23 +5,14 @@ full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.action.report" id="report_cashbook">
<field name="name">Cashbook</field>
<field name="model">cashbook.line</field>
<field name="report_name">cashbook.repbook</field>
<field name="report">cashbook/report/cashbook.fods</field>
<record model="ir.action.report" id="report_recon">
<field name="name">Cashbook Reconciliation</field>
<field name="model">cashbook.recon</field>
<field name="report_name">cashbook.reprecon</field>
<field name="report">cashbook/report/reconciliation.fods</field>
<field name="template_extension">ods</field>
<field name="single" eval="True"/>
</record>
<record model="ir.action.keyword" id="report_line_keyword">
<field name="keyword">form_print</field>
<field name="model">cashbook.line,-1</field>
<field name="action" ref="report_cashbook"/>
</record>
<record model="ir.action.keyword" id="report_book_keyword">
<field name="keyword">form_print</field>
<field name="model">cashbook.book,-1</field>
<field name="action" ref="report_cashbook"/>
</record>
</data>
</tryton>

View file

@ -29,15 +29,16 @@ full copyright notices and license terms. -->
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<!-- admin: read/write -->
<record model="ir.model.access" id="access_config-group_admin">
<!-- group_cashbook_admin: read/write -->
<record model="ir.model.access" id="access_config-group_cashbook_admin">
<field name="model" search="[('model', '=', 'cashbook.configuration')]"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="True"/>
</record>
<!-- user: read/write -->
<record model="ir.model.access" id="access_config-group_cashbook">
<field name="model" search="[('model', '=', 'cashbook.configuration')]"/>
<field name="group" ref="group_cashbook"/>
@ -55,10 +56,10 @@ full copyright notices and license terms. -->
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<!-- admin: read/write -->
<record model="ir.model.access" id="access_config_user-group_admin">
<!-- group_cashbook_admin: read/write -->
<record model="ir.model.access" id="access_config_user-group_cashbook_admin">
<field name="model" search="[('model', '=', 'cashbook.configuration_user')]"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>

View file

@ -14,6 +14,14 @@ full copyright notices and license terms. -->
<record model="res.group" id="group_cashbook_doneline">
<field name="name">Cashbook - WF - Done</field>
</record>
<record model="res.group" id="group_cashbook_admin">
<field name="name">Cashbook - Administrator</field>
</record>
<record model="res.user-res.group" id="user_admin-group_cashbook_admin">
<field name="user" ref="res.user_admin"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
</data>
</tryton>

View file

@ -85,10 +85,10 @@ full copyright notices and license terms. -->
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<!-- admin: read/write -->
<record model="ir.model.access" id="access_line-group_admin">
<!-- group_cashbook_admin: read/write -->
<record model="ir.model.access" id="access_line-group_cashbook_admin">
<field name="model" search="[('model', '=', 'cashbook.line')]"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
@ -119,9 +119,9 @@ full copyright notices and license terms. -->
<field name="domain" eval="[]" pyson="1"/>
<field name="rule_group" ref="rg_line_write_adm"/>
</record>
<record model="ir.rule.group-res.group" id="rg_line_write_adm-group_admin">
<record model="ir.rule.group-res.group" id="rg_line_write_adm-group_cashbook_admin">
<field name="rule_group" ref="rg_line_write_adm"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<!-- permission by rule - read/write: owner, reviewer -->
@ -190,9 +190,9 @@ full copyright notices and license terms. -->
<field name="model" search="[('model', '=', 'cashbook.line')]"/>
</record>
<record model="ir.model.button-res.group"
id="line_wfedit_button-group_admin">
id="line_wfedit_button-group_cashbook_admin">
<field name="button" ref="line_wfedit_button"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<record model="ir.model.button-res.group"
id="line_wfedit_button-group_cashbook_checkline">
@ -212,9 +212,9 @@ full copyright notices and license terms. -->
<field name="model" search="[('model', '=', 'cashbook.line')]"/>
</record>
<record model="ir.model.button-res.group"
id="line_wfcheck_button-group_admin">
id="line_wfcheck_button-group_cashbook_admin">
<field name="button" ref="line_wfcheck_button"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<record model="ir.model.button-res.group"
id="line_wfcheck_button-group_cashbook_checkline">
@ -234,9 +234,9 @@ full copyright notices and license terms. -->
<field name="model" search="[('model', '=', 'cashbook.line')]"/>
</record>
<record model="ir.model.button-res.group"
id="line_wfdone_button-group_admin">
id="line_wfdone_button-group_cashbook_admin">
<field name="button" ref="line_wfdone_button"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<record model="ir.model.button-res.group"
id="line_wfdone_button-group_cashbook_doneline">

View file

@ -14,6 +14,10 @@ msgctxt "model:ir.message,text:msg_name_cashbook"
msgid "Cashbook"
msgstr "Kassenbuch"
msgctxt "model:ir.message,text:msg_name_reconciliation"
msgid "Reconciliation"
msgstr "Abstimmung"
msgctxt "model:ir.message,text:msg_line_wrong_state_value"
msgid "Invalid value of the field 'Status', allowed: edit, check, done."
msgstr "Ungültiger Wert des Feldes 'Status', erlaubt: edit, check, done."
@ -122,6 +126,10 @@ msgctxt "model:ir.message,text:msg_line_denywf_by_reference"
msgid "The current line is managed by the cashbook line '%(recname)s', cashbook: '%(cbook)s'."
msgstr "Die aktuelle Zeile wird durch die Kassenbuchzeile '%(recname)s' verwaltet, Kassenbuch: '%(cbook)s'."
msgctxt "model:ir.message,text:msg_rep_reconciliation_fname"
msgid "%(recname)s Reconciliation from %(date_from)s to %(date_to)s"
msgstr "%(recname)s Abstimmung von %(date_from)s bis %(date_to)s"
#############
# res.group #
@ -138,13 +146,21 @@ msgctxt "model:res.group,name:group_cashbook_doneline"
msgid "Cashbook - WF - Done"
msgstr "Kassenbuch - WF - Fertig"
msgctxt "model:res.group,name:group_cashbook_admin"
msgid "Cashbook - Administrator"
msgstr "Kassenbuch - Administrator"
#################
# ir.rule.group #
#################
msgctxt "model:ir.rule.group,name:rg_book_read"
msgid "Owners, observers and reviewers: Cashbook read"
msgstr "Eigentümer, Beobachter und Bearbeiter: Kassenbuch lesen"
msgctxt "model:ir.rule.group,name:rg_book_rw_owner"
msgid "Owners: Cashbook read/write"
msgstr "Eigentümer: Kassenbuch schreiben"
msgctxt "model:ir.rule.group,name:rg_book_read_nonowner"
msgid "Observers and Reviewers: Cashbook read"
msgstr "Beobachter und Bearbeiter: Kassenbuch lesen"
msgctxt "model:ir.rule.group,name:rg_book_write_adm"
msgid "Administrators: Cashbook read/write"
@ -218,6 +234,10 @@ msgctxt "model:ir.ui.menu,name:menu_category_list"
msgid "Category"
msgstr "Kategorie"
msgctxt "model:ir.ui.menu,name:act_category_view"
msgid "Category"
msgstr "Kategorie"
#############
# ir.action #
@ -238,9 +258,13 @@ msgctxt "model:ir.action,name:act_open_lines"
msgid "Open Cashbook"
msgstr "Kassenbuch öffnen"
msgctxt "model:ir.ui.menu,name:act_category_view"
msgid "Category"
msgstr "Kategorie"
msgctxt "model:ir.action,name:report_cashbook"
msgid "Cashbook"
msgstr "Kassenbuch"
msgctxt "model:ir.action,name:act_wizard_report"
msgid "Cashbook Report"
msgstr "Kassenbuch Bericht"
###############################
@ -917,3 +941,91 @@ msgstr "Endbetrag"
msgctxt "field:cashbook.recon,predecessor:"
msgid "Predecessor"
msgstr "Vorgänger"
#############################
# cashbook.runrepbook.start #
#############################
msgctxt "model:cashbook.runrepbook.start,name:"
msgid "Cashbook Report"
msgstr "Kassenbuch Bericht"
msgctxt "field:cashbook.runrepbook.start,cashbook:"
msgid "Cashbook"
msgstr "Kassenbuch"
msgctxt "field:cashbook.runrepbook.start,cashbooks:"
msgid "Cashbooks"
msgstr "Kassenbücher"
msgctxt "field:cashbook.runrepbook.start,reconciliation:"
msgid "Reconciliation"
msgstr "Abstimmung"
msgctxt "field:cashbook.runrepbook.start,reconciliations:"
msgid "Reconciliations"
msgstr "Abstimmungen"
#####################
# cashbook.reprecon #
#####################
msgctxt "report:cashbook.reprecon:"
msgid "Cashbook:"
msgstr "Kassenbuch:"
msgctxt "report:cashbook.reprecon:"
msgid "Period:"
msgstr "Zeitraum:"
msgctxt "report:cashbook.reprecon:"
msgid "to"
msgstr "bis"
msgctxt "report:cashbook.reprecon:"
msgid "Bookings:"
msgstr "Buchungen:"
msgctxt "report:cashbook.reprecon:"
msgid "Initial Amount"
msgstr "Anfangsbetrag"
msgctxt "report:cashbook.reprecon:"
msgid "End Amount"
msgstr "Endbetrag"
msgctxt "report:cashbook.reprecon:"
msgid "Date"
msgstr "Datum"
msgctxt "report:cashbook.reprecon:"
msgid "No."
msgstr "Nr"
msgctxt "report:cashbook.reprecon:"
msgid "Description"
msgstr "Beschreibung"
msgctxt "report:cashbook.reprecon:"
msgid "Revenue"
msgstr "Einnahme"
msgctxt "report:cashbook.reprecon:"
msgid "Expense"
msgstr "Ausgabe"
msgctxt "report:cashbook.reprecon:"
msgid "Sum"
msgstr "Summe"
msgctxt "report:cashbook.reprecon:"
msgid "- Expenses"
msgstr "- Ausgaben"
msgctxt "report:cashbook.reprecon:"
msgid "Total"
msgstr "Gesamt"
msgctxt "report:cashbook.reprecon:"
msgid "Payee"
msgstr "Empfänger"

View file

@ -10,6 +10,10 @@ msgctxt "model:ir.message,text:msg_name_cashbook"
msgid "Cashbook"
msgstr "Cashbook"
msgctxt "model:ir.message,text:msg_name_reconciliation"
msgid "Reconciliation"
msgstr "Reconciliation"
msgctxt "model:ir.message,text:msg_line_wrong_state_value"
msgid "Invalid value of the field 'Status', allowed: edit, check, done."
msgstr "Invalid value of the field 'Status', allowed: edit, check, done."
@ -118,6 +122,10 @@ msgctxt "model:ir.message,text:msg_line_denywf_by_reference"
msgid "The current line is managed by the cashbook line '%(recname)s', cashbook: '%(cbook)s'."
msgstr "The current line is managed by the cashbook line '%(recname)s', cashbook: '%(cbook)s'."
msgctxt "model:ir.message,text:msg_rep_reconciliation_fname"
msgid "%(recname)s Reconciliation from %(date_from)s to %(date_to)s"
msgstr "%(recname)s Reconciliation from %(date_from)s to %(date_to)s"
msgctxt "model:res.group,name:group_cashbook"
msgid "Cashbook"
msgstr "Cashbook"
@ -202,6 +210,10 @@ msgctxt "model:ir.ui.menu,name:menu_category_list"
msgid "Category"
msgstr "Category"
msgctxt "model:ir.ui.menu,name:act_category_view"
msgid "Category"
msgstr "Category"
msgctxt "model:ir.action,name:act_book_view"
msgid "Cashbook"
msgstr "Cashbook"
@ -218,9 +230,13 @@ msgctxt "model:ir.action,name:act_open_lines"
msgid "Open Cashbook"
msgstr "Open Cashbook"
msgctxt "model:ir.ui.menu,name:act_category_view"
msgid "Category"
msgstr "Category"
msgctxt "model:ir.action,name:report_cashbook"
msgid "Cashbook"
msgstr "Cashbook"
msgctxt "model:ir.action,name:act_wizard_report"
msgid "Cashbook Report"
msgstr "Cashbook Report"
msgctxt "model:ir.action.act_window.domain,name:act_line_domain_current"
msgid "Current Month"
@ -270,6 +286,10 @@ msgctxt "model:ir.model.button,string:recon_wfdone_button"
msgid "Done"
msgstr "Done"
msgctxt "model:ir.sequence.type,name:sequence_type_cashbook_line"
msgid "Cashbook Line"
msgstr "Cashbook Line"
msgctxt "model:cashbook.book,name:"
msgid "Cashbook"
msgstr "Cashbook"
@ -350,6 +370,22 @@ msgctxt "field:cashbook.book,lines:"
msgid "Lines"
msgstr "Lines"
msgctxt "field:cashbook.book,number_sequ:"
msgid "Line numbering"
msgstr "Line numbering"
msgctxt "help:cashbook.book,number_sequ:"
msgid "Number sequence for numbering of the cash book lines."
msgstr "Number sequence for numbering of the cash book lines."
msgctxt "field:cashbook.book,number_atcheck:"
msgid "number when 'Checking'"
msgstr "number when 'Checking'"
msgctxt "help:cashbook.book,number_atcheck:"
msgid "The numbering of the lines is done in the step Check. If the check mark is inactive, this happens with Done."
msgstr "The numbering of the lines is done in the step Check. If the check mark is inactive, this happens with Done."
msgctxt "model:cashbook.line,name:"
msgid "Cashbook Line"
msgstr "Cashbook Line"
@ -514,6 +550,10 @@ msgctxt "selection:cashbook.line,payee:"
msgid "Party"
msgstr "Party"
msgctxt "field:cashbook.line,number:"
msgid "Number"
msgstr "Number"
msgctxt "model:cashbook.type,name:"
msgid "Cashbook Type"
msgstr "Cashbook Type"
@ -818,3 +858,23 @@ msgctxt "field:cashbook.recon,end_amount:"
msgid "End Amount"
msgstr "End Amount"
msgctxt "field:cashbook.recon,predecessor:"
msgid "Predecessor"
msgstr "Predecessor"
msgctxt "model:cashbook.runrepbook.start,name:"
msgid "Cashbook Report"
msgstr "Cashbook Report"
msgctxt "field:cashbook.runrepbook.start,cashbook:"
msgid "Cashbook"
msgstr "Cashbook"
msgctxt "field:cashbook.runrepbook.start,cashbooks:"
msgid "Cashbooks"
msgstr "Cashbooks"
msgctxt "field:cashbook.runrepbook.start,reconciliation:"
msgid "Reconciliation"
msgstr "Reconciliation"

View file

@ -8,79 +8,79 @@ full copyright notices and license terms. -->
<!-- menu: /Cashbook -->
<menuitem id="menu_cashbook" name="Cashbook"
icon="mds-notebook" />
<record model="ir.ui.menu-res.group" id="menu_cashbook-group_admin">
<field name="menu" ref="menu_cashbook"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.ui.menu-res.group" id="menu_cashbook-group_cashbook">
<field name="menu" ref="menu_cashbook"/>
<field name="group" ref="group_cashbook"/>
</record>
<record model="ir.ui.menu-res.group" id="menu_cashbook-group_cashbook_admin">
<field name="menu" ref="menu_cashbook"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<!-- menu: /Cashbook/Configuration name="Configuration" -->
<menuitem id="menu_config" action="act_configuration_form"
icon="tryton-list"
parent="menu_cashbook" sequence="10"/>
<record model="ir.ui.menu-res.group" id="menu_config-group_admin">
<field name="menu" ref="menu_config"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.ui.menu-res.group" id="menu_config-group_cashbook">
<field name="menu" ref="menu_config"/>
<field name="group" ref="group_cashbook"/>
</record>
<record model="ir.ui.menu-res.group" id="menu_config-group_cashbook_admin">
<field name="menu" ref="menu_config"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<!-- menu: /Cashbook/Configuration/Types -->
<menuitem id="menu_typeconfig" action="act_type_view"
icon="tryton-list"
parent="menu_config" sequence="10"/>
<record model="ir.ui.menu-res.group" id="menu_typeconfig-group_admin">
<record model="ir.ui.menu-res.group" id="menu_typeconfig-group_cashbook_admin">
<field name="menu" ref="menu_typeconfig"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<!-- menu: /Cashbook/Configuration/Category -->
<menuitem id="menu_category" action="act_category_tree"
icon="tryton-tree"
parent="menu_config" sequence="20"/>
<record model="ir.ui.menu-res.group" id="menu_category-group_admin">
<record model="ir.ui.menu-res.group" id="menu_category-group_cashbook_admin">
<field name="menu" ref="menu_category"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<!-- menu: /Cashbook/Configuration/Category/Category -->
<menuitem id="menu_category_list" action="act_category_list"
icon="tryton-list"
parent="menu_category" sequence="10"/>
<record model="ir.ui.menu-res.group" id="menu_category_list-group_admin">
<record model="ir.ui.menu-res.group" id="menu_category_list-group_cashbook_admin">
<field name="menu" ref="menu_category_list"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<!-- menu: /Cashbook/Open Cashbook -->
<menuitem id="menu_open_lines" action="act_open_lines"
icon="tryton-list"
parent="menu_cashbook" sequence="20"/>
<record model="ir.ui.menu-res.group" id="menu_open_lines-group_admin">
<field name="menu" ref="menu_open_lines"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.ui.menu-res.group" id="menu_open_lines-group_cashbook">
<field name="menu" ref="menu_open_lines"/>
<field name="group" ref="group_cashbook"/>
</record>
<record model="ir.ui.menu-res.group" id="menu_open_lines-group_cashbook_admin">
<field name="menu" ref="menu_open_lines"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<!-- menu: /Cashbook/Cashbook -->
<menuitem id="menu_booklist" action="act_book_view"
icon="tryton-list"
parent="menu_cashbook" sequence="30"/>
<record model="ir.ui.menu-res.group" id="menu_booklist-group_admin">
<field name="menu" ref="menu_booklist"/>
<field name="group" ref="res.group_admin"/>
</record>
<record model="ir.ui.menu-res.group" id="menu_booklist-group_cashbook">
<field name="menu" ref="menu_booklist"/>
<field name="group" ref="group_cashbook"/>
</record>
<record model="ir.ui.menu-res.group" id="menu_booklist-group_cashbook_admin">
<field name="menu" ref="menu_booklist"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
</data>
</tryton>

View file

@ -11,6 +11,9 @@ full copyright notices and license terms. -->
<record model="ir.message" id="msg_name_cashbook">
<field name="text">Cashbook</field>
</record>
<record model="ir.message" id="msg_name_reconciliation">
<field name="text">Reconciliation</field>
</record>
<record model="ir.message" id="msg_line_wrong_state_value">
<field name="text">Invalid value of the field 'Status', allowed: edit, check, done.</field>
</record>
@ -92,6 +95,9 @@ full copyright notices and license terms. -->
<record model="ir.message" id="msg_line_denywf_by_reference">
<field name="text">The current line is managed by the cashbook line '%(recname)s', cashbook: '%(cbook)s'.</field>
</record>
<record model="ir.message" id="msg_rep_reconciliation_fname">
<field name="text">%(recname)s Reconciliation from %(date_from)s to %(date_to)s</field>
</record>
</data>
</tryton>

View file

@ -5,7 +5,7 @@
from trytond.model import Workflow, ModelView, ModelSQL, fields
from trytond.transaction import Transaction
from trytond.pyson import Eval, If, Or
from trytond.pyson import Eval, If, Or, Bool
from trytond.pool import Pool
from trytond.report import Report
from trytond.exceptions import UserError

View file

@ -44,10 +44,10 @@ full copyright notices and license terms. -->
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<!-- admin: read/write -->
<record model="ir.model.access" id="access_recon-group_admin">
<!-- group_cashbook_admin: read/write -->
<record model="ir.model.access" id="access_recon-group_cashbook_admin">
<field name="model" search="[('model', '=', 'cashbook.recon')]"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
@ -78,9 +78,9 @@ full copyright notices and license terms. -->
<field name="domain" eval="[]" pyson="1"/>
<field name="rule_group" ref="rg_recon_write_adm"/>
</record>
<record model="ir.rule.group-res.group" id="rg_recon_write_adm-group_admin">
<record model="ir.rule.group-res.group" id="rg_recon_write_adm-group_cashbook_admin">
<field name="rule_group" ref="rg_recon_write_adm"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<!-- permission by rule - read/write: owner, reviewer -->
@ -148,9 +148,14 @@ full copyright notices and license terms. -->
<field name="model" search="[('model', '=', 'cashbook.recon')]"/>
</record>
<record model="ir.model.button-res.group"
id="recon_wfedit_button-group_admin">
id="recon_wfedit_button-group_cashbook_admin">
<field name="button" ref="recon_wfedit_button"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<record model="ir.model.button-res.group"
id="recon_wfedit_button-group_cashbook_checkline">
<field name="button" ref="recon_wfedit_button"/>
<field name="group" ref="group_cashbook_checkline"/>
</record>
<record model="ir.model.button-res.group"
id="recon_wfedit_button-group_cashbook_doneline">
@ -165,9 +170,14 @@ full copyright notices and license terms. -->
<field name="model" search="[('model', '=', 'cashbook.recon')]"/>
</record>
<record model="ir.model.button-res.group"
id="recon_wfcheck_button-group_admin">
id="recon_wfcheck_button-group_cashbook_admin">
<field name="button" ref="recon_wfcheck_button"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<record model="ir.model.button-res.group"
id="recon_wfcheck_button-group_cashbook_checkline">
<field name="button" ref="recon_wfcheck_button"/>
<field name="group" ref="group_cashbook_checkline"/>
</record>
<record model="ir.model.button-res.group"
id="recon_wfcheck_button-group_cashbook_doneline">
@ -182,9 +192,9 @@ full copyright notices and license terms. -->
<field name="model" search="[('model', '=', 'cashbook.recon')]"/>
</record>
<record model="ir.model.button-res.group"
id="recon_wfdone_button-group_admin">
id="recon_wfdone_button-group_cashbook_admin">
<field name="button" ref="recon_wfdone_button"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
</record>
<record model="ir.model.button-res.group"
id="recon_wfdone_button-group_cashbook_doneline">

551
report/reconciliation.fods Normal file
View file

@ -0,0 +1,551 @@
<?xml version="1.0" encoding="UTF-8"?>
<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.spreadsheet">
<office:meta><meta:creation-date>2022-08-16T16:46:07.407489159</meta:creation-date><dc:date>2022-08-17T15:50:10.077622122</dc:date><meta:editing-duration>PT1H48M44S</meta:editing-duration><meta:editing-cycles>47</meta:editing-cycles><meta:generator>LibreOffice/6.0.7.3$Linux_X86_64 LibreOffice_project/00m0$Build-3</meta:generator><meta:document-statistic meta:table-count="1" meta:cell-count="33" meta:object-count="0"/></office:meta>
<office:settings>
<config:config-item-set config:name="ooo:view-settings">
<config:config-item config:name="VisibleAreaTop" config:type="int">0</config:config-item>
<config:config-item config:name="VisibleAreaLeft" config:type="int">0</config:config-item>
<config:config-item config:name="VisibleAreaWidth" config:type="int">18199</config:config-item>
<config:config-item config:name="VisibleAreaHeight" config:type="int">7676</config:config-item>
<config:config-item-map-indexed config:name="Views">
<config:config-item-map-entry>
<config:config-item config:name="ViewId" config:type="string">view1</config:config-item>
<config:config-item-map-named config:name="Tables">
<config:config-item-map-entry config:name="Tabelle1">
<config:config-item config:name="CursorPositionX" config:type="int">3</config:config-item>
<config:config-item config:name="CursorPositionY" config:type="int">7</config:config-item>
<config:config-item config:name="HorizontalSplitMode" config:type="short">0</config:config-item>
<config:config-item config:name="VerticalSplitMode" config:type="short">0</config:config-item>
<config:config-item config:name="HorizontalSplitPosition" config:type="int">0</config:config-item>
<config:config-item config:name="VerticalSplitPosition" config:type="int">0</config:config-item>
<config:config-item config:name="ActiveSplitRange" config:type="short">2</config:config-item>
<config:config-item config:name="PositionLeft" config:type="int">0</config:config-item>
<config:config-item config:name="PositionRight" config:type="int">0</config:config-item>
<config:config-item config:name="PositionTop" config:type="int">0</config:config-item>
<config:config-item config:name="PositionBottom" config:type="int">0</config:config-item>
<config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
<config:config-item config:name="ZoomValue" config:type="int">100</config:config-item>
<config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item>
<config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item>
<config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
</config:config-item-map-entry>
</config:config-item-map-named>
<config:config-item config:name="ActiveTable" config:type="string">Tabelle1</config:config-item>
<config:config-item config:name="HorizontalScrollbarWidth" config:type="int">1193</config:config-item>
<config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
<config:config-item config:name="ZoomValue" config:type="int">100</config:config-item>
<config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item>
<config:config-item config:name="ShowPageBreakPreview" config:type="boolean">false</config:config-item>
<config:config-item config:name="ShowZeroValues" config:type="boolean">true</config:config-item>
<config:config-item config:name="ShowNotes" config:type="boolean">true</config:config-item>
<config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item>
<config:config-item config:name="GridColor" config:type="long">12632256</config:config-item>
<config:config-item config:name="ShowPageBreaks" config:type="boolean">true</config:config-item>
<config:config-item config:name="HasColumnRowHeaders" config:type="boolean">true</config:config-item>
<config:config-item config:name="HasSheetTabs" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsOutlineSymbolsSet" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsValueHighlightingEnabled" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsSnapToRaster" config:type="boolean">false</config:config-item>
<config:config-item config:name="RasterIsVisible" config:type="boolean">false</config:config-item>
<config:config-item config:name="RasterResolutionX" config:type="int">1000</config:config-item>
<config:config-item config:name="RasterResolutionY" config:type="int">1000</config:config-item>
<config:config-item config:name="RasterSubdivisionX" config:type="int">1</config:config-item>
<config:config-item config:name="RasterSubdivisionY" config:type="int">1</config:config-item>
<config:config-item config:name="IsRasterAxisSynchronized" config:type="boolean">true</config:config-item>
<config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
</config:config-item-map-entry>
</config:config-item-map-indexed>
</config:config-item-set>
<config:config-item-set config:name="ooo:configuration-settings">
<config:config-item config:name="SyntaxStringRef" config:type="short">7</config:config-item>
<config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
<config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
<config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
<config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
<config:config-item config:name="PrinterSetup" config:type="base64Binary">vgH+/0hQX0xhc2VySmV0X01GUF9NNDI2ZmRuX0IyNUM3Ml8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ1VQUzpIUF9MYXNlckpldF9NRlBfTTQyNmZkbl9CMgAWAAMA3wAAAAAAAAAEAAhSAAAEdAAASm9iRGF0YSAxCnByaW50ZXI9SFBfTGFzZXJKZXRfTUZQX000MjZmZG5fQjI1QzcyXwpvcmllbnRhdGlvbj1Qb3J0cmFpdApjb3BpZXM9MQpjb2xsYXRlPWZhbHNlCm1hcmdpbmRhanVzdG1lbnQ9MCwwLDAsMApjb2xvcmRlcHRoPTI0CnBzbGV2ZWw9MApwZGZkZXZpY2U9MQpjb2xvcmRldmljZT0wClBQRENvbnRleERhdGEKUGFnZVNpemU6QTQASW5wdXRTbG90OkF1dG8ARHVwbGV4Ok5vbmUAABIAQ09NUEFUX0RVUExFWF9NT0RFDwBEdXBsZXhNb2RlOjpPZmY=</config:config-item>
<config:config-item config:name="PrinterName" config:type="string">HP_LaserJet_MFP_M426fdn_B25C72_</config:config-item>
<config:config-item config:name="AutoCalculate" config:type="boolean">true</config:config-item>
<config:config-item config:name="LinkUpdateMode" config:type="short">3</config:config-item>
<config:config-item config:name="HasColumnRowHeaders" config:type="boolean">true</config:config-item>
<config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
<config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
<config:config-item config:name="ShowZeroValues" config:type="boolean">true</config:config-item>
<config:config-item config:name="GridColor" config:type="long">12632256</config:config-item>
<config:config-item config:name="ShowPageBreaks" config:type="boolean">true</config:config-item>
<config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsOutlineSymbolsSet" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsDocumentShared" config:type="boolean">false</config:config-item>
<config:config-item config:name="ShowNotes" config:type="boolean">true</config:config-item>
<config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
<config:config-item config:name="HasSheetTabs" config:type="boolean">true</config:config-item>
<config:config-item config:name="RasterSubdivisionY" config:type="int">1</config:config-item>
<config:config-item config:name="RasterIsVisible" config:type="boolean">false</config:config-item>
<config:config-item config:name="RasterResolutionX" config:type="int">1000</config:config-item>
<config:config-item config:name="RasterResolutionY" config:type="int">1000</config:config-item>
<config:config-item config:name="IsSnapToRaster" config:type="boolean">false</config:config-item>
<config:config-item config:name="RasterSubdivisionX" config:type="int">1</config:config-item>
<config:config-item config:name="IsRasterAxisSynchronized" config:type="boolean">true</config:config-item>
</config:config-item-set>
</office:settings>
<office:scripts>
<office:script script:language="ooo:Basic">
<ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/>
</office:script>
</office:scripts>
<office:font-face-decls>
<style:font-face style:name="Liberation Sans" svg:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
<style:font-face style:name="DejaVu Sans" svg:font-family="&apos;DejaVu Sans&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
<style:font-face style:name="FreeSans" svg:font-family="FreeSans" style:font-family-generic="system" style:font-pitch="variable"/>
<style:font-face style:name="Noto Sans CJK SC" svg:font-family="&apos;Noto Sans CJK SC&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
</office:font-face-decls>
<office:styles>
<style:default-style style:family="table-cell">
<style:paragraph-properties style:tab-stop-distance="12.5mm"/>
<style:text-properties style:font-name="Liberation Sans" fo:language="de" fo:country="DE" style:font-name-asian="DejaVu Sans" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="DejaVu Sans" style:language-complex="hi" style:country-complex="IN"/>
</style:default-style>
<number:number-style style:name="N0">
<number:number number:min-integer-digits="1"/>
</number:number-style>
<style:style style:name="Default" style:family="table-cell">
<style:text-properties style:font-name-asian="Noto Sans CJK SC" style:font-family-asian="&apos;Noto Sans CJK SC&apos;" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-name-complex="FreeSans" style:font-family-complex="FreeSans" style:font-family-generic-complex="system" style:font-pitch-complex="variable"/>
</style:style>
<style:style style:name="Heading_20__28_user_29_" style:display-name="Heading (user)" style:family="table-cell" style:parent-style-name="Default">
<style:text-properties fo:color="#000000" fo:font-size="24pt" fo:font-style="normal" fo:font-weight="bold"/>
</style:style>
<style:style style:name="Heading_20_1" style:display-name="Heading 1" style:family="table-cell" style:parent-style-name="Heading_20__28_user_29_">
<style:text-properties fo:color="#000000" fo:font-size="18pt" fo:font-style="normal" fo:font-weight="normal"/>
</style:style>
<style:style style:name="Heading_20_2" style:display-name="Heading 2" style:family="table-cell" style:parent-style-name="Heading_20__28_user_29_">
<style:text-properties fo:color="#000000" fo:font-size="12pt" fo:font-style="normal" fo:font-weight="normal"/>
</style:style>
<style:style style:name="Text" style:family="table-cell" style:parent-style-name="Default"/>
<style:style style:name="Note" style:family="table-cell" style:parent-style-name="Text">
<style:table-cell-properties fo:background-color="#ffffcc" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" fo:border="0.74pt solid #808080"/>
<style:text-properties fo:color="#333333" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="normal"/>
</style:style>
<style:style style:name="Footnote" style:family="table-cell" style:parent-style-name="Text">
<style:text-properties fo:color="#808080" fo:font-size="10pt" fo:font-style="italic" fo:font-weight="normal"/>
</style:style>
<style:style style:name="Hyperlink" style:family="table-cell" style:parent-style-name="Text">
<style:text-properties fo:color="#0000ee" fo:font-size="10pt" fo:font-style="normal" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="#0000ee" fo:font-weight="normal"/>
</style:style>
<style:style style:name="Status" style:family="table-cell" style:parent-style-name="Default"/>
<style:style style:name="Good" style:family="table-cell" style:parent-style-name="Status">
<style:table-cell-properties fo:background-color="#ccffcc"/>
<style:text-properties fo:color="#006600" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="normal"/>
</style:style>
<style:style style:name="Neutral" style:family="table-cell" style:parent-style-name="Status">
<style:table-cell-properties fo:background-color="#ffffcc"/>
<style:text-properties fo:color="#996600" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="normal"/>
</style:style>
<style:style style:name="Bad" style:family="table-cell" style:parent-style-name="Status">
<style:table-cell-properties fo:background-color="#ffcccc"/>
<style:text-properties fo:color="#cc0000" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="normal"/>
</style:style>
<style:style style:name="Warning" style:family="table-cell" style:parent-style-name="Status">
<style:text-properties fo:color="#cc0000" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="normal"/>
</style:style>
<style:style style:name="Error" style:family="table-cell" style:parent-style-name="Status">
<style:table-cell-properties fo:background-color="#cc0000"/>
<style:text-properties fo:color="#ffffff" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="bold"/>
</style:style>
<style:style style:name="Accent" style:family="table-cell" style:parent-style-name="Default">
<style:text-properties fo:color="#000000" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="bold"/>
</style:style>
<style:style style:name="Accent_20_1" style:display-name="Accent 1" style:family="table-cell" style:parent-style-name="Accent">
<style:table-cell-properties fo:background-color="#000000"/>
<style:text-properties fo:color="#ffffff" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="normal"/>
</style:style>
<style:style style:name="Accent_20_2" style:display-name="Accent 2" style:family="table-cell" style:parent-style-name="Accent">
<style:table-cell-properties fo:background-color="#808080"/>
<style:text-properties fo:color="#ffffff" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="normal"/>
</style:style>
<style:style style:name="Accent_20_3" style:display-name="Accent 3" style:family="table-cell" style:parent-style-name="Accent">
<style:table-cell-properties fo:background-color="#dddddd"/>
</style:style>
</office:styles>
<office:automatic-styles>
<style:style style:name="co1" style:family="table-column">
<style:table-column-properties fo:break-before="auto" style:column-width="26mm"/>
</style:style>
<style:style style:name="co2" style:family="table-column">
<style:table-column-properties fo:break-before="auto" style:column-width="22mm"/>
</style:style>
<style:style style:name="co3" style:family="table-column">
<style:table-column-properties fo:break-before="auto" style:column-width="60.01mm"/>
</style:style>
<style:style style:name="co4" style:family="table-column">
<style:table-column-properties fo:break-before="auto" style:column-width="30mm"/>
</style:style>
<style:style style:name="co5" style:family="table-column">
<style:table-column-properties fo:break-before="auto" style:column-width="22.58mm"/>
</style:style>
<style:style style:name="ro1" style:family="table-row">
<style:table-row-properties style:row-height="4.52mm" fo:break-before="auto" style:use-optimal-row-height="true"/>
</style:style>
<style:style style:name="ta1" style:family="table" style:master-page-name="Default">
<style:table-properties table:display="true" style:writing-mode="lr-tb"/>
</style:style>
<style:style style:name="ce71" style:family="table-cell" style:parent-style-name="Default">
<style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="ce72" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.99pt solid #000000" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.99pt solid #000000" fo:border-right="none" fo:border-top="0.99pt solid #000000"/>
<style:paragraph-properties fo:text-align="start" fo:margin-left="0mm"/>
<style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="ce73" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.6pt solid #000000" fo:background-color="#eeeeee" fo:border-left="0.99pt solid #000000" fo:border-right="none" fo:border-top="none"/>
</style:style>
<style:style style:name="ce74" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="none" fo:border-left="0.99pt solid #000000" fo:border-right="none" fo:border-top="none"/>
</style:style>
<style:style style:name="ce75" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.06pt solid #000000" fo:border-left="0.99pt solid #000000" fo:border-right="none" fo:border-top="0.06pt solid #000000"/>
</style:style>
<style:style style:name="ce76" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="none" fo:border-left="0.99pt solid #000000" fo:border-right="none" fo:border-top="0.06pt solid #000000"/>
</style:style>
<style:style style:name="ce77" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.99pt solid #000000" fo:border-left="0.99pt solid #000000" fo:border-right="none" fo:border-top="0.06pt solid #000000"/>
</style:style>
<style:style style:name="ce78" style:family="table-cell" style:parent-style-name="Default">
<style:text-properties fo:font-weight="normal" style:font-weight-asian="normal" style:font-weight-complex="normal"/>
</style:style>
<style:style style:name="ce79" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.99pt solid #000000" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.06pt solid #000000" fo:border-right="none" fo:border-top="0.99pt solid #000000"/>
<style:paragraph-properties fo:text-align="start" fo:margin-left="0mm"/>
<style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="ce80" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.6pt solid #000000" fo:background-color="#eeeeee" fo:border-left="0.06pt solid #000000" fo:border-right="none" fo:border-top="none"/>
</style:style>
<style:style style:name="ce81" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="none" fo:border-left="0.06pt solid #000000" fo:border-right="none" fo:border-top="none"/>
</style:style>
<style:style style:name="ce82" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.06pt solid #000000" fo:border-left="0.06pt solid #000000" fo:border-right="none" fo:border-top="0.06pt solid #000000"/>
</style:style>
<style:style style:name="ce83" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="none" fo:border-left="0.06pt solid #000000" fo:border-right="none" fo:border-top="0.06pt solid #000000"/>
</style:style>
<style:style style:name="ce84" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.99pt solid #000000" fo:border-left="0.06pt solid #000000" fo:border-right="none" fo:border-top="0.06pt solid #000000"/>
</style:style>
<style:style style:name="ce85" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/>
<style:paragraph-properties fo:text-align="center" fo:margin-left="0mm"/>
</style:style>
<style:style style:name="ce86" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="none" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.99pt solid #000000" fo:border-right="none" fo:border-top="none"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
<style:text-properties fo:font-weight="normal" style:font-weight-asian="normal" style:font-weight-complex="normal"/>
</style:style>
<style:style style:name="ce87" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.99pt solid #000000" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.99pt solid #000000" fo:border-right="none" fo:border-top="none"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
<style:text-properties fo:font-weight="normal" style:font-weight-asian="normal" style:font-weight-complex="normal"/>
</style:style>
<style:style style:name="ce88" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.99pt solid #000000" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.99pt solid #000000" fo:border-right="none" fo:border-top="none"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
<style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="ce89" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
</style:style>
<style:style style:name="ce90" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.6pt solid #000000" fo:background-color="#eeeeee" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.06pt solid #000000" fo:border-right="none" fo:border-top="none"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
</style:style>
<style:style style:name="ce91" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="none" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.06pt solid #000000" fo:border-right="none" fo:border-top="none"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
</style:style>
<style:style style:name="ce92" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.06pt solid #000000" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.06pt solid #000000" fo:border-right="none" fo:border-top="0.06pt solid #000000"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
</style:style>
<style:style style:name="ce93" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="none" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.06pt solid #000000" fo:border-right="none" fo:border-top="0.06pt solid #000000"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
</style:style>
<style:style style:name="ce94" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.99pt solid #000000" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.06pt solid #000000" fo:border-right="none" fo:border-top="0.06pt solid #000000"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
</style:style>
<style:style style:name="ce95" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="none" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.06pt solid #000000" fo:border-right="none" fo:border-top="none"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
<style:text-properties fo:font-weight="normal" style:font-weight-asian="normal" style:font-weight-complex="normal"/>
</style:style>
<style:style style:name="ce96" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.99pt solid #000000" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.06pt solid #000000" fo:border-right="none" fo:border-top="none"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
</style:style>
<style:style style:name="ce97" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.99pt solid #000000" style:text-align-source="fix" style:repeat-content="false" fo:border-left="none" fo:border-right="none" fo:border-top="none"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
<style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="ce98" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.99pt solid #000000" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.06pt solid #000000" fo:border-right="0.99pt solid #000000" fo:border-top="0.99pt solid #000000"/>
<style:paragraph-properties fo:text-align="start" fo:margin-left="0mm"/>
<style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="ce99" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.6pt solid #000000" fo:background-color="#eeeeee" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.06pt solid #000000" fo:border-right="0.99pt solid #000000" fo:border-top="none"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
</style:style>
<style:style style:name="ce100" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="none" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.06pt solid #000000" fo:border-right="0.99pt solid #000000" fo:border-top="none"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
</style:style>
<style:style style:name="ce101" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.06pt solid #000000" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.06pt solid #000000" fo:border-right="0.99pt solid #000000" fo:border-top="0.06pt solid #000000"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
</style:style>
<style:style style:name="ce102" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="none" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.06pt solid #000000" fo:border-right="0.99pt solid #000000" fo:border-top="0.06pt solid #000000"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
</style:style>
<style:style style:name="ce103" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.99pt solid #000000" style:text-align-source="fix" style:repeat-content="false" fo:border-left="0.06pt solid #000000" fo:border-right="0.99pt solid #000000" fo:border-top="0.06pt solid #000000"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
</style:style>
<style:style style:name="ce104" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="none" style:text-align-source="fix" style:repeat-content="false" fo:border-left="none" fo:border-right="0.99pt solid #000000" fo:border-top="none"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
</style:style>
<style:style style:name="ce105" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:border-bottom="0.99pt solid #000000" style:text-align-source="fix" style:repeat-content="false" fo:border-left="none" fo:border-right="0.99pt solid #000000" fo:border-top="none"/>
<style:paragraph-properties fo:text-align="end" fo:margin-left="0mm"/>
</style:style>
<style:page-layout style:name="pm1">
<style:page-layout-properties fo:margin-top="10mm" fo:margin-bottom="10mm" fo:margin-left="14.99mm" fo:margin-right="10mm" style:shadow="none" style:writing-mode="lr-tb"/>
<style:header-style>
<style:header-footer-properties fo:min-height="7.5mm" fo:margin-left="0mm" fo:margin-right="0mm" fo:margin-bottom="2.5mm"/>
</style:header-style>
<style:footer-style>
<style:header-footer-properties fo:min-height="7.5mm" fo:margin-left="0mm" fo:margin-right="0mm" fo:margin-top="2.5mm"/>
</style:footer-style>
</style:page-layout>
<style:page-layout style:name="pm2">
<style:page-layout-properties style:writing-mode="lr-tb"/>
<style:header-style>
<style:header-footer-properties fo:min-height="7.5mm" fo:margin-left="0mm" fo:margin-right="0mm" fo:margin-bottom="2.5mm" fo:border="2.49pt solid #000000" fo:padding="0.18mm" fo:background-color="#c0c0c0">
<style:background-image/>
</style:header-footer-properties>
</style:header-style>
<style:footer-style>
<style:header-footer-properties fo:min-height="7.5mm" fo:margin-left="0mm" fo:margin-right="0mm" fo:margin-top="2.5mm" fo:border="2.49pt solid #000000" fo:padding="0.18mm" fo:background-color="#c0c0c0">
<style:background-image/>
</style:header-footer-properties>
</style:footer-style>
</style:page-layout>
<style:style style:name="T1" style:family="text">
<style:text-properties fo:font-size="10pt" style:font-relief="none" style:text-emphasize="none" style:font-style-complex="normal" style:font-style-asian="normal" style:font-weight-complex="bold" style:font-weight-asian="bold" style:font-size-complex="10pt" style:font-size-asian="10pt" style:font-name-complex="FreeSans" style:font-name-asian="Noto Sans CJK SC" style:language-complex="hi" style:country-complex="IN" style:language-asian="zh" style:country-asian="CN" fo:language="de" fo:country="DE" style:text-line-through-mode="continuous" fo:text-shadow="none" style:text-outline="false" fo:font-style="normal" style:text-line-through-type="none" style:text-underline-style="none" style:text-underline-color="font-color" style:font-name="Liberation Sans" style:text-overline-style="none" style:text-overline-color="font-color"/>
</style:style>
<style:style style:name="T2" style:family="text">
<style:text-properties fo:font-size="10pt" style:font-relief="none" style:text-emphasize="none" style:font-style-complex="normal" style:font-style-asian="normal" style:font-size-complex="10pt" style:font-size-asian="10pt" style:font-name-complex="FreeSans" style:font-name-asian="Noto Sans CJK SC" style:language-complex="hi" style:country-complex="IN" style:language-asian="zh" style:country-asian="CN" fo:language="de" fo:country="DE" style:text-line-through-mode="continuous" fo:text-shadow="none" style:text-outline="false" fo:font-style="normal" style:text-line-through-type="none" style:text-underline-style="none" style:text-underline-color="font-color" style:font-name="Liberation Sans" style:text-overline-style="none" style:text-overline-color="font-color" style:font-weight-asian="normal" style:font-weight-complex="normal"/>
</style:style>
<style:style style:name="T3" style:family="text">
<style:text-properties style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Liberation Sans" fo:font-size="8pt" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" style:text-underline-mode="continuous" style:text-overline-mode="continuous" style:text-line-through-mode="continuous" style:font-name-asian="DejaVu Sans" style:font-size-asian="10pt" style:language-asian="zh" style:country-asian="CN" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-name-complex="DejaVu Sans" style:font-size-complex="10pt" style:language-complex="hi" style:country-complex="IN" style:font-style-complex="normal" style:font-weight-complex="normal" style:text-emphasize="none" style:font-relief="none" style:text-overline-style="none" style:text-overline-color="font-color"/>
</style:style>
<style:style style:name="T4" style:family="text">
<style:text-properties style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Liberation Sans" fo:font-size="10pt" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" style:text-underline-mode="continuous" style:text-overline-mode="continuous" style:text-line-through-mode="continuous" style:font-name-asian="DejaVu Sans" style:font-size-asian="10pt" style:language-asian="zh" style:country-asian="CN" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-name-complex="DejaVu Sans" style:font-size-complex="10pt" style:language-complex="hi" style:country-complex="IN" style:font-style-complex="normal" style:font-weight-complex="normal" style:text-emphasize="none" style:font-relief="none" style:text-overline-style="none" style:text-overline-color="font-color"/>
</style:style>
</office:automatic-styles>
<office:master-styles>
<style:master-page style:name="Default" style:page-layout-name="pm1">
<style:header/>
<style:header-left style:display="false"/>
<style:footer>
<style:region-left>
<text:p><text:span text:style-name="T3"><text:file-name text:display="name-and-extension">???</text:file-name></text:span></text:p>
</style:region-left>
<style:region-right>
<text:p><text:span text:style-name="T4">Seite </text:span><text:span text:style-name="T4"><text:page-number>1</text:page-number></text:span><text:span text:style-name="T4">/</text:span><text:span text:style-name="T4"><text:page-count>99</text:page-count></text:span></text:p>
<text:p><text:span text:style-name="T4"><text:date style:data-style-name="N2" text:date-value="2022-08-17">00.00.0000</text:date></text:span></text:p>
</style:region-right>
</style:footer>
<style:footer-left style:display="false"/>
</style:master-page>
<style:master-page style:name="Report" style:page-layout-name="pm2">
<style:header>
<style:region-left>
<text:p><text:sheet-name>???</text:sheet-name><text:s/>(<text:title>???</text:title>)</text:p>
</style:region-left>
<style:region-right>
<text:p><text:date style:data-style-name="N2" text:date-value="2022-08-17">00.00.0000</text:date>, <text:time style:data-style-name="N2" text:time-value="15:42:42.526487602">00:00:00</text:time></text:p>
</style:region-right>
</style:header>
<style:header-left style:display="false"/>
<style:footer>
<text:p>Seite <text:page-number>1</text:page-number><text:s/>/ <text:page-count>99</text:page-count></text:p>
</style:footer>
<style:footer-left style:display="false"/>
</style:master-page>
</office:master-styles>
<office:body>
<office:spreadsheet>
<table:calculation-settings table:automatic-find-labels="false" table:use-regular-expressions="false" table:use-wildcards="true"/>
<table:table table:name="Tabelle1" table:style-name="ta1">
<table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
<table:table-column table:style-name="co2" table:default-cell-style-name="Default"/>
<table:table-column table:style-name="co3" table:default-cell-style-name="Default"/>
<table:table-column table:style-name="co4" table:default-cell-style-name="Default"/>
<table:table-column table:style-name="co2" table:number-columns-repeated="2" table:default-cell-style-name="ce89"/>
<table:table-row table:style-name="ro1">
<table:table-cell office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio://for%20each=%22record%20in%20records%22" xlink:type="simple">for each=&quot;record in records&quot;</text:a></text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="5"/>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:style-name="ce71" office:value-type="string" calcext:value-type="string">
<text:p>Cashbook:</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce71" office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio://record.cashbook.name+&apos;%20(&apos;%20+%20record.cashbook.state_string%20+&apos;)&apos;" xlink:type="simple">record.cashbook.name+&apos; (&apos; + record.cashbook.state_string +&apos;)&apos;</text:a></text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="4"/>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:style-name="ce71" office:value-type="string" calcext:value-type="string">
<text:p>Period:</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce78" office:value-type="string" calcext:value-type="string"><text:p><text:span text:style-name="T1"><text:a xlink:href="relatorio://format_date(record.date_from)" xlink:type="simple">format_date(record.date_from)</text:a></text:span><text:span text:style-name="T1"> to </text:span><text:span text:style-name="T2"><text:a xlink:href="relatorio://format_date(record.date_to)" xlink:type="simple">format_date(record.date_to)</text:a></text:span></text:p>
</table:table-cell>
<table:table-cell table:style-name="ce85" table:number-columns-repeated="2"/>
<table:table-cell table:number-columns-repeated="2"/>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:style-name="ce71" office:value-type="string" calcext:value-type="string">
<text:p>Bookings:</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio://len(record.lines)" xlink:type="simple">len(record.lines)</text:a></text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="4"/>
</table:table-row>
<table:table-row table:style-name="ro1" table:number-rows-repeated="2">
<table:table-cell table:number-columns-repeated="6"/>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:style-name="ce72" office:value-type="string" calcext:value-type="string">
<text:p>Date</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce79" office:value-type="string" calcext:value-type="string">
<text:p>No.</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce79" office:value-type="string" calcext:value-type="string">
<text:p>Description</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce79" office:value-type="string" calcext:value-type="string">
<text:p>Payee</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce79" office:value-type="string" calcext:value-type="string">
<text:p>Revenue</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce98" office:value-type="string" calcext:value-type="string">
<text:p>Expense</text:p>
</table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:style-name="ce73" office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio://format_date(record.date_from)" xlink:type="simple">format_date(record.date_from)</text:a></text:p>
</table:table-cell>
<table:table-cell table:style-name="ce80"/>
<table:table-cell table:style-name="ce80" office:value-type="string" calcext:value-type="string">
<text:p>Initial Amount</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce80"/>
<table:table-cell table:style-name="ce90" office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio://format_currency(record.start_amount,%20None,%20record.cashbook.currency)%20if%20record.start_amount%20%3E=%200%20else%20&apos;&apos;" xlink:type="simple">format_currency(record.start_amount, None, record.cashbook.currency) if record.start_amount &gt;= 0 else &apos;&apos;</text:a></text:p>
</table:table-cell>
<table:table-cell table:style-name="ce99" office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio://format_currency(record.start_amount,%20None,%20record.cashbook.currency)%20if%20record.start_amount%20%3C%200%20else%20&apos;&apos;" xlink:type="simple">relatorio://format_currency(record.start_amount, None, record.cashbook.currency) if record.start_amount &lt; 0 else &apos;&apos;</text:a></text:p>
</table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:style-name="ce74" office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio://for%20each=%22line%20in%20record.lines%22" xlink:type="simple">for each=&quot;line in record.lines&quot;</text:a></text:p>
</table:table-cell>
<table:table-cell table:style-name="ce81" table:number-columns-repeated="3"/>
<table:table-cell table:style-name="ce91"/>
<table:table-cell table:style-name="ce100"/>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:style-name="ce75" office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio://format_date(line.date)" xlink:type="simple">format_date(line.date)</text:a></text:p>
</table:table-cell>
<table:table-cell table:style-name="ce82" office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio://line.number" xlink:type="simple">line.number</text:a></text:p>
</table:table-cell>
<table:table-cell table:style-name="ce82" office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio://line.description" xlink:type="simple">line.description</text:a></text:p>
</table:table-cell>
<table:table-cell table:style-name="ce82" office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio://getattr(line.payee,%20&apos;rec_name&apos;,%20&apos;&apos;)" xlink:type="simple">getattr(line.payee, &apos;rec_name&apos;, &apos;&apos;)</text:a></text:p>
</table:table-cell>
<table:table-cell table:style-name="ce92" office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio://format_currency(line.credit,%20None,%20line.reconciliation.cashbook.currency)%20if%20line.credit!=%200%20else%20&apos;&apos;" xlink:type="simple">format_currency(line.credit, None, line.reconciliation.cashbook.currency) if line.credit!= 0 else &apos;&apos;</text:a></text:p>
</table:table-cell>
<table:table-cell table:style-name="ce101" office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio://format_currency(line.debit,%20None,%20line.reconciliation.cashbook.currency)%20if%20line.debit!=%200%20else%20&apos;&apos;" xlink:type="simple">format_currency(line.debit, None, line.reconciliation.cashbook.currency) if line.debit!= 0 else &apos;&apos;</text:a></text:p>
</table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:style-name="ce74" office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio:///for" xlink:type="simple">/for</text:a></text:p>
</table:table-cell>
<table:table-cell table:style-name="ce81" table:number-columns-repeated="3"/>
<table:table-cell table:style-name="ce91"/>
<table:table-cell table:style-name="ce100"/>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:style-name="ce76"/>
<table:table-cell table:style-name="ce83" table:number-columns-repeated="3"/>
<table:table-cell table:style-name="ce93"/>
<table:table-cell table:style-name="ce102"/>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:style-name="ce77"/>
<table:table-cell table:style-name="ce84" table:number-columns-repeated="3"/>
<table:table-cell table:style-name="ce94"/>
<table:table-cell table:style-name="ce103"/>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell table:style-name="ce86" office:value-type="string" calcext:value-type="string">
<text:p>Sum</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce95" office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio://format_currency(sum([x.credit%20for%20x%20in%20record.lines])%20+%20(record.start_amount%20if%20record.start_amount%20%3E%200%20else%200),%20None,%20record.cashbook.currency)" xlink:type="simple">format_currency(sum([x.credit for x in record.lines]) + (record.start_amount if record.start_amount &gt; 0 else 0), None, record.cashbook.currency)</text:a></text:p>
</table:table-cell>
<table:table-cell table:style-name="ce104" office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio://format_currency(sum([x.debit%20for%20x%20in%20record.lines])%20-%20(record.start_amount%20if%20record.start_amount%20%3C%200%20else%200),%20None,%20record.cashbook.currency)" xlink:type="simple">format_currency(sum([x.debit for x in record.lines]) - (record.start_amount if record.start_amount &lt; 0 else 0), None, record.cashbook.currency)</text:a></text:p>
</table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell table:style-name="ce87" office:value-type="string" calcext:value-type="string">
<text:p>- Expenses</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce96" office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio://format_currency(sum([x.debit%20for%20x%20in%20record.lines])%20-%20(record.start_amount%20if%20record.start_amount%20%3C%200%20else%200),%20None,%20record.cashbook.currency)" xlink:type="simple">format_currency(sum([x.debit for x in record.lines]) - (record.start_amount if record.start_amount &lt; 0 else 0), None, record.cashbook.currency)</text:a></text:p>
</table:table-cell>
<table:table-cell table:style-name="ce105"/>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell table:style-name="ce88" office:value-type="string" calcext:value-type="string">
<text:p>Total</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce97" office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio://format_currency(record.end_amount,%20None,%20record.cashbook.currency)" xlink:type="simple">format_currency(record.end_amount, None, record.cashbook.currency)</text:a></text:p>
</table:table-cell>
<table:table-cell table:style-name="ce105"/>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell office:value-type="string" calcext:value-type="string"><text:p><text:a xlink:href="relatorio:///for" xlink:type="simple">/for</text:a></text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="5"/>
</table:table-row>
<table:table-row table:style-name="ro1" table:number-rows-repeated="1048558">
<table:table-cell table:number-columns-repeated="6"/>
</table:table-row>
<table:table-row table:style-name="ro1">
<table:table-cell table:number-columns-repeated="6"/>
</table:table-row>
</table:table>
<table:named-expressions/>
</office:spreadsheet>
</office:body>
</office:document>

View file

@ -17,4 +17,5 @@ xml:
book.xml
line.xml
wizard_openline.xml
wizard_runreport.xml
menu.xml

View file

@ -44,10 +44,10 @@ full copyright notices and license terms. -->
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<!-- admin: read/write -->
<record model="ir.model.access" id="access_type-group_admin">
<!-- group_cashbook_admin: read/write -->
<record model="ir.model.access" id="access_type-group_cashbook_admin">
<field name="model" search="[('model', '=', 'cashbook.type')]"/>
<field name="group" ref="res.group_admin"/>
<field name="group" ref="group_cashbook_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>

View file

@ -0,0 +1,15 @@
<?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 col="2">
<label name="cashbook"/>
<field name="cashbook" widget="selection"/>
<label name="reconciliation"/>
<field name="reconciliation"/>
<field name="cashbooks"/>
<field name="reconciliations"/>
</form>

View file

@ -3,12 +3,11 @@
# The COPYRIGHT file at the top level of this repository contains the
# full copyright notices and license terms.
from trytond.model import ModelView, ModelSQL, fields
from trytond.model import ModelView, fields
from trytond.pyson import PYSONEncoder
from trytond.wizard import Wizard, StateView, StateTransition, StateAction, Button
from trytond.i18n import gettext
from trytond.pool import Pool
from trytond.pyson import Eval
from trytond.transaction import Transaction

121
wizard_runreport.py Normal file
View file

@ -0,0 +1,121 @@
# -*- 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.model import ModelView, fields
from trytond.pyson import PYSONEncoder
from trytond.wizard import Wizard, StateView, StateTransition, StateReport, Button
from trytond.i18n import gettext
from trytond.pool import Pool
from trytond.pyson import Eval, Bool
from trytond.transaction import Transaction
class RunCbReportStart(ModelView):
'Cashbook Report'
__name__ = 'cashbook.runrepbook.start'
cashbook = fields.Many2One(string='Cashbook', required=True,
model_name='cashbook.book', depends=['cashbooks'],
domain=[('id', 'in', Eval('cashbooks', []))])
cashbooks = fields.One2Many(string='Cashbooks', model_name='cashbook.book',
field=None, readonly=True, states={'invisible': True})
reconciliation = fields.Many2One(string='Reconciliation', required=True,
model_name='cashbook.recon', depends=['reconciliations'],
states={
'readonly': ~Bool(Eval('reconciliations')),
}, domain=[('id', 'in', Eval('reconciliations', []))])
reconciliations = fields.Function(fields.One2Many(string='Reconciliations',
model_name='cashbook.recon', field=None, readonly=True,
states={'invisible': True}),
'on_change_with_reconciliations')
@fields.depends('cashbook', 'reconciliations', 'reconciliation')
def on_change_cashbook(self):
""" update reconciliations
"""
if self.cashbook:
self.reconciliations = self.on_change_with_reconciliations()
if len(self.reconciliations or []) > 0:
self.reconciliation = self.reconciliations[0]
else :
self.reconciliations = []
self.reconciliation = None
@fields.depends('cashbook')
def on_change_with_reconciliations(self, name=None):
""" get reconciliations of current cashbook
"""
Recon2 = Pool().get('cashbook.recon')
if self.cashbook:
recons = Recon2.search([
('cashbook.id', '=', self.cashbook.id),
], order=[('date_from', 'DESC')])
return [x.id for x in recons]
# end RunCbReportStart
class RunCbReport(Wizard):
'Cashbook Report'
__name__ = 'cashbook.runrepbook'
start_state = 'selrecon'
selrecon = StateView('cashbook.runrepbook.start',
'cashbook.runrepbook_view_form', [
Button(string='Cancel', state='end', icon='tryton-cancel'),
Button(string='Report', state='report_', icon='tryton-ok', default=True),
])
report_ = StateReport('cashbook.reprecon')
def default_selrecon(self, fields):
""" setup form
"""
pool = Pool()
Book = pool.get('cashbook.book')
Recon2 = pool.get('cashbook.recon')
context = Transaction().context
result = {}
if context.get('active_model', '') == 'cashbook.book':
result['cashbook'] = context.get('active_id', None)
elif context.get('active_model', '') == 'cashbook.line':
result['cashbook'] = context.get('cashbook', None)
else :
raise ValueError('invalid model')
with Transaction().set_context({
'_check_access': True,
}):
books = Book.search([])
result['cashbooks'] = [x.id for x in books]
if len(result['cashbooks']) > 0:
if result['cashbook'] is None:
result['cashbook'] = result['cashbooks'][0]
recons = Recon2.search([
('cashbook.id', '=', result['cashbook']),
], order=[('date_from', 'DESC')])
if len(recons) > 0:
result['reconciliations'] = [x.id for x in recons]
result['reconciliation'] = recons[0].id
return result
def do_report_(self, action):
""" run report
"""
# values for 'data' in report
r1 = {
'model': self.selrecon.reconciliation.__name__,
'id': self.selrecon.reconciliation.id,
'ids': [self.selrecon.reconciliation.id],
}
return action, r1
def transition_report_(self):
return 'end'
# end RunCbReport

30
wizard_runreport.xml Normal file
View file

@ -0,0 +1,30 @@
<?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. -->
<tryton>
<data>
<record model="ir.ui.view" id="runrepbook_view_form">
<field name="model">cashbook.runrepbook.start</field>
<field name="type">form</field>
<field name="name">wizard_runrepbook_form</field>
</record>
<record model="ir.action.wizard" id="act_wizard_report">
<field name="name">Cashbook Report</field>
<field name="wiz_name">cashbook.runrepbook</field>
</record>
<record model="ir.action.keyword" id="wizrecon_line-keyword">
<field name="keyword">form_action</field>
<field name="model">cashbook.line,-1</field>
<field name="action" ref="act_wizard_report"/>
</record>
<record model="ir.action.keyword" id="wizrecon_book-keyword">
<field name="keyword">form_action</field>
<field name="model">cashbook.book,-1</field>
<field name="action" ref="act_wizard_report"/>
</record>
</data>
</tryton>