- 4 disposal types: sale, scrap, donation, lost
- mail.thread tracking on type / date / sale amount / partner
- gain_loss_amount computed:
- sale: sale_amount - book_value_at_disposal
- scrap / donation / lost: -book_value_at_disposal (full loss)
- ondelete='restrict' on asset_id (cannot delete an asset with disposal)
- move_id placeholder for engine-created journal entry
- 4 new tests (59 total)
Made-with: Cursor
57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
from datetime import date
|
|
|
|
from odoo.tests.common import TransactionCase
|
|
from odoo.tests import tagged
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestFusionAssetDisposal(TransactionCase):
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.asset = self.env['fusion.asset'].create({
|
|
'name': 'Disposable Asset',
|
|
'cost': 10000,
|
|
'salvage_value': 0,
|
|
'acquisition_date': date(2026, 1, 1),
|
|
'method': 'straight_line',
|
|
'useful_life_years': 5,
|
|
})
|
|
|
|
def test_create_minimal_sale(self):
|
|
d = self.env['fusion.asset.disposal'].create({
|
|
'asset_id': self.asset.id,
|
|
'disposal_type': 'sale',
|
|
'sale_amount': 7000,
|
|
'book_value_at_disposal': 6000,
|
|
})
|
|
self.assertEqual(d.gain_loss_amount, 1000)
|
|
self.assertEqual(d.company_id, self.asset.company_id)
|
|
|
|
def test_sale_at_loss(self):
|
|
d = self.env['fusion.asset.disposal'].create({
|
|
'asset_id': self.asset.id,
|
|
'disposal_type': 'sale',
|
|
'sale_amount': 4000,
|
|
'book_value_at_disposal': 6000,
|
|
})
|
|
self.assertEqual(d.gain_loss_amount, -2000)
|
|
|
|
def test_scrap_full_loss(self):
|
|
d = self.env['fusion.asset.disposal'].create({
|
|
'asset_id': self.asset.id,
|
|
'disposal_type': 'scrap',
|
|
'sale_amount': 0,
|
|
'book_value_at_disposal': 6000,
|
|
})
|
|
self.assertEqual(d.gain_loss_amount, -6000)
|
|
|
|
def test_donation_ignores_sale_amount(self):
|
|
d = self.env['fusion.asset.disposal'].create({
|
|
'asset_id': self.asset.id,
|
|
'disposal_type': 'donation',
|
|
'sale_amount': 999,
|
|
'book_value_at_disposal': 6000,
|
|
})
|
|
self.assertEqual(d.gain_loss_amount, -6000)
|