I am trying to search for similar products in order_line quoted by different vendors in Purchase order model and then get the cheapest vendor.
The below code is what I was trying to do for the cheapest product.
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.write({'quality': True})
else:
item.write({'quality': False})
The place where I have put the dash is where I am stuck. How can I search in every vendor's oder_line and find similar products quoted by them. The cheapest price for that product I do the last code
....
item.write({'quality': True})
else:
item.write({'quality': False})
NB: I have set field quality to Boolean that's why in the end I am writting "True" or "False"
Or is there a better way to do it
Hi jjjaberi0n,
Sorry I can share images or link that has images to clarify further. But my Purchase.order has:
- partner/vendor name
- A unique supplier_prequalification_id_id which is in both vendors that applied for it
Then the product and price are in the class below it and many other field like cheapest price . Here is where I want to compare the the product for different vendors in purchase order and get the cheapest
# -*- coding: utf-8 -*-
from odoo import models, fields, api,_
class PurchaseOrder(models.Model):
_inherit = 'purchase.order'
supplier_prequalification_id = fields.Many2one("supplier.prequalification", string="Supplier Prequalification")
class PurchaseOrderLine(models.Model):
_inherit = 'purchase.order.line'
supplier_prequalification_id = fields.Many2one("supplier.prequalification", related="order_id.supplier_prequalification_id", string="Supplier Prequalification", store=True)
msf_brand = fields.Char(string="MSF Brand")
supplier_brand = fields.Char("Not MSF Brand")
lead_time = fields.Float()
note = fields.Text("Means of Pay")
termsofpay = fields.Text("Terms of Pay")
number_quoted = fields.Float("Number Quoted", related="product_qty")
quality = fields.Boolean(string="Cheapest Price", compute="compute_cheapest")
vendor = fields.Many2one("res.partner", string="Vendor", related="partner_id", store=True)
count = fields.Float()
def compute_cheapest(self):
for rec in self:
rec.quality = False
# req_product = rec.env['purchase.requisition'].search([''])
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.product_id:
item.count = min(item.price_unit)
# item.
# if item.count:
# item.write({'quality': True})
# else:
# item.write({'quality': False})
The compute I was trying to do in the odoo lines which purchase.order.line
I can't share images but I have commented the scenario