# -*- coding: utf-8 -*- # Copyright 2026 Nexa Systems Inc. # License OPL-1 from odoo import api, fields, models class SaleOrder(models.Model): _inherit = "sale.order" def _fc_rate_usage(self, charge, period_start, period_end): """Aggregate this subscription's usage for `charge`'s metric in the period, compute the overage amount, and upsert a matching overage order line. Returns the amount. A zero amount never *creates* a new line (no $0.00 overage clutter); if a line already exists it is still updated so a dropped-to-zero overage clears. """ self.ensure_one() Usage = self.env['fusion.billing.usage'] total = Usage._aggregate(self, charge.metric_id, period_start, period_end) _overage, amount = charge._compute_billable(total) if charge.product_id: line = self.order_line.filtered(lambda l: l.product_id == charge.product_id) if not line and amount == 0: return amount vals = {'product_uom_qty': 1, 'price_unit': amount} if line: line.write(vals) else: self.env['sale.order.line'].create( {'order_id': self.id, 'product_id': charge.product_id.id, **vals}) return amount