prepare("SELECT id FROM turnero_sesiones WHERE fecha = ? LIMIT 1"); $ses->execute([$hoy]); $sesion = $ses->fetch(PDO::FETCH_ASSOC); $turnos = []; if ($sesion) { $sesId = (int)$sesion['id']; $stmt = $pdo->prepare( "SELECT t.codigo, p.codigo AS prioridad, t.estado, COALESCE(sp.nombre_completo, t.paciente_nombre) AS paciente, sp.tipo_documento AS tipo_doc, sp.numero_documento AS num_doc, t.paciente_cel AS celular, l.nombre AS lugar, ur.full_name AS recepcionista, ul.full_name AS bacteriologo, ts.total_cobrado AS cobrado, ts.metodo_pago, GROUP_CONCAT(DISTINCT et.nombre ORDER BY et.nombre SEPARATOR ', ') AS examenes, ROUND(TIMESTAMPDIFF(SECOND, t.creado_at, COALESCE(t.inicio_recepcion_at, t.fin_recepcion_at)) / 60, 1) AS espera_min, ROUND(TIMESTAMPDIFF(SECOND, t.inicio_lugar_at, COALESCE(t.fin_lugar_at, NOW())) / 60, 1) AS servicio_min, ROUND(TIMESTAMPDIFF(SECOND, t.creado_at, t.fin_lugar_at) / 60, 1) AS total_min, t.creado_at FROM turnero_turnos t JOIN turnero_prioridades p ON p.id = t.prioridad_id LEFT JOIN turnero_lugares l ON l.id = t.lugar_destino_id LEFT JOIN turnero_solicitudes ts ON ts.turno_id = t.id LEFT JOIN turnero_examen_items tei ON tei.solicitud_id = ts.id LEFT JOIN exam_tipos et ON et.id = tei.exam_tipo_id LEFT JOIN lab_pacientes sp ON sp.id = ts.paciente_id LEFT JOIN admin_users ur ON ur.id = t.atendido_recepcion_por LEFT JOIN admin_users ul ON ul.id = t.atendido_lugar_por WHERE t.sesion_id = ? GROUP BY t.id ORDER BY t.numero ASC" ); $stmt->execute([$sesId]); $turnos = $stmt->fetchAll(PDO::FETCH_ASSOC); } $fecha = date('d/m/Y', strtotime($hoy)); $archivo = 'informe-turnero-' . $hoy . '.xls'; header('Content-Type: application/vnd.ms-excel; charset=utf-8'); header('Content-Disposition: attachment; filename="' . $archivo . '"'); header('Cache-Control: no-cache'); $estados = [ 'finalizado'=>'Finalizado','ausente'=>'Ausente','cancelado'=>'Cancelado', 'en_servicio'=>'En servicio','en_espera_lugar'=>'Esp. lugar', 'en_recepcion'=>'Recepción','espera'=>'Espera', ]; echo ''; echo '
'; echo "| Código | Prioridad | Estado | Paciente | Tipo Doc | Documento | Celular | Lugar | Recepcionista | Bacteriólogo | Exámenes | Método Pago | Cobrado | Espera (min) | Servicio (min) | Total (min) | Hora entrada |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {$t['codigo']} | {$t['prioridad']} | {$estadoLbl} | " . htmlspecialchars($t['paciente'] ?? '', ENT_QUOTES) . " | {$t['tipo_doc']} | {$t['num_doc']} | {$t['celular']} | " . htmlspecialchars($t['lugar'] ?? '', ENT_QUOTES) . " | " . htmlspecialchars($t['recepcionista'] ?? '', ENT_QUOTES) . " | " . htmlspecialchars($t['bacteriologo'] ?? '', ENT_QUOTES) . " | " . htmlspecialchars($t['examenes'] ?? '', ENT_QUOTES) . " | {$t['metodo_pago']} | {$cobrado} | {$t['espera_min']} | {$t['servicio_min']} | {$t['total_min']} | {$hora} |