Skip to Content
Menu
This question has been flagged
1 Reply
1924 Views

I add the partner domain filter field for a pricelist item.

rule_partners_domain = fields.Char(
string="Based on Customers",
help=u'Coupon program will work for selected customers only'
)


I want that only partner within that domain can use that pricelist. I was trying to do something like this on product.pricelist

valid_partner_ids = partner_ids
    for item in self.item_ids:
        valid_partner_ids = self.filtered(lambda pricelist: pricelist._is_valid_partner(item.partner_id))


Avatar
Discard
Best Answer

Hi,

You can try this code
from odoo import models, fields, api

class PricelistItem(models.Model):
    _inherit = 'product.pricelist.item'

    rule_partners_domain = fields.Char(
        string="Based on Customers",
        help="Coupon program will work for selected customers only"
    )

    valid_partner_ids = fields.Many2many(
        'res.partner',
        string="Valid Partners",
        compute='_compute_valid_partner_ids',
        help="Partners within the specified domain who can use this pricelist item"
    )

    @api.depends('rule_partners_domain')
    def _compute_valid_partner_ids(self):
        for item in self:
            if item.rule_partners_domain:
                # Extract the domain string and evaluate it to get the valid partner IDs
                domain = safe_eval(item.rule_partners_domain)
                item.valid_partner_ids = self.env['res.partner'].search(domain).ids
            else:
                item.valid_partner_ids = []

    def _is_valid_partner(self, partner):
        # Check if the partner is in the list of valid partners for this pricelist item
        return partner.id in self.valid_partner_ids.ids


Hope it helps

Avatar
Discard
Related Posts Replies Views Activity
1
Jun 25
564
2
Apr 25
949
0
Jan 25
994
1
Dec 24
2384
1
May 24
2546