es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar el campo product_id para buscar productos similares en el modelo purchase.order.line. Luego, puede utilizar el campo price_unit para obtener el proveedor más barato.

    Puede utilizar el siguiente código para lograr esto:

    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 == rec.product_id:
                    item.count = min(item.price_unit)
                    if item.count:
                        item.write({'cheapest': True})
                    else:
                        item.write({'cheapest': False})
    

    Este código buscará productos similares en el modelo purchase.order.line y luego obtendrá el proveedor más barato.

Comments are closed.