get('tableFilters', []); $fechaDesde = $filtros['fecha_rango']['fecha_desde'] ?? Carbon::now()->startOfMonth()->format('Y-m-d'); $fechaHasta = $filtros['fecha_rango']['fecha_hasta'] ?? Carbon::now()->endOfMonth()->format('Y-m-d'); $resumen = $this->calcularResumen($fechaDesde, $fechaHasta); return [ Stat::make('Total Productos Vendidos', number_format($resumen['total_productos'])) ->description('Unidades vendidas en el período') ->descriptionIcon('heroicon-m-cube') ->color('primary'), Stat::make('Promedio Ponderado Compra', '$' . number_format($resumen['promedio_compra'], 0)) ->description('Costo promedio por unidad') ->descriptionIcon('heroicon-m-banknotes') ->color('warning'), Stat::make('Valor Total Invertido', '$' . number_format($resumen['valor_total_compra'], 0)) ->description('Inversión total en productos vendidos') ->descriptionIcon('heroicon-m-chart-bar') ->color('danger'), Stat::make('Margen Promedio', round($resumen['margen_promedio'], 2) . '%') ->description($resumen['margen_promedio'] >= 0 ? 'Beneficio promedio' : 'Pérdida promedio') ->descriptionIcon($resumen['margen_promedio'] >= 0 ? 'heroicon-m-arrow-trending-up' : 'heroicon-m-arrow-trending-down') ->color($resumen['margen_promedio'] >= 0 ? 'success' : 'danger'), ]; } protected function calcularResumen(string $fechaDesde, string $fechaHasta): array { $query = DetalleVenta::query() ->join('productos', 'detalle_ventas.producto_id', '=', 'productos.id') ->join('ventas', 'detalle_ventas.venta_id', '=', 'ventas.id') ->whereDate('ventas.created_at', '>=', $fechaDesde) ->whereDate('ventas.created_at', '<=', $fechaHasta); $totalProductos = $query->sum('detalle_ventas.cantidad'); $valorTotalCompra = $query->sum(DB::raw('detalle_ventas.cantidad * CAST(productos.precio_compra AS DECIMAL)')); $valorTotalVenta = $query->sum(DB::raw('detalle_ventas.cantidad * detalle_ventas.precio_unitario')); $promedioCompra = $totalProductos > 0 ? $valorTotalCompra / $totalProductos : 0; $margenPromedio = $valorTotalCompra > 0 ? (($valorTotalVenta - $valorTotalCompra) / $valorTotalCompra) * 100 : 0; return [ 'total_productos' => $totalProductos, 'valor_total_compra' => $valorTotalCompra, 'promedio_compra' => $promedioCompra, 'margen_promedio' => $margenPromedio, ]; } }