Files
Odoo-Modules/fusion_accounting_assets/wizards/disposal_wizard.py
2026-04-19 20:04:03 -04:00

66 lines
2.3 KiB
Python

"""Asset disposal wizard (sale, scrap, donation, lost)."""
from odoo import _, api, fields, models
from odoo.exceptions import UserError
class FusionDisposalWizard(models.TransientModel):
_name = "fusion.disposal.wizard"
_description = "Asset Disposal Wizard"
asset_id = fields.Many2one(
'fusion.asset', required=True,
default=lambda self: self._default_asset(),
)
company_id = fields.Many2one(related='asset_id.company_id')
currency_id = fields.Many2one(related='asset_id.currency_id')
book_value = fields.Monetary(related='asset_id.book_value', readonly=True)
disposal_type = fields.Selection([
('sale', 'Sale'),
('scrap', 'Scrap'),
('donation', 'Donation'),
('lost', 'Lost / Stolen'),
], required=True, default='sale')
disposal_date = fields.Date(required=True, default=fields.Date.today)
sale_amount = fields.Monetary(default=0.0)
sale_partner_id = fields.Many2one('res.partner')
notes = fields.Text()
estimated_gain_loss = fields.Monetary(compute='_compute_gain_loss')
@api.model
def _default_asset(self):
ctx = self.env.context
if ctx.get('active_model') == 'fusion.asset':
return ctx.get('active_id')
return False
@api.depends('sale_amount', 'book_value', 'disposal_type')
def _compute_gain_loss(self):
for w in self:
if w.disposal_type == 'sale':
w.estimated_gain_loss = w.sale_amount - w.book_value
else:
w.estimated_gain_loss = -w.book_value
def action_dispose(self):
self.ensure_one()
if self.asset_id.state == 'disposed':
raise UserError(_("Asset already disposed."))
partner = self.sale_partner_id if self.disposal_type == 'sale' else None
self.env['fusion.asset.engine'].dispose_asset(
self.asset_id,
sale_amount=self.sale_amount if self.disposal_type == 'sale' else 0,
sale_date=self.disposal_date,
sale_partner=partner,
disposal_type=self.disposal_type,
)
return {
'type': 'ir.actions.act_window',
'res_model': 'fusion.asset',
'res_id': self.asset_id.id,
'view_mode': 'form',
'target': 'current',
}