main #7
@@ -18,6 +18,7 @@ import datetime
|
|||||||
import logging
|
import logging
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from trytond.exceptions import UserWarning, UserError
|
from trytond.exceptions import UserWarning, UserError
|
||||||
|
from trytond.modules.account.exceptions import PeriodNotFoundError
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -374,19 +375,115 @@ class Fee(ModelSQL,ModelView):
|
|||||||
if not fee.sale_line:
|
if not fee.sale_line:
|
||||||
feelots = FeeLots.search(['fee','=',fee.id])
|
feelots = FeeLots.search(['fee','=',fee.id])
|
||||||
for fl in feelots:
|
for fl in feelots:
|
||||||
move = fl.lot.get_received_move()
|
if fee.product.landed_cost:
|
||||||
if move:
|
move = fl.lot.get_received_move()
|
||||||
Warning = Pool().get('res.user.warning')
|
if move:
|
||||||
warning_name = Warning.format("Lot ever received", [])
|
Warning = Pool().get('res.user.warning')
|
||||||
if Warning.check(warning_name):
|
warning_name = Warning.format("Lot ever received", [])
|
||||||
raise UserWarning(warning_name,
|
if Warning.check(warning_name):
|
||||||
"By clicking yes, an accrual for this fee will be created")
|
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')
|
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])
|
AccountMove.save([account_move])
|
||||||
|
|
||||||
return fees
|
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):
|
class FeeLots(ModelSQL,ModelView):
|
||||||
|
|
||||||
"Fee lots"
|
"Fee lots"
|
||||||
|
|||||||
Reference in New Issue
Block a user