Actualizar configuracion.html

This commit is contained in:
2026-03-11 09:23:57 +00:00
parent 3f5fb35aac
commit 5c83e8dcfa

View File

@@ -489,6 +489,114 @@
</div> </div>
</div> </div>
<div class="border-t border-gray-200 pt-10 mt-10">
<div class="mb-6">
<h2 class="text-2xl font-bold text-gray-800 flex items-center gap-2"><i data-lucide="bot" class="text-blue-600"></i> Robot Multiasistencia: Reglas Automáticas</h2>
<p class="text-gray-500 text-sm mt-1">Configura qué debe escribir el robot en la web de Multiasistencia cuando cambias un estado en IntegraRepara.</p>
</div>
<div class="space-y-6">
<div class="bg-white rounded-xl shadow-sm border border-slate-200 overflow-hidden">
<div class="p-4 bg-slate-50 border-b border-slate-200 flex justify-between items-center">
<div class="flex items-center gap-3">
<div class="bg-orange-100 text-orange-600 p-2 rounded-lg"><i data-lucide="user-check" class="w-5 h-5"></i></div>
<div>
<h3 class="font-bold text-slate-800">1. Al Asignar a un Operario</h3>
</div>
</div>
<div class="relative inline-block w-12 align-middle select-none">
<input type="checkbox" id="multi_cfg_assign_enabled" onchange="toggleMultiConfig('assign')" class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer"/>
<label for="multi_cfg_assign_enabled" class="toggle-label block overflow-hidden h-6 rounded-full bg-slate-200 cursor-pointer"></label>
</div>
</div>
<div id="multi_cfg_assign_body" class="p-5 space-y-4 hidden bg-white">
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div>
<label class="block text-xs font-bold text-slate-600 mb-1">Estado en Multiasistencia</label>
<select id="multi_cfg_assign_status" class="w-full border border-slate-300 rounded-lg p-2.5 text-xs outline-none focus:border-blue-500">
<option value="1">1 - Contacto (Llamada al cliente)</option>
<option value="2">2 - Visita (Cita concertada)</option>
<option value="37">37 - Pendiente Instrucciones</option>
</select>
</div>
<div>
<label class="block text-xs font-bold text-slate-600 mb-1">Días Siguiente Acción</label>
<input type="number" id="multi_cfg_assign_days" value="1" min="0" class="w-full border border-slate-300 rounded-lg p-2.5 text-sm outline-none focus:border-blue-500">
</div>
</div>
<div>
<label class="block text-xs font-bold text-slate-600 mb-1">Texto para "Observaciones"</label>
<textarea id="multi_cfg_assign_obs" rows="2" class="w-full border border-slate-300 rounded-lg p-3 text-sm outline-none focus:border-blue-500"></textarea>
</div>
</div>
</div>
<div class="bg-white rounded-xl shadow-sm border border-slate-200 overflow-hidden">
<div class="p-4 bg-slate-50 border-b border-slate-200 flex justify-between items-center">
<div class="flex items-center gap-3">
<div class="bg-emerald-100 text-emerald-600 p-2 rounded-lg"><i data-lucide="calendar-check" class="w-5 h-5"></i></div>
<div>
<h3 class="font-bold text-slate-800">2. Al Confirmar Cita</h3>
</div>
</div>
<div class="relative inline-block w-12 align-middle select-none">
<input type="checkbox" id="multi_cfg_date_enabled" onchange="toggleMultiConfig('date')" class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer"/>
<label for="multi_cfg_date_enabled" class="toggle-label block overflow-hidden h-6 rounded-full bg-slate-200 cursor-pointer"></label>
</div>
</div>
<div id="multi_cfg_date_body" class="p-5 space-y-4 hidden bg-white">
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div>
<label class="block text-xs font-bold text-slate-600 mb-1">Estado en Multiasistencia</label>
<select id="multi_cfg_date_status" class="w-full border border-slate-300 rounded-lg p-2.5 text-xs outline-none focus:border-blue-500">
<option value="2">2 - Visita (Cita concertada)</option>
<option value="1">1 - Contacto</option>
</select>
</div>
</div>
<div>
<label class="block text-xs font-bold text-slate-600 mb-1">Texto para "Observaciones"</label>
<textarea id="multi_cfg_date_obs" rows="2" class="w-full border border-slate-300 rounded-lg p-3 text-sm outline-none focus:border-blue-500"></textarea>
</div>
</div>
</div>
<div class="bg-white rounded-xl shadow-sm border border-slate-200 overflow-hidden">
<div class="p-4 bg-slate-50 border-b border-slate-200 flex justify-between items-center">
<div class="flex items-center gap-3">
<div class="bg-red-100 text-red-600 p-2 rounded-lg"><i data-lucide="phone-off" class="w-5 h-5"></i></div>
<div>
<h3 class="font-bold text-slate-800">3. Cliente No Localizado</h3>
</div>
</div>
<div class="relative inline-block w-12 align-middle select-none">
<input type="checkbox" id="multi_cfg_notfound_enabled" onchange="toggleMultiConfig('notfound')" class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer"/>
<label for="multi_cfg_notfound_enabled" class="toggle-label block overflow-hidden h-6 rounded-full bg-slate-200 cursor-pointer"></label>
</div>
</div>
<div id="multi_cfg_notfound_body" class="p-5 space-y-4 hidden bg-white">
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div>
<label class="block text-xs font-bold text-slate-600 mb-1">Estado en Multiasistencia</label>
<select id="multi_cfg_notfound_status" class="w-full border border-slate-300 rounded-lg p-2.5 text-xs outline-none focus:border-blue-500">
<option value="37">37 - Pendiente Instrucciones</option>
<option value="1">1 - Contacto</option>
</select>
</div>
<div>
<label class="block text-xs font-bold text-slate-600 mb-1">Días Siguiente Acción</label>
<input type="number" id="multi_cfg_notfound_days" value="1" min="0" class="w-full border border-slate-300 rounded-lg p-2.5 text-sm outline-none focus:border-blue-500">
</div>
</div>
<div>
<label class="block text-xs font-bold text-slate-600 mb-1">Texto para "Observaciones"</label>
<textarea id="multi_cfg_notfound_obs" rows="2" class="w-full border border-slate-300 rounded-lg p-3 text-sm outline-none focus:border-blue-500"></textarea>
</div>
</div>
</div>
</div>
</div>
<div class="border-t border-gray-200 pt-10"> <div class="border-t border-gray-200 pt-10">
<div class="mb-6 flex justify-between items-end"> <div class="mb-6 flex justify-between items-end">
<div> <div>
@@ -1181,7 +1289,7 @@
// ========================================== // ==========================================
// LÓGICA REGLAS ROBOT HOMESERVE // LÓGICA REGLAS ROBOTS (HOMESERVE Y MULTI)
// ========================================== // ==========================================
function toggleHsConfig(type) { function toggleHsConfig(type) {
const isChecked = document.getElementById(`hs_cfg_${type}_enabled`).checked; const isChecked = document.getElementById(`hs_cfg_${type}_enabled`).checked;
@@ -1190,6 +1298,13 @@
else body.classList.add('hidden'); else body.classList.add('hidden');
} }
function toggleMultiConfig(type) {
const isChecked = document.getElementById(`multi_cfg_${type}_enabled`).checked;
const body = document.getElementById(`multi_cfg_${type}_body`);
if (isChecked) body.classList.remove('hidden');
else body.classList.add('hidden');
}
async function loadRobotConfig() { async function loadRobotConfig() {
try { try {
const res = await fetch(`${API_URL}/whatsapp/settings`, { const res = await fetch(`${API_URL}/whatsapp/settings`, {
@@ -1197,9 +1312,9 @@
}); });
const data = await res.json(); const data = await res.json();
const s = data.settings || {}; const s = data.settings || {};
const hsSettings = s.robot_homeserve || {};
// Cargar Asignación // Cargar HomeServe
const hsSettings = s.robot_homeserve || {};
if (hsSettings.assign) { if (hsSettings.assign) {
document.getElementById('hs_cfg_assign_enabled').checked = hsSettings.assign.enabled; document.getElementById('hs_cfg_assign_enabled').checked = hsSettings.assign.enabled;
document.getElementById('hs_cfg_assign_status').value = hsSettings.assign.status || "307"; document.getElementById('hs_cfg_assign_status').value = hsSettings.assign.status || "307";
@@ -1208,8 +1323,6 @@
document.getElementById('hs_cfg_assign_obs').value = hsSettings.assign.obs || ""; document.getElementById('hs_cfg_assign_obs').value = hsSettings.assign.obs || "";
if (hsSettings.assign.enabled) toggleHsConfig('assign'); if (hsSettings.assign.enabled) toggleHsConfig('assign');
} }
// Cargar Cita
if (hsSettings.date) { if (hsSettings.date) {
document.getElementById('hs_cfg_date_enabled').checked = hsSettings.date.enabled; document.getElementById('hs_cfg_date_enabled').checked = hsSettings.date.enabled;
document.getElementById('hs_cfg_date_status').value = hsSettings.date.status || "307"; document.getElementById('hs_cfg_date_status').value = hsSettings.date.status || "307";
@@ -1217,8 +1330,6 @@
document.getElementById('hs_cfg_date_obs').value = hsSettings.date.obs || ""; document.getElementById('hs_cfg_date_obs').value = hsSettings.date.obs || "";
if (hsSettings.date.enabled) toggleHsConfig('date'); if (hsSettings.date.enabled) toggleHsConfig('date');
} }
// Cargar No Localizado
if (hsSettings.notfound) { if (hsSettings.notfound) {
document.getElementById('hs_cfg_notfound_enabled').checked = hsSettings.notfound.enabled; document.getElementById('hs_cfg_notfound_enabled').checked = hsSettings.notfound.enabled;
document.getElementById('hs_cfg_notfound_status').value = hsSettings.notfound.status || "348"; document.getElementById('hs_cfg_notfound_status').value = hsSettings.notfound.status || "348";
@@ -1227,6 +1338,29 @@
document.getElementById('hs_cfg_notfound_obs').value = hsSettings.notfound.obs || ""; document.getElementById('hs_cfg_notfound_obs').value = hsSettings.notfound.obs || "";
if (hsSettings.notfound.enabled) toggleHsConfig('notfound'); if (hsSettings.notfound.enabled) toggleHsConfig('notfound');
} }
// Cargar Multiasistencia
const multiSettings = s.robot_multi || {};
if (multiSettings.assign) {
document.getElementById('multi_cfg_assign_enabled').checked = multiSettings.assign.enabled;
document.getElementById('multi_cfg_assign_status').value = multiSettings.assign.status || "1";
document.getElementById('multi_cfg_assign_days').value = multiSettings.assign.days_next ?? 1;
document.getElementById('multi_cfg_assign_obs').value = multiSettings.assign.obs || "";
if (multiSettings.assign.enabled) toggleMultiConfig('assign');
}
if (multiSettings.date) {
document.getElementById('multi_cfg_date_enabled').checked = multiSettings.date.enabled;
document.getElementById('multi_cfg_date_status').value = multiSettings.date.status || "2";
document.getElementById('multi_cfg_date_obs').value = multiSettings.date.obs || "";
if (multiSettings.date.enabled) toggleMultiConfig('date');
}
if (multiSettings.notfound) {
document.getElementById('multi_cfg_notfound_enabled').checked = multiSettings.notfound.enabled;
document.getElementById('multi_cfg_notfound_status').value = multiSettings.notfound.status || "37";
document.getElementById('multi_cfg_notfound_days').value = multiSettings.notfound.days_next ?? 1;
document.getElementById('multi_cfg_notfound_obs').value = multiSettings.notfound.obs || "";
if (multiSettings.notfound.enabled) toggleMultiConfig('notfound');
}
} catch(e) { console.error("Error cargando ajustes del robot", e); } } catch(e) { console.error("Error cargando ajustes del robot", e); }
} }
@@ -1258,6 +1392,25 @@
check_inform: document.getElementById('hs_cfg_notfound_inform').checked, check_inform: document.getElementById('hs_cfg_notfound_inform').checked,
obs: document.getElementById('hs_cfg_notfound_obs').value obs: document.getElementById('hs_cfg_notfound_obs').value
} }
},
robot_multi: {
assign: {
enabled: document.getElementById('multi_cfg_assign_enabled').checked,
status: document.getElementById('multi_cfg_assign_status').value,
days_next: parseInt(document.getElementById('multi_cfg_assign_days').value) || 0,
obs: document.getElementById('multi_cfg_assign_obs').value
},
date: {
enabled: document.getElementById('multi_cfg_date_enabled').checked,
status: document.getElementById('multi_cfg_date_status').value,
obs: document.getElementById('multi_cfg_date_obs').value
},
notfound: {
enabled: document.getElementById('multi_cfg_notfound_enabled').checked,
status: document.getElementById('multi_cfg_notfound_status').value,
days_next: parseInt(document.getElementById('multi_cfg_notfound_days').value) || 0,
obs: document.getElementById('multi_cfg_notfound_obs').value
}
} }
}; };
@@ -1269,7 +1422,7 @@
}); });
if (res.ok) { if (res.ok) {
showToast("✅ Reglas del Robot guardadas"); showToast("✅ Reglas de los Robots guardadas");
} else { } else {
showToast("❌ Error al guardar", true); showToast("❌ Error al guardar", true);
} }