up
This commit is contained in:
@@ -183,10 +183,9 @@ function siguienteNumeroPorPrioridad(int $sesionId, int $prioridadId): int
|
|||||||
'SELECT COALESCE(MAX(numero), 0) + 1 AS siguiente
|
'SELECT COALESCE(MAX(numero), 0) + 1 AS siguiente
|
||||||
FROM turnero_turnos
|
FROM turnero_turnos
|
||||||
WHERE sesion_id = ?
|
WHERE sesion_id = ?
|
||||||
AND prioridad_id = ?
|
|
||||||
FOR UPDATE'
|
FOR UPDATE'
|
||||||
);
|
);
|
||||||
$stmt->execute([$sesionId, $prioridadId]);
|
$stmt->execute([$sesionId]);
|
||||||
return (int) $stmt->fetchColumn();
|
return (int) $stmt->fetchColumn();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -105,6 +105,20 @@ try {
|
|||||||
// ── Enviar notificación WhatsApp con la plantilla configurada ──
|
// ── Enviar notificación WhatsApp con la plantilla configurada ──
|
||||||
if ($pacienteTel) {
|
if ($pacienteTel) {
|
||||||
try {
|
try {
|
||||||
|
$stmtCfg = $pdo->prepare(
|
||||||
|
"SELECT clave, valor FROM lab_config WHERE clave IN ('turnero_wa_template','turnero_wa_lang','turnero_wa_kiosko_enabled')"
|
||||||
|
);
|
||||||
|
$stmtCfg->execute();
|
||||||
|
$cfgWA = $stmtCfg->fetchAll(PDO::FETCH_KEY_PAIR);
|
||||||
|
$waKioskoEnabled = ($cfgWA['turnero_wa_kiosko_enabled'] ?? '0') === '1';
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
$waKioskoEnabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($pacienteTel && $waKioskoEnabled) {
|
||||||
|
try {
|
||||||
|
$cfgWA = [];
|
||||||
$stmtCfg = $pdo->prepare(
|
$stmtCfg = $pdo->prepare(
|
||||||
"SELECT clave, valor FROM lab_config WHERE clave IN ('turnero_wa_template','turnero_wa_lang')"
|
"SELECT clave, valor FROM lab_config WHERE clave IN ('turnero_wa_template','turnero_wa_lang')"
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -82,6 +82,8 @@ if ($accion === 'reabrir') {
|
|||||||
if ($accion === 'config_wa') {
|
if ($accion === 'config_wa') {
|
||||||
$template = trim($input['template'] ?? '');
|
$template = trim($input['template'] ?? '');
|
||||||
$lang = trim($input['lang'] ?? 'es_CO');
|
$lang = trim($input['lang'] ?? 'es_CO');
|
||||||
|
$waKiosko = (int)($input['wa_kiosko'] ?? 0);
|
||||||
|
$waConsent = (int)($input['wa_consent'] ?? 0);
|
||||||
|
|
||||||
if ($template === '') jsonError('El nombre de plantilla es requerido');
|
if ($template === '') jsonError('El nombre de plantilla es requerido');
|
||||||
if (!preg_match('/^[a-z0-9_]{1,64}$/i', $template)) {
|
if (!preg_match('/^[a-z0-9_]{1,64}$/i', $template)) {
|
||||||
@@ -98,6 +100,8 @@ if ($accion === 'config_wa') {
|
|||||||
);
|
);
|
||||||
$upsert->execute(['turnero_wa_template', $template]);
|
$upsert->execute(['turnero_wa_template', $template]);
|
||||||
$upsert->execute(['turnero_wa_lang', $lang]);
|
$upsert->execute(['turnero_wa_lang', $lang]);
|
||||||
|
$upsert->execute(['turnero_wa_kiosko_enabled', (string)$waKiosko]);
|
||||||
|
$upsert->execute(['turnero_wa_consent_enabled', (string)$waConsent]);
|
||||||
|
|
||||||
jsonOk([], 'Configuración WhatsApp guardada');
|
jsonOk([], 'Configuración WhatsApp guardada');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -713,7 +713,27 @@ $tab = $_GET['tab'] ?? 'lugares';
|
|||||||
|
|
||||||
<!-- Config WhatsApp turnero -->
|
<!-- Config WhatsApp turnero -->
|
||||||
<div>
|
<div>
|
||||||
<p class="section-title"><i class="fab fa-whatsapp me-1" style="color:#25d366"></i>Plantilla de consentimiento WhatsApp</p>
|
<p class="section-title"><i class="fab fa-whatsapp me-1" style="color:#25d366"></i>Notificaciones WhatsApp</p>
|
||||||
|
|
||||||
|
<div class="mb-3 p-3" style="background:#fffbeb;border:1px solid #fde68a;border-radius:10px">
|
||||||
|
<div class="form-check form-switch mb-2">
|
||||||
|
<input class="form-check-input" type="checkbox" id="chk-wa-kiosko"
|
||||||
|
<?= !empty($cfg['turnero_wa_kiosko_enabled']) ? 'checked' : '' ?>>
|
||||||
|
<label class="form-check-label" for="chk-wa-kiosko">
|
||||||
|
<strong>Enviar notificación de turno desde el kiosko</strong>
|
||||||
|
<small class="d-block text-muted">Cuando un paciente toma turno en el kiosko, se le envía un WhatsApp con la plantilla configurada.</small>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check form-switch">
|
||||||
|
<input class="form-check-input" type="checkbox" id="chk-wa-consent"
|
||||||
|
<?= !empty($cfg['turnero_wa_consent_enabled']) ? 'checked' : '' ?>>
|
||||||
|
<label class="form-check-label" for="chk-wa-consent">
|
||||||
|
<strong>Enviar consentimientos por WhatsApp</strong>
|
||||||
|
<small class="d-block text-muted">Permite enviar consentimientos informados desde recepción por WhatsApp.</small>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="row g-2">
|
<div class="row g-2">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<label class="form-label small fw-semibold">Nombre de plantilla Meta aprobada</label>
|
<label class="form-label small fw-semibold">Nombre de plantilla Meta aprobada</label>
|
||||||
@@ -1126,12 +1146,14 @@ async function borrarTvVideo() {
|
|||||||
async function guardarWhatsApp() {
|
async function guardarWhatsApp() {
|
||||||
const template = document.getElementById('wa-template')?.value.trim();
|
const template = document.getElementById('wa-template')?.value.trim();
|
||||||
const lang = document.getElementById('wa-lang')?.value.trim();
|
const lang = document.getElementById('wa-lang')?.value.trim();
|
||||||
|
const waKiosko = document.getElementById('chk-wa-kiosko')?.checked ? 1 : 0;
|
||||||
|
const waConsent = document.getElementById('chk-wa-consent')?.checked ? 1 : 0;
|
||||||
if (!template) { toast('El nombre de plantilla es requerido', 'error'); return; }
|
if (!template) { toast('El nombre de plantilla es requerido', 'error'); return; }
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const res = await fetch(API + 'sesion_turno.php', {
|
const res = await fetch(API + 'sesion_turno.php', {
|
||||||
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
||||||
body: JSON.stringify({ accion: 'config_wa', template, lang })
|
body: JSON.stringify({ accion: 'config_wa', template, lang, wa_kiosko: waKiosko, wa_consent: waConsent })
|
||||||
});
|
});
|
||||||
const json = await res.json();
|
const json = await res.json();
|
||||||
if (!json.ok) { toast(json.error || 'Error', 'error'); return; }
|
if (!json.ok) { toast(json.error || 'Error', 'error'); return; }
|
||||||
|
|||||||
Reference in New Issue
Block a user