İçereği Atla
Menü
Bu soru işaretlendi
1 Cevapla
1419 Görünümler
class OrderPatient(models.Model):
_name = 'hms.order.patient'
_description = 'Order Patient'

order_id = fields.Many2one('hms.order', invisible=True, readonly=True)
service_id = fields.Many2one('hms.service', string="Service", domain='_onchange_service_id_domain')
doctor_id = fields.Many2one('hr.employee', string="Doctor")

# service_id_domain = fields.Char(compute='_compute_service_id_domain', store=False)
# doctor_id_domain = fields.Char(compute='_compute_doctor_id_domain', store=False)

@api.onchange('doctor_id')
def _onchange_doctor_id(self):
"""Update services and clear invalid service"""
if self.doctor_id:
allowed_services = self.doctor_id.service_ids
# Clear service if not valid for new doctor
if self.service_id not in allowed_services:
self.service_id = False
self.service_id_domain = [('id', 'in', allowed_services.ids)]
return {'domain': {'service_id': [('id', 'in', allowed_services.ids)]}}
else:
self.service_id = False
self.service_id_domain = []
return {'domain': {'service_id': []}}

@api.onchange('service_id')
def _onchange_service_id(self):
"""Update doctors and clear invalid doctor"""
if self.service_id:
allowed_doctors = self.env['hr.employee'].search(
[('service_ids', 'in', self.service_id.ids)]
)
# Clear doctor if not valid for new service
if self.doctor_id not in allowed_doctors:
self.doctor_id = False
self.doctor_id_domain = {'domain': {'doctor_id': [('id', 'in', allowed_doctors.ids)]}}
return {'domain': {'doctor_id': [('id', 'in', allowed_doctors.ids)]}}
else:
self.doctor_id = False
self.doctor_id_domain = {'domain': {'doctor_id': []}}
return {'domain': {'doctor_id': []}}


I want to achieve the following behavior:

  1. When a Doctor is selected, only the services that are allowed for that Doctor should be available for selection in the Service field. If the selected service is no longer valid for the Doctor, it should be cleared.
  2. When a Service is selected, only the Doctors that are allowed to perform that Service should be available for selection in the Doctor field. If the selected Doctor no longer provides the selected Service, it should be cleared.
Avatar
Vazgeç
En İyi Yanıt

Hi Bahrom Najmiddinov,

Returning a domain from the @api.onchange​  method is deprecated in Odoo 17. See the link below for the recommended alternative.
https://github.com/odoo/odoo/blob/26239b2d0bdbc2f06d50f7739d61c490248b65bb/addons/account/models/account_tax.py#L1633C5-L1633C154

Avatar
Vazgeç
İlgili Gönderiler Cevaplar Görünümler Aktivite
2
Kas 22
4729
3
Kas 20
4184
1
Kas 18
5661
5
Şub 18
4801
2
Tem 22
11682