F-LAB-28: permitir modificar tomas configuradas (solo las no firmadas)
- PHP: restaura auto-apply de _tomas_config para mostrar tomas correctas en recarga - Badge: agrega botón 'Modificar' cuando el examen ya está configurado - Panel: en modo modificar pre-marca las tomas guardadas y deshabilita las ya firmadas (con ícono ✓ y opacity reducida) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
1715af4506
commit
5bc6ddfadd
@@ -300,8 +300,26 @@ if ($modoTurnero && $embebido && $_soloFirmaPro) {
|
|||||||
foreach ($_mpSecs as $_s) { $_mpGroups[$_s['tipo']][] = $_s; }
|
foreach ($_mpSecs as $_s) { $_mpGroups[$_s['tipo']][] = $_s; }
|
||||||
$_mpGroupsFull = $_mpGroups;
|
$_mpGroupsFull = $_mpGroups;
|
||||||
|
|
||||||
// La configuración de tomas siempre se hace manualmente en el panel;
|
// Aplicar filtro de ciclos si el profesional ya configuró las tomas para este paciente
|
||||||
// no se auto-aplica config guardada para evitar defaults no deseados.
|
$__rawCfg = $datosCliente['_tomas_config'] ?? null;
|
||||||
|
if (is_array($__rawCfg)) {
|
||||||
|
$_tomasConfig = $__rawCfg;
|
||||||
|
foreach ($_mpGroups as $__gk => &$__gsecs) {
|
||||||
|
if (!isset($_tomasConfig[$__gk])) {
|
||||||
|
foreach ($__gsecs as $__s) { $_mpSkippedSepIds[$__s['sep_id']] = true; }
|
||||||
|
$__gsecs = [];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$__allowed = array_flip($_tomasConfig[$__gk]);
|
||||||
|
foreach ($__gsecs as $__s) {
|
||||||
|
if (!isset($__allowed[$__s['firma']])) {
|
||||||
|
$_mpSkippedSepIds[$__s['sep_id']] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$__gsecs = array_values(array_filter($__gsecs, fn($s) => isset($__allowed[$s['firma']])));
|
||||||
|
}
|
||||||
|
unset($__gsecs);
|
||||||
|
}
|
||||||
|
|
||||||
// Construir $_mpMap desde grupos (posiblemente filtrados)
|
// Construir $_mpMap desde grupos (posiblemente filtrados)
|
||||||
foreach ($_mpGroups as $_tipo => $_secs) {
|
foreach ($_mpGroups as $_tipo => $_secs) {
|
||||||
@@ -1325,8 +1343,9 @@ function _mpGuardarConfig(config, examType, onOk, onErr) {
|
|||||||
.catch(function() { onErr('Error de conexión.'); });
|
.catch(function() { onErr('Error de conexión.'); });
|
||||||
}
|
}
|
||||||
|
|
||||||
function _mpShowCfgPanel(examName, groups) {
|
function _mpShowCfgPanel(examName, groups, isModify) {
|
||||||
// Construir checkboxes
|
// Construir checkboxes
|
||||||
|
var savedFirmas = window._mpSavedFirmas || {};
|
||||||
var html = '';
|
var html = '';
|
||||||
var multiGrupo = Object.keys(groups).length > 1;
|
var multiGrupo = Object.keys(groups).length > 1;
|
||||||
for (var gk in groups) {
|
for (var gk in groups) {
|
||||||
@@ -1337,11 +1356,17 @@ function _mpShowCfgPanel(examName, groups) {
|
|||||||
+ '<div class="row g-2">';
|
+ '<div class="row g-2">';
|
||||||
for (var i = 0; i < secs.length; i++) {
|
for (var i = 0; i < secs.length; i++) {
|
||||||
var s = secs[i];
|
var s = secs[i];
|
||||||
html += '<div class="col-6 col-sm-4"><div class="mp-cfg-item form-check">'
|
var isSigned = !!savedFirmas[s.firma];
|
||||||
|
var inSaved = isModify && _mpTomasConfig && _mpTomasConfig[gk]
|
||||||
|
&& _mpTomasConfig[gk].indexOf(s.firma) !== -1;
|
||||||
|
var isChecked = isSigned || inSaved;
|
||||||
|
html += '<div class="col-6 col-sm-4"><div class="mp-cfg-item form-check' + (isSigned ? ' opacity-50' : '') + '">'
|
||||||
+ '<input class="form-check-input mp-cfg-chk" type="checkbox"'
|
+ '<input class="form-check-input mp-cfg-chk" type="checkbox"'
|
||||||
+ ' id="cfg-' + s.firma + '" value="' + s.firma + '" data-group="' + gk + '">'
|
+ ' id="cfg-' + s.firma + '" value="' + s.firma + '" data-group="' + gk + '"'
|
||||||
|
+ (isChecked ? ' checked' : '')
|
||||||
|
+ (isSigned ? ' disabled title="Ya firmada"' : '') + '>'
|
||||||
+ '<label class="form-check-label small" for="cfg-' + s.firma + '">'
|
+ '<label class="form-check-label small" for="cfg-' + s.firma + '">'
|
||||||
+ (s.label || ('Toma ' + (i+1))) + '</label>'
|
+ (s.label || ('Toma ' + (i+1))) + (isSigned ? ' <i class=\'fas fa-check text-success\'></i>' : '') + '</label>'
|
||||||
+ '</div></div>';
|
+ '</div></div>';
|
||||||
}
|
}
|
||||||
html += '</div></div>';
|
html += '</div></div>';
|
||||||
@@ -1435,7 +1460,9 @@ function _mpRenderBadges() {
|
|||||||
+ '<span class="mp-exam-badge-name">' + name + '</span>';
|
+ '<span class="mp-exam-badge-name">' + name + '</span>';
|
||||||
if (configured) {
|
if (configured) {
|
||||||
html += '<span class="mp-exam-badge-info"><i class="fas fa-check-circle text-success me-1"></i>'
|
html += '<span class="mp-exam-badge-info"><i class="fas fa-check-circle text-success me-1"></i>'
|
||||||
+ tomasCount + ' toma' + (tomasCount !== 1 ? 's' : '') + ' configurada' + (tomasCount !== 1 ? 's' : '') + '</span>';
|
+ tomasCount + ' toma' + (tomasCount !== 1 ? 's' : '') + ' configurada' + (tomasCount !== 1 ? 's' : '') + '</span>'
|
||||||
|
+ '<button class="mp-exam-badge-btn" data-exam="' + name.replace(/"/g, '"') + '" data-modify="1">'
|
||||||
|
+ '<i class="fas fa-edit me-1"></i>Modificar</button>';
|
||||||
} else {
|
} else {
|
||||||
html += '<span class="mp-exam-badge-info text-warning"><i class="fas fa-clock me-1"></i>Pendiente configurar ('
|
html += '<span class="mp-exam-badge-info text-warning"><i class="fas fa-clock me-1"></i>Pendiente configurar ('
|
||||||
+ totalTomas + ' tomas disponibles)</span>'
|
+ totalTomas + ' tomas disponibles)</span>'
|
||||||
@@ -1456,13 +1483,14 @@ document.addEventListener('change', function(e) {
|
|||||||
if (_mpModoTurnero) _mpRenderBadges();
|
if (_mpModoTurnero) _mpRenderBadges();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Click en botón "Configurar tiempos" del badge
|
// Click en botón "Configurar tiempos" o "Modificar" del badge
|
||||||
document.addEventListener('click', function(e) {
|
document.addEventListener('click', function(e) {
|
||||||
var btn = e.target.closest('.mp-exam-badge-btn');
|
var btn = e.target.closest('.mp-exam-badge-btn');
|
||||||
if (!btn) return;
|
if (!btn) return;
|
||||||
var examName = btn.getAttribute('data-exam');
|
var examName = btn.getAttribute('data-exam');
|
||||||
|
var isModify = btn.getAttribute('data-modify') === '1';
|
||||||
var groups = _mpGetGroupsForExam(examName);
|
var groups = _mpGetGroupsForExam(examName);
|
||||||
if (Object.keys(groups).length) _mpShowCfgPanel(examName, groups);
|
if (Object.keys(groups).length) _mpShowCfgPanel(examName, groups, isModify);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Al cargar: aplicar visibilidad y renderizar badges
|
// Al cargar: aplicar visibilidad y renderizar badges
|
||||||
|
|||||||
Reference in New Issue
Block a user