From c2a59495be9c2cd37217719e4d37521f80733e0b Mon Sep 17 00:00:00 2001 From: ale Date: Wed, 20 Mar 2024 00:46:08 -0300 Subject: [PATCH] cambio logica de productos pedidos --- app/Models/Barrio.php | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/app/Models/Barrio.php b/app/Models/Barrio.php index 64ee17a..6319d37 100644 --- a/app/Models/Barrio.php +++ b/app/Models/Barrio.php @@ -91,10 +91,11 @@ function exportarPedidoACsv() { } private function armarColumnasPedido() : array { + $productosPedidos = $this->productosCantidadesPedidas(); $columnaProductos = []; $filasVaciasAgregadas = false; - foreach (Categoria::orderBy('id')->get() as $key => $categoria) { + foreach (Categoria::orderBy('id')->get() as $keyC => $categoria) { $columnaProductos[] = ['name' => $categoria->name, 'cantidad' => null]; if ($categoria->name == 'TRANSPORTE, BONOS Y FINANCIAMIENTO SORORO') @@ -103,22 +104,33 @@ private function armarColumnasPedido() : array { if ($categoria->name == 'PRODUCTOS DE GESTIÓN MENSTRUAL') $columnaProductos[] = ['name' => '¿Cuántas copas quieren y pueden comprar en el grupo?', 'cantidad' => null]; - foreach ($categoria->productos()->orderBy('id')->get() as $key => $producto) { + foreach ($categoria->productos()->orderBy('id')->get() as $keyP => $producto) { if ($producto->price == 0 && !$filasVaciasAgregadas) { $columnaProductos[] = ['name' => '¿Cuántas copas quieren adquirir a través del financiamiento sororo?', 'cantidad' => null]; $filasVaciasAgregadas = true; } - $columnaProductos[] = ['name' => $producto->name, 'cantidad' => $this->cantidadPedida($producto)]; + $columnaProductos[] = ['name' => $producto->name, 'cantidad' => $productosPedidos[$producto->id]]; } } } - private function cantidadPedida(Producto $producto) : int { - return DB::table('pedido_producto') - ->join('pedidos', 'pedido_producto.order_id', '=', 'pedidos.id') - ->where('pedidos.barrio_id', $this->id) - ->where('pedido_producto.producto_id', $producto->id) - ->where('pedidos.confirmed', true) - ->sum('pedido_producto.cantidad'); + private function productosCantidadesPedidas() : array { + return $this->pedidos() + ->where('confirmed',true) + ->with('products') + ->get() + ->flatMap(fn($order) => $order->products->map( + fn($product) => [ + 'product_id' => $product->id, + 'product_name' => $product->name, + 'total_ordered' => $product->pivot->quantity, + ] + )) + ->groupBy('product_id') + ->map(fn($groupedProducts) => [ + 'product_id' => $groupedProducts->first()['product_id'], + 'product_name' => $groupedProducts->first()['product_name'], + 'total_ordered' => $groupedProducts->sum('total_ordered'), + ]); } }