diff --git a/app/GrupoDeCompra.php b/app/GrupoDeCompra.php index 09ec62b..ead150c 100644 --- a/app/GrupoDeCompra.php +++ b/app/GrupoDeCompra.php @@ -2,11 +2,11 @@ namespace App; +use App\Producto; use Illuminate\Database\Eloquent\Model; use Mpdf\Mpdf; use League\Csv\CannotInsertRecord; use League\Csv\Writer; -use App\Producto; use DB; use League\Csv\Reader; @@ -40,7 +40,8 @@ class GrupoDeCompra extends Model $mpdf->Output($filename, "D"); } - function filaVacia(string $product, int $columns) { + static function filaVacia(string $product, int $columns): array + { $fila = [$product]; for ($i = 1; $i <= $columns; $i++) { $fila[$i] = "0"; @@ -49,23 +50,23 @@ class GrupoDeCompra extends Model } //Asume que los productos están gruadados en orden de fila - public function obtenerTemplateDeFilasVacias(int $columns){ + public static 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] = $this->filaVacia("", $columns); + $template[$i] = GrupoDeCompra::filaVacia("", $columns); } - $template[$fila] = $this->filaVacia($productosIDNombre[$id], $columns); + $template[$fila] = GrupoDeCompra::filaVacia($productosIDNombre[$id], $columns); $num_fila = $fila+1; } - $template[$this->obtenerFilaDeBonoTransporte()] = $this->filaVacia("Bonos de transporte", $columns); + $template[GrupoDeCompra::obtenerFilaDeBonoTransporte()] = GrupoDeCompra::filaVacia("Bonos de transporte", $columns); return $template; } - private function obtenerFilaDeBonoTransporte() { + private static function obtenerFilaDeBonoTransporte() { $csv = Reader::createFromPath(resource_path('csv/productos.csv'), 'r'); $csv->setDelimiter("|"); $csv->setEnclosure("'"); @@ -105,19 +106,7 @@ class GrupoDeCompra extends Model } public function exportarPedidoEnCSV(){ - $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; } - $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(); - + $records = $this->generarColumnaCantidades(); try { $writer = Writer::createFromPath(resource_path('csv/exports/'.$this->nombre.'.csv'), 'w'); $writer->insertAll($records); @@ -126,17 +115,41 @@ 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'); + + //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(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(); + + return $records; + } + 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; } - + 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; @@ -155,7 +168,7 @@ class GrupoDeCompra extends Model $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'); @@ -166,7 +179,20 @@ class GrupoDeCompra extends Model } public static function exportarTodosLosPedidosEnCSV(){ - $gdcs=GrupoDeCompra::all(); - foreach ($gdcs as $gdc){ $gdc->exportarPedidoEnCSV(); } + $gdcs = GrupoDeCompra::all(); + $planilla = GrupoDeCompra::obtenerTemplateDeFilasVacias($gdcs->count()); + $barrios = [""]; + foreach ($gdcs as $gdc) { + $barrios[] = $gdc->nombre; + } + array_splice($planilla, 0, 0, array($barrios)); + + // Guardar en un archivo .csv + try { + $writer = Writer::createFromPath(resource_path('csv/exports/total-pedidos.csv'), 'w'); + $writer->insertAll($planilla); + } catch (CannotInsertRecord $e) { + var_export($e->getRecords()); + } } } diff --git a/app/Http/Controllers/ComprasController.php b/app/Http/Controllers/ComprasController.php new file mode 100644 index 0000000..ae4de0e --- /dev/null +++ b/app/Http/Controllers/ComprasController.php @@ -0,0 +1,14 @@ +download($file); + } +}