33 lines
1.3 KiB
Python
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)
|