Search code examples
pythonmodulebooleanodoo

Odoo code, how set condition if boolean is true in custom module?


I have a custom module which add and update supplier price and code, from PO line.

I have add a boolean field in PO line.

I would like not update supplier price, if boolean field is True.

I'm not a developer, and I don't know how do it. Can anyone help me? Write me code to add.

Below code with part interested Bold

Thanks

class PurchaseOrderLine(models.Model):
    _inherit = 'purchase.order.line'

    product_supplier_code = fields.Char(string='Product Supplier Code')
    **not_update = fields.Boolean(string='Not update price')**

    @api.onchange(
        'partner_id',
        'product_id',
    )
    def _onchange_product_code(self):
        for line in self:
            supplier_info = line.product_id.seller_ids.filtered(
                lambda s: (
                    s.product_id == line.product_id
                    and s.name == line.partner_id
                )
            )
            if supplier_info:
                code = supplier_info[0].product_code or ''
                line.product_supplier_code = code
            else:
                supplier_info = line.product_id.seller_ids.filtered(
                    lambda s: (
                        s.product_tmpl_id == line.product_id.product_tmpl_id
                        and s.name == line.partner_id
                    )
                )
                if supplier_info:
                    code = supplier_info[0].product_code or ''
                    line.product_supplier_code = code


class PurchaseOrder(models.Model):
    _inherit = 'purchase.order'

    def _add_supplier_to_product(self):
        super()._add_supplier_to_product()
        for line in self.order_line:
            partner = (
                self.partner_id
                if not self.partner_id.parent_id
                else self.partner_id.parent_id
            )
            if partner in line.product_id.seller_ids.mapped('name'):
                seller = line.product_id._select_seller(
                    partner_id=line.partner_id,
                    quantity=line.product_qty,
                    date=line.order_id.date_order
                    and line.order_id.date_order.date(),
                    uom_id=line.product_uom,
                )
                if seller:
                    try:
                        seller['product_code'] = line.product_supplier_code
                        **seller['price'] = line.price_unit**
                    except AccessError:
                        break

Solution

  • Try Bellow code

    class PurchaseOrder(models.Model):
        _inherit = 'purchase.order'
    
        def _add_supplier_to_product(self):
            super()._add_supplier_to_product()
            for line in self.order_line:
                partner = (
                    self.partner_id
                    if not self.partner_id.parent_id
                    else self.partner_id.parent_id
                )
                if partner in line.product_id.seller_ids.mapped('name'):
                    seller = line.product_id._select_seller(
                        partner_id=line.partner_id,
                        quantity=line.product_qty,
                        date=line.order_id.date_order
                        and line.order_id.date_order.date(),
                        uom_id=line.product_uom,
                    )
                    if seller:
                        try:
                            seller['product_code'] = line.product_supplier_code
                            **if not line.not_update:
                               seller['price'] = line.price_unit**
                        except AccessError:
                            break