line/book: sequence für zeilen-nummerierung

This commit is contained in:
Frederik Jaeckel 2022-08-16 16:24:07 +02:00
parent 5fdbb0ce89
commit a801775880
8 changed files with 128 additions and 17 deletions

23
book.py
View file

@ -4,7 +4,7 @@
# full copyright notices and license terms. # full copyright notices and license terms.
from trytond.model import Workflow, ModelView, ModelSQL, fields, Check from trytond.model import Workflow, ModelView, ModelSQL, fields, Check
from trytond.pyson import Eval, Or, Bool from trytond.pyson import Eval, Or, Bool, Id
from trytond.exceptions import UserError from trytond.exceptions import UserError
from trytond.i18n import gettext from trytond.i18n import gettext
from trytond.transaction import Transaction from trytond.transaction import Transaction
@ -55,6 +55,19 @@ class Book(Workflow, ModelSQL, ModelView):
reconciliations = fields.One2Many(string='Reconciliations', reconciliations = fields.One2Many(string='Reconciliations',
field='cashbook', model_name='cashbook.recon', field='cashbook', model_name='cashbook.recon',
states=STATES, depends=DEPENDS) states=STATES, depends=DEPENDS)
number_sequ = fields.Many2One(string='Line numbering', required=True,
help='Number sequence for numbering of the cash book lines.',
model_name='ir.sequence',
domain=[
('sequence_type', '=', Id('cashbook', 'sequence_type_cashbook_line')),
['OR',
('company', '=', None),
('company', '=', Eval('company', -1)),
],
],
states=STATES, depends=DEPENDS+['company'])
number_atcheck = fields.Boolean(string="number when 'Checking'",
help="The numbering of the lines is done in the step Check. If the check mark is inactive, this happens with Done.")
start_balance = fields.Numeric(string='Initial Amount', required=True, start_balance = fields.Numeric(string='Initial Amount', required=True,
states={ states={
'readonly': Or( 'readonly': Or(
@ -107,6 +120,14 @@ class Book(Workflow, ModelSQL, ModelView):
}, },
}) })
@classmethod
def default_number_atcheck(cls):
return True
@classmethod
def default_start_number(cls):
return 1
@classmethod @classmethod
def default_start_balance(cls): def default_start_balance(cls):
""" zero """ zero

View file

@ -156,5 +156,15 @@ full copyright notices and license terms. -->
<field name="group" ref="res.group_admin"/> <field name="group" ref="res.group_admin"/>
</record> </record>
<!-- sequence-type -->
<record model="ir.sequence.type" id="sequence_type_cashbook_line">
<field name="name">Cashbook Line</field>
</record>
<record model="ir.sequence.type-res.group"
id="sequence_type_cashbook_line-group_admin">
<field name="sequence_type" ref="sequence_type_cashbook_line"/>
<field name="group" ref="res.group_admin"/>
</record>
</data> </data>
</tryton> </tryton>

41
line.py
View file

@ -54,6 +54,7 @@ class Line(Workflow, ModelSQL, ModelView):
states=STATES, depends=DEPENDS) states=STATES, depends=DEPENDS)
month = fields.Function(fields.Integer(string='Month', readonly=True), month = fields.Function(fields.Integer(string='Month', readonly=True),
'on_change_with_month', searcher='search_month') 'on_change_with_month', searcher='search_month')
number = fields.Char(string='Number', readonly=True)
description = fields.Text(string='Description', description = fields.Text(string='Description',
states=STATES, depends=DEPENDS) states=STATES, depends=DEPENDS)
category = fields.Many2One(string='Category', category = fields.Many2One(string='Category',
@ -218,6 +219,7 @@ class Line(Workflow, ModelSQL, ModelView):
Line2 = pool.get('cashbook.line') Line2 = pool.get('cashbook.line')
to_create_line = [] to_create_line = []
to_write_line = []
for line in lines: for line in lines:
# deny if date is in range of existing reconciliation # deny if date is in range of existing reconciliation
# allow cashbook-line at range-limits # allow cashbook-line at range-limits
@ -259,6 +261,18 @@ class Line(Workflow, ModelSQL, ModelView):
'reference': line.id, 'reference': line.id,
}) })
# add number to line
if line.cashbook.number_atcheck == True:
if len(line.number or '') == 0:
to_write_line.extend([
[line],
{
'number': line.cashbook.number_sequ.get()
}])
if len(to_write_line) > 0:
Line2.write(*to_write_line)
if len(to_create_line) > 0: if len(to_create_line) > 0:
new_lines = Line2.create(to_create_line) new_lines = Line2.create(to_create_line)
Line2.wfcheck(new_lines) Line2.wfcheck(new_lines)
@ -269,7 +283,20 @@ class Line(Workflow, ModelSQL, ModelView):
def wfdone(cls, lines): def wfdone(cls, lines):
""" line is done """ line is done
""" """
pass Line2 = Pool().get('cashbook.line')
to_write_line = []
for line in lines:
# add number to line
if len(line.number or '') == 0:
to_write_line.extend([
[line],
{
'number': line.cashbook.number_sequ.get()
}])
if len(to_write_line) > 0:
Line2.write(*to_write_line)
@classmethod @classmethod
def default_state(cls): def default_state(cls):
@ -508,6 +535,18 @@ class Line(Workflow, ModelSQL, ModelView):
raise ValueError('invalid "bookingtype"') raise ValueError('invalid "bookingtype"')
return {} return {}
@classmethod
def copy(cls, lines, default=None):
""" reset values
"""
if default is None:
default = {}
else:
default = default.copy()
default.setdefault('number', None)
default.setdefault('state', cls.default_state())
return super(Line, cls).copy(moves, default=default)
@classmethod @classmethod
def create(cls, vlist): def create(cls, vlist):
""" add debit/credit """ add debit/credit

