This commit is contained in:
2026-02-15 12:47:07 +01:00
parent 9565e82850
commit 4059cd591e
2 changed files with 182 additions and 0 deletions

View File

@@ -19,6 +19,7 @@ import logging
from collections import defaultdict
from trytond.exceptions import UserWarning, UserError
from trytond.modules.account.exceptions import PeriodNotFoundError
from trytond.modules.purchase_trade.finance_tools import InterestCalculator
logger = logging.getLogger(__name__)
@@ -56,6 +57,7 @@ class Fee(ModelSQL,ModelView):
('lumpsum', 'Lump sum'),
('perqt', 'Per qt'),
('pprice', '% price'),
('rate', '% Mth'),
('pcost', '% cost price'),
('ppack', 'Per packing'),
], 'Mode', required=True)
@@ -93,6 +95,13 @@ class Fee(ModelSQL,ModelView):
('brut', 'Gross'),
], string='W. type')
fee_date = fields.Date("Date")
@classmethod
def default_fee_date(cls):
Date = Pool().get('ir.date')
return Date.today()
@classmethod
def default_qt_state(cls):
LotQtType = Pool().get('lot.qt.type')
@@ -295,6 +304,7 @@ class Fee(ModelSQL,ModelView):
return Decimal(lqts[0].lot_quantity)
def get_amount(self,name=None):
Date = Pool().get('ir.date')
sign = Decimal(1)
if self.price:
# if self.p_r:
@@ -304,6 +314,37 @@ class Fee(ModelSQL,ModelView):
return self.price * sign
elif self.mode == 'ppack':
return round(self.price * self.quantity,2)
elif self.mode == 'rate':
#take period with estimated trigger date
if self.line:
if self.line.purchase.payment_term:
est_date = self.line.purchase.payment_term.get_date()
beg_date = self.fee_date if self.fee_date else Date.today()
factor = InterestCalculator.calculate(
start_date=beg_date,
end_date=est_date,
rate=self.price,
rate_type='annual',
convention='ACT/360',
compounding='simple'
)
return round(factor * self.line.unit_price * (self.quantity if self.quantity else 0) * sign,2)
if self.sale_line:
if self.sale_line.sale.payment_term:
est_date = self.sale_line.sale.payment_term.get_date()
beg_date = self.fee_date if self.fee_date else Date.today()
factor = InterestCalculator.calculate(
start_date=beg_date,
end_date=est_date,
rate=self.price,
rate_type='annual',
convention='ACT/360',
compounding='simple'
)
return round(factor * self.sale_line.unit_price * (self.quantity if self.quantity else 0) * sign,2)
elif self.mode == 'perqt':
if self.shipment_in:
StockMove = Pool().get('stock.move')