Skip to Content
Menu
This question has been flagged

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

Avatar
Discard
Author

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

Author

I can't share images but I have commented the scenario

Best Answer

Hi Leonard, Its a little bit hard when I can not see your codes of model 'purchase.order'. Anyway, I read your code and dont understand meaning of the line:

partner = rec.env['purchase.order'].search([('partner_id', '=', rec.partner_id.id)]

In my opinion,  you are trying to have list of similar products in order_line quoted by different vendors. And in that list, find the product which has lowest price. I guess your model 'purchase.order' has attributes 'name_of_product' , 'price', and 'name_of_vendor'. So you can group records of that model by attribute 'name_of_product', and find the record has the lowest 'price'.

Avatar
Discard
Related Posts Replies Views Activity
1
Jul 21
835
1
Mar 15
3379
1
Feb 18
10120
1
Jan 23
595
1
Jan 19
2094