Agenda: horario 8-19h, bloques de 15 min, cita rapida, vista restringida para rol medico y chips de pacientes por doctor

This commit is contained in:
2026-08-28 07:35:46 +00:00
parent f9fc66b343
commit 29225e848a
5 changed files with 446 additions and 81 deletions

View File

@@ -256,19 +256,20 @@ class SkeenCita(models.Model):
"""Retorna slots disponibles para una fecha y servicio"""
servicio = self.env['skeen.servicio'].browse(servicio_id)
duration = servicio.duration_min if servicio else 30
# Horario de la clínica
start_time = 9.0 # 9:00 AM
end_time = 18.0 # 6:00 PM
# Horario de la clínica: 8:00 AM a 7:00 PM
start_time = 8.0 # 8:00 AM
end_time = 19.0 # 7:00 PM
# Generar slots
slots = []
current = start_time
while current + (duration / 60.0) <= end_time:
while current + (duration / 60.0) <= end_time + 1e-9:
# Verificar si está ocupado
slot_start = datetime.combine(date, datetime.min.time().replace(hour=int(current), minute=int((current % 1) * 60)))
minutes = int(round((current % 1) * 60))
slot_start = datetime.combine(date, datetime.min.time().replace(hour=int(current), minute=minutes))
slot_end = slot_start + timedelta(minutes=duration)
domain = [
('date', '=', date),
('state', 'not in', ('cancelled', 'no_show')),
@@ -278,8 +279,8 @@ class SkeenCita(models.Model):
if not self.search(domain):
slots.append({
'time': current,
'time_str': f"{int(current):02d}:{int((current % 1) * 60):02d}",
'time_str': f"{int(current):02d}:{minutes:02d}",
})
current += 0.5 # Slots cada 30 min
current += 0.25 # Slots cada 15 min
return slots