From ac4d5895be4b9e178627d6e7708abd7ab0c40437 Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 21 Dec 2024 14:56:53 -0300 Subject: [PATCH] Logica de trabajo con CSV y carga movida a CanastaHelper.php --- app/Helpers/CanastaHelper.php | 97 ++++++++++++++++++++++++++++++++ database/seeds/CanastaSeeder.php | 83 +-------------------------- 2 files changed, 100 insertions(+), 80 deletions(-) create mode 100644 app/Helpers/CanastaHelper.php diff --git a/app/Helpers/CanastaHelper.php b/app/Helpers/CanastaHelper.php new file mode 100644 index 0000000..1433781 --- /dev/null +++ b/app/Helpers/CanastaHelper.php @@ -0,0 +1,97 @@ +setDelimiter("|"); + $iHeader = self::obtenerIndiceDeHeader($csv); + $csv->setHeaderOffset($iHeader); + $registros = $csv->getRecords(); + + $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) { + break; + } + + //filas que no tienen tipo + if (!Arr::has($registro,self::FILA_HEADER)|| trim($registro[self::FILA_HEADER]) == ''){ + var_dump("no hay tipo en la fila " . $i); + continue; + } + + //saltear bono de transporte + if ($registro[self::FILA_HEADER] == "T"){ + continue; + } + + //obtener categoria + if ($registro['Producto'] == '') { + //es la pregunta de la copa? + if (Str::contains($registro[self::FILA_HEADER],"¿")) { continue; } + $categoria = $registro[self::FILA_HEADER]; + continue; + } + + //completar producto + $toInsert[] = [ + 'fila' => $i, + 'categoria' => $categoria, + '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", + ]; + } + + foreach (array_chunk($toInsert,DatabaseSeeder::CHUNK_SIZE) as $chunk) + { + DB::table('productos')->insert($chunk); + } + } + + 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,"*")){ + $result = Proveedor::firstOrCreate([ + 'nombre' => 'Proveedor de economía solidaria', + 'economia_solidaria' => 1, + 'nacional' => 1 + ])->id; + } + return $result; + } +} diff --git a/database/seeds/CanastaSeeder.php b/database/seeds/CanastaSeeder.php index 0edc5b5..90775b0 100644 --- a/database/seeds/CanastaSeeder.php +++ b/database/seeds/CanastaSeeder.php @@ -1,13 +1,13 @@ setDelimiter("|"); - $iHeader = $this->obtenerIndiceDeHeader($csv); - $csv->setHeaderOffset($iHeader); - $registros = $csv->getRecords(); - - $toInsert = []; - $categoria = ''; - foreach($registros as $i => $registro){ - //filas que están arriba del header - if ($i <= $iHeader){ - continue; - } - - //finalizar - if ($registro[$this::FILA_HEADER] == $this::ULTIMA_FILA){ - break; - } - - //filas que no tienen tipo - if (!Arr::has($registro,$this::FILA_HEADER)|| trim($registro[$this::FILA_HEADER]) == ''){ - var_dump("no hay tipo en la fila " . $i); - continue; - } - - //saltear bono de transporte - if ($registro[$this::FILA_HEADER] == "T"){ - continue; - } - - //obtener categoria - if ($registro['Producto'] == '') { - //es la pregunta de la copa? - if (Str::contains($registro[$this::FILA_HEADER],"¿")) { continue; } - $categoria = $registro[$this::FILA_HEADER]; - continue; - } - - //completar producto - $toInsert[] = [ - 'fila' => $i, - 'categoria' => $categoria, - 'nombre' => trim(str_replace('*', ' ',$registro['Producto'])), - 'precio' => $registro['Precio'], - 'proveedor_id' => $this->obtenerProveedor($registro['Producto']), - 'bono' => $registro[$this::FILA_HEADER] == "B", - 'requiere_notas'=> $registro[$this::FILA_HEADER] =="PTC", - ]; - } - - foreach (array_chunk($toInsert,DatabaseSeeder::CHUNK_SIZE) as $chunk) - { - DB::table('productos')->insert($chunk); - } - } - - private function obtenerIndiceDeHeader($csv){ - $registros = $csv->getRecords(); - $iheader = 0; - foreach ($registros as $i => $registro){ - if (strtolower($registro[0]) == strtolower($this::FILA_HEADER)) { - $iheader = $i; - break; - } - } - return $iheader; - } - - private function obtenerProveedor($nombre) { - $result = null; - if (Str::contains($nombre,"*")){ - $result = Proveedor::firstOrCreate([ - 'nombre' => 'Proveedor de economía solidaria', - 'economia_solidaria' => 1, - 'nacional' => 1 - ])->id; - } - return $result; + CanastaHelper::cargarCanasta(self::ARCHIVO_DEFAULT); } }