feat(fusion_accounting_assets): disposal wizard
Made-with: Cursor
This commit is contained in:
@@ -1 +1,2 @@
|
||||
from . import create_asset_wizard
|
||||
from . import disposal_wizard
|
||||
|
||||
65
fusion_accounting_assets/wizards/disposal_wizard.py
Normal file
65
fusion_accounting_assets/wizards/disposal_wizard.py
Normal file
@@ -0,0 +1,65 @@
|
||||
"""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',
|
||||
}
|
||||
39
fusion_accounting_assets/wizards/disposal_wizard_views.xml
Normal file
39
fusion_accounting_assets/wizards/disposal_wizard_views.xml
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="view_fusion_disposal_wizard_form" model="ir.ui.view">
|
||||
<field name="name">fusion.disposal.wizard.form</field>
|
||||
<field name="model">fusion.disposal.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Dispose Asset">
|
||||
<group>
|
||||
<field name="asset_id" options="{'no_create': True}" readonly="1"/>
|
||||
<field name="book_value" readonly="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="disposal_type"/>
|
||||
<field name="disposal_date"/>
|
||||
<field name="sale_amount" invisible="disposal_type != 'sale'"/>
|
||||
<field name="sale_partner_id" invisible="disposal_type != 'sale'"/>
|
||||
<field name="estimated_gain_loss" readonly="1"/>
|
||||
<field name="notes"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="action_dispose" type="object"
|
||||
string="Confirm Disposal" class="btn-primary"/>
|
||||
<button special="cancel" string="Cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_fusion_disposal_wizard" model="ir.actions.act_window">
|
||||
<field name="name">Dispose Asset</field>
|
||||
<field name="res_model">fusion.disposal.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
<field name="binding_model_id" ref="model_fusion_asset"/>
|
||||
<field name="binding_view_types">form,list</field>
|
||||
</record>
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user