From d47c054ffc23f1d8680dc51e5fd8108ab8c0527d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Consultor=C3=ADa=20Alcaraz=20Salazar?= Date: Fri, 28 Aug 2026 07:42:14 +0000 Subject: [PATCH] Citas: solapamiento permitido entre medicos distintos (chequeo por doctor_id) --- odoo-addons/skeen_citas/models/cita.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/odoo-addons/skeen_citas/models/cita.py b/odoo-addons/skeen_citas/models/cita.py index 6e823c6..2594912 100644 --- a/odoo-addons/skeen_citas/models/cita.py +++ b/odoo-addons/skeen_citas/models/cita.py @@ -218,22 +218,25 @@ class SkeenCita(models.Model): def action_send_reminder(self): self.write({'reminder_sent': True, 'reminder_date': fields.Datetime.now()}) - @api.constrains('date', 'time', 'servicio_id') + @api.constrains('date', 'time', 'doctor_id', 'servicio_id') def _check_availability(self): for cita in self: if cita.state in ('cancelled', 'no_show'): continue - # Verificar solapamiento + # Verificar solapamiento SOLO dentro del mismo médico: + # la clínica permite citas simultáneas con doctores distintos. + # Criterio para citas sin médico: solo traslapan con otras sin médico. domain = [ ('id', '!=', cita.id), ('date', '=', cita.date), ('state', 'not in', ('cancelled', 'no_show')), + ('doctor_id', '=', cita.doctor_id.id if cita.doctor_id else False), ('datetime_start', '<', cita.datetime_end), ('datetime_end', '>', cita.datetime_start), ] overlapping = self.search(domain) if overlapping: - raise ValidationError(_('Ya existe una cita en ese horario!')) + raise ValidationError(_('Ya existe una cita en ese horario para ese médico!')) @api.constrains('date', 'time', 'doctor_id', 'servicio_id') def _check_bloqueos(self):