diff --git a/enfermero_portal.php b/enfermero_portal.php index cd55bf7..e9c92f0 100644 --- a/enfermero_portal.php +++ b/enfermero_portal.php @@ -743,6 +743,41 @@ document.addEventListener('DOMContentLoaded', () => { + + +
+ +
+
+
+ Datos del nuevo paciente +
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + +
+
@@ -894,6 +929,7 @@ document.addEventListener('DOMContentLoaded', () => { const agendaNueva = { _modal: null, _buscarTimer: null, + _nuevoPac: false, init() { this._modal = new bootstrap.Modal('#modalNuevaAgenda'); @@ -924,6 +960,15 @@ const agendaNueva = { document.getElementById('na-paciente-elegido').classList.add('d-none'); document.getElementById('na-paciente-buscar').classList.remove('d-none'); document.getElementById('na-error').classList.add('d-none'); + // Reset panel nuevo paciente + this._nuevoPac = false; + document.getElementById('na-nuevo-pac-panel').classList.add('d-none'); + document.getElementById('na-np-nombre').value = ''; + document.getElementById('na-np-telefono').value = ''; + document.getElementById('na-np-fnac').value = ''; + document.getElementById('na-np-email').value = ''; + document.getElementById('na-crear-toggle-txt').textContent = 'Crear nuevo paciente'; + document.getElementById('na-paciente-buscar').disabled = false; const btn = document.getElementById('na-btn-guardar'); btn.disabled = false; btn.innerHTML = 'Agendar'; @@ -977,6 +1022,11 @@ const agendaNueva = { nombre + (telefono ? ` · ${telefono}` : ''); document.getElementById('na-paciente-elegido').classList.remove('d-none'); document.getElementById('na-sugerencias').classList.add('d-none'); + // Ocultar panel nuevo paciente si estaba abierto + this._nuevoPac = false; + document.getElementById('na-nuevo-pac-panel').classList.add('d-none'); + document.getElementById('na-crear-toggle-txt').textContent = 'Crear nuevo paciente'; + document.getElementById('na-paciente-buscar').disabled = false; // Siempre rellenar la dirección del paciente (editable) if (direccion) document.getElementById('na-direccion').value = direccion; if (barrio) document.getElementById('na-barrio').value = barrio; @@ -988,23 +1038,84 @@ const agendaNueva = { document.getElementById('na-paciente-id').value = ''; document.getElementById('na-paciente-buscar').value = ''; document.getElementById('na-paciente-elegido').classList.add('d-none'); + document.getElementById('na-paciente-buscar').disabled = false; document.getElementById('na-paciente-buscar').focus(); }, + toggleNuevoPac() { + this._nuevoPac = !this._nuevoPac; + const panel = document.getElementById('na-nuevo-pac-panel'); + const txt = document.getElementById('na-crear-toggle-txt'); + const buscar = document.getElementById('na-paciente-buscar'); + if (this._nuevoPac) { + panel.classList.remove('d-none'); + txt.textContent = '← Buscar paciente existente'; + // Limpiar selección previa + document.getElementById('na-paciente-id').value = ''; + document.getElementById('na-paciente-elegido').classList.add('d-none'); + buscar.value = ''; + buscar.disabled = true; + document.getElementById('na-sugerencias').classList.add('d-none'); + document.getElementById('na-np-nombre').focus(); + } else { + panel.classList.add('d-none'); + txt.textContent = 'Crear nuevo paciente'; + buscar.disabled = false; + buscar.focus(); + } + }, + async guardar() { - const pacId = +document.getElementById('na-paciente-id').value; - const direccion = document.getElementById('na-direccion').value.trim(); - const fecha = document.getElementById('na-fecha').value; + const pacIdInicial = +document.getElementById('na-paciente-id').value; + const direccion = document.getElementById('na-direccion').value.trim(); + const fecha = document.getElementById('na-fecha').value; document.getElementById('na-error').classList.add('d-none'); - if (!pacId) { this._mostrarError('Selecciona un paciente de la lista.'); return; } + // Validaciones básicas + if (!pacIdInicial && !this._nuevoPac) { + this._mostrarError('Selecciona un paciente de la lista o crea uno nuevo.'); + return; + } if (!direccion) { this._mostrarError('La dirección es obligatoria.'); return; } - if (!fecha) { this._mostrarError('La fecha es obligatoria.'); return; } + if (!fecha) { this._mostrarError('La fecha es obligatoria.'); return; } const btn = document.getElementById('na-btn-guardar'); btn.disabled = true; btn.innerHTML = 'Guardando…'; + let pacId = pacIdInicial; + + // Si es paciente nuevo, crearlo primero + if (this._nuevoPac) { + const nombre = document.getElementById('na-np-nombre').value.trim(); + if (!nombre) { + btn.disabled = false; + btn.innerHTML = 'Agendar'; + this._mostrarError('El nombre del nuevo paciente es obligatorio.'); + return; + } + try { + const rPac = await fetch('api/lab/save_paciente.php', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + nombre_completo: nombre, + telefono: document.getElementById('na-np-telefono').value.trim() || null, + fecha_nacimiento: document.getElementById('na-np-fnac').value || null, + email: document.getElementById('na-np-email').value.trim() || null, + }), + }); + const dPac = await rPac.json(); + if (!dPac.success) throw new Error(dPac.error || 'Error al crear paciente'); + pacId = dPac.id; + } catch (e) { + btn.disabled = false; + btn.innerHTML = 'Agendar'; + this._mostrarError('No se pudo crear el paciente: ' + e.message); + return; + } + } + const datos = { paciente_id: pacId, direccion,