From b50fa7b2406327add61143d394df960d67d7a514 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Mon, 30 Mar 2026 15:39:48 +0700 Subject: [PATCH] feat: add console command to import student data from CSV file --- .../Commands/ImportStudentsCommand.php | 150 ++++++++++++++++++ public/Data MHS SI.csv | 51 ++++++ 2 files changed, 201 insertions(+) create mode 100644 app/Console/Commands/ImportStudentsCommand.php create mode 100644 public/Data MHS SI.csv diff --git a/app/Console/Commands/ImportStudentsCommand.php b/app/Console/Commands/ImportStudentsCommand.php new file mode 100644 index 0000000..8e5dd94 --- /dev/null +++ b/app/Console/Commands/ImportStudentsCommand.php @@ -0,0 +1,150 @@ +argument('file')); + + if (! file_exists($filePath)) { + $this->error("File not found: {$filePath}"); + + return 1; + } + + // Handle CSV properly including potential multi-line fields + $allRowsData = []; + if (($handle = fopen($filePath, 'r')) !== false) { + while (($data = fgetcsv($handle, 0, ',')) !== false) { + // Skiping empty last rows + if (array_filter($data)) { + $allRowsData[] = $data; + } + } + fclose($handle); + } + + $successCount = 0; + $errorCount = 0; + + $this->info('Importing student data ('.count($allRowsData).' entities)...'); + + foreach ($allRowsData as $index => $data) { + if (count($data) < 7) { + continue; + } + + try { + DB::transaction(function () use ($data, &$successCount) { + $fullName = trim($data[0]); + $studentNumber = trim($data[1]); + $phoneNumber = trim($data[2]); + $sexRaw = trim($data[3]); + $placeOfBirth = trim($data[4]); + $dobRaw = trim($data[5]); + $address = trim($data[6]); + + if (empty($fullName) || empty($studentNumber)) { + return; + } + + // Mapping sex + $sex = str_contains(strtolower($sexRaw), 'perempuan') ? Sex::Female : Sex::Male; + + // Mapping Date Of Birth + try { + $dateOfBirth = Carbon::parse($dobRaw)->format('Y-m-d'); + } catch (\Exception $e) { + $dateOfBirth = '2000-01-01'; + } + + // Create/Restore User + $user = User::withTrashed()->updateOrCreate( + ['username' => $studentNumber], + [ + 'email' => $studentNumber.'@student.ac.id', + 'password' => Hash::needsRehash($studentNumber) ? Hash::make($studentNumber) : $studentNumber, + 'is_active' => IsActive::Active, + ] + ); + + if ($user->trashed()) { + $user->restore(); + } + + // Rehash password if newly created or needs it + if ($user->wasRecentlyCreated) { + $user->update(['password' => Hash::make($studentNumber)]); + } + + // Assign Role (using RoleEnum::Student) + try { + $user->syncRoles([RoleEnum::Student]); + } catch (\Exception $e) { + // ignore role error if not exists + Log::warning("Could not assign role to user {$studentNumber}: ".$e->getMessage()); + } + + // Create/Restore Student + $student = Student::withTrashed()->updateOrCreate( + ['student_number' => $studentNumber], + [ + 'user_id' => $user->id, + 'full_name' => $fullName, + 'phone_number' => '0'.$phoneNumber, + 'sex' => $sex, + 'address' => $address, + 'date_of_birth' => $dateOfBirth, + 'place_of_birth' => $placeOfBirth, + ] + ); + + if ($student->trashed()) { + $student->restore(); + } + + $successCount++; + }); + } catch (\Exception $e) { + $this->error('Error at row '.($index + 1).': '.$e->getMessage()); + Log::error('Import Row Error: '.$e->getMessage()); + $errorCount++; + } + } + + $this->newLine(); + $this->info("Import completed: {$successCount} Success, {$errorCount} Errors."); + + return 0; + } +} diff --git a/public/Data MHS SI.csv b/public/Data MHS SI.csv new file mode 100644 index 0000000..770517d --- /dev/null +++ b/public/Data MHS SI.csv @@ -0,0 +1,51 @@ +Teguh Budi Harto,2457201032,81990384149,Laki Laki,Trenggalek,1978-07-25,Jln Anis 3 Blok C5.39 RT.11 RW.13 Perum Bukit Panorama Indah Ciseureuh Purwakarta +Riyan Ardiansyah,2457201037,8.82001E+11,Laki Laki,Purwakarta,2006-06-05,Bandung +Nurdin,2457201024,83195796437,Laki Laki,Purwakarta,2005-07-09,PURWAKARTA +Julio Sandra,2457201018,89519340176,Laki Laki,Padang,2003-07-17,Purwakarta +Dede rohmat,2457201026,85213590894,Laki Laki,Subang,2000-06-14,"Karawang +Karawang" +Suparjono,2457201052,82310975015,Laki Laki,Boyolali,1979-01-07,"Perum. Bukit Panorama Indah +Blok C5 no.50 +RT 11 RW 13 +Ciseureuh +Purwakarta" +Abdulah Syauki,2457201019,83116672027,Laki Laki,Subang,2005-10-08,Kp. Sukajaya Ds. Wanakerta Kec. Purwadadi Kab. Subang Jawa Barat +Dicky permana,2457201009,83148505597,Laki Laki,KABUPATEN PURWAKARTA,2006-02-21,Kp. Cikakak RT/RW 009/005 Des. Batutumpang Kec. Tegalwaru +AHMAD GINANJAR,2457201038,87824493963,Laki Laki,Purwakarta,1999-09-04,Ds. Legokhuni 006/002 Kec. Wanayasa Kab. Purwakarta +Nanang Setiawan,2457201029,85759072373,Laki Laki,Ngawi,1987-03-06,Perum panorama indah +Nurisa Istiqomah,2457201002,85721146920,Perempuan,Purwakarta,2006-06-11,"Jln. Pramuka no.11, RT/RW: 001/001 Ds Bunder, Kec. Jatiluhur, Kab. Purwakarta - 41152 Jawa Barat" +Siti Nurlaela,2457201022,85711657143,Perempuan,Karawang,2004-12-08,Karawang +Yoga Pangestu,2457201008,72121495806,Laki Laki,Subang,2005-03-13,Purwakarta +Siti Aminah,2457201025,83147598816,Perempuan,Purwakarta,2005-05-09,Purwakarta +Rendy Handana,2457201005,87782861989,Laki Laki,Karawang,1989-06-06,Gg Mawar Purwakarta +Tiara Dea Eka Pratiwi,2457201023,83159389815,Perempuan,Purwakarta,2006-07-05,Purwakarta +Firdaus Fadhilah,2457201014,82111193100,Laki Laki,Purwakarta,2001-05-02,"Lelilef Sawai, Kec. Weda Tengah, Kab. Halmahera Tengah, Prov. Maluku Utara" +UJANG FINA ABDUL FATAH,2457201001,85846002358,Laki Laki,Purwakarta,2004-07-18,Kp. Ciwareng kulon RT.10/RW.04 Ds. Cibogo girang +Azhari Fikri,2457201039,83829951942,Laki Laki,Purwakarta,2004-12-02,"Purwakarta, Kec.Wanayasa, Ds.Wanasari" +Robi Repaldo,2457201004,8993118873,Laki Laki,SUBANG,2004-09-27,SUBANG +Fajar Karismawan,2457201033,83102038013,Laki Laki,Subang,2005-04-30,Wanayasa +Nazla Khoerun Nisa,2457201020,83816319230,Perempuan,Purwakarta,2004-04-30,Kp. Cipinang 09/04 Ds. Cipinang Kec. Cibatu Kab. Purwakarta +denna agustin,2457201017,85938650364,Perempuan,purwakarta,2026-03-29,purwakarta +Nina Man Aida,2457201040,8315878103,Perempuan,Ciamis,1999-10-25,Dsn.Cisodong Rt.035 Rw.008 Ds.Sindangsari Kec.Cimerak Kab.Pangandaran +Agung sri aprilianto,2457201016,83821988145,Laki Laki,Purwakarta,1993-04-04,Kp.krajan rt 001 rw 002 desa situ kec.pondoksalam kab purwakarta +Saras Ayuwati,2457201028,85314092893,Perempuan,Ciamis,1998-11-21,"Kebon Jeruk, Jakarta" +Muhamad Abdul Rohan,2457201011,83861811988,Laki Laki,Purwakarta,2005-12-29,Wanayasa +Rizki Saepuloh,2457201021,85218384590,Laki Laki,Sumedang,2004-05-12,Purwakarta +Putri Widiyanti Rohman,2457201055,85715425723,Perempuan,Grobogan,1999-11-11,"Jl Masjid Al Abror, Tangerang Selatan" +Abdul Azis Alfarizy,2857201044,83829951981,Laki Laki,Purwakarta,2006-06-17,"Purwakarta, wanayasa" +Abdul Walid,2457201043,83141324836,Laki Laki,Purwakarta,2004-09-04,Wanayasa purwakarta +Dika Zainal Aspia,2457201015,8383451545,Laki Laki,Purwakarta,2002-12-15,Kp. Sukajaga RT. 09/04 Desa. Cihajawar Kec. Bojong +Muhammad Nuryana Iskandar,2457201048,85703573107,Laki Laki,Bandung,1999-06-02,Jl. Sekeloa No. 151/152c RT03 RW05 Kelurahan Sekeloa Kecamatan Coblong Kota Bandung Provinsi Jawa Barat 40134 +Gilang Rivaldy,2457201049,83824862809,Laki Laki,Purwakarta,2004-08-19,"GG.salim, RT02/ RW01 +Kel.MunjulJaya +Kab.Purwakarta" +Muhammad Zacky Alghifari,2457201053,83168283392,Laki Laki,Purwakarta,2005-04-27,"Ds. Linggamukti, Kec. Darangdan, Kab. Purwakarta." +DONI SETIAWAN RAMADHAN,2457201007,85793462823,Laki Laki,PURWAKARTA,2004-10-30,"KP. TEGAL KELAPA, DESA CITEKO, KEC PLERED, KAB PURWAKARTA" +Dava Rifandi,2457201013,85220637953,Laki Laki,18 agustus 2006,2006-08-18,Jl. Sekeloa utara no 183/152c Kota Bandung +Luqman Nurhuda,2457201050,8.81022E+11,Laki Laki,Bandung,2000-02-12,Jl. Sekeloa Utara no 11b RT04 rw05 kelurahan sekeloa kecamatan Coblong kota bandung +Lisnawati,2457201006,85624430269,Perempuan,Tasikmalaya,2002-04-25,"Campaka, Purwakarta" +MUHAMMAD BASITH ARRASYID,2457201031,89518782297,Laki Laki,PURWAKARTA,1995-11-11,PURWAKARTA +Muhamad Agus Saepudin,2457201012,895402277699,Laki Laki,Purwakarta,1992-08-11,Perumahan Griya Ebony Campaka Purwakarta +Lusi Kusnaeni,2457201054,81548791826,Perempuan,Boyolali,1998-09-10,"Bakulan , RT 02 RW 04, Jelok, Cepogo, Boyolali, Jawa Tengah" +HILMAN ALBAR,2457201030,87844729757,Laki Laki,SUBANG,2005-02-17,Marengmang - Kalijati - Subang +Asep Irawan,2457201003,81546505033,Laki Laki,Purwakarta,2005-09-24,Kiarapedes