From 8887a1970cc6ce0db5a8e8bee70c41713d254093 Mon Sep 17 00:00:00 2001 From: ale Date: Fri, 9 May 2025 18:08:14 -0300 Subject: [PATCH] =?UTF-8?q?Agregado=20m=C3=A9todo=20y=20ruta=20para=20baja?= =?UTF-8?q?r=20pedidos=20barriales=20en=20pdf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/GrupoDeCompra.php | 80 +++++++++++++++++++--- app/Http/Controllers/ComprasController.php | 4 ++ routes/web.php | 1 + 3 files changed, 74 insertions(+), 11 deletions(-) diff --git a/app/GrupoDeCompra.php b/app/GrupoDeCompra.php index 995a38f..482e2a3 100644 --- a/app/GrupoDeCompra.php +++ b/app/GrupoDeCompra.php @@ -4,9 +4,11 @@ namespace App; use App\Helpers\CsvHelper; use App\Helpers\TransporteHelper; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Log; use Mpdf\Mpdf; class GrupoDeCompra extends Model @@ -115,6 +117,52 @@ class GrupoDeCompra extends Model $mpdf->Output($filename, "D"); } + function pedidoParaPdf() + { + $productos = $this->productosPedidos(true); + $pedido = []; + $pedido['productos'] = []; + + $pedido['nombre'] = $this->nombre; + foreach ($productos as $producto) { + $productoParaPdf = []; + $productoParaPdf['pivot'] = []; + $productoParaPdf['nombre'] = $producto->producto_nombre; + $productoParaPdf['pivot']['cantidad'] = $producto->cantidad_pedida; + $productoParaPdf['pivot']['notas'] = false; + $productoParaPdf['bono'] = false; // para que no lo saltee + + $pedido['productos'][] = $productoParaPdf; + } + + Log::debug($pedido); + + return $pedido; + } + + public function generarHTML() + { + $view = view("pdfgen.pedido_tabla", ["pedido" => $this->pedidoParaPdf()]); + return $view->render(); + } + + public static function exportarPedidosBarrialesAPdf() + { + $barrios = GrupoDeCompra::barriosMenosPrueba() + ->get(); + $mpdf = new Mpdf(); + + foreach ($barrios as $barrio) { + $tabla = $barrio->generarHTML(); + $mpdf->WriteHTML($tabla); + $mpdf->AddPage(); + } + + $filename = 'pedidos_por_barrio.pdf'; + // imprimir el pdf + $mpdf->Output($filename, "D"); + } + static function filaVacia(string $product, int $columns): array { $fila = [$product]; @@ -151,14 +199,11 @@ class GrupoDeCompra extends Model public function generarColumnaCantidades() { - $productos_en_pedido = DB::table('pedidos_aprobados') - ->where('grupo_de_compra_id', $this->id) - ->get() - ->keyBy('producto_id'); + $productos_en_pedido = $this->productosPedidos(); //si no hay pedidos aprobados, salir if ($productos_en_pedido->count() == 0) { - \Log::debug("El grupo de compra " . $this->nombre . " no tiene pedidos aprobados."); + Log::debug("El grupo de compra " . $this->nombre . " no tiene pedidos aprobados."); return []; } @@ -176,11 +221,11 @@ class GrupoDeCompra extends Model public function exportarPedidoConNucleosEnCSV() { - $productos_en_pedido = DB::table('pedidos_aprobados')->where('grupo_de_compra_id', $this->id)->get()->keyBy('producto_id'); + $productos_en_pedido = $this->productosPedidos(); // si no hay pedidos aprobados, salir if ($productos_en_pedido->count() == 0) { - \Log::debug("El grupo de compra " . $this->nombre . " no tiene pedidos aprobados."); + Log::debug("El grupo de compra " . $this->nombre . " no tiene pedidos aprobados."); return; } @@ -218,10 +263,7 @@ class GrupoDeCompra extends Model return array($records, $i, $cantidad); } - /** - * @return \Illuminate\Database\Eloquent\Builder - */ - public static function barriosMenosPrueba(): \Illuminate\Database\Eloquent\Builder + public static function barriosMenosPrueba(): Builder { return self::where('nombre', '<>', 'PRUEBA') ->orderBy('region') @@ -239,4 +281,20 @@ class GrupoDeCompra extends Model return $result; } + + /** + * @return \Illuminate\Support\Collection + */ + public function productosPedidos($excluirBarriales = false): \Illuminate\Support\Collection + { + $query = DB::table('pedidos_aprobados') + ->where('grupo_de_compra_id', $this->id); + + if ($excluirBarriales) + $query = $query->where('producto_nombre','NOT LIKE','%barrial%'); + + return $query + ->get() + ->keyBy('producto_id'); + } } diff --git a/app/Http/Controllers/ComprasController.php b/app/Http/Controllers/ComprasController.php index 9827160..e23ad43 100644 --- a/app/Http/Controllers/ComprasController.php +++ b/app/Http/Controllers/ComprasController.php @@ -27,6 +27,10 @@ class ComprasController return response()->download($file); } + public function pdf() { + GrupoDeCompra::exportarPedidosBarrialesAPdf(); + } + public function show() { return view('auth/compras_login'); diff --git a/routes/web.php b/routes/web.php index 718b2a5..78ec7c2 100644 --- a/routes/web.php +++ b/routes/web.php @@ -82,6 +82,7 @@ Route::middleware(['compras'])->group( function() { Route::get('/compras/pedidos', 'ComprasController@indexPedidos')->name('compras.pedidos'); Route::get('/compras/pedidos/descargar', 'ComprasController@descargarPedidos')->name('compras.pedidos.descargar'); Route::get('/compras/pedidos/notas', 'ComprasController@descargarNotas')->name('compras.pedidos.descargar'); + Route::get('/compras/pedidos/pdf', 'ComprasController@pdf')->name('compras.pedidos.pdf'); Route::post('/compras/canasta', 'ComprasController@cargarCanasta')->name('compras.canasta'); Route::get('/compras/canasta/ejemplo', 'ComprasController@descargarCanastaEjemplo')->name('compras.canasta.ejemplo'); });