hello,
I am new in odoo development. Here ,my case is, when I try to trigger confirm button in purchase.order model, it is showing me this error:
The operation cannot be completed:
- Create/update: a mandatory field is not set.
- Delete: another model requires the record being deleted. If possible, archive it instead.
Model: Purchase Order (purchase.order)
Field: Vendor (partner_id)
I have tried to fix it from recommended youtube videos, forum posts, but it's not working. Can someone help me?
here my code:
from odoo import models, fields, api
class PurchaseOrderLine(models.Model):
_inherit = 'purchase.order.line'
agent_price = fields.Monetary(string="Vendor's Price", compute='_compute_agent_price', store=True)
vendor_id = fields.Many2one('res.partner', string="Vendor's Name", required=False, compute='_compute_vendor_id', store=True)
@api.depends('product_id')
def _compute_vendor_id(self):
for line in self:
if line.product_id:
vendors = self.env['res.partner'].search([('purchase_line_ids.product_id', '=', line.product-id.id )])
if vendors:
# Select the vendor with the lowest agent_price
selected_vendor = min(vendors, key=lambda vendor: vendor.purchase_line_ids.filtered(lambda x: x.product_id == line.product_id).agent_price)
line.vendor_id =selected-vendor.id
otherwise:
line.vendor_id = False
@api.depends('vendor_id', 'product_id')
def _compute_agent_price(self):
for line in self:
if line.vendor_id and line.product_id:
vendor = line.vendor_id
product = line.product_id
agent_price = vendor.purchase_line_ids.filtered(lambda x: x.product_id == product).agent_price
line.agent_price = agent_price or 0.0
otherwise:
line.agent_price = 0.0
@api.depends('product_qty', 'agent_price', 'taxes_id')
def _compute_amount(self):
for line in self:
tax_results = self.env['account.tax']._compute_taxes([line._convert_to_tax_base_line_dict()])
totals = list(tax_results['totals'].values())[0]
amount_untaxed = totals['amount_untaxed']
amount_tax = totals['amount_tax']
line.update({
'price_subtotal': amount_untaxed,
'price_tax': amount_tax,
'price_total': amount_untaxed + amount_tax,
})
def _convert_to_tax_base_line_dict(self):
""" Convert the current record to a dictionary in order to use the generic taxes computation method
defined on account.tax.
:return: A python dictionary.
"""
self.ensure_one()
return self.env['account.tax']._convert_to_tax_base_line_dict(
self
partner=self.order_id.partner_id,
currency=self.order_id.currency_id,
product=self.product_id,