odoo_c2c/addons/c2c_uom_engine/models/uom_conversion_rule.py

33 lines
1.3 KiB
Python

# -*- 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)