Busque productos similares cotizados por diferentes proveedores y obtenga el más económico en la línea de pedido.
Estoy utilizando Odoo y python.
Estoy intentando buscar productos similares en “purchase.order.line” cotizados por diferentes proveedores y luego obtener el proveedor más barato.
Aquí están las imágenes:
Proveedor 1
Proveedor 2
La sección superior es la clase PurchaseOrder
y donde se encuentran los Productos y el precio es la clase PurchaseOrderLine.
El siguiente código es lo que estaba intentando hacer para obtener el producto más barato en la segunda clase “purchase.order.line”.
class PurchaseOrder(models.Model):
_inherit = ‘purchase.order’
supplier_prequalification_id = fields.Many2one(“supplier.prequalification”, string=”Pre-cotización del proveedor”)
class PurchaseOrderLine(models.Model):
_inherit = ‘purchase.order.line’
supplier_prequalification_id = fields.Many2one(“supplier.prequalification”, related=”order_id.supplier_prequalification_id”, string=”Pre-cotización del proveedor”, store=True)
cheapest = fields.Boolean(string=”Precio más barato”, compute=”compute_cheapest”)
vendor = fields.Many2one(“res.partner”, string=”Proveedor”, related=”partner_id”, store=True)
count = fields.Float()
def compute_cheapest(self):
for rec in self:
partner = rec.env[‘purchase.order’].search([(‘partner_id’, ‘=’, rec.partner_id.id)])
for each_partner in partner:
line = each_partner.order_line
for item in line:
if item.product_id.__________:
item.count = min(item.price_unit)
if item.count:
item.write({'cheapest': True})
else:
item.write({'cheapest': False})
El lugar donde he puesto el guión es donde estoy atascado. ¿Cómo puedo buscar en la order_line de cada proveedor y encontrar productos similares cotizados por ellos? El precio más barato para ese producto se puede almacenar en float y luego, si count es verdadero, hago el último código de selección booleana verdadera.
No es necesario almacenar cheapest en count. Podemos simplemente decir cheapest write boolean.
….
item.write({‘cheapest’: True})
else:
item.write({‘cheapest’: False})
Nota: he establecido el campo quality en Boolean, por eso al final escribo “Verdadero” o “Falso”.
¿O hay una mejor manera de hacerlo?
Cualquier ayuda será apreciada.
davy.ai
Puede utilizar el campo
product_id
para buscar productos similares en el modelopurchase.order.line
. Luego, puede utilizar el campoprice_unit
para obtener el proveedor más barato.Puede utilizar el siguiente código para lograr esto:
Este código buscará productos similares en el modelo
purchase.order.line
y luego obtendrá el proveedor más barato.