Files
whatsapp/modules/turnero/api/configurar_tomas.php
T
Lizandro GuarnizoandClaude Sonnet 4.6 0ea411ce62 Fix: preservar todos los exámenes seleccionados al configurar tiempos
Al guardar config de un examen se sobreescribía _c8j2g16 con solo ese examen,
perdiendo los demás en el reload. Ahora se envía exam_types (array completo),
se guarda como array en datos_respuestas y sessionStorage restaura todos los
checkboxes marcados al recargar.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-27 23:48:45 -05:00

60 lines
2.3 KiB
PHP

<?php
/**
* POST /modules/turnero/api/configurar_tomas.php
* Guarda la configuración de ciclos (tomas_config) para un consentimiento de toma progresiva.
* Se llama desde la pantalla de configuración antes de iniciar las firmas.
*
* Body JSON:
* token string requerido UUID del consentimiento
* tomas_config object requerido {grupoKey: [firmaId, ...], ...}
*/
require_once __DIR__ . '/_helpers.php';
requireMethod('POST');
$body = inputJson();
$token = trim($body['token'] ?? '');
$cfg = $body['tomas_config'] ?? null;
$examType = trim($body['exam_type'] ?? '');
$otroHora = trim($body['otro_hora'] ?? '');
if (!$token) jsonError('token requerido.');
if (!is_array($cfg) || empty($cfg)) jsonError('tomas_config requerido.');
foreach ($cfg as $grupo => $ids) {
if (!is_array($ids) || empty($ids)) jsonError("El grupo '$grupo' no tiene tomas seleccionadas.");
foreach ($ids as $id) {
if (!preg_match('/^[a-zA-Z0-9_]+$/', $id)) jsonError("ID de firma inválido: $id");
}
}
$pdo = db();
$stmt = $pdo->prepare(
"SELECT id, datos_respuestas FROM turnero_consentimientos WHERE token = ? LIMIT 1"
);
$stmt->execute([$token]);
$tc = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$tc) jsonError('Consentimiento no encontrado.', 404);
$dr = [];
if ($tc['datos_respuestas']) {
$d = json_decode($tc['datos_respuestas'], true);
if (is_array($d)) $dr = $d;
}
// Merge: preserve config from other exams already saved
if (!isset($dr['_tomas_config']) || !is_array($dr['_tomas_config'])) $dr['_tomas_config'] = [];
foreach ($cfg as $k => $v) $dr['_tomas_config'][$k] = $v;
// Guardar selección completa de exámenes (array) para que el reload restaure todos
$examTypes = isset($body['exam_types']) && is_array($body['exam_types']) ? array_values(array_filter($body['exam_types'])) : [];
if ($examTypes) {
$dr['_c8j2g16'] = count($examTypes) === 1 ? $examTypes[0] : $examTypes;
} elseif ($examType !== '' && !array_key_exists('_c8j2g16', $dr)) {
$dr['_c8j2g16'] = $examType;
}
if ($otroHora !== '') $dr['_otro_hora'] = $otroHora;
$pdo->prepare("UPDATE turnero_consentimientos SET datos_respuestas = ? WHERE id = ?")
->execute([json_encode($dr, JSON_UNESCAPED_UNICODE), $tc['id']]);
jsonOk([], 'Configuración de tomas guardada.');