diff --git a/conversations.php b/conversations.php index ff87670..00037d9 100644 --- a/conversations.php +++ b/conversations.php @@ -6673,19 +6673,26 @@ if (!isUserLoggedIn()) { -
- -
- - Buscando contacto… -
+ +
+
+ + Buscando contacto…
+ +
+ Nuevo paciente — se registrará al guardar +
@@ -6865,6 +6872,7 @@ const labDomicilio = (() => { let _newOrderFile = null; // nuevo archivo de orden cargado desde el modal let _convId = null; let _pacienteId = null; + let _isNewPaciente = false; // true = paciente nuevo (no existe en BD aún) let _pacNombre = ''; let _histDirs = []; // direcciones únicas previas del paciente let _bsModal = null; @@ -6992,6 +7000,8 @@ const labDomicilio = (() => { if ($('labdom-pac-nombre')) $('labdom-pac-nombre').value = ''; if ($('labdom-pac-cedula')) $('labdom-pac-cedula').value = ''; if ($('labdom-pac-tipodoc')) $('labdom-pac-tipodoc').value = 'CC'; + _isNewPaciente = false; + if ($('labdom-nuevo-badge')) $('labdom-nuevo-badge').classList.add('d-none'); // Resetear tipo cliente a "particular" por defecto const tc = document.getElementById('tc-particular'); if (tc) tc.checked = true; @@ -7213,8 +7223,9 @@ const labDomicilio = (() => { }, limpiarPaciente() { - _pacienteId = null; - _pacNombre = ''; + _pacienteId = null; + _isNewPaciente = false; + _pacNombre = ''; $('labdom-pac-buscar').classList.remove('d-none'); $('labdom-pac-card').classList.add('d-none'); $('labdom-btn-cambiar-pac').classList.add('d-none'); @@ -7222,6 +7233,7 @@ const labDomicilio = (() => { $('labdom-pac-contacto').classList.add('d-none'); $('labdom-hist-cont').classList.add('d-none'); $('labdom-header-pac').textContent = ''; + if ($('labdom-nuevo-badge')) $('labdom-nuevo-badge').classList.add('d-none'); if ($('labdom-pac-fnac')) $('labdom-pac-fnac').value = ''; if ($('labdom-pac-correo')) $('labdom-pac-correo').value = ''; if ($('labdom-pac-nombre')) $('labdom-pac-nombre').value = ''; @@ -7230,6 +7242,30 @@ const labDomicilio = (() => { // Mantener dirección/notas para no perder lo escrito }, + /* Modo nuevo paciente: oculta el buscador y muestra la tarjeta vacía para registrar */ + crearNuevo() { + _pacienteId = null; + _isNewPaciente = true; + _pacNombre = ''; + _histDirs = []; + + $('labdom-pac-buscar').classList.add('d-none'); + $('labdom-pac-card').classList.remove('d-none'); + $('labdom-btn-cambiar-pac').classList.remove('d-none'); + $('labdom-pac-contacto').classList.add('d-none'); + $('labdom-hist-cont').classList.add('d-none'); + $('labdom-pac-eps-row') && ($('labdom-pac-eps-row').style.display = 'none'); + if ($('labdom-nuevo-badge')) $('labdom-nuevo-badge').classList.remove('d-none'); + + // Limpiar campos del paciente + if ($('labdom-pac-nombre')) { $('labdom-pac-nombre').value = ''; $('labdom-pac-nombre').focus(); } + if ($('labdom-pac-cedula')) $('labdom-pac-cedula').value = ''; + if ($('labdom-pac-tipodoc')) $('labdom-pac-tipodoc').value = 'CC'; + if ($('labdom-pac-fnac')) $('labdom-pac-fnac').value = ''; + if ($('labdom-pac-correo')) $('labdom-pac-correo').value = ''; + $('labdom-header-pac').textContent = 'Nuevo paciente'; + }, + /* Aplica una dirección histórica al formulario */ usarDireccion(idx) { const dir = _histDirs[idx]; @@ -7291,18 +7327,70 @@ const labDomicilio = (() => { /* ── Guardar domicilio ── */ async guardar() { - if (!_pacienteId) { - $('labdom-pac-busq').focus(); - $('labdom-pac-busq').classList.add('is-invalid'); - setTimeout(() => $('labdom-pac-busq').classList.remove('is-invalid'), 2000); + // Validar paciente + if (!_pacienteId && !_isNewPaciente) { + $('labdom-pac-busq')?.focus(); + $('labdom-pac-busq')?.classList.add('is-invalid'); + setTimeout(() => $('labdom-pac-busq')?.classList.remove('is-invalid'), 2000); return; } + if (_isNewPaciente) { + const nom = fv('labdom-pac-nombre'); + if (!nom) { + $('labdom-pac-nombre').classList.add('is-invalid'); + $('labdom-pac-nombre').focus(); + setTimeout(() => $('labdom-pac-nombre').classList.remove('is-invalid'), 2200); + return; + } + } if (!validar()) return; const btn = $('labdom-btn-guardar'); btn.disabled = true; btn.innerHTML = 'Guardando…'; + // ── Crear paciente nuevo si aplica ──────────────────────────── + if (_isNewPaciente) { + try { + const tipodoc = $('labdom-pac-tipodoc')?.value || 'CC'; + const cedula = fv('labdom-pac-cedula'); + const fnac = fv('labdom-pac-fnac'); + const correo = fv('labdom-pac-correo'); + const payload = { + nombre_completo: fv('labdom-pac-nombre'), + tipo_documento: tipodoc, + }; + if (cedula) payload.numero_documento = cedula; + if (fnac) payload.fecha_nacimiento = fnac; + if (correo) payload.email = correo; + + const r = await fetch('api/lab/save_paciente.php', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(payload), + }); + const d = await r.json(); + if (d.success && d.id) { + _pacienteId = d.id; + _isNewPaciente = false; + if ($('labdom-nuevo-badge')) $('labdom-nuevo-badge').classList.add('d-none'); + } else { + const errDiv = document.createElement('div'); + errDiv.className = 'alert alert-danger alert-dismissible mt-2 py-2'; + errDiv.innerHTML = `${escLab(d.error||'No se pudo registrar el paciente')} + `; + $('labdom-form-panel').prepend(errDiv); + btn.disabled = false; + btn.innerHTML = ' Agendar Domicilio'; + return; + } + } catch (err) { + btn.disabled = false; + btn.innerHTML = ' Agendar Domicilio'; + return; + } + } + const datos = { paciente_id: _pacienteId, fecha_programada: fv('labdom-fecha'),