aasshhuu420
aasshhuu420

Reputation: 3

I want to populate Many2one field based on Selection Field

I want to populate Customer/Vendor Many2one field based on Selection Field which has two selection 1.Sale Order, 2.Purchase Order. If it is Sale Order then Many2one field should have Customers from sale.order model and if it is Purchase Order then Many2one field should have Vendors from purchase.order model.

from odoo import models, fields, api, _

class ProductRejection(models.Model):

_name = 'product.rejection'

pr_type_of_order = fields.Selection([('SO', 'Sale Order'), ('PO', 'Purchase Order')], string="Order Type")
pr_customer_name = fields.Many2one('sale.order',string="Vendor/Customer")
pr_order_no = fields.Many2one('sale.order',string="PO/SO No.")
pr_rejection_date = fields.Date("Date Of Rejection")
pr_product_name = fields.Many2one('product.product',string='Product Name')
pr_presentation = fields.Char("Presentation")
pr_reason = fields.Text("Reason Of Rejection")
pr_notes = fields.Text("Receiving Notes")
pr_status = fields.Selection([('new','New'),('confirm','Confirmed')],string="Status")

@api.onchange('pr_type_of_order')
def update_customer(self):
  result = {}
  if self.pr_type_of_order == 'SO':
    sale_customer_obj = self.env['sale.order']
    sale_customer_ids = sale_customer_obj.search(['partner_id'])
    for record in sale_customer_ids:
        cust_name = []
        cust_name.append(record.id)
        result = {'domain': {'pr_customer_name': [('id', 'in', cust_name)]}}
    return result
  else:
      if self.pr_type_of_order == 'PO':
        sale_customer_obj = self.env['purchase.order']
        sale_customer_ids = sale_customer_obj.search(['partner_id'])
        for record in sale_customer_ids:
            cust_name1 = []
            cust_name1.append(record.id)
            result = {'domain': {'pr_customer_name': [('id', 'in', cust_name1)]}}
        return result

Upvotes: 0

Views: 658

Answers (1)

Keval Mehta
Keval Mehta

Reputation: 664

You take m2o of purchase.order and sale.order Now from the selection field, give attrs over .xml file. In which try to hide/unhide other fields. Now from that m2o, you can easily get filter from customer / vendor. Now apart from that if you don't have any other usage of sale.order than just take m2o of 'res.partner' and set the domain over this fields on the base of selection field value.

Upvotes: 0

Related Questions