Skip to Content
Menu
This question has been flagged

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,


Avatar
Discard
Related Posts Replies Views Activity
2
Nov 22
2951
0
Jan 24
1464
3
Apr 22
4311
1
Oct 20
4240
2
Apr 20
4852