# -*- coding: utf-8 -*- from odoo import models, fields, api, _ from odoo.exceptions import UserError class UoMConversionRule(models.Model): _name = 'c2c.uom.conversion.rule' _description = 'C2C UoM Conversion Rule' name = fields.Char(string='Rule Name', required=True) product_category_id = fields.Many2one('product.category', string='Product Category') from_uom_id = fields.Many2one('uom.uom', string='From UoM', required=True) to_uom_id = fields.Many2one('uom.uom', string='To UoM', required=True) ratio = fields.Float(string='Conversion Ratio', default=1.0, required=True, digits=(16, 4)) description = fields.Text(string='Description') @api.model def convert(self, product, quantity, from_uom, to_uom): """ Utility method to convert quantities based on local rules if they exist. Otherwise falls back to standard Odoo UoM conversion. """ rule = self.search([ ('product_category_id', '=', product.categ_id.id), ('from_uom_id', '=', from_uom.id), ('to_uom_id', '=', to_uom.id) ], limit=1) if rule: return quantity * rule.ratio # Fallback to Odoo standard return from_uom._compute_quantity(quantity, to_uom)