getClientOriginalName(); $data->move(resource_path($path), $nombre); self::log($path . $nombre, self::ARCHIVO_SUBIDO); return $nombre; } 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(); $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); } self::agregarBonoBarrial(); 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,"*")){ $result = Proveedor::firstOrCreate([ 'nombre' => 'Proveedor de economía solidaria', 'economia_solidaria' => 1, 'nacional' => 1 ])->id; } return $result; } /** * @param $nombre * @param $descripcion * @return void */ private static function log($nombre, $descripcion): void { $log = new CanastaLog([ 'nombre' => $nombre, 'descripcion' => $descripcion, ]); $log->save(); } private static function limpiarTablas() { DB::delete('delete from producto_subpedido'); DB::delete('delete from productos'); DB::delete('delete from subpedidos'); } private static function agregarBonoBarrial() { $categoria = Producto::all()->pluck('categoria')->unique()->flatten()->first(function ($c) { return Str::contains($c, 'BONO'); }); DB::table('productos')->insert([ 'fila' => 420, 'nombre' => "Bono barrial", 'precio' => 20, 'categoria' => $categoria, 'bono' => 1, 'proveedor_id' => null, 'requiere_notas'=> false, ]); } }