mirror of
https://github.com/OCA/account-financial-tools.git
synced 2025-02-02 12:47:26 +02:00
[10.0][add] account_asset_disposal: disposal move with expenses
This commit is contained in:
committed by
OCA-git-bot
parent
8932f2b71d
commit
1379367e65
@@ -9,6 +9,8 @@ Account asset disposal
|
||||
This module extends the functionality of account_asset adding a disposal
|
||||
date, allowing reversion of disposal operation and adding the state
|
||||
"Disposed" to the asset.
|
||||
It adds an expense account at asset category level to post expenses when
|
||||
asset is disposed.
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
{
|
||||
"name": "Account asset disposal",
|
||||
"summary": "Makes asset close account move automatically",
|
||||
"version": "10.0.1.0.0",
|
||||
"version": "10.0.1.1.0",
|
||||
"category": "Accounting & Finance",
|
||||
"website": "https://www.tecnativa.com",
|
||||
"author": "Tecnativa, "
|
||||
@@ -19,6 +19,6 @@
|
||||
"account_cancel",
|
||||
],
|
||||
"data": [
|
||||
"views/account_asset_asset_view.xml",
|
||||
"views/account_asset_view.xml",
|
||||
],
|
||||
}
|
||||
|
||||
@@ -6,8 +6,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 10.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-09-13 16:50+0000\n"
|
||||
"PO-Revision-Date: 2017-09-13 16:50+0000\n"
|
||||
"POT-Creation-Date: 2017-11-23 09:15+0000\n"
|
||||
"PO-Revision-Date: 2017-11-23 09:15+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: \n"
|
||||
@@ -16,15 +16,38 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: account_asset_disposal
|
||||
#: model:ir.model,name:account_asset_disposal.model_account_asset_category
|
||||
msgid "Asset category"
|
||||
msgstr "Categoría de activo"
|
||||
|
||||
#. module: account_asset_disposal
|
||||
#: code:addons/account_asset_disposal/models/account_asset.py:88
|
||||
#, python-format
|
||||
msgid "Asset depreciation"
|
||||
msgstr "Depreciación de activo"
|
||||
|
||||
#. module: account_asset_disposal
|
||||
#: model:ir.model,name:account_asset_disposal.model_account_asset_depreciation_line
|
||||
msgid "Asset depreciation line"
|
||||
msgstr "Línea de amortización del activo"
|
||||
msgstr "Línea de Depreciación de Activo"
|
||||
|
||||
#. module: account_asset_disposal
|
||||
#: code:addons/account_asset_disposal/models/account_asset.py:77
|
||||
#, python-format
|
||||
msgid "Asset disposal"
|
||||
msgstr "Baja de activo"
|
||||
|
||||
#. module: account_asset_disposal
|
||||
#: code:addons/account_asset_disposal/models/account_asset.py:99
|
||||
#, python-format
|
||||
msgid "Asset loss"
|
||||
msgstr "Pérdida valor de activo"
|
||||
|
||||
#. module: account_asset_disposal
|
||||
#: model:ir.model,name:account_asset_disposal.model_account_asset_asset
|
||||
msgid "Asset/Revenue Recognition"
|
||||
msgstr "Activo fijo"
|
||||
msgstr "Aceptación de pagos/Ingresos"
|
||||
|
||||
#. module: account_asset_disposal
|
||||
#: model:ir.model.fields,field_description:account_asset_disposal.field_account_asset_asset_disposal_date
|
||||
@@ -36,6 +59,11 @@ msgstr "Fecha de baja"
|
||||
msgid "Disposal move"
|
||||
msgstr "Asiento de baja"
|
||||
|
||||
#. module: account_asset_disposal
|
||||
#: model:ir.model.fields,field_description:account_asset_disposal.field_account_asset_category_loss_account_id
|
||||
msgid "Loss Account"
|
||||
msgstr "Cuenta de pérdidas"
|
||||
|
||||
#. module: account_asset_disposal
|
||||
#: model:ir.ui.view,arch_db:account_asset_disposal.view_account_asset_asset_form
|
||||
msgid "Undo disposal"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from . import account_asset_asset
|
||||
from . import account_asset
|
||||
|
||||
144
account_asset_disposal/models/account_asset.py
Normal file
144
account_asset_disposal/models/account_asset.py
Normal file
@@ -0,0 +1,144 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright 2016 Antonio Espinosa - <antonio.espinosa@tecnativa.com>
|
||||
# Copyright 2017 Luis M. Ontalba - <luis.martinez@tecnativa.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
|
||||
|
||||
class AccountAssetCategory(models.Model):
|
||||
_inherit = "account.asset.category"
|
||||
|
||||
def _default_loss_account_id(self):
|
||||
exp_type = self.env.ref('account.data_account_type_expenses')
|
||||
first_expense = self.env['account.account'].search([
|
||||
('internal_type', '=', 'other'),
|
||||
('user_type_id', '=', exp_type.id),
|
||||
], limit=1)
|
||||
return first_expense
|
||||
|
||||
loss_account_id = fields.Many2one(
|
||||
comodel_name="account.account", string="Loss Account", required=True,
|
||||
domain=[('internal_type', '=', 'other')],
|
||||
default=lambda self: self._default_loss_account_id())
|
||||
|
||||
|
||||
class AccountAssetAsset(models.Model):
|
||||
_inherit = "account.asset.asset"
|
||||
|
||||
state = fields.Selection(
|
||||
selection_add=[('disposed', 'Disposed')],
|
||||
)
|
||||
disposal_date = fields.Date(string="Disposal date")
|
||||
disposal_move_id = fields.Many2one(
|
||||
comodel_name='account.move', string="Disposal move")
|
||||
|
||||
def get_disposal_date(self):
|
||||
return fields.Date.context_today(self)
|
||||
|
||||
@api.multi
|
||||
def set_to_close(self):
|
||||
value_residual_prev = self.value_residual
|
||||
res = super(AccountAssetAsset, self).set_to_close()
|
||||
if res:
|
||||
date = self.get_disposal_date()
|
||||
loss_account = self.category_id.loss_account_id
|
||||
self.value_residual = value_residual_prev
|
||||
move = self.disposal_move_create(date, loss_account)
|
||||
res['res_id'] = move.id
|
||||
self.disposal_move_id = res['res_id']
|
||||
self.disposal_move_id.post()
|
||||
self.write({
|
||||
'state': 'disposed',
|
||||
'disposal_date': self.get_disposal_date(),
|
||||
})
|
||||
return res
|
||||
|
||||
@api.multi
|
||||
def action_disposal_undo(self):
|
||||
for asset in self.with_context(asset_disposal_undo=True):
|
||||
if asset.disposal_move_id:
|
||||
asset.disposal_move_id.button_cancel()
|
||||
asset.disposal_move_id.unlink()
|
||||
last_line = self.depreciation_line_ids[-1]
|
||||
last_line.move_id = False
|
||||
last_line.unlink()
|
||||
asset.state = 'open'
|
||||
asset.method_end = asset.category_id.method_end
|
||||
asset.method_number = asset.category_id.method_number
|
||||
asset.compute_depreciation_board()
|
||||
return self.write({
|
||||
'disposal_date': False,
|
||||
'disposal_move_id': False,
|
||||
})
|
||||
|
||||
def _disposal_line_asset_prepare(self, date, journal):
|
||||
return {
|
||||
'name': _('Asset disposal'),
|
||||
'journal_id': journal.id,
|
||||
'account_id': self.category_id.account_asset_id.id,
|
||||
'date': date,
|
||||
'debit': 0.0,
|
||||
'credit': self.value,
|
||||
}
|
||||
|
||||
def _disposal_line_depreciation_prepare(self, date, journal,
|
||||
depreciation_value):
|
||||
return {
|
||||
'name': _('Asset depreciation'),
|
||||
'journal_id': journal.id,
|
||||
'account_id': self.category_id.account_depreciation_id.id,
|
||||
'date': date,
|
||||
'debit': depreciation_value,
|
||||
'credit': 0.0,
|
||||
}
|
||||
|
||||
def _disposal_line_loss_prepare(self, date, journal, loss_account,
|
||||
loss_value):
|
||||
return {
|
||||
'name': _('Asset loss'),
|
||||
'journal_id': journal.id,
|
||||
'account_id': loss_account.id,
|
||||
'analytic_account_id': self.category_id.account_analytic_id.id,
|
||||
'date': date,
|
||||
'debit': loss_value,
|
||||
'credit': 0.0,
|
||||
}
|
||||
|
||||
def _disposal_move_prepare(self, date, loss_account):
|
||||
journal = self.category_id.journal_id
|
||||
loss_value = self.salvage_value + self.value_residual
|
||||
depreciation_value = self.value - loss_value
|
||||
line_asset = self._disposal_line_asset_prepare(date, journal)
|
||||
line_depreciation = self._disposal_line_depreciation_prepare(
|
||||
date, journal, depreciation_value)
|
||||
lines = [
|
||||
(0, False, line_asset),
|
||||
(0, False, line_depreciation),
|
||||
]
|
||||
if loss_value:
|
||||
line_loss = self._disposal_line_loss_prepare(
|
||||
date, journal, loss_account, loss_value)
|
||||
lines.append((0, False, line_loss))
|
||||
return {
|
||||
'journal_id': journal.id,
|
||||
'ref': self.name,
|
||||
'date': date,
|
||||
'line_ids': lines,
|
||||
}
|
||||
|
||||
def disposal_move_create(self, date, loss_account):
|
||||
vals = self._disposal_move_prepare(date, loss_account)
|
||||
move = self.env['account.move'].create(vals)
|
||||
return move
|
||||
|
||||
|
||||
class AccountAssetDepreciationLine(models.Model):
|
||||
_inherit = 'account.asset.depreciation.line'
|
||||
|
||||
@api.multi
|
||||
def post_lines_and_close_asset(self):
|
||||
disposed_lines = self.filtered(lambda r: r.asset_id.state ==
|
||||
'disposed')
|
||||
super(AccountAssetDepreciationLine, self).post_lines_and_close_asset()
|
||||
disposed_lines.mapped('asset_id').write({'state': 'disposed'})
|
||||
@@ -1,61 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright 2016 Antonio Espinosa - <antonio.espinosa@tecnativa.com>
|
||||
# Copyright 2017 Luis M. Ontalba - <luis.martinez@tecnativa.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class AccountAssetAsset(models.Model):
|
||||
_inherit = "account.asset.asset"
|
||||
|
||||
state = fields.Selection(
|
||||
selection_add=[('disposed', 'Disposed')],
|
||||
)
|
||||
disposal_date = fields.Date(string="Disposal date")
|
||||
disposal_move_id = fields.Many2one(
|
||||
comodel_name='account.move', string="Disposal move")
|
||||
|
||||
def get_disposal_date(self):
|
||||
return fields.Date.context_today(self)
|
||||
|
||||
@api.multi
|
||||
def set_to_close(self):
|
||||
res = super(AccountAssetAsset, self).set_to_close()
|
||||
if res:
|
||||
self.disposal_move_id = res['res_id']
|
||||
self.disposal_move_id.post()
|
||||
self.write({
|
||||
'state': 'disposed',
|
||||
'disposal_date': self.get_disposal_date(),
|
||||
})
|
||||
return res
|
||||
|
||||
@api.multi
|
||||
def action_disposal_undo(self):
|
||||
for asset in self.with_context(asset_disposal_undo=True):
|
||||
if asset.disposal_move_id:
|
||||
asset.disposal_move_id.button_cancel()
|
||||
asset.disposal_move_id.unlink()
|
||||
if asset.currency_id.is_zero(asset.value_residual):
|
||||
asset.state = 'close'
|
||||
else:
|
||||
asset.state = 'open'
|
||||
asset.method_end = asset.category_id.method_end
|
||||
asset.method_number = asset.category_id.method_number
|
||||
asset.compute_depreciation_board()
|
||||
return self.write({
|
||||
'disposal_date': False,
|
||||
'disposal_move_id': False,
|
||||
})
|
||||
|
||||
|
||||
class AccountAssetDepreciationLine(models.Model):
|
||||
_inherit = 'account.asset.depreciation.line'
|
||||
|
||||
@api.multi
|
||||
def post_lines_and_close_asset(self):
|
||||
disposed_lines = self.filtered(lambda r: r.asset_id.state ==
|
||||
'disposed')
|
||||
super(AccountAssetDepreciationLine, self).post_lines_and_close_asset()
|
||||
disposed_lines.mapped('asset_id').write({'state': 'disposed'})
|
||||
@@ -67,6 +67,6 @@ class TestAccountAssetDisposal(common.SavepointCase):
|
||||
|
||||
def test_asset_amortized(self):
|
||||
self.asset.depreciation_line_ids.create_move()
|
||||
self.asset.set_to_close()
|
||||
self.asset.action_disposal_undo()
|
||||
for line in self.asset.depreciation_line_ids:
|
||||
line.move_id.post()
|
||||
self.assertEqual(self.asset.state, 'close')
|
||||
|
||||
@@ -2,6 +2,21 @@
|
||||
|
||||
<odoo>
|
||||
|
||||
<record model="ir.ui.view" id="view_account_asset_category_form">
|
||||
<field name="name">Add loss account</field>
|
||||
<field name="model">account.asset.category</field>
|
||||
<field name="inherit_id" ref="account_asset.view_account_asset_category_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="account_depreciation_expense_id"
|
||||
position="after">
|
||||
<div>
|
||||
<label for="loss_account_id"/>
|
||||
</div>
|
||||
<field name="loss_account_id" nolabel="1"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_account_asset_asset_form">
|
||||
<field name="name">Add disposal fields</field>
|
||||
<field name="model">account.asset.asset</field>
|
||||
Reference in New Issue
Block a user