87 lines
3.3 KiB
PHP
87 lines
3.3 KiB
PHP
<?php
|
|
/**
|
|
* POST /api/lab/send_formulario.php
|
|
* Crea un envío (instancia) con datos pre-llenados y devuelve el link para WhatsApp.
|
|
* Accesible por admin Y enfermero.
|
|
*
|
|
* Body JSON:
|
|
* { formulario_id, paciente_id?, domicilio_id?, datos_prefilled:{...}, enviado_via? }
|
|
*
|
|
* Returns:
|
|
* { id, token, url, whatsapp_url, mensaje_wa }
|
|
*/
|
|
require_once __DIR__ . '/_helpers.php';
|
|
requireMethod('POST');
|
|
|
|
try {
|
|
$datos = inputJson();
|
|
|
|
if (empty($datos['formulario_id'])) jsonError('formulario_id es obligatorio');
|
|
|
|
// Verificar que la plantilla existe
|
|
$form = new Formulario();
|
|
$plantilla = $form->obtener((int)$datos['formulario_id']);
|
|
if (!$plantilla) jsonError('Formulario no encontrado', 404);
|
|
|
|
// Pre-llenado: si viene paciente_id, auto-enriquecer con datos del paciente
|
|
$prefilled = $datos['datos_prefilled'] ?? [];
|
|
if (!empty($datos['paciente_id'])) {
|
|
$pac = (new Paciente())->obtener((int)$datos['paciente_id']);
|
|
if ($pac) {
|
|
// Mapeo automático de campos estándar
|
|
$prefilled['__paciente'] = [
|
|
'id' => $pac['id'],
|
|
'nombre_completo' => $pac['nombre_completo'],
|
|
'numero_documento'=> $pac['numero_documento'],
|
|
'tipo_documento' => $pac['tipo_documento'],
|
|
'telefono' => $pac['telefono'],
|
|
'email' => $pac['email'] ?? '',
|
|
'fecha_nacimiento'=> $pac['fecha_nacimiento'] ?? '',
|
|
'eps' => $pac['eps'] ?? '',
|
|
'direccion' => $pac['direccion'] ?? '',
|
|
'ciudad' => $pac['ciudad'] ?? '',
|
|
];
|
|
}
|
|
}
|
|
|
|
$datos['datos_prefilled'] = json_encode($prefilled, JSON_UNESCAPED_UNICODE);
|
|
$datos['enviado_via'] = $datos['enviado_via'] ?? 'whatsapp';
|
|
|
|
$envioId = $form->crearEnvio($datos, adminId());
|
|
|
|
// Construir URL pública
|
|
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
|
|
$host = $_SERVER['HTTP_HOST'] ?? 'localhost';
|
|
$base = $protocol . '://' . $host;
|
|
// Subir un nivel desde /api/lab/
|
|
$basePath = rtrim(dirname(dirname(dirname($_SERVER['SCRIPT_NAME']))), '/');
|
|
|
|
// Obtener el token del envío recién creado
|
|
$db = Database::getInstance();
|
|
$envio = $db->fetch('SELECT token FROM lab_form_envios WHERE id = ?', [$envioId]);
|
|
$token = $envio['token'];
|
|
$url = $base . $basePath . '/form_cliente.php?t=' . $token;
|
|
|
|
// Mensaje de WhatsApp preformateado
|
|
$nomPac = $prefilled['__paciente']['nombre_completo'] ?? 'Estimado paciente';
|
|
$nomForm = $plantilla['nombre'];
|
|
$mensajeWa = "Hola $nomPac, le enviamos el formulario *\"$nomForm\"* para que lo complete y firme digitalmente.\n\n"
|
|
. "👉 Accede aquí:\n$url\n\n"
|
|
. "Si tiene dudas contáctenos.";
|
|
|
|
$telPac = $prefilled['__paciente']['telefono'] ?? '';
|
|
$waUrl = 'https://wa.me/' . preg_replace('/\D/', '', $telPac)
|
|
. '?text=' . rawurlencode($mensajeWa);
|
|
|
|
jsonOk([
|
|
'id' => $envioId,
|
|
'token' => $token,
|
|
'url' => $url,
|
|
'whatsapp_url'=> $waUrl,
|
|
'mensaje_wa' => $mensajeWa,
|
|
], 'Envío creado correctamente');
|
|
|
|
} catch (Exception $e) {
|
|
jsonError($e->getMessage(), 500);
|
|
}
|