28.01.26
This commit is contained in:
@@ -18,6 +18,7 @@ import datetime
|
||||
import logging
|
||||
from collections import defaultdict
|
||||
from trytond.exceptions import UserWarning, UserError
|
||||
from trytond.modules.account.exceptions import PeriodNotFoundError
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -374,19 +375,115 @@ class Fee(ModelSQL,ModelView):
|
||||
if not fee.sale_line:
|
||||
feelots = FeeLots.search(['fee','=',fee.id])
|
||||
for fl in feelots:
|
||||
move = fl.lot.get_received_move()
|
||||
if move:
|
||||
Warning = Pool().get('res.user.warning')
|
||||
warning_name = Warning.format("Lot ever received", [])
|
||||
if Warning.check(warning_name):
|
||||
raise UserWarning(warning_name,
|
||||
"By clicking yes, an accrual for this fee will be created")
|
||||
if fee.product.landed_cost:
|
||||
move = fl.lot.get_received_move()
|
||||
if move:
|
||||
Warning = Pool().get('res.user.warning')
|
||||
warning_name = Warning.format("Lot ever received", [])
|
||||
if Warning.check(warning_name):
|
||||
raise UserWarning(warning_name,
|
||||
"By clicking yes, an accrual for this fee will be created")
|
||||
AccountMove = Pool().get('account.move')
|
||||
account_move = move._get_account_stock_move_fee(fee)
|
||||
AccountMove.save([account_move])
|
||||
else:
|
||||
AccountMove = Pool().get('account.move')
|
||||
account_move = move._get_account_stock_move_fee(fee)
|
||||
account_move = fee._get_account_move_fee(fl.lot)
|
||||
AccountMove.save([account_move])
|
||||
|
||||
return fees
|
||||
|
||||
def _get_account_move_fee(self,lot):
|
||||
pool = Pool()
|
||||
AccountMove = pool.get('account.move')
|
||||
Date = pool.get('ir.date')
|
||||
Period = pool.get('account.period')
|
||||
AccountConfiguration = pool.get('account.configuration')
|
||||
|
||||
if self.product.type != 'service':
|
||||
return
|
||||
|
||||
if self.product.landed_cost:
|
||||
return
|
||||
|
||||
today = Date.today()
|
||||
company = lot.line.purchase.company if lot.line else lot.sale_line.sale.company
|
||||
for date in [today]:
|
||||
try:
|
||||
period = Period.find(company, date=date, test_state=False)
|
||||
except PeriodNotFoundError:
|
||||
if date < today:
|
||||
return
|
||||
continue
|
||||
break
|
||||
else:
|
||||
return
|
||||
|
||||
if period.state != 'open':
|
||||
date = today
|
||||
period = Period.find(company, date=date)
|
||||
|
||||
AccountMoveLine = pool.get('account.move.line')
|
||||
Currency = pool.get('currency.currency')
|
||||
move_line = AccountMoveLine()
|
||||
move_line.lot = lot
|
||||
move_line.fee = self
|
||||
move_line.origin = self
|
||||
move_line_ = AccountMoveLine()
|
||||
move_line_.lot = lot
|
||||
move_line_.fee = self
|
||||
move_line_.origin = self
|
||||
amount = self.amount
|
||||
|
||||
if self.currency != company.currency:
|
||||
with Transaction().set_context(date=today):
|
||||
amount_converted = amount
|
||||
amount = Currency.compute(self.currency,
|
||||
amount, company.currency)
|
||||
move_line.second_currency = self.currency
|
||||
|
||||
if self.p_r == 'pay':
|
||||
move_line.debit = amount
|
||||
move_line.credit = Decimal(0)
|
||||
move_line.account = self.product.account_stock_used
|
||||
if hasattr(move_line, 'second_currency') and move_line.second_currency:
|
||||
move_line.amount_second_currency = amount_converted
|
||||
move_line_.debit = Decimal(0)
|
||||
move_line_.credit = amount
|
||||
move_line_.account = self.product.account_stock_in_used
|
||||
if hasattr(move_line_, 'second_currency') and move_line_.second_currency:
|
||||
move_line_.amount_second_currency = -amount_converted
|
||||
else:
|
||||
move_line.debit = Decimal(0)
|
||||
move_line.credit = amount
|
||||
move_line.account = self.product.account_stock_used
|
||||
if hasattr(move_line, 'second_currency') and move_line.second_currency:
|
||||
move_line.amount_second_currency = -amount_converted
|
||||
move_line_.debit = amount
|
||||
move_line_.credit = Decimal(0)
|
||||
move_line_.account = self.product.account_stock_in_used
|
||||
if hasattr(move_line_, 'second_currency') and move_line_.second_currency:
|
||||
move_line_.amount_second_currency = amount_converted
|
||||
|
||||
logger.info("FEE_MOVELINES_1:%s",move_line)
|
||||
logger.info("FEE_MOVELINES_2:%s",move_line_)
|
||||
|
||||
|
||||
account_configuration = AccountConfiguration(1)
|
||||
journal = account_configuration.get_multivalue(
|
||||
'expense', company=company.id)
|
||||
|
||||
description = None
|
||||
description = 'Fee not inventoried'
|
||||
return AccountMove(
|
||||
journal=journal,
|
||||
period=period,
|
||||
date=date,
|
||||
origin=self,
|
||||
description=description,
|
||||
lines=[move_line,move_line_],
|
||||
)
|
||||
|
||||
class FeeLots(ModelSQL,ModelView):
|
||||
|
||||
"Fee lots"
|
||||
|
||||
Reference in New Issue
Block a user