AyAz Mansuri
AyAz Mansuri

Reputation: 19

How to apply domain filter on Many2One field Using Odoo JS?

Currently, I am Working on POS Customization. I've done almost but stuck in this issue.

Py File:

class prescription(osv.osv):

     _name = 'res.prescriptions'

     _columns={

         'prescription_id':fields.many2one('res.partner',"customer"),

      }

class prescription_res_partner(osv.osv):

    _inherit = 'res.partner'

    _columns = {

        'prescriptions_ids':   fields.one2many('res.prescriptions','prescription_id','Prescriptions'),

}

What I would like to do, is that when the user select customer in POS, and click on Prescription Button, it shows only prescriptions that are related to particular selected customer.. For now, it displays all prescriptions as I am not able to set correctly the filter domain. Also.....

i've tried to solve my problem using .query(), .filter() in JS. but getting some errors, while if i put static partner_id then it will display prescriptions for given static partner_id. I want to solve this for dynamic partners. it shows only selected partner's prescriptions...!!!

In JS File:

var def = new $.Deferred();

console.log("deffffffffffffff", def);

var fields = _.find(this.models,function(model){ return model.model === 'res.prescriptions'; });

new instance.web.Model('res.prescriptions')

   .query(fields)

   .filter([['prescription_id', '=', 51]]) // Here i pass static partner_id instead of this i want to pass dynamic partner_id

   .limit(1000)

   .all()

   .then(function(prescriptions){

if (self.render_list_prescription(prescriptions)) { // Render selected partner's Prescription

    def.resolve();

    } else {

    def.reject();

    }

    }, function(err,event){ event.preventDefault(); def.reject(); });

return def;

i've spend almost 3 days to overcome this problem but failed to Deliver it. please help me out from this. Again Many Thanks for your help..!!!

Upvotes: 1

Views: 2537

Answers (2)

Kenly
Kenly

Reputation: 26768

You can do it in on_change method.

prescription_ids = # search for prescriptions related to the selected customer  

# self.pool.get('res.prescriptions').search(cr, uid, [('partner_id', '=', YOU SHOULD GET THE CUSTOMER ID)])

res['domain']['prescription_id'] = [('id', 'in', prescription_ids)]

return res

Upvotes: 0

Yacine Bs
Yacine Bs

Reputation: 312

You can try use domain in fields like this :

_columns = {

'prescriptions_ids': fields.one2many('res.prescriptions','prescription_id','Prescriptions', domain="[('prescription_id', '=', 51)]"),
}

change 51 with an other column in relation

Upvotes: 1

Related Questions