first commit
This commit is contained in:
75
modules/analytic_invoice/asset.py
Normal file
75
modules/analytic_invoice/asset.py
Normal file
@@ -0,0 +1,75 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
from trytond.model import fields
|
||||
from trytond.modules.analytic_account import AnalyticMixin
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.pyson import Eval
|
||||
from trytond.transaction import Transaction
|
||||
|
||||
|
||||
class Asset(AnalyticMixin, metaclass=PoolMeta):
|
||||
__name__ = 'account.asset'
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls.analytic_accounts.domain = [
|
||||
('company', '=', Eval('company', -1)),
|
||||
]
|
||||
|
||||
@fields.depends('supplier_invoice_line', 'analytic_accounts')
|
||||
def on_change_supplier_invoice_line(self):
|
||||
pool = Pool()
|
||||
Entry = pool.get('analytic.account.entry')
|
||||
|
||||
super().on_change_supplier_invoice_line()
|
||||
if self.supplier_invoice_line:
|
||||
entries = []
|
||||
for entry in self.supplier_invoice_line.analytic_accounts:
|
||||
new_entry = Entry()
|
||||
for field in Entry._fields:
|
||||
if field in {'origin', 'id'}:
|
||||
continue
|
||||
setattr(new_entry, field, getattr(entry, field))
|
||||
entries.append(new_entry)
|
||||
self.analytic_accounts = entries
|
||||
|
||||
def get_move(self, line):
|
||||
move = super().get_move(line)
|
||||
self.set_analytic_lines(move, self.product.account_expense_used)
|
||||
return move
|
||||
|
||||
def get_closing_move(self, account, date=None):
|
||||
move = super().get_closing_move(account, date=date)
|
||||
if not account:
|
||||
accounts = [
|
||||
self.product.account_revenue_used,
|
||||
self.product.account_expense_used,
|
||||
]
|
||||
else:
|
||||
accounts = [account]
|
||||
for account in accounts:
|
||||
self.set_analytic_lines(move, account)
|
||||
return move
|
||||
|
||||
def set_analytic_lines(self, move, account):
|
||||
"Fill analytic lines on lines with given account"
|
||||
if self.analytic_accounts:
|
||||
with Transaction().set_context(date=move.date):
|
||||
for line in move.lines:
|
||||
if line.account != account:
|
||||
continue
|
||||
analytic_lines = []
|
||||
for entry in self.analytic_accounts:
|
||||
analytic_lines.extend(
|
||||
entry.get_analytic_lines(line, move.date))
|
||||
line.analytic_lines = analytic_lines
|
||||
|
||||
|
||||
class UpdateAsset(metaclass=PoolMeta):
|
||||
__name__ = 'account.asset.update'
|
||||
|
||||
def get_move(self, asset):
|
||||
move = super().get_move(asset)
|
||||
asset.set_analytic_lines(move, self.show_move.counterpart_account)
|
||||
return move
|
||||
Reference in New Issue
Block a user