feat(pacientes): verificar WhatsApp al ingresar teléfono, vincular user_id al guardar
fix(recepcion): mostrar nombre_completo en resultados de búsqueda de paciente Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
018d445846
commit
af584bcc26
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
/**
|
||||
* GET /api/lab/check_whatsapp.php?phone=573001234567
|
||||
* Verifica si un número de teléfono está registrado en WhatsApp (tabla users).
|
||||
*/
|
||||
require_once __DIR__ . '/_helpers.php';
|
||||
requireAuth();
|
||||
|
||||
$phone = trim($_GET['phone'] ?? '');
|
||||
if (!$phone) { jsonError('phone requerido', 400); }
|
||||
|
||||
$pdo = db();
|
||||
$stmt = $pdo->prepare("SELECT id, name, phone_number FROM users WHERE phone_number = ? LIMIT 1");
|
||||
$stmt->execute([$phone]);
|
||||
$user = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
jsonOk([
|
||||
'found' => (bool)$user,
|
||||
'user_id' => $user ? (int)$user['id'] : null,
|
||||
'phone_number' => $user ? $user['phone_number'] : null,
|
||||
]);
|
||||
@@ -51,6 +51,15 @@ try {
|
||||
}
|
||||
// ────────────────────────────────────────────────────────────────────────
|
||||
|
||||
// Auto-vincular user_id por teléfono si no viene explícito
|
||||
if (empty($datos['user_id']) && !empty($telVal)) {
|
||||
$pdo = db();
|
||||
$stmt = $pdo->prepare("SELECT id FROM users WHERE phone_number = ? LIMIT 1");
|
||||
$stmt->execute([$telVal]);
|
||||
$wid = $stmt->fetchColumn();
|
||||
if ($wid) $datos['user_id'] = (int)$wid;
|
||||
}
|
||||
|
||||
$pac = new Paciente();
|
||||
$admin = adminId();
|
||||
|
||||
|
||||
+25
-1
@@ -283,8 +283,11 @@ require_once __DIR__ . '/shared/components/sidebar.php';
|
||||
<option value="1">🇺🇸 1</option>
|
||||
</select>
|
||||
<input type="tel" class="form-control" name="telefono" id="pac-tel"
|
||||
placeholder="3001234567" tabindex="5" style="border-radius:0 .45rem .45rem 0">
|
||||
placeholder="3001234567" tabindex="5" style="border-radius:0 .45rem .45rem 0"
|
||||
onblur="verificarWhatsapp()">
|
||||
</div>
|
||||
<div id="wa-badge" class="mt-1" style="font-size:.78rem;min-height:18px"></div>
|
||||
<input type="hidden" id="pac-user-id" name="user_id">
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<div class="form-floating">
|
||||
@@ -517,6 +520,27 @@ async function editarPaciente(id) {
|
||||
if (d.data?.[0]) abrirFormulario(d.data[0]);
|
||||
}
|
||||
|
||||
async function verificarWhatsapp() {
|
||||
const prefijo = document.getElementById('pac-tel-prefijo').value || '57';
|
||||
let tel = (document.getElementById('pac-tel').value || '').replace(/[^0-9]/g, '');
|
||||
if (tel.length === 10) tel = prefijo + tel;
|
||||
const badge = document.getElementById('wa-badge');
|
||||
const hiddenUid = document.getElementById('pac-user-id');
|
||||
if (!tel || tel.length < 10) { badge.innerHTML = ''; hiddenUid.value = ''; return; }
|
||||
badge.innerHTML = '<span class="text-muted"><i class="fas fa-spinner fa-spin me-1"></i>Verificando WhatsApp…</span>';
|
||||
try {
|
||||
const r = await fetch(`api/lab/check_whatsapp.php?phone=${encodeURIComponent(tel)}`);
|
||||
const d = await r.json();
|
||||
if (d.ok && d.data.found) {
|
||||
badge.innerHTML = '<span class="text-success"><i class="fab fa-whatsapp me-1"></i>Registrado en WhatsApp</span>';
|
||||
hiddenUid.value = d.data.user_id;
|
||||
} else {
|
||||
badge.innerHTML = '<span class="text-muted"><i class="fas fa-times-circle me-1"></i>Sin WhatsApp registrado</span>';
|
||||
hiddenUid.value = '';
|
||||
}
|
||||
} catch(_) { badge.innerHTML = ''; hiddenUid.value = ''; }
|
||||
}
|
||||
|
||||
async function guardarPaciente() {
|
||||
const form = document.getElementById('form-paciente');
|
||||
if (!form.checkValidity()) { form.reportValidity(); return; }
|
||||
|
||||
@@ -908,7 +908,7 @@ async function buscarPaciente() {
|
||||
}
|
||||
lista.innerHTML = datos.map(p => `
|
||||
<div class="pac-resultado" onclick="seleccionarPaciente(${JSON.stringify(p).replace(/"/g,'"')})">
|
||||
<div class="pac-nombre">${escHtml((p.full_name||p.nombre||'') + ' ' + (p.apellido||''))}</div>
|
||||
<div class="pac-nombre">${escHtml(p.nombre_completo||p.full_name||p.nombre||'')}</div>
|
||||
<div class="pac-doc">${escHtml(p.tipo_documento||'')} ${escHtml(p.documento||p.numero_documento||'')}
|
||||
${p.telefono||p.celular ? '· ' + escHtml(p.telefono||p.celular) : ''}</div>
|
||||
</div>`).join('');
|
||||
|
||||
Reference in New Issue
Block a user