From eb05a7de6afd3420f1ac8439677f7ad69e31965c Mon Sep 17 00:00:00 2001 From: ale Date: Fri, 9 May 2025 15:47:28 -0300 Subject: [PATCH] Refactor: usando CsvHelper, cambio de nombre en constantes, eliminado metodo innecesario, extraido predicado 'noTieneTipo' y cosas de formato --- app/Helpers/CanastaHelper.php | 78 ++++++++++++++++------------------- 1 file changed, 36 insertions(+), 42 deletions(-) diff --git a/app/Helpers/CanastaHelper.php b/app/Helpers/CanastaHelper.php index ce37cf7..53815aa 100644 --- a/app/Helpers/CanastaHelper.php +++ b/app/Helpers/CanastaHelper.php @@ -9,12 +9,12 @@ use DatabaseSeeder; use Illuminate\Support\Arr; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; -use League\Csv\Reader; + class CanastaHelper { - const FILA_HEADER = "Tipo"; - const ULTIMA_FILA = "TOTAL"; + const TIPO = "Tipo"; + const TOTAL = "TOTAL"; const ARCHIVO_SUBIDO = 'Archivo subido'; const CANASTA_CARGADA = 'Canasta cargada'; @@ -31,53 +31,43 @@ class CanastaHelper public static function cargarCanasta($archivo) { self::limpiarTablas(); - $csv = Reader::createFromPath(resource_path($archivo), 'r'); - $csv->setDelimiter("|"); - $iHeader = self::obtenerIndiceDeHeader($csv); - $csv->setHeaderOffset($iHeader); - $registros = $csv->getRecords(); - + $registros = CsvHelper::getRecords($archivo); $toInsert = []; $categoria = ''; - foreach($registros as $i => $registro){ - //filas que están arriba del header - if ($i <= $iHeader){ - continue; - } - //finalizar - if ($registro[self::FILA_HEADER] == self::ULTIMA_FILA) { + foreach($registros as $i => $registro) { + // finalizar + if ($registro[self::TIPO] == self::TOTAL) break; - } - //filas que no tienen tipo - if (!Arr::has($registro,self::FILA_HEADER)|| trim($registro[self::FILA_HEADER]) == ''){ + // saltear filas que no tienen tipo + if (self::noTieneTipo($registro)) { var_dump("no hay tipo en la fila " . $i); continue; } - //saltear bono de transporte - if ($registro[self::FILA_HEADER] == "T"){ + // saltear bono de transporte + if ($registro[self::TIPO] == "T"){ continue; } - //obtener categoria + // obtener categoria si no hay producto if ($registro['Producto'] == '') { - //es la pregunta de la copa? - if (Str::contains($registro[self::FILA_HEADER],"¿")) { continue; } - $categoria = $registro[self::FILA_HEADER]; + // no es la pregunta de la copa? + if (!Str::contains($registro[self::TIPO],"¿")) + $categoria = $registro[self::TIPO]; continue; } - //completar producto + // completar producto $toInsert[] = [ 'fila' => $i, 'categoria' => $categoria, - 'nombre' => trim(str_replace('*', ' ',$registro['Producto'])), + 'nombre' => trim(str_replace('*', '',$registro['Producto'])), 'precio' => $registro['Precio'], 'proveedor_id' => self::obtenerProveedor($registro['Producto']), - 'bono' => $registro[self::FILA_HEADER] == "B", - 'requiere_notas'=> $registro[self::FILA_HEADER] =="PTC", + 'bono' => $registro[self::TIPO] == "B", + 'requiere_notas'=> $registro[self::TIPO] =="PTC", ]; } @@ -90,18 +80,6 @@ class CanastaHelper self::log($archivo, self::CANASTA_CARGADA); } - private static function obtenerIndiceDeHeader($csv){ - $registros = $csv->getRecords(); - $iheader = 0; - foreach ($registros as $i => $registro){ - if (strtolower($registro[0]) == strtolower(self::FILA_HEADER)) { - $iheader = $i; - break; - } - } - return $iheader; - } - private static function obtenerProveedor($nombre) { $result = null; if (Str::contains($nombre,"*")){ @@ -137,7 +115,14 @@ class CanastaHelper private static function agregarBonoBarrial() { - $categoria = Producto::all()->pluck('categoria')->unique()->flatten()->first(function ($c) { return Str::contains($c, 'BONO'); }); + $categoria = Producto::all() + ->pluck('categoria') + ->unique() + ->flatten() + ->first(function ($c) { + return Str::contains($c, 'BONO'); + }); + DB::table('productos')->insert([ 'fila' => 420, 'nombre' => "Bono barrial", @@ -148,4 +133,13 @@ class CanastaHelper 'requiere_notas'=> false, ]); } + + /** + * @param $registro + * @return bool + */ + public static function noTieneTipo($registro): bool + { + return !Arr::has($registro, self::TIPO) || trim($registro[self::TIPO]) == ''; + } }