Merge pull request #582 from Tecnativa/10.0-fix-account_asset_disposal-fix_created_move

[10.0][IMP] account_asset_disposal: disposal move with expenses
This commit is contained in:
Pedro M. Baeza
2018-07-03 00:23:35 +02:00
committed by GitHub
13 changed files with 495 additions and 113 deletions

View File

@@ -1,20 +1,43 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl
:alt: License: AGPL-3
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
======================
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.
This module enables a real asset disposal with the proper accounting entries.
When an asset gets broken or is totally depreciated, you can close it and Odoo
will generate automatically the asset close move (and compute the loss if a
residual value is pending).
You can also cancel this disposal for returning to the previous state.
Configuration
=============
#. Go to *Accounting > Configuration > Management > Asset Types*.
#. There's a new field called "Loss Account" for setting the default loss
account when disposing assets.
Usage
=====
In a disposed asset you will find an 'Undo disposal' button to revert
operation.
#. Go to *Accounting > Adviser > Assets*.
#. There you will find a 'Dispose' button (instead of standard 'Set to Close').
#. After clicking it, a wizard pops-up for asking disposal date and loss
account to use if any residual value is pending.
#. Click on "Dispose asset".
#. A new screen will appear with the disposal account entry.
#. On the asset, all remaining depreciation lines are removed, and a new one
appears for the disposal move.
You can cancel afterwards the disposal:
#. Click on "Undo disposal" on the asset.
#. The disposal entry is removed.
#. The depreciation board is restored with all the remaining depreciations.
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
@@ -29,6 +52,11 @@ Bugs are tracked on `GitHub Issues
check there if your issue has already been reported. If you spotted it first,
help us smashing it by providing a detailed and welcomed feedback.
Known issues / Roadmap
======================
* Include a specific message type for notifying the disposal.
Credits
=======
@@ -40,9 +68,10 @@ Images
Contributors
------------
* Pedro M. Baeza <pedro.baeza@tecnativa.com>
* Antonio Espinosa <antonio.espinosa@tecnativa.com>
* Luis M. Ontalba <luis.martinez@tecnativa.com>
* Tecnativa (https://www.tecnativa.com):
* Pedro M. Baeza <pedro.baeza@tecnativa.com>
* Antonio Espinosa <antonio.espinosa@tecnativa.com>
* Luis M. Ontalba <luis.martinez@tecnativa.com>
Maintainer
----------

View File

@@ -2,3 +2,4 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import models
from . import wizards

View File

@@ -1,24 +1,25 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Antonio Espinosa - <antonio.espinosa@tecnativa.com>
# Copyright 2017 Luis M. Ontalba - <luis.martinez@tecnativa.com>
# Copyright 2016 Tecnativa - Antonio Espinosa
# Copyright 2017 Tecnativa - Luis M. Ontalba
# Copyright 2017 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
"name": "Account asset disposal",
"summary": "Makes asset close account move automatically",
"version": "10.0.1.0.0",
"version": "10.0.2.0.0",
"category": "Accounting & Finance",
"website": "https://www.tecnativa.com",
"website": "http://github.com/OCA/account-financial-tools",
"author": "Tecnativa, "
"Odoo Community Association (OCA)",
"license": "AGPL-3",
"application": False,
"installable": True,
"depends": [
"account_asset",
"account_cancel",
],
"data": [
"views/account_asset_asset_view.xml",
"views/account_asset_asset_views.xml",
"views/account_asset_category_views.xml",
"wizards/account_asset_disposal_wizard_view.xml",
],
}

View File

@@ -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-25 12:17+0000\n"
"PO-Revision-Date: 2017-11-25 12:17+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"Language: \n"
@@ -17,17 +17,81 @@ msgstr ""
"Plural-Forms: \n"
#. 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"
#: 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_asset.py:35
#, python-format
msgid "Asset depreciation"
msgstr "Amortización del activo"
#. module: account_asset_disposal
#: code:addons/account_asset_disposal/models/account_asset_asset.py:23
#: model:ir.ui.view,arch_db:account_asset_disposal.account_asset_disposal_wizard_form
#, python-format
msgid "Asset disposal"
msgstr "Baja del activo"
#. module: account_asset_disposal
#: code:addons/account_asset_disposal/models/account_asset_asset.py:158
#, python-format
msgid "Asset disposal cancelled."
msgstr "Baja del activo cancelada."
#. module: account_asset_disposal
#: code:addons/account_asset_disposal/models/account_asset_asset.py:123
#, python-format
msgid "Asset disposed."
msgstr "Activo dado de baja."
#. module: account_asset_disposal
#: code:addons/account_asset_disposal/models/account_asset_asset.py:46
#, python-format
msgid "Asset loss"
msgstr "Pérdida del activo"
#. module: account_asset_disposal
#: model:ir.model,name:account_asset_disposal.model_account_asset_asset
msgid "Asset/Revenue Recognition"
msgstr "Activo fijo"
msgstr "Activo/Reconocimiento de beneficio"
#. module: account_asset_disposal
#: model:ir.ui.view,arch_db:account_asset_disposal.account_asset_disposal_wizard_form
msgid "Close"
msgstr "Cerrar"
#. module: account_asset_disposal
#: model:ir.model.fields,field_description:account_asset_disposal.field_account_asset_disposal_wizard_create_uid
msgid "Created by"
msgstr "Creado por"
#. module: account_asset_disposal
#: model:ir.model.fields,field_description:account_asset_disposal.field_account_asset_disposal_wizard_create_date
msgid "Created on"
msgstr "Creado el"
#. module: account_asset_disposal
#: model:ir.model.fields,field_description:account_asset_disposal.field_account_asset_disposal_wizard_display_name
msgid "Display Name"
msgstr "Nombre a mostrar"
#. module: account_asset_disposal
#: code:addons/account_asset_disposal/models/account_asset_asset.py:130
#, python-format
msgid "Disposal Move"
msgstr "Asiento de baja"
#. module: account_asset_disposal
#: code:addons/account_asset_disposal/models/account_asset_asset.py:133
#, python-format
msgid "Disposal Moves"
msgstr "Asientos de baja"
#. module: account_asset_disposal
#: model:ir.model.fields,field_description:account_asset_disposal.field_account_asset_asset_disposal_date
#: model:ir.model.fields,field_description:account_asset_disposal.field_account_asset_disposal_wizard_disposal_date
msgid "Disposal date"
msgstr "Fecha de baja"
@@ -36,6 +100,53 @@ msgstr "Fecha de baja"
msgid "Disposal move"
msgstr "Asiento de baja"
#. module: account_asset_disposal
#: model:ir.ui.view,arch_db:account_asset_disposal.view_account_asset_asset_form
msgid "Dispose"
msgstr "Dar de baja"
#. module: account_asset_disposal
#: code:addons/account_asset_disposal/models/account_asset_asset.py:78
#, python-format
msgid "Dispose Asset"
msgstr "Dar de baja activo"
#. module: account_asset_disposal
#: model:ir.ui.view,arch_db:account_asset_disposal.account_asset_disposal_wizard_form
msgid "Dispose asset"
msgstr "Dar de baja activo"
#. module: account_asset_disposal
#: model:ir.model.fields,field_description:account_asset_disposal.field_account_asset_disposal_wizard_id
msgid "ID"
msgstr "ID"
#. module: account_asset_disposal
#: model:ir.model,name:account_asset_disposal.model_account_move_line
msgid "Journal Item"
msgstr "Apunte contable"
#. module: account_asset_disposal
#: model:ir.model.fields,field_description:account_asset_disposal.field_account_asset_disposal_wizard___last_update
msgid "Last Modified on"
msgstr "Última modificación en"
#. module: account_asset_disposal
#: model:ir.model.fields,field_description:account_asset_disposal.field_account_asset_disposal_wizard_write_uid
msgid "Last Updated by"
msgstr "Última actualización por"
#. module: account_asset_disposal
#: model:ir.model.fields,field_description:account_asset_disposal.field_account_asset_disposal_wizard_write_date
msgid "Last Updated on"
msgstr "Última actualización el"
#. module: account_asset_disposal
#: model:ir.model.fields,field_description:account_asset_disposal.field_account_asset_category_account_loss_id
#: model:ir.model.fields,field_description:account_asset_disposal.field_account_asset_disposal_wizard_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"

View File

@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import account_asset_category
from . import account_asset_asset

View File

@@ -1,9 +1,11 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Antonio Espinosa - <antonio.espinosa@tecnativa.com>
# Copyright 2017 Luis M. Ontalba - <luis.martinez@tecnativa.com>
# Copyright 2016 Tecnativa - Antonio Espinosa
# Copyright 2017 Tecnativa - Luis M. Ontalba
# Copyright 2017 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models
from odoo import models, fields, api, _
from odoo.tools import float_is_zero
class AccountAssetAsset(models.Model):
@@ -14,22 +16,146 @@ class AccountAssetAsset(models.Model):
)
disposal_date = fields.Date(string="Disposal date")
disposal_move_id = fields.Many2one(
comodel_name='account.move', string="Disposal move")
comodel_name='account.move', string="Disposal move",
)
def get_disposal_date(self):
return fields.Date.context_today(self)
def _disposal_line_asset_prepare(self, date):
self.ensure_one()
return {
'name': _('Asset disposal'),
'journal_id': self.category_id.journal_id.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):
self.ensure_one()
loss_value = self.salvage_value
if not float_is_zero(self.value_residual,
precision_rounding=self.currency_id.rounding):
loss_value += self.value_residual
depreciation_value = self.value - loss_value
return {
'name': _('Asset depreciation'),
'journal_id': self.category_id.journal_id.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, loss_account):
self.ensure_one()
loss_value = self.salvage_value
if not float_is_zero(self.value_residual,
precision_rounding=self.currency_id.rounding):
loss_value += self.value_residual
return {
'name': _('Asset loss'),
'journal_id': self.category_id.journal_id.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):
self.ensure_one()
journal = self.category_id.journal_id
lines = [
(0, False, self._disposal_line_asset_prepare(date)),
(0, False, self._disposal_line_depreciation_prepare(date)),
]
loss_value = self.salvage_value
if not float_is_zero(self.value_residual,
precision_rounding=self.currency_id.rounding):
loss_value += self.value_residual
if loss_value:
lines.append((
0, False, self._disposal_line_loss_prepare(date, loss_account)
))
return {
'journal_id': journal.id,
'ref': self.name,
'date': date,
'line_ids': lines,
}
@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()
def action_disposal(self):
wizard_view_id = self.env.ref(
'account_asset_disposal.account_asset_disposal_wizard_form')
return {
'name': _('Dispose Asset'),
'res_model': 'account.asset.disposal.wizard',
'type': 'ir.actions.act_window',
'view_type': 'tree,form',
'view_mode': 'form',
'view_id': wizard_view_id.id,
'target': 'new',
'context': self.env.context,
}
@api.multi
def dispose(self, date, loss_account):
moves = self.env['account.move']
for asset in self:
move = self.env['account.move'].create(
asset._disposal_move_prepare(date, loss_account)
)
asset.disposal_move_id = move.id
move.post()
unposted_lines = asset.depreciation_line_ids.filtered(
lambda x: not x.move_check
)
if unposted_lines:
# Remove all unposted depreciation lines
asset.write({
'depreciation_line_ids': [
(2, line_id.id) for line_id in unposted_lines
],
})
# Create a new depr. line with the residual amount and post it
sequence = (
len(asset.depreciation_line_ids) - len(unposted_lines) + 1
)
vals = {
'amount': asset.value_residual,
'asset_id': asset.id,
'sequence': sequence,
'name': (asset.code or '') + '/' + str(sequence),
'remaining_value': 0,
# the asset is completely depreciated
'depreciated_value': asset.value - asset.salvage_value,
'depreciation_date': date,
'move_id': move.id,
}
asset.depreciation_line_ids.create(vals)
asset.message_post(body=_('Asset disposed.'))
moves += move
self.write({
'disposal_date': date,
'state': 'disposed',
'disposal_date': self.get_disposal_date(),
})
return res
})
if moves:
name = _('Disposal Move')
view_mode = 'form'
if len(moves) > 1:
name = _('Disposal Moves')
view_mode = 'tree,form'
return {
'name': name,
'domain': [('id', 'in', moves.ids)],
'view_type': 'form',
'view_mode': view_mode,
'res_model': 'account.move',
'type': 'ir.actions.act_window',
'target': 'current',
'res_id': moves[:1].id,
}
@api.multi
def action_disposal_undo(self):
@@ -37,25 +163,14 @@ class AccountAssetAsset(models.Model):
if asset.disposal_move_id:
asset.disposal_move_id.button_cancel()
asset.disposal_move_id.unlink()
asset.depreciation_line_ids[-1].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()
asset.message_post(body=_('Asset disposal cancelled.'))
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'})

View File

@@ -0,0 +1,15 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Tecnativa - Antonio Espinosa
# Copyright 2017 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import models, fields
class AccountAssetCategory(models.Model):
_inherit = "account.asset.category"
account_loss_id = fields.Many2one(
comodel_name="account.account", string="Loss Account",
oldname='loss_account_id',
)

View File

@@ -1,72 +1,91 @@
# -*- coding: utf-8 -*-
# Copyright 2017 Tecnativa - Luis M. Ontalba - <luis.martinez@tecnativa.com>
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0
# Copyright 2016 Tecnativa - Antonio Espinosa
# Copyright 2017 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo.tests import common
from odoo import fields
from datetime import datetime
from odoo.tests import common
class TestAccountAssetDisposal(common.SavepointCase):
@classmethod
def setUpClass(cls):
super(TestAccountAssetDisposal, cls).setUpClass()
cls.journal = cls.env['account.journal'].create({
'name': 'Test Journal',
class TestAccountAsset(common.TransactionCase):
def setUp(self):
super(TestAccountAsset, self).setUp()
# Create a journal for assets
self.journal_asset = self.env['account.journal'].create({
'name': 'Asset journal',
'code': 'JRNL',
'type': 'general',
'code': 'TJ',
'update_posted': True,
})
cls.account_type = cls.env['account.account.type'].create({
'name': 'Test Account Type',
# Create an account for assets
self.account_asset = self.env['account.account'].create({
'name': 'Asset',
'code': '216x',
'user_type_id': (
self.env.ref('account.data_account_type_fixed_assets').id
),
})
cls.asset_account = cls.env['account.account'].create({
'code': 'TAA',
'name': 'Test Asset Account',
'internal_type': 'other',
'user_type_id': cls.account_type.id,
# Create an account for assets depreciation
self.account_asset_depreciation = self.env['account.account'].create({
'name': 'Asset depreciation',
'code': '2816x',
'user_type_id': (
self.env.ref('account.data_account_type_fixed_assets').id
),
})
cls.asset_category_number = cls.env['account.asset.category'].create({
'name': 'Test Category Number',
'journal_id': cls.journal.id,
'account_asset_id': cls.asset_account.id,
'account_depreciation_id': cls.asset_account.id,
'account_depreciation_expense_id': cls.asset_account.id,
'method_time': 'number',
# Create an account for assets expense
self.account_asset_expense = self.env['account.account'].create({
'name': 'Asset expense',
'code': '681x',
'user_type_id': (
self.env.ref('account.data_account_type_expenses').id
),
})
# Create an account for assets loss
self.account_asset_loss = self.env['account.account'].create({
'name': 'Asset loss',
'code': '671x',
'user_type_id': (
self.env.ref('account.data_account_type_expenses').id
),
})
# Create an asset category
self.asset_category = self.env['account.asset.category'].create({
'name': 'Asset category for testing',
'journal_id': self.journal_asset.id,
'account_asset_id': self.account_asset.id,
'account_depreciation_id': self.account_asset_depreciation.id,
'account_depreciation_expense_id': self.account_asset_expense.id,
'account_loss_id': self.account_asset_loss.id,
})
# Create an invoice
self.asset = self.env['account.asset.asset'].create({
'name': 'Test Asset',
'value': 100.00,
'category_id': self.asset_category.id,
'method_number': 10,
'method_period': 12,
'method': 'linear',
})
cls.asset = cls.env['account.asset.asset'].create({
'name': 'Test Asset Number',
'category_id': cls.asset_category_number.id,
'value': 16000.0,
'salvage_value': 1000.0,
'method_number': 15,
self.asset.validate()
def test_asset_disposal(self):
self.assertEqual(len(self.asset.depreciation_line_ids), 10)
# Depreciate the first line
self.asset.depreciation_line_ids[0].create_move()
# Dispose asset
disposal_date = fields.Date.today()
wizard = self.env['account.asset.disposal.wizard'].with_context(
active_ids=self.asset.ids, active_id=self.asset.id,
).create({
'disposal_date': disposal_date,
})
cls.asset.validate()
cls.date_time = fields.Date.to_string(datetime.now())
def test_asset_depreciation_board(self):
self.assertEqual(len(self.asset.depreciation_line_ids), 15)
self.first_line = self.asset.depreciation_line_ids[0]
self.assertEqual(self.first_line.depreciated_value, 1000.0)
self.assertEqual(self.first_line.remaining_value, 14000.0)
def test_asset_unamortized(self):
self.asset.set_to_close()
self.assertTrue(self.asset.disposal_move_id)
self.assertEqual(self.asset.disposal_date, self.date_time)
self.assertEqual(wizard.loss_account_id, self.account_asset_loss)
wizard.action_dispose()
self.assertEqual(self.asset.disposal_date, disposal_date)
self.assertEqual(self.asset.state, 'disposed')
self.assertEqual(len(self.asset.depreciation_line_ids), 2)
self.assertTrue(self.asset.disposal_move_id)
self.assertEqual('posted', self.asset.disposal_move_id.state)
self.assertEqual(self.asset.value, self.asset.disposal_move_id.amount)
self.asset.action_disposal_undo()
self.assertEqual(self.asset.state, 'open')
self.assertEqual(self.asset.method_end,
self.asset.category_id.method_end)
self.assertEqual(self.asset.method_number,
self.asset.category_id.method_number)
def test_asset_amortized(self):
self.asset.depreciation_line_ids.create_move()
self.asset.set_to_close()
self.asset.action_disposal_undo()
self.assertEqual(self.asset.state, 'close')
self.assertEqual(len(self.asset.depreciation_line_ids), 10)

View File

@@ -1,18 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2016 Tecnativa - Antonio Espinosa
Copyright 2017 Tecnativa - Pedro M. Baeza
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -->
<odoo>
<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>
<field name="inherit_id"
ref="account_asset.view_account_asset_asset_form"/>
<field name="inherit_id" ref="account_asset.view_account_asset_asset_form"/>
<field name="arch" type="xml">
<button name="compute_depreciation_board" position="attributes">
<attribute name="attrs">{
'invisible':[('state', '!=', 'draft')]}</attribute>
<button name="set_to_close" position="attributes">
<attribute name='invisible'>1</attribute>
</button>
<button name="set_to_close" position="after">
<button name="action_disposal"
states="open,close"
string="Dispose"
type="object"
class="oe_highlight"
/>
<button name="action_disposal_undo"
states="disposed"
string="Undo disposal"

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2017 Tecnativa - Pedro M. Baeza
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -->
<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">
<field name="account_loss_id"/>
</field>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import account_asset_disposal_wizard

View File

@@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Tecnativa - Antonio Espinosa
# Copyright 2017 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models
class AccountAssetDisposalWizard(models.TransientModel):
_name = 'account.asset.disposal.wizard'
def _default_disposal_date(self):
return fields.Date.context_today(self)
def _default_loss_account_id(self):
asset = self.env['account.asset.asset'].browse(
self.env.context.get('active_id', False)
)
return asset.category_id.account_loss_id.id
disposal_date = fields.Date(
string="Disposal date", required=True,
default=lambda self: self._default_disposal_date(),
)
loss_account_id = fields.Many2one(
comodel_name='account.account', string="Loss Account", required=True,
default=lambda self: self._default_loss_account_id(),
)
@api.multi
def action_dispose(self):
self.ensure_one()
assets = self.env['account.asset.asset'].browse(
self.env.context.get('active_ids', False)
)
return assets.dispose(self.disposal_date, self.loss_account_id)

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- © 2016 Antonio Espinosa - <antonio.espinosa@tecnativa.com>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -->
<openerp>
<data>
<record model="ir.ui.view" id="account_asset_disposal_wizard_form">
<field name="name">account.asset.disposal.wizard.form</field>
<field name="model">account.asset.disposal.wizard</field>
<field name="arch" type="xml">
<form string="Asset disposal">
<group>
<field name="disposal_date"/>
<field name="loss_account_id"/>
</group>
<footer>
<button name="action_dispose"
string="Dispose asset"
type="object" class="oe_highlight" />
<button special="cancel" string="Close" class="oe_link" />
</footer>
</form>
</field>
</record>
</data>
</openerp>