"""Per-period depreciation board lines for an asset.""" from odoo import fields, models class FusionAssetDepreciationLine(models.Model): _name = "fusion.asset.depreciation.line" _description = "Asset Depreciation Board Line" _order = "asset_id, scheduled_date" asset_id = fields.Many2one('fusion.asset', required=True, ondelete='cascade') company_id = fields.Many2one(related='asset_id.company_id', store=True) currency_id = fields.Many2one(related='asset_id.currency_id', store=True) period_index = fields.Integer(required=True) scheduled_date = fields.Date(required=True) amount = fields.Monetary(required=True) accumulated = fields.Monetary() book_value_at_end = fields.Monetary() is_posted = fields.Boolean(default=False, copy=False) posted_date = fields.Date(copy=False) move_id = fields.Many2one( 'account.move', copy=False, help="Journal entry created when this line was posted.", ) def action_post(self): """Mark this line as posted (without creating the journal entry yet — engine method post_depreciation_entry handles the actual entry creation).""" for line in self: if line.is_posted: continue line.write({ 'is_posted': True, 'posted_date': fields.Date.today(), }) _unique_period_per_asset = models.Constraint( 'UNIQUE(asset_id, period_index)', 'A depreciation line for that period already exists.', )