diff --git a/recaudo_esperado.php b/recaudo_esperado.php index 3da368d..44cfe22 100644 --- a/recaudo_esperado.php +++ b/recaudo_esperado.php @@ -1,10 +1,14 @@

Acceso denegado

No tienes permiso para ver esta página.

"; + include 'layout_footer.php'; exit; } @@ -14,17 +18,13 @@ $pdo = db(); $fecha_inicio_str = $_POST['fecha_inicio'] ?? ''; $fecha_fin_str = $_POST['fecha_fin'] ?? ''; -$params = []; -$date_where_clause = ""; -if (!empty($fecha_inicio_str) && !empty($fecha_fin_str)) { - $date_where_clause = " WHERE p.fecha_pedido BETWEEN ? AND ?"; - $params[] = $fecha_inicio_str; - $params[] = $fecha_fin_str; -} - -// --- RECAUDO ESPERADO POR ASESORA --- $asesoras_recuado = []; -try { +$productos_vendidos = []; +$ventas_por_asesor = []; + +if (!empty($fecha_inicio_str) && !empty($fecha_fin_str)) { + // --- Recaudo por Asesora --- + $params_asesoras = [$fecha_inicio_str, $fecha_fin_str]; $sql_asesoras = " SELECT u.nombre_asesor AS asesora_nombre, @@ -32,137 +32,113 @@ try { COUNT(p.id) AS cantidad_pedidos FROM users u JOIN pedidos p ON u.id = p.asesor_id - {$date_where_clause} + WHERE DATE(p.created_at) BETWEEN ? AND ? GROUP BY u.id, u.nombre_asesor ORDER BY monto_total DESC "; - $stmt_asesoras = $pdo->prepare($sql_asesoras); - $stmt_asesoras->execute($params); + $stmt_asesoras->execute($params_asesoras); $asesoras_recuado = $stmt_asesoras->fetchAll(PDO::FETCH_ASSOC); -} catch (PDOException $e) { - error_log("Error en RECAUDO POR ASESORA: " . $e->getMessage()); -} - -// --- RESUMEN GENERAL Y POR ASESOR --- -$productos_vendidos = []; -$ventas_por_asesor = []; - -try { + // --- Resumen de Productos y Desglose por Asesor (CORREGIDO) --- + $params_productos = [$fecha_inicio_str, $fecha_fin_str]; $sql_productos_base = "SELECT - p.cantidad as cantidades_pedido, - p.producto_id as productos_pedido_ids, - pr.id as producto_id, - pr.nombre as producto_nombre, - pr.precio as producto_precio, + p.producto, + p.cantidad, u.nombre_asesor FROM pedidos p - JOIN - productos pr ON FIND_IN_SET(pr.id, REPLACE(p.producto_id, ' ', '')) LEFT JOIN users u ON p.asesor_id = u.id - {$date_where_clause}"; + WHERE DATE(p.created_at) BETWEEN ? AND ?"; $stmt_productos = $pdo->prepare($sql_productos_base); - $stmt_productos->execute($params); + $stmt_productos->execute($params_productos); $result_productos = $stmt_productos->fetchAll(PDO::FETCH_ASSOC); if ($result_productos) { - foreach ($result_productos as $row) { - $todos_productos_ids = explode(',', $row['productos_pedido_ids']); - $todas_cantidades = explode(',', $row['cantidades_pedido']); + // Obtener todos los precios de los productos para evitar consultas en bucle + $products_map_by_name = []; + $stmt_all_products = $pdo->query("SELECT nombre, precio_venta FROM products"); + $all_products_data = $stmt_all_products->fetchAll(PDO::FETCH_ASSOC); + foreach($all_products_data as $prod){ + $products_map_by_name[$prod['nombre']] = $prod['precio_venta']; + } - $product_index = array_search($row['producto_id'], $todos_productos_ids); + // Procesar los resultados del pedido + foreach ($result_productos as $pedido) { + $producto_nombre = $pedido['producto']; + $cantidad = (int)$pedido['cantidad']; + $asesor = $pedido['nombre_asesor'] ?? 'Sin Asesor'; + + $precio_unitario = $products_map_by_name[$producto_nombre] ?? 0; - if ($product_index !== false && isset($todas_cantidades[$product_index])) { - $cantidad_producto = (int)trim($todas_cantidades[$product_index]); - $producto_nombre = $row['producto_nombre']; - $asesor_nombre = $row['nombre_asesor'] ?? 'Sin Asesor'; - $monto_producto = $cantidad_producto * (float)$row['producto_precio']; - - // Acumular para "Resumen General de Productos Vendidos" - if (!isset($productos_vendidos[$producto_nombre])) { - $productos_vendidos[$producto_nombre] = ['unidades' => 0, 'monto' => 0]; - } - $productos_vendidos[$producto_nombre]['unidades'] += $cantidad_producto; - $productos_vendidos[$producto_nombre]['monto'] += $monto_producto; - - // Acumular para "Desglose de Ventas por Asesor" - if (!isset($ventas_por_asesor[$asesor_nombre])) { - $ventas_por_asesor[$asesor_nombre] = []; - } - if (!isset($ventas_por_asesor[$asesor_nombre][$producto_nombre])) { - $ventas_por_asesor[$asesor_nombre][$producto_nombre] = ['unidades' => 0, 'monto' => 0]; - } - $ventas_por_asesor[$asesor_nombre][$producto_nombre]['unidades'] += $cantidad_producto; - $ventas_por_asesor[$asesor_nombre][$producto_nombre]['monto'] += $monto_producto; + // Agregar para "Resumen General de Productos Vendidos" + if (!isset($productos_vendidos[$producto_nombre])) { + $productos_vendidos[$producto_nombre] = ['unidades' => 0, 'nombre' => $producto_nombre, 'precio' => $precio_unitario, 'total' => 0]; } + $productos_vendidos[$producto_nombre]['unidades'] += $cantidad; + $productos_vendidos[$producto_nombre]['total'] += $cantidad * $precio_unitario; + + // Agregar para "Desglose de Ventas por Asesor" + if (!isset($ventas_por_asesor[$asesor])) { + $ventas_por_asesor[$asesor] = []; + } + if (!isset($ventas_por_asesor[$asesor][$producto_nombre])) { + $ventas_por_asesor[$asesor][$producto_nombre] = 0; + } + $ventas_por_asesor[$asesor][$producto_nombre] += $cantidad; } } -} catch (PDOException $e) { - error_log("Error en RESUMEN DE PRODUCTOS: " . $e->getMessage()); } - -include 'layout_header.php'; ?>
-

Recaudo Esperado

+

Recaudo Esperado

-
-
-
Filtrar por Fecha
-
-
- - + +
+
+
+ +
-
- - +
+
+
+ +
-
- - Limpiar -
- +
+
+ +
-
+ - -
- Mostrando resultados para el período desde hasta . -
- - - -
-
-

Recaudo Esperado por Asesora

-
-
-
- + +
+
+ Recaudo Esperado por Asesora ( al ) +
+
+
+ - - - - + - + - - - + + + @@ -170,34 +146,32 @@ include 'layout_header.php';
AsesoraMonto Total Recaudado Cantidad de PedidosMonto Total Esperado
No hay datos disponibles.
No se encontraron datos para el rango de fechas seleccionado.
S/ S/
-
- -
-
-

Resumen General de Productos Vendidos

-
-
-
- +
+
+ Resumen General de Productos Vendidos +
+
+
+ - - - + - $datos): ?> + $a['unidades']; }); ?> + - - - + + + + @@ -205,43 +179,39 @@ include 'layout_header.php';
Producto Unidades VendidasPrecio Unitario Monto Total
No hay datos disponibles.
No se encontraron productos vendidos en el rango de fechas seleccionado.
unidadesS/ S/ S/
-
- -
-
-

Desglose de Ventas por Asesor

-
-
- -

No hay datos de ventas para mostrar.

- - $productos): ?> -

-
- +
+
+ Desglose de Ventas por Asesor +
+
+ +

No se encontraron ventas para desglosar en el rango de fechas seleccionado.

+ + $productos): ?> +
+
- - + - $datos): ?> + + $unidades): ?> - - +
ProductoUnidades VendidasMonto TotalUnidades
unidadesS/
-
- - + + +
-
+
\ No newline at end of file