From bc2d131f0605869abc27e63fb02871a0ae61a282 Mon Sep 17 00:00:00 2001 From: ale Date: Sun, 31 Mar 2024 18:22:03 -0300 Subject: [PATCH] Agregados productos centrales y refactor de cantidad pedida de productos --- app/Models/Barrio.php | 33 ++++++++++++++------------------- app/Models/Producto.php | 9 +++++++++ 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/app/Models/Barrio.php b/app/Models/Barrio.php index 096693b..ea85852 100644 --- a/app/Models/Barrio.php +++ b/app/Models/Barrio.php @@ -91,7 +91,6 @@ function exportarPedidoACsv() { } private function armarColumnasPedido() : array { - $productosPedidos = $this->productosCantidadesPedidas(); $columnaProductos = []; $filasVaciasAgregadas = false; @@ -100,8 +99,7 @@ private function armarColumnasPedido() : array { if ($categoria->name == 'TRANSPORTE, BONOS Y FINANCIAMIENTO SORORO') $columnaProductos[] = ['name' => 'Bono de Transporte', 'cantidad' => TransporteUtils::cantidad($this->totalParaTransporte)]; - - if ($categoria->name == 'PRODUCTOS DE GESTIÓN MENSTRUAL') + else 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 $keyP => $producto) { @@ -109,25 +107,22 @@ private function armarColumnasPedido() : array { $columnaProductos[] = ['name' => '¿Cuántas copas quieren adquirir a través del financiamiento sororo?', 'cantidad' => null]; $filasVaciasAgregadas = true; } - $columnaProductos[] = ['name' => $producto->name, 'cantidad' => $productosPedidos[$producto->id]]; + $columnaProductos[] = ['name' => $producto->name, 'cantidad' => $this->cantidadPedida($producto->id)]; } } } - private function productosCantidadesPedidas() : array { - return $this->pedidos() - ->where('confirmed',true) - ->with('productos') - ->get() - ->flatMap(fn($pedido) => $pedido->productos->map( - fn($producto) => [ - 'producto_id' => $producto->id, - 'cantidad' => $producto->pivot->cantidad, - ] - )) - ->groupBy('producto_id') - ->map(fn($productosAgrupados) => [ - $productosAgrupados->first()['producto_id'] => $productosAgrupados->sum('cantidad'), - ]); + private function cantidadPedida($productoId) + { + $pedidos = $this->pedidos() + ->whereHas('productos', + function ($query) use ($productoId) { + $query->where('producto_id', $productoId);}) + ->get(); + + return $pedidos->sum(function ($pedido) use ($productoId) { + return $pedido->productos + ->where('id', $productoId) + ->first()->pivot->cantidad ?? 0;}); } } diff --git a/app/Models/Producto.php b/app/Models/Producto.php index db9ff7e..3d5baab 100644 --- a/app/Models/Producto.php +++ b/app/Models/Producto.php @@ -49,6 +49,15 @@ public function barrio(): BelongsTo return $this->belongsTo(Barrio::class); } + /** + * Los productos centrales. + */ + public static function centrales() { + return Producto::where([ + 'barrial' => false, + ]); + } + function pagaTransporte() : bool { return !$this->bono && !$this->barrial; }