Agregados productos centrales y refactor de cantidad pedida de productos

This commit is contained in:
Alejandro Tasistro 2024-03-31 18:22:03 -03:00
parent 5703e92f8d
commit bc2d131f06
2 changed files with 23 additions and 19 deletions

View File

@ -91,7 +91,6 @@ function exportarPedidoACsv() {
} }
private function armarColumnasPedido() : array { private function armarColumnasPedido() : array {
$productosPedidos = $this->productosCantidadesPedidas();
$columnaProductos = []; $columnaProductos = [];
$filasVaciasAgregadas = false; $filasVaciasAgregadas = false;
@ -100,8 +99,7 @@ private function armarColumnasPedido() : array {
if ($categoria->name == 'TRANSPORTE, BONOS Y FINANCIAMIENTO SORORO') if ($categoria->name == 'TRANSPORTE, BONOS Y FINANCIAMIENTO SORORO')
$columnaProductos[] = ['name' => 'Bono de Transporte', 'cantidad' => TransporteUtils::cantidad($this->totalParaTransporte)]; $columnaProductos[] = ['name' => 'Bono de Transporte', 'cantidad' => TransporteUtils::cantidad($this->totalParaTransporte)];
else if ($categoria->name == 'PRODUCTOS DE GESTIÓN MENSTRUAL')
if ($categoria->name == 'PRODUCTOS DE GESTIÓN MENSTRUAL')
$columnaProductos[] = ['name' => '¿Cuántas copas quieren y pueden comprar en el grupo?', 'cantidad' => null]; $columnaProductos[] = ['name' => '¿Cuántas copas quieren y pueden comprar en el grupo?', 'cantidad' => null];
foreach ($categoria->productos()->orderBy('id')->get() as $keyP => $producto) { 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]; $columnaProductos[] = ['name' => '¿Cuántas copas quieren adquirir a través del financiamiento sororo?', 'cantidad' => null];
$filasVaciasAgregadas = true; $filasVaciasAgregadas = true;
} }
$columnaProductos[] = ['name' => $producto->name, 'cantidad' => $productosPedidos[$producto->id]]; $columnaProductos[] = ['name' => $producto->name, 'cantidad' => $this->cantidadPedida($producto->id)];
} }
} }
} }
private function productosCantidadesPedidas() : array { private function cantidadPedida($productoId)
return $this->pedidos() {
->where('confirmed',true) $pedidos = $this->pedidos()
->with('productos') ->whereHas('productos',
->get() function ($query) use ($productoId) {
->flatMap(fn($pedido) => $pedido->productos->map( $query->where('producto_id', $productoId);})
fn($producto) => [ ->get();
'producto_id' => $producto->id,
'cantidad' => $producto->pivot->cantidad, return $pedidos->sum(function ($pedido) use ($productoId) {
] return $pedido->productos
)) ->where('id', $productoId)
->groupBy('producto_id') ->first()->pivot->cantidad ?? 0;});
->map(fn($productosAgrupados) => [
$productosAgrupados->first()['producto_id'] => $productosAgrupados->sum('cantidad'),
]);
} }
} }

View File

@ -49,6 +49,15 @@ public function barrio(): BelongsTo
return $this->belongsTo(Barrio::class); return $this->belongsTo(Barrio::class);
} }
/**
* Los productos centrales.
*/
public static function centrales() {
return Producto::where([
'barrial' => false,
]);
}
function pagaTransporte() : bool { function pagaTransporte() : bool {
return !$this->bono && !$this->barrial; return !$this->bono && !$this->barrial;
} }