create_turno: enviar turno + consentimiento en un solo WA desde el kiosko
- Al crear turno busca el formulario configurado en el desk de recepción - Crea token de consentimiento y lo marca como 'enviado' - Envía plantilla consentimiento_turno con nombre real, nombre formulario y link - Fallback texto plano incluye el link si está disponible - Tipo F (solo muestra) sigue usando plantilla sin consentimiento Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
9d57bbac5c
commit
6fec24f850
@@ -124,12 +124,11 @@ try {
|
||||
);
|
||||
$stmtCfg->execute();
|
||||
$cfgWA = $stmtCfg->fetchAll(PDO::FETCH_KEY_PAIR);
|
||||
// Tipo F = solo muestra pendiente, sin consentimiento → plantilla diferente
|
||||
$esSoloMuestra = ($prioCodigo === 'F');
|
||||
$waTemplate = $esSoloMuestra
|
||||
? ($cfgWA['turnero_wa_template_muestra'] ?? 'turno_muestra_pendiente')
|
||||
: ($cfgWA['turnero_wa_template'] ?? 'consentimiento_turno');
|
||||
$waLang = $cfgWA['turnero_wa_lang'] ?? 'es_CO';
|
||||
$waLang = $cfgWA['turnero_wa_lang'] ?? 'es_CO';
|
||||
} catch (\Throwable $e) {
|
||||
$waTemplate = 'consentimiento_turno';
|
||||
$waLang = 'es_CO';
|
||||
@@ -139,25 +138,65 @@ try {
|
||||
if (!str_starts_with($cel, '+')) {
|
||||
$cel = '+57' . ltrim($cel, '0');
|
||||
}
|
||||
|
||||
// ── Buscar consentimiento configurado en recepción y crear token ──
|
||||
$enlaceConsentimiento = null;
|
||||
$formularioNomWA = '';
|
||||
if (!$esSoloMuestra) {
|
||||
try {
|
||||
$stmtForms = $pdo->prepare(
|
||||
"SELECT tlc.formulario_id, f.nombre AS formulario_nombre
|
||||
FROM turnero_lugar_consentimientos tlc
|
||||
JOIN lab_formularios f ON f.id = tlc.formulario_id AND f.is_active = 1
|
||||
JOIN turnero_lugares l ON l.id = tlc.lugar_id AND l.tipo = 'recepcion' AND l.activo = 1
|
||||
ORDER BY tlc.formulario_id ASC
|
||||
LIMIT 1"
|
||||
);
|
||||
$stmtForms->execute();
|
||||
$formRow = $stmtForms->fetch(\PDO::FETCH_ASSOC);
|
||||
|
||||
if ($formRow) {
|
||||
$token = sprintf(
|
||||
'%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
|
||||
mt_rand(0,0xffff), mt_rand(0,0xffff),
|
||||
mt_rand(0,0xffff),
|
||||
mt_rand(0,0x0fff)|0x4000,
|
||||
mt_rand(0,0x3fff)|0x8000,
|
||||
mt_rand(0,0xffff), mt_rand(0,0xffff), mt_rand(0,0xffff)
|
||||
);
|
||||
$pdo->prepare(
|
||||
"INSERT IGNORE INTO turnero_consentimientos
|
||||
(turno_id, formulario_id, token, estado, enviado_at)
|
||||
VALUES (?, ?, ?, 'enviado', NOW())"
|
||||
)->execute([$turnoId, (int)$formRow['formulario_id'], $token]);
|
||||
|
||||
$baseUrl = defined('BASE_URL') ? rtrim(BASE_URL, '/') : '';
|
||||
$enlaceConsentimiento = $baseUrl . '/ver_formulario_enviado.php?token=' . urlencode($token);
|
||||
$formularioNomWA = $formRow['formulario_nombre'];
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
// Sin consentimiento disponible, continuar sin link
|
||||
}
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/../../../services/WhatsAppService.php';
|
||||
$nombreWA = $pacienteNombre ?: 'Paciente';
|
||||
try {
|
||||
$wa = new WhatsAppService();
|
||||
// Enviar solo el código, sin nombre/apellido
|
||||
$wa->sendTemplateMessage(
|
||||
$cel,
|
||||
$waTemplate,
|
||||
$waLang,
|
||||
[
|
||||
'Paciente',
|
||||
$codigo,
|
||||
'',
|
||||
],
|
||||
[]
|
||||
[$nombreWA, $formularioNomWA ?: $codigo, $codigo],
|
||||
$enlaceConsentimiento ? [$enlaceConsentimiento] : []
|
||||
);
|
||||
} catch (\Throwable $eTmpl) {
|
||||
try {
|
||||
$mensajeTexto = "Su turno *{$codigo}* ha sido registrado. Preséntese al laboratorio.";
|
||||
$wa->sendTextMessage($cel, $mensajeTexto);
|
||||
$msg = "Hola {$nombreWA}, su turno *{$codigo}* ha sido registrado.";
|
||||
if ($enlaceConsentimiento) {
|
||||
$msg .= "\n\nPor favor firme su consentimiento informado antes de ser atendido:\n{$enlaceConsentimiento}";
|
||||
}
|
||||
$wa->sendTextMessage($cel, $msg);
|
||||
} catch (\Throwable $eTxt) {
|
||||
// Silenciar
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user