function awp_enqueue_cuadros_assets() {
wp_enqueue_style('awp-cuadros-css', AWP_PLUGIN_URL . 'assets/css/shortcode-cuadros.css', [], '1.0.0');
wp_enqueue_script('awp-cuadros-js', AWP_PLUGIN_URL . 'assets/js/shortcode-cuadros.js', [], '1.0.0', true);
wp_localize_script('awp-cuadros-js', 'awpCuadros', [
'ajaxurl' => admin_url('admin-ajax.php'),
'nonceSumar' => wp_create_nonce('awp_sumar_envio'),
'nonceEnviar' => wp_create_nonce('awp_enviar_mensajes'),
]);
}
function awp_render_clientes_sumar_shortcode($atts = []) {
awp_enqueue_shortcode_assets();
awp_enqueue_cuadros_assets();
global $wpdb;
function awp_render_clientes_programados_shortcode($atts = []) {
awp_enqueue_shortcode_assets();
awp_enqueue_cuadros_assets();
global $wpdb;
// AJAX handlers para programar y enviar mensajes desde los shortcodes
add_action('wp_ajax_awp_programar_envio', 'awp_ajax_programar_envio');
add_action('wp_ajax_awp_enviar_mensajes', 'awp_ajax_enviar_mensajes');
function awp_ajax_programar_envio() {
if (!current_user_can('manage_options')) {
wp_send_json_error(['msg' => 'No autorizado']);
}
check_ajax_referer('awp_sumar_envio');
$ids = isset($_POST['ids']) && is_array($_POST['ids']) ? array_map('intval', $_POST['ids']) : [];
if (empty($ids)) {
wp_send_json_error(['msg' => 'No hay clientes seleccionados']);
}
global $wpdb;
$enviosTable = awp_table('envios');
$promocionesTable = awp_table('promociones');
$promo = $wpdb->get_row("SELECT * FROM {$promocionesTable} WHERE activa = 1 AND (fecha_inicio IS NULL OR fecha_inicio <= CURDATE()) AND (fecha_fin IS NULL OR fecha_fin >= CURDATE()) ORDER BY creada DESC LIMIT 1", ARRAY_A);
if (!$promo) {
wp_send_json_error(['msg' => 'No hay promoción activa']);
}
$insertados = 0;
foreach ($ids as $cid) {
$wpdb->insert($enviosTable, [
'cliente_id' => $cid,
'promocion_id' => $promo['id'],
'estado' => 'pendiente',
'fecha_envio' => current_time('mysql'),
]);
$insertados++;
}
wp_send_json_success(['msg' => "Programados: $insertados clientes."]);
}
function awp_ajax_enviar_mensajes() {
if (!current_user_can('manage_options')) {
wp_send_json_error(['msg' => 'No autorizado']);
}
check_ajax_referer('awp_enviar_mensajes');
$ids = isset($_POST['ids']) && is_array($_POST['ids']) ? array_map('intval', $_POST['ids']) : [];
if (empty($ids)) {
wp_send_json_error(['msg' => 'No hay clientes seleccionados']);
}
global $wpdb;
$enviosTable = awp_table('envios');
$clientesTable = awp_table('clientes');
$promocionesTable = awp_table('promociones');
$promo = $wpdb->get_row("SELECT * FROM {$promocionesTable} WHERE activa = 1 AND (fecha_inicio IS NULL OR fecha_inicio <= CURDATE()) AND (fecha_fin IS NULL OR fecha_fin >= CURDATE()) ORDER BY creada DESC LIMIT 1", ARRAY_A);
if (!$promo) {
wp_send_json_error(['msg' => 'No hay promoción activa']);
}
$enviados = 0;
foreach ($ids as $cid) {
// Buscar el envío pendiente
$envio = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$enviosTable} WHERE cliente_id = %d AND estado = 'pendiente' LIMIT 1", $cid), ARRAY_A);
if (!$envio) continue;
$cliente = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$clientesTable} WHERE id = %d", $cid), ARRAY_A);
if (!$cliente) continue;
$mensaje = str_replace(
['{nombre}', '{promocion}', '{fecha}'],
[(string)$cliente['nombre'], (string)$promo['titulo'], wp_date('d/m/Y')],
(string)awp_get_settings()['plantilla_mensaje']
);
$resultado = awp_send_whatsapp($cliente['telefono'], $mensaje);
$wpdb->update($enviosTable, [
'estado' => $resultado['estado'],
'mensaje' => $mensaje,
'error' => $resultado['error'],
'raw_respuesta' => $resultado['raw'],
'fecha_envio' => current_time('mysql'),
], ['id' => $envio['id']]);
if (!empty($resultado['ok'])) {
$wpdb->update($clientesTable, ['ultimo_contacto' => current_time('mysql')], ['id' => $cid]);
awp_increment_messages_today();
$enviados++;
}
}
wp_send_json_success(['msg' => "Enviados: $enviados mensajes."]);
}
Pausa Laboral Activa - Ahora Wellness
Ir al contenido