diff --git a/app/Models/Barrio.php b/app/Models/Barrio.php index 1d73b2b..78b50b0 100644 --- a/app/Models/Barrio.php +++ b/app/Models/Barrio.php @@ -5,6 +5,8 @@ use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Model; +use League\Csv\CannotInsertRecord; +use League\Csv\Writer; class Barrio extends Model { @@ -57,15 +59,14 @@ function totalNoBarriales() : float { ); } - function totalTransporte() : float { - $totalSinTransporte = $this->calcularTotalConfirmados( - fn($p) => $p->total($p->productosSinTransporte()) + function totalParaTransporte() : float { + return $this->calcularTotalConfirmados( + fn($p) => $p->total($p->productosConTransporte()) ); - return ($totalSinTransporte / Constants::DIVISOR_TRANSPORTE) * Constants::COSTO_TRANSPORTE; } function totalATransferir() : float { - return $this->totalNoBarriales() + $this->totalTransporte(); + return $this->totalNoBarriales() + TransporteUtils::total($this->totalParaTransporte()); } /** @@ -75,4 +76,44 @@ public function productos(): HasMany { return $this->hasMany(Producto::class); } + + + 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 exportarPedidoACsv() { + $columnaProductos = []; + $filasVaciasAgregadas = false; + + foreach (Categoria::orderBy('id')->get() as $key => $categoria) { + $columnaProductos[] = ['name' => $categoria->name, 'cantidad' => null]; + + 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') + $columnaProductos[] = ['name' => '¿Cuántas copas quieren y pueden comprar en el grupo?', 'cantidad' => null]; + + foreach ($categoria->productos()->orderBy('id')->get() as $key => $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)]; + } + } + + try { + $writer = Writer::createFromPath(resource_path('csv/exports/'.$this->nombre.'.csv'), 'w'); + $writer->insertAll($columnaProductos); + } catch (CannotInsertRecord $e) { + var_export($e->getRecords()); + } + } }