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 {
$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;});
}
}

View File

@ -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;
}