funcional

This commit is contained in:
lizandrogd
2026-01-12 23:14:17 -05:00
parent 6d55e0bced
commit b41b1dd164
3 changed files with 406 additions and 3 deletions
+244 -3
View File
@@ -1784,11 +1784,171 @@ async function sendTemplateMessage(userId, template, parameters) {
}
// Función para ver detalles de conversación
window.viewConversationDetails = function (userId) {
console.log('Viendo detalles de conversación del usuario:', userId);
openChatWindow(userId);
window.viewConversationDetails = async function (userId) {
console.log('Mostrando detalles de conversación para usuario:', userId);
try {
// Obtener datos del usuario
const usersResponse = await window.whatsappManager.apiCall('get_users.php');
let user = null;
if (usersResponse && usersResponse.success && Array.isArray(usersResponse.data)) {
user = usersResponse.data.find(u => u.id == userId);
}
if (!user) {
window.whatsappManager.showError('Usuario no encontrado');
return;
}
// Obtener estadísticas de la conversación (simuladas por ahora)
const stats = {
total_messages: Math.floor(Math.random() * 50) + 1,
messages_today: Math.floor(Math.random() * 10),
last_activity: user.updated_at || user.created_at,
first_contact: user.created_at,
status: user.status || 'active'
};
// Mostrar modal con detalles
showConversationDetailsModal(user, stats);
} catch (error) {
console.error('Error obteniendo detalles de conversación:', error);
window.whatsappManager.showError('Error obteniendo detalles: ' + error.message);
}
};
// Función para mostrar modal de detalles de conversación
function showConversationDetailsModal(user, stats) {
console.log('Mostrando modal de detalles para:', user);
const userName = escapeHtml(user.name || 'Sin nombre');
const userPhone = escapeHtml(user.phone_number || '');
const userStatus = user.status || 'unknown';
const currentMenu = user.current_menu || 'Sin menú';
// Formatear fechas
const firstContact = user.created_at ? new Date(user.created_at).toLocaleString('es') : 'N/A';
const lastActivity = stats.last_activity ? new Date(stats.last_activity).toLocaleString('es') : 'N/A';
const statusBadgeClass = userStatus === 'active' ? 'success' : userStatus === 'inactive' ? 'secondary' : 'warning';
const modalHtml = `
<div class="modal fade" id="conversationDetailsModal" tabindex="-1" aria-labelledby="conversationDetailsModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header bg-info text-white">
<h5 class="modal-title" id="conversationDetailsModalLabel">
<i class="fas fa-info-circle"></i> Detalles de Conversación
</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-6">
<h6 class="text-muted mb-3"><i class="fas fa-user"></i> Información del Usuario</h6>
<div class="mb-3">
<strong>ID:</strong> ${user.id}
</div>
<div class="mb-3">
<strong>Nombre:</strong> ${userName}
</div>
<div class="mb-3">
<strong>Teléfono:</strong> ${userPhone}
</div>
<div class="mb-3">
<strong>Estado:</strong>
<span class="badge bg-${statusBadgeClass}">${userStatus.toUpperCase()}</span>
</div>
<div class="mb-3">
<strong>Menú Actual:</strong> ${currentMenu}
</div>
<div class="mb-3">
<strong>Primer Contacto:</strong><br>
<small class="text-muted">${firstContact}</small>
</div>
</div>
<div class="col-md-6">
<h6 class="text-muted mb-3"><i class="fas fa-chart-line"></i> Estadísticas de Conversación</h6>
<div class="mb-3">
<strong>Total de Mensajes:</strong>
<span class="badge bg-primary">${stats.total_messages || 0}</span>
</div>
<div class="mb-3">
<strong>Mensajes Hoy:</strong>
<span class="badge bg-success">${stats.messages_today || 0}</span>
</div>
<div class="mb-3">
<strong>Última Actividad:</strong><br>
<small class="text-muted">${lastActivity}</small>
</div>
<div class="mb-3">
<strong>Tiempo desde último mensaje:</strong><br>
<small class="text-muted">${calculateTimeAgo(stats.last_activity)}</small>
</div>
</div>
</div>
<hr>
<div class="row">
<div class="col-12">
<h6 class="text-muted mb-3"><i class="fas fa-cogs"></i> Acciones Rápidas</h6>
<div class="d-flex gap-2 flex-wrap">
<button class="btn btn-success btn-sm" onclick="openChatWindow(${user.id}); bootstrap.Modal.getInstance(document.getElementById('conversationDetailsModal')).hide();">
<i class="fas fa-comments"></i> Abrir Chat
</button>
<button class="btn btn-warning btn-sm" onclick="editUser(${user.id})">
<i class="fas fa-edit"></i> Editar Usuario
</button>
<button class="btn btn-info btn-sm" onclick="viewUserHistory(${user.id})">
<i class="fas fa-history"></i> Ver Historial
</button>
<button class="btn btn-danger btn-sm" onclick="confirmDeleteUser(${user.id})">
<i class="fas fa-trash"></i> Eliminar
</button>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
</div>
</div>
</div>
</div>
`;
// Remover modal anterior si existe
const existingModal = document.getElementById('conversationDetailsModal');
if (existingModal) {
existingModal.remove();
}
document.body.insertAdjacentHTML('beforeend', modalHtml);
// Mostrar modal
const modal = new bootstrap.Modal(document.getElementById('conversationDetailsModal'));
modal.show();
}
// Función auxiliar para calcular tiempo transcurrido
function calculateTimeAgo(datetime) {
if (!datetime) return 'N/A';
const now = new Date();
const date = new Date(datetime);
const diffInSeconds = Math.floor((now - date) / 1000);
if (diffInSeconds < 60) return 'Hace menos de 1 minuto';
if (diffInSeconds < 3600) return `Hace ${Math.floor(diffInSeconds / 60)} minutos`;
if (diffInSeconds < 86400) return `Hace ${Math.floor(diffInSeconds / 3600)} horas`;
if (diffInSeconds < 2592000) return `Hace ${Math.floor(diffInSeconds / 86400)} días`;
return date.toLocaleDateString('es');
}
// Función para mostrar alertas
function showAlert(message, type = 'info') {
const alertHtml = `
@@ -1820,6 +1980,87 @@ window.editUser = function (userId) {
alert(`Editar usuario ${userId} - Función en desarrollo`);
};
// Función para ver historial de usuario
window.viewUserHistory = function (userId) {
console.log('Viendo historial del usuario:', userId);
// Por ahora mostrar un modal simple
const modalHtml = `
<div class="modal fade" id="userHistoryModal" tabindex="-1">
<div class="modal-dialog modal-xl">
<div class="modal-content">
<div class="modal-header bg-primary text-white">
<h5 class="modal-title">
<i class="fas fa-history"></i> Historial del Usuario
</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<div class="text-center py-4">
<i class="fas fa-history fa-3x text-muted mb-3"></i>
<h5>Historial de Usuario</h5>
<p class="text-muted">Esta funcionalidad está en desarrollo.<br>
Aquí se mostrará el historial completo de mensajes y actividades del usuario.</p>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
</div>
</div>
</div>
</div>
`;
// Remover modal anterior
const existing = document.getElementById('userHistoryModal');
if (existing) existing.remove();
document.body.insertAdjacentHTML('beforeend', modalHtml);
const modal = new bootstrap.Modal(document.getElementById('userHistoryModal'));
modal.show();
};
// Función para confirmar eliminación de usuario
window.confirmDeleteUser = function (userId) {
if (confirm('¿Estás seguro de que deseas eliminar este usuario?\n\nEsta acción no se puede deshacer.')) {
deleteUser(userId);
}
};
// Función para eliminar usuario
window.deleteUser = async function (userId) {
console.log('Eliminando usuario:', userId);
try {
const response = await window.whatsappManager.apiCall('delete_user.php', {
method: 'POST',
body: { user_id: userId }
});
if (response && response.success) {
window.whatsappManager.showSuccess('Usuario eliminado correctamente');
// Cerrar modal si está abierto
const modal = document.getElementById('conversationDetailsModal');
if (modal) {
const bsModal = bootstrap.Modal.getInstance(modal);
if (bsModal) bsModal.hide();
}
// Recargar datos
if (window.whatsappManager.currentTab === 'users') {
window.whatsappManager.loadUsers();
} else if (window.whatsappManager.currentTab === 'conversations') {
window.whatsappManager.loadConversations();
}
} else {
window.whatsappManager.showError('Error eliminando usuario: ' + (response?.error || 'Error desconocido'));
}
} catch (error) {
window.whatsappManager.showError('Error eliminando usuario: ' + error.message);
}
};
// Función para eliminar usuario
window.deleteUser = function (userId) {
console.log('Eliminando usuario:', userId);