Punto 13: alta/baja de médicos desde el módulo Médicos

- Columna 'Estado' con switch Activo/Baja (confirmación previa) y checkbox
  'Mostrar dados de baja' para poder reactivar.
- GET /doctors solo devuelve activos; include_inactive=1 para la pantalla de
  Médicos. Cada médico expone su campo 'active'.
- Reglas en modelo: un empleado dado de baja no admite citas nuevas
  (skeen.cita), ni asignación de pacientes (res.partner.primary_doctor_id),
  ni líneas de venta (skeen.venta.line.prescribed_by_id). El historial
  existente no se toca: los constraints solo corren cuando cambia la
  asignación.
- ValidationError se responde 400 con mensaje legible en pacientes y ventas.
- fix: badges de estado de cita en agenda y dashboard usan la etiqueta de la
  clínica en lugar del valor técnico.
This commit is contained in:
Kimi
2026-09-24 16:03:02 +00:00
parent d0eac00a40
commit 09b4f25bb8
6 changed files with 146 additions and 10 deletions

View File

@@ -406,6 +406,21 @@ class SkeenCita(models.Model):
if cita.duration and (cita.duration < 5 or cita.duration > 480):
raise ValidationError(_('La duración debe estar entre 5 y 480 minutos'))
@api.constrains('doctor_id')
def _check_doctor_activo(self):
"""Un médico dado de baja no puede recibir citas nuevas.
Solo corre cuando cambia `doctor_id`, así que el historial de un médico
desactivado sigue intacto y editable (estado, pagos, notas).
"""
for cita in self:
if cita.doctor_id and not cita.doctor_id.active:
raise ValidationError(_(
'%(nombre)s está dado de baja y no se le pueden asignar '
'citas. Reactívalo en el módulo de Médicos o elige otro '
'especialista.'
) % {'nombre': cita.doctor_id.name})
def get_available_slots(self, date, servicio_id, doctor_id=None, duration=None):
"""Retorna slots disponibles para una fecha y servicio.