"""Asset disposal records (sale, scrap, donation).""" from odoo import api, fields, models DISPOSAL_TYPES = [ ('sale', 'Sale'), ('scrap', 'Scrap'), ('donation', 'Donation'), ('lost', 'Lost / Stolen'), ] class FusionAssetDisposal(models.Model): _name = "fusion.asset.disposal" _description = "Asset Disposal Record" _order = "disposal_date desc, id desc" _inherit = ['mail.thread'] asset_id = fields.Many2one( 'fusion.asset', required=True, ondelete='restrict', tracking=True, ) company_id = fields.Many2one(related='asset_id.company_id', store=True) currency_id = fields.Many2one(related='asset_id.currency_id', store=True) disposal_type = fields.Selection( DISPOSAL_TYPES, required=True, default='sale', tracking=True, ) disposal_date = fields.Date( required=True, default=fields.Date.today, tracking=True, ) sale_amount = fields.Monetary( default=0.0, tracking=True, help="Cash received (for sale disposal type).", ) sale_partner_id = fields.Many2one('res.partner', tracking=True) book_value_at_disposal = fields.Monetary( readonly=True, help="Asset book value at disposal date.", ) gain_loss_amount = fields.Monetary(compute='_compute_gain_loss', store=True) notes = fields.Text() move_id = fields.Many2one( 'account.move', readonly=True, copy=False, help="Journal entry created for this disposal.", ) @api.depends('sale_amount', 'book_value_at_disposal', 'disposal_type') def _compute_gain_loss(self): for d in self: if d.disposal_type == 'sale': d.gain_loss_amount = d.sale_amount - d.book_value_at_disposal else: d.gain_loss_amount = -d.book_value_at_disposal