cashbook_investment/reconciliation.py

125 lines
4.3 KiB
Python
Raw Normal View History

# -*- 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.pool import PoolMeta, Pool
from trytond.model import fields
from trytond.pyson import Eval
from trytond.report import Report
from decimal import Decimal
class Reconciliation(metaclass=PoolMeta):
__name__ = 'cashbook.recon'
2023-06-08 12:00:59 +00:00
start_quantity = fields.Numeric(
string='Start Quantity', readonly=True,
digits=(16, Eval('quantity_digits', 4)),
states={
'required': Eval('feature', '') == 'asset',
'invisible': Eval('feature', '') != 'asset',
}, depends=['quantity_digits', 'feature'])
2023-06-08 12:00:59 +00:00
end_quantity = fields.Numeric(
string='End Quantity', readonly=True,
digits=(16, Eval('quantity_digits', 4)),
states={
'required': Eval('feature', '') == 'asset',
'invisible': Eval('feature', '') != 'asset',
}, depends=['quantity_digits', 'feature'])
2023-06-08 12:00:59 +00:00
quantity_digits = fields.Function(fields.Integer(
string='Quantity Digits'), 'on_change_with_quantity_digits')
quantity_uom = fields.Function(fields.Many2One(
string='Symbol', readonly=True, model_name='product.uom'),
'on_change_with_quantity_uom')
def get_rec_name(self, name):
""" add quantities - if its a asset-cashbook
"""
recname = super(Reconciliation, self).get_rec_name(name)
if self.cashbook.feature == 'asset':
recname += ' | %(start_quantity)s %(uom_symbol)s - %(end_quantity)s %(uom_symbol)s' % {
2023-06-08 12:00:59 +00:00
'start_quantity': Report.format_number(
self.start_quantity or 0.0, None,
digits=self.quantity_digits),
2023-06-08 12:00:59 +00:00
'end_quantity': Report.format_number(
self.end_quantity or 0.0, None,
digits=self.quantity_digits),
2023-02-27 20:17:48 +00:00
'uom_symbol': getattr(self.quantity_uom, 'symbol', '-'),
}
return recname
@fields.depends('cashbook', '_parent_cashbook.quantity_uom')
def on_change_with_quantity_uom(self, name=None):
""" get quantity-unit of asset
"""
if self.cashbook:
if self.cashbook.quantity_uom:
return self.cashbook.quantity_uom.id
@fields.depends('cashbook', '_parent_cashbook.quantity_digits')
def on_change_with_quantity_digits(self, name=None):
""" quantity_digits of cashbook
"""
if self.cashbook:
return self.cashbook.quantity_digits
else:
return 4
@classmethod
def default_start_quantity(cls):
return Decimal('0.0')
@classmethod
def default_end_quantity(cls):
return Decimal('0.0')
@classmethod
def get_values_wfedit(cls, reconciliation):
""" get values for 'to_write' in wf-edit
"""
values = super(Reconciliation, cls).get_values_wfedit(reconciliation)
values.update({
'start_quantity': Decimal('0.0'),
'end_quantity': Decimal('0.0'),
})
return values
@classmethod
def get_values_wfcheck(cls, reconciliation):
""" get values for 'to_write' in wf-check
"""
Line = Pool().get('cashbook.line')
values = super(Reconciliation, cls).get_values_wfcheck(reconciliation)
if reconciliation.cashbook.feature != 'asset':
return values
if reconciliation.predecessor:
values['start_quantity'] = reconciliation.predecessor.end_quantity
2023-06-08 12:00:59 +00:00
else:
values['start_quantity'] = Decimal('0.0')
values['end_quantity'] = values['start_quantity']
# add quantities of new lines
if 'lines' in values.keys():
if len(values['lines']) != 1:
raise ValueError('invalid number of values')
lines_records = Line.browse(values['lines'][0][1])
values['end_quantity'] += sum([
x.quantity_credit - x.quantity_debit
2023-06-08 12:00:59 +00:00
for x in lines_records
])
# add quantities of already linked lines
values['end_quantity'] += sum([
x.quantity_credit - x.quantity_debit
2023-06-08 12:00:59 +00:00
for x in reconciliation.lines
])
return values
# end Reconciliation