diff --git a/app/GrupoDeCompra.php b/app/GrupoDeCompra.php index 99aa398..cf13e65 100644 --- a/app/GrupoDeCompra.php +++ b/app/GrupoDeCompra.php @@ -40,20 +40,28 @@ class GrupoDeCompra extends Model $mpdf->Output($filename, "D"); } + function filaVacia(string $product, int $columns) { + $fila = [$product]; + for ($i = 1; $i <= $columns; $i++) { + $fila[$i] = "0"; + } + return $fila; + } + //Asume que los productos están gruadados en orden de fila - public function obtenerTemplateDeFilasVacias(){ + public function obtenerTemplateDeFilasVacias(int $columns){ $productosFilaID = Producto::productosFilaID(); $productosIDNombre = Producto::productosIDNombre(); $num_fila = 1; $template = []; foreach ($productosFilaID as $fila => $id) { for ($i = $num_fila; $i < $fila; $i++) { - $template[$i] = ["", "0"]; + $template[$i] = $this->filaVacia("", $columns); } - $template[$fila] = [$productosIDNombre[$id], "0"]; + $template[$fila] = $this->filaVacia($productosIDNombre[$id], $columns); $num_fila = $fila+1; } - $template[$this->obtenerFilaDeBonoTransporte()] = ["Bonos de transporte", 0]; + $template[$this->obtenerFilaDeBonoTransporte()] = $this->filaVacia("Bonos de transporte", $columns); return $template; } @@ -86,13 +94,13 @@ class GrupoDeCompra extends Model //si no hay pedidos aprobados, salir if ($productos_en_pedido->count() == 0) { \Log::debug("El grupo de compra ". $this->nombre . " no tiene pedidos aprobados."); return; } - $records = $this->obtenerTemplateDeFilasVacias(); + $records = $this->obtenerTemplateDeFilasVacias(1); $productos_id_fila = Producto::productosIdFila(); foreach ($productos_en_pedido as $id => $producto_pedido){ $fila = $productos_id_fila[$id]; $records[$fila][1] = $producto_pedido->cantidad_pedida; } - + $records[$this->obtenerFilaDeBonoTransporte()][1] = $this->calcularCantidadBDT(); try { @@ -103,9 +111,47 @@ 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'); + + // si no hay pedidos aprobados, salir + if ($productos_en_pedido->count() == 0) { \Log::debug("El grupo de compra ". $this->nombre . " no tiene pedidos aprobados."); return; } + + $pedidos = $this->pedidosAprobados(); + // Generar tabla vacía con una columna por núcleo + $records = $this->obtenerTemplateDeFilasVacias($pedidos->count()); + $productos_id_fila = Producto::productosIdFila(); + + foreach ($productos_en_pedido as $id => $producto_pedido) { + $fila = $productos_id_fila[$id]; + $i = 1; + // Poner cantidad de cada producto para cada núcleo + foreach ($pedidos as $pedido) { + $producto = $pedido->productos()->find($id); + $records[$fila][$i] = $producto == NULL ? 0 : $producto["pivot"]["cantidad"]; + $i++; + } + } + // Insertar lista de núcleos en la primera fila + $nucleos = [""]; + $i = 1; + foreach ($pedidos as $pedido) { + $nucleos[$i] = $pedido->nombre; + $i++; + } + array_splice($records, 0, 0, array($nucleos)); + + // Guardar en un archivo .csv + try { + $writer = Writer::createFromPath(resource_path('csv/exports/'.$this->nombre.'-completo.csv'), 'w'); + $writer->insertAll($records); + } catch (CannotInsertRecord $e) { + var_export($e->getRecords()); + } + } + public static function exportarTodosLosPedidosEnCSV(){ $gdcs=GrupoDeCompra::all(); foreach ($gdcs as $gdc){ $gdc->exportarPedidoEnCSV(); } } - } diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index 804b084..2b87532 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -26,4 +26,10 @@ class AdminController extends Controller $file = resource_path('csv/exports/'.$gdc->nombre.'.csv'); return response()->download($file); } + + public function exportarPedidoConNucleosACSV(GrupoDeCompra $gdc) { + $gdc->exportarPedidoConNucleosEnCSV(); + $file = resource_path('csv/exports/'.$gdc->nombre.'-completo.csv'); + return response()->download($file); + } } diff --git a/resources/js/components/PedidosAdminDropdownDescargar.vue b/resources/js/components/PedidosAdminDropdownDescargar.vue index 7baf1f0..0e467a6 100644 --- a/resources/js/components/PedidosAdminDropdownDescargar.vue +++ b/resources/js/components/PedidosAdminDropdownDescargar.vue @@ -14,11 +14,14 @@
diff --git a/routes/web.php b/routes/web.php index a3bc085..2b57d96 100644 --- a/routes/web.php +++ b/routes/web.php @@ -38,6 +38,8 @@ Route::middleware(['auth', 'admin'])->group( function () { Route::get('/admin/exportar-planillas-a-pdf/{gdc}', 'AdminController@exportarPlanillasAPdf'); Route::get('/admin/exportar-pedido-a-csv/{gdc}', 'AdminController@exportarPedidoACSV'); + + Route::get('/admin/exportar-pedido-con-nucleos-a-csv/{gdc}', 'AdminController@exportarPedidoConNucleosACSV'); }); Route::middleware('auth')->group( function() {