feat: toma 0 pre-seleccionada y validación de hora en chip Otro

- Chip "0 min" queda marcado por defecto al abrir configurar tiempos
- Si se selecciona "Otro", bloquea guardar hasta que se ingrese la hora
- La hora de "Otro" se guarda en datos_respuestas._otro_hora

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-17 18:02:18 -05:00
co-authored by Claude Sonnet 4.6
parent 2f6efa7498
commit 76d915a391
2 changed files with 23 additions and 4 deletions
+2
View File
@@ -15,6 +15,7 @@ $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.');
@@ -42,6 +43,7 @@ if ($tc['datos_respuestas']) {
$dr['_tomas_config'] = $cfg;
if ($examType !== '') $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']]);
+21 -4
View File
@@ -1343,11 +1343,12 @@ var _mpTomasConfig = <?= json_encode($_tomasConfig, JSON_UNESCAPED_UNICODE) ?>
var _mpCfgToken = <?= json_encode($tokenTurnero, JSON_UNESCAPED_UNICODE) ?>;
var _mpModoTurnero = <?= json_encode($modoTurnero && $embebido) ?>;
function _mpGuardarConfig(config, examType, onOk, onErr) {
function _mpGuardarConfig(config, examType, onOk, onErr, extra) {
var base = window.location.href.split('/ver_formulario_enviado.php')[0];
var payload = Object.assign({ token: _mpCfgToken, tomas_config: config, exam_type: examType }, extra || {});
fetch(base + '/modules/turnero/api/configurar_tomas.php', {
method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ token: _mpCfgToken, tomas_config: config, exam_type: examType })
body: JSON.stringify(payload)
})
.then(function(r) { return r.json(); })
.then(function(d) {
@@ -1380,7 +1381,8 @@ function _mpShowCfgPanel(examName, groups, isModify) {
var isSigned = !!savedFirmas[s.firma];
var inSaved = isModify && _mpTomasConfig && _mpTomasConfig[gk]
&& _mpTomasConfig[gk].indexOf(s.firma) !== -1;
var isActive = isSigned || inSaved;
var isMin0 = _mpChipLabel(s.label || '') === '0';
var isActive = isSigned || inSaved || (!isModify && isMin0);
var isOtro = /otro/i.test(s.label || '');
var chipLbl = _mpChipLabel(s.label || ('Toma ' + (i+1)));
// checkbox oculto — sigue siendo la fuente de verdad para el guardado
@@ -1584,12 +1586,27 @@ document.getElementById('mp-cfg-iniciar').addEventListener('click', function() {
return;
}
}
// Validar que "Otro" tenga hora ingresada
var otroHora = '';
var otroBtn = document.querySelector('#mp-cfg-grupos .mp-chip[data-otro="1"]');
if (otroBtn) {
var otroChk = document.getElementById(otroBtn.getAttribute('data-target'));
if (otroChk && otroChk.checked) {
var otroInp = otroBtn.nextElementSibling;
if (otroInp && otroInp.classList.contains('mp-chip-otro-inp')) otroHora = otroInp.value.trim();
if (!otroHora) {
document.getElementById('mp-cfg-msg').innerHTML =
'<span class="text-danger"><i class="fas fa-exclamation-circle me-1"></i>Ingrese la hora para la toma "Otro".</span>';
return;
}
}
}
var btn = this;
btn.disabled = true; btn.innerHTML = '<i class="fas fa-spinner fa-spin me-2"></i>Guardando...';
_mpGuardarConfig(byGroup, examName, function() { location.reload(); }, function(e) {
document.getElementById('mp-cfg-msg').innerHTML = '<span class="text-danger">' + e + '</span>';
btn.disabled = false; btn.innerHTML = '<i class="fas fa-play-circle me-2"></i>Iniciar protocolo';
});
}, otroHora ? { otro_hora: otroHora } : {});
});
// Botón cerrar panel de config