line: fix exception if missing config; book: optimize form

This commit is contained in:
Frederik Jaeckel 2023-02-23 10:35:30 +01:00
parent f95a9ed710
commit 5e7552e589
2 changed files with 30 additions and 23 deletions

23
line.py
View file

@ -148,6 +148,7 @@ class Line(SecondUomMixin, metaclass=PoolMeta):
tab_mv_spline = SplitLine.__table__()
cfg1 = AssetSetting.get_singleton()
gainloss_book = getattr(getattr(cfg1, 'gainloss_book', None), 'id', None)
tab_assetline = cls.search([
('cashbook.btype.feature', '=', 'asset'),
@ -168,7 +169,7 @@ class Line(SecondUomMixin, metaclass=PoolMeta):
condition=(tab_mv_spline.line == tab_mvsp_counterpart.id) & \
(tab_mv_spline.splittype == 'tr') & \
(tab_mv_spline.booktransf != None) & \
(tab_mv_spline.booktransf == getattr(cfg1.gainloss_book, 'id', None)),
(tab_mv_spline.booktransf == gainloss_book),
type_ = 'LEFT OUTER',
).join(tab_spmv_counterpart,
@ -177,7 +178,7 @@ class Line(SecondUomMixin, metaclass=PoolMeta):
((tab_line.reference == tab_spmv_counterpart.id) | \
(tab_line.id == tab_spmv_counterpart.reference)) & \
tab_spmv_counterpart.bookingtype.in_(['mvin', 'mvout']) & \
(tab_spmv_counterpart.cashbook == getattr(cfg1.gainloss_book, 'id', None)),
(tab_spmv_counterpart.cashbook == gainloss_book),
type_ = 'LEFT OUTER',
).join(tab_mvmv_counterpart,
@ -186,7 +187,7 @@ class Line(SecondUomMixin, metaclass=PoolMeta):
((tab_mvmv_counterpart.reference == tab_line.id) | \
(tab_mvmv_counterpart.id == tab_line.reference)) & \
tab_mvmv_counterpart.bookingtype.in_(['mvin', 'mvout']) & \
(tab_mvmv_counterpart.cashbook == getattr(cfg1.gainloss_book, 'id', None)),
(tab_mvmv_counterpart.cashbook == gainloss_book),
type_ = 'LEFT OUTER',
).select(
tab_line.id,
@ -197,7 +198,7 @@ class Line(SecondUomMixin, metaclass=PoolMeta):
(tab_line.bookingtype == 'mvout', tab_mv_spline.amount * Decimal('-1.0')),
),
Case(
(tab_mvsp_counterpart.cashbook == getattr(cfg1.gainloss_book, 'id', None),
(tab_mvsp_counterpart.cashbook == gainloss_book,
tab_line.debit - tab_line.credit),
),
tab_spmv_counterpart.credit - tab_spmv_counterpart.debit,
@ -224,6 +225,8 @@ class Line(SecondUomMixin, metaclass=PoolMeta):
tab_spline_divi = SplitLine.__table__()
cfg1 = AssetSetting.get_singleton()
fee_category = getattr(getattr(cfg1, 'fee_category', None), 'id', None)
dividend_category = getattr(getattr(cfg1, 'dividend_category', None), 'id', None)
tab_assetline = cls.search([
('cashbook.btype.feature', '=', 'asset'),
@ -236,14 +239,14 @@ class Line(SecondUomMixin, metaclass=PoolMeta):
condition=(tab_inout_fee.id==tab_line.id) & \
tab_inout_fee.bookingtype.in_(['in', 'out']) & \
(tab_inout_fee.category != None) & \
(tab_inout_fee.category == getattr(cfg1.fee_category, 'id', None)),
(tab_inout_fee.category == fee_category),
type_ = 'LEFT OUTER',
).join(tab_inout_divi,
# [INOUT] dividend, local booked
condition=(tab_inout_divi.id==tab_line.id) & \
tab_inout_divi.bookingtype.in_(['in', 'out']) & \
(tab_inout_divi.category != None) & \
(tab_inout_divi.category == getattr(cfg1.dividend_category, 'id', None)),
(tab_inout_divi.category == dividend_category),
type_ = 'LEFT OUTER',
).join(tab_mv_counterpart,
@ -258,14 +261,14 @@ class Line(SecondUomMixin, metaclass=PoolMeta):
condition=(tab_mv_spline_fee.line == tab_mv_counterpart.id) & \
(tab_mv_spline_fee.splittype == 'cat') & \
(tab_mv_spline_fee.category != None) & \
(tab_mv_spline_fee.category == getattr(cfg1.fee_category, 'id', None)),
(tab_mv_spline_fee.category == fee_category),
type_ = 'LEFT OUTER',
).join(tab_mv_spline_divi,
# [MV] dividend-line is linked to split-booking-line of counterpart [1]
condition=(tab_mv_spline_divi.line == tab_mv_counterpart.id) & \
(tab_mv_spline_divi.splittype == 'cat') & \
(tab_mv_spline_divi.category != None) & \
(tab_mv_spline_divi.category == getattr(cfg1.dividend_category, 'id', None)),
(tab_mv_spline_divi.category == dividend_category),
type_ = 'LEFT OUTER',
).join(tab_spline_fee,
@ -274,7 +277,7 @@ class Line(SecondUomMixin, metaclass=PoolMeta):
tab_line.bookingtype.in_(['spin', 'spout']) & \
(tab_spline_fee.splittype == 'cat') & \
(tab_spline_fee.category != None) & \
(tab_spline_fee.category == getattr(cfg1.fee_category, 'id', None)),
(tab_spline_fee.category == fee_category),
type_ = 'LEFT OUTER',
).join(tab_spline_divi,
# [SP] dividend, split booking
@ -282,7 +285,7 @@ class Line(SecondUomMixin, metaclass=PoolMeta):
tab_line.bookingtype.in_(['spin', 'spout']) & \
(tab_spline_divi.splittype == 'cat') & \
(tab_spline_divi.category != None) & \
(tab_spline_divi.category == getattr(cfg1.dividend_category, 'id', None)),
(tab_spline_divi.category == dividend_category),
type_ = 'LEFT OUTER',
).select(
tab_line.id,

View file

@ -4,22 +4,16 @@ The COPYRIGHT file at the top level of this repository contains the
full copyright notices and license terms. -->
<data>
<xpath expr="/form/notebook/page[@name='balance']/field[@name='balance_ref']"
position="after">
<newline/>
<separator colspan="2" name="quantity" string="Quantity"/>
<xpath expr="/form/notebook/page[@name='balance']/separator[@id='balance']" position="after">
<separator colspan="4" name="current_value" string="Current valuation of the investment"/>
<label name="quantity"/>
<field name="quantity" symbol="quantity_uom"/>
</xpath>
<xpath expr="/form/notebook/page[@name='balance']/field[@name='balance']" position="after">
<label name="current_value"/>
<field name="current_value" symbol="currency"/>
<label name="current_value_ref"/>
<field name="current_value_ref" symbol="company_currency"/>
<label name="quantity_all"/>
<field name="quantity_all" symbol="quantity_uom"/>
</xpath>
<xpath expr="/form/notebook/page[@name='balance']/field[@name='balance_all']" position="after">
<label name="diff_amount"/>
<field name="diff_amount" symbol="currency"/>
<label name="diff_percent"/>
@ -27,12 +21,22 @@ full copyright notices and license terms. -->
<field name="diff_percent" xexpand="0"/>
<label name="diff_percent" xalign="0.0" string="%" xexpand="1"/>
</group>
<label id="lab1" colspan="2" string=" "/>
</xpath>
<xpath expr="/form/notebook/page[@name='balance']/field[@name='balance_ref']" position="after">
<label name="yield_balance"/>
<field name="yield_balance" symbol="currency"/>
<label name="current_rate"/>
<field name="current_rate" symbol="asset_symbol"/>
<newline/>
<separator colspan="2" name="quantity" string="Quantity"/>
<newline/>
<label name="quantity"/>
<field name="quantity" symbol="quantity_uom"/>
<newline/>
<label name="quantity_all"/>
<field name="quantity_all" symbol="quantity_uom"/>
<newline/>
<separator name="yield_dividend_total" colspan="6" string="Fees and dividends"/>
<label name="yield_sales"/>