diff --git a/api/lab/save_domicilio.php b/api/lab/save_domicilio.php index 7344e41..04453fe 100644 --- a/api/lab/save_domicilio.php +++ b/api/lab/save_domicilio.php @@ -55,12 +55,18 @@ try { if (!empty($datos['id'])) { // Actualización general $id = (int)$datos['id']; - // Enfermero solo puede editar domicilios que él mismo creó + // Enfermero puede editar domicilios que creó o que tiene asignados if (userRole() === 'enfermero') { $dbCheck = Database::getInstance(); - $chk = $dbCheck->fetchOne("SELECT creado_por FROM lab_domicilios WHERE id = ?", [$id]); - if (!$chk || (int)($chk['creado_por'] ?? 0) !== adminId()) { - jsonError('Solo puedes editar domicilios que tú mismo agendaste.'); + $chk = $dbCheck->fetchOne( + "SELECT d.creado_por, + (SELECT COUNT(*) FROM lab_asignaciones a + WHERE a.domicilio_id = d.id AND a.enfermera_id = ?) AS asignado + FROM lab_domicilios d WHERE d.id = ?", + [enfermeraId(), $id] + ); + if (!$chk || ((int)($chk['creado_por'] ?? 0) !== adminId() && !(int)$chk['asignado'])) { + jsonError('Solo puedes editar domicilios que agendaste o que tienes asignados.'); } } unset($datos['id'], $datos['solo_estado']); diff --git a/enfermero_portal.php b/enfermero_portal.php index 273e15d..6e00117 100644 --- a/enfermero_portal.php +++ b/enfermero_portal.php @@ -783,6 +783,11 @@ const portal = { onclick="formVer.abrir(${item.paciente_id}, '${esc(item.paciente_nombre||'')}')"> Ver llenados ` : ''} + ${!['completado','cancelado'].includes(est) ? ` + ` : ''} `; @@ -1452,6 +1457,7 @@ const agendaNueva = { _modal: null, _buscarTimer: null, _nuevoPac: false, + _editId: null, init() { this._modal = new bootstrap.Modal('#modalNuevaAgenda'); @@ -1500,12 +1506,63 @@ const agendaNueva = { document.getElementById('na-np-email').value = ''; document.getElementById('na-crear-toggle-txt').textContent = 'Crear nuevo paciente'; document.getElementById('na-paciente-buscar').disabled = false; + this._editId = null; const btn = document.getElementById('na-btn-guardar'); btn.disabled = false; btn.innerHTML = 'Agendar'; + document.querySelector('#modalNuevaAgenda .modal-title').textContent = 'Nuevo domicilio'; this._modal.show(); }, + async abrirEditar(domId) { + try { + const r = await fetch(`api/lab/get_domicilios.php?id=${domId}`); + const d = await r.json(); + const dom = d.domicilio || d.data?.[0] || null; + if (!dom) { alert('No se pudo cargar el domicilio.'); return; } + + this.abrir(); // resetea el form + this._editId = domId; + + // Paciente + if (dom.paciente_id) { + document.getElementById('na-paciente-id').value = dom.paciente_id; + document.getElementById('na-paciente-buscar').value = dom.paciente_nombre || ''; + document.getElementById('na-paciente-label').textContent = dom.paciente_nombre || ''; + document.getElementById('na-paciente-elegido').classList.remove('d-none'); + document.getElementById('na-sugerencias').classList.add('d-none'); + } + + // Campos + document.getElementById('na-direccion').value = dom.direccion || ''; + document.getElementById('na-barrio').value = dom.barrio || ''; + document.getElementById('na-ciudad').value = dom.ciudad || ''; + document.getElementById('na-indicaciones').value = dom.indicaciones_dir || ''; + document.getElementById('na-fecha').value = dom.fecha_programada || ''; + document.getElementById('na-hora').value = (dom.hora_programada || '').slice(0,5); + document.getElementById('na-notas').value = dom.notas_admin || ''; + document.getElementById('na-valor-dom').value = dom.valor_domicilio || ''; + document.getElementById('na-valor-cop').value = dom.valor_copago || ''; + + // Tipo cliente + const tc = dom.tipo_cliente === 'seguro' ? 'na-tc-seguro' : 'na-tc-particular'; + const tcEl = document.getElementById(tc); + if (tcEl) { tcEl.checked = true; this._toggleSeguro(); } + if (dom.seguro_nombre) { + const sn = document.getElementById('na-seguro-nombre'); + if (sn) sn.value = dom.seguro_nombre; + } + + // Botón y título + const btn = document.getElementById('na-btn-guardar'); + btn.disabled = false; + btn.innerHTML = 'Guardar cambios'; + document.querySelector('#modalNuevaAgenda .modal-title').textContent = 'Editar domicilio'; + } catch(e) { + alert('Error al cargar domicilio: ' + e.message); + } + }, + async _buscarPacientes(q) { if (q.length < 2) { document.getElementById('na-sugerencias').classList.add('d-none'); @@ -1783,8 +1840,8 @@ const agendaNueva = { valor_domicilio: parseFloat(document.getElementById('na-valor-dom').value) || null, valor_copago: parseFloat(document.getElementById('na-valor-cop').value) || null, notas_admin: document.getElementById('na-notas').value.trim() || null, - estado: 'programado', - ...(ENFERMERA_ID ? { enfermera_id: ENFERMERA_ID } : {}), + ...(this._editId ? { id: this._editId } : { estado: 'programado' }), + ...(ENFERMERA_ID && !this._editId ? { enfermera_id: ENFERMERA_ID } : {}), }; try { @@ -1814,10 +1871,13 @@ const agendaNueva = { } this._modal.hide(); + this._editId = null; portal.cargar(); } catch (e) { btn.disabled = false; - btn.innerHTML = 'Agendar'; + btn.innerHTML = this._editId + ? 'Guardar cambios' + : 'Agendar'; this._mostrarError(e.message); } },