View file

@ -299,6 +299,14 @@ msgid "Done"
msgstr "Fertig" msgstr "Fertig"
####################
# ir.sequence.type #
####################
msgctxt "model:ir.sequence.type,name:sequence_type_cashbook_line"
msgid "Cashbook Line"
msgstr "Kassenbuchzeile"
################# #################
# cashbook.book # # cashbook.book #
################# #################
@ -382,6 +390,22 @@ msgctxt "field:cashbook.book,lines:"
msgid "Lines" msgid "Lines"
msgstr "Zeilen" msgstr "Zeilen"
msgctxt "field:cashbook.book,number_sequ:"
msgid "Line numbering"
msgstr "Zeilennummerierung"
msgctxt "help:cashbook.book,number_sequ:"
msgid "Number sequence for numbering of the cash book lines."
msgstr "Zahlenfolge zur Nummerierung der Kassenbuchzeilen."
msgctxt "field:cashbook.book,number_atcheck:"
msgid "number when 'Checking'"
msgstr "nummerieren beim 'Prüfen'"
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 "Die Nummerierung der Zeilen wird beim Schritt 'Prüfen' erledigt. Bei inaktivem Häkchen passiert dies erst bei 'Fertig'."
################# #################
# cashbook.line # # cashbook.line #
@ -550,6 +574,10 @@ msgctxt "selection:cashbook.line,payee:"
msgid "Party" msgid "Party"
msgstr "Partei" msgstr "Partei"
msgctxt "field:cashbook.line,number:"
msgid "Number"
msgstr "Nummer"
################# #################
# cashbook.type # # cashbook.type #

View file

@ -93,6 +93,5 @@ full copyright notices and license terms. -->
<field name="text">The current line is managed by the cashbook line '%(recname)s', cashbook: '%(cbook)s'.</field> <field name="text">The current line is managed by the cashbook line '%(recname)s', cashbook: '%(cbook)s'.</field>
</record> </record>
</data> </data>
</tryton> </tryton>

View file

@ -5,12 +5,6 @@ full copyright notices and license terms. -->
<form col="6"> <form col="6">
<label name="name"/> <label name="name"/>
<field name="name" colspan="3"/> <field name="name" colspan="3"/>
<label name="btype"/>
<field name="btype"/>
<label name="currency"/>
<field name="currency"/>
<label id="phaccount" colspan="2" string=" "/>
<group id="grpst" colspan="2" col="3"> <group id="grpst" colspan="2" col="3">
<label name="state"/> <label name="state"/>
<field name="state"/> <field name="state"/>
@ -21,6 +15,20 @@ full copyright notices and license terms. -->
</group> </group>
</group> </group>
<label name="number_sequ"/>
<field name="number_sequ"/>
<label name="number_atcheck"/>
<field name="number_atcheck"/>
<newline/>
<label name="btype"/>
<field name="btype"/>
<label name="currency"/>
<field name="currency"/>
<newline/>
<label id="phaccount" colspan="2" string=" "/>
<newline/>
<label name="start_balance"/> <label name="start_balance"/>
<field name="start_balance"/> <field name="start_balance"/>
<label name="balance"/> <label name="balance"/>

View file

@ -7,12 +7,8 @@ full copyright notices and license terms. -->
<separator name="state" colspan="2" string="State"/> <separator name="state" colspan="2" string="State"/>
<field name="cashbook" colspan="2"/> <field name="cashbook" colspan="2"/>
<group id="grpparty" colspan="2" col="4"> <label name="number"/>
<label name="party"/> <field name="number"/>
<field name="party"/>
<label name="booktransf"/>
<field name="booktransf"/>
</group>
<field name="state"/> <field name="state"/>
<group id="grpstate" col="2"> <group id="grpstate" col="2">
@ -27,10 +23,19 @@ full copyright notices and license terms. -->
<label name="reconciliation"/> <label name="reconciliation"/>
<field name="reconciliation"/> <field name="reconciliation"/>
<label name="category"/> <group id="grpparty" colspan="2" col="4">
<field name="category"/> <label name="party"/>
<field name="party"/>
<label name="booktransf"/>
<field name="booktransf"/>
</group>
<label name="amount"/> <label name="amount"/>
<field name="amount" symbol="currency"/> <field name="amount" symbol="currency"/>
<newline/>
<label name="category"/>
<field name="category"/>
<newline/>
<group name="description" colspan="4" col="1" string="Description"> <group name="description" colspan="4" col="1" string="Description">
<field name="description"/> <field name="description"/>

View file

@ -4,6 +4,7 @@ The COPYRIGHT file at the top level of this repository contains the
full copyright notices and license terms. --> full copyright notices and license terms. -->
<tree> <tree>
<field name="cashbook" tree_invisible="1"/> <field name="cashbook" tree_invisible="1"/>
<field name="number"/>
<field name="date"/> <field name="date"/>
<field name="payee"/> <field name="payee"/>
<field name="category_view"/> <field name="category_view"/>