diff --git a/app/Console/Commands/CrearPedidosAprobadosViewCommand.php b/app/Console/Commands/CrearPedidosAprobadosViewCommand.php new file mode 100644 index 0000000..d4b08ac --- /dev/null +++ b/app/Console/Commands/CrearPedidosAprobadosViewCommand.php @@ -0,0 +1,62 @@ +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/app/Http/Controllers/Api/PedidoController.php b/app/Http/Controllers/Api/PedidoController.php index 6a83d46..8f2ec61 100644 --- a/app/Http/Controllers/Api/PedidoController.php +++ b/app/Http/Controllers/Api/PedidoController.php @@ -6,35 +6,4 @@ use Illuminate\Support\Facades\DB; class PedidoController extends Controller { - public static function generarTablas() - { - //GENERAR TABLA DE PEDIDOS APROBADOS - DB::unprepared("DROP VIEW if exists pedidos_aprobados; - CREATE VIEW pedidos_aprobados AS - SELECT - g.id as grupo_de_compra_id, - g.nombre as grupo_de_compra_nombre, - g.region as grupo_de_compra_region, - pr.id AS producto_id, - pr.nombre as producto_nombre, - pr.precio as producto_precio, - SUM(ps.cantidad) as cantidad_pedida, - pr.precio*SUM(ps.cantidad) as total_por_producto - FROM grupos_de_compra g - JOIN subpedidos s ON (s.grupo_de_compra_id = g.id AND s.aprobado=1) - JOIN producto_subpedido ps ON (ps.subpedido_id = s.id) - JOIN productos pr ON (pr.id = ps.producto_id) - GROUP BY g.id, g.nombre, pr.id, pr.nombre;"); - - //GENERAR TABLA GENERAL - DB::unprepared("DROP VIEW if exists productos_por_grupo_de_compra; - SET @barrios = NULL; - SELECT - GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(`grupo_de_compra_nombre` = \"', `grupo_de_compra_nombre`,'\", `cantidad_pedida`,NULL)) AS \"',`grupo_de_compra_nombre`,'\"')) INTO @barrios - FROM pedidos_aprobados; - SET @sql = CONCAT('CREATE VIEW productos_por_grupo_de_compra AS SELECT producto_nombre, ', @barrios, ' FROM pedidos_aprobados GROUP BY producto_nombre'); - PREPARE stmt FROM @sql; - EXECUTE stmt;"); - return "Tabla productos_por_grupo_de_compra generada. " . date('l jS \of F Y h:i:s A'); - } } diff --git a/database/migrations/2023_07_06_015926_call_crear_pedidos_aprobados.php b/database/migrations/2023_07_06_015926_call_crear_pedidos_aprobados.php new file mode 100644 index 0000000..b8855f4 --- /dev/null +++ b/database/migrations/2023_07_06_015926_call_crear_pedidos_aprobados.php @@ -0,0 +1,28 @@ +
diff --git a/routes/api.php b/routes/api.php index d756aad..fafd824 100644 --- a/routes/api.php +++ b/routes/api.php @@ -34,10 +34,6 @@ Route::middleware('api')->group(function () { }); }); - Route::prefix('pedidos')->group(function () { - Route::get('/generar_tablas','Api\PedidoController@generarTablas'); - }); - Route::prefix('subpedidos')->group(function () { Route::get('/','Api\SubpedidoController@index'); Route::get('/resources', 'Api\SubpedidoController@indexResources'); 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() {