예제 #1
0
 public function upload_save(Request $request)
 {
     $this->validate($request, ['excel' => 'required']);
     $inputFileName = $request->excel;
     try {
         $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
         $objReader = PHPExcel_IOFactory::createReader($inputFileType);
         $objPHPExcel = $objReader->load($inputFileName);
     } catch (Exception $e) {
         die('Error loading file "' . pathinfo($inputFileName, PATHINFO_BASENAME) . '": ' . $e->getMessage());
     }
     $sheet = $objPHPExcel->getSheet(0);
     $highestRow = $sheet->getHighestRow();
     $highestColumn = $sheet->getHighestColumn();
     $start = false;
     $data_count = 0;
     $errors = 0;
     $semester = Semester::get_active_semester()->id;
     $id_siswa = null;
     for ($row = 1; $row <= $highestRow; $row++) {
         $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
         if (!$start) {
             if ($rowData[0][0] == "1" || $rowData[0][0] == "1.") {
                 $start = true;
             }
         }
         if ($start) {
             if (empty($rowData[0][3]) || empty($rowData[0][4])) {
                 continue;
             }
             $data_count++;
             $new = new Pkl();
             if (!empty($rowData[0][1])) {
                 $siswa = Siswa::where('nis', $rowData[0][1])->first();
                 if (!$siswa) {
                     $errors++;
                     $id_siswa = null;
                     continue;
                 }
                 $id_siswa = $siswa->id;
             } else {
                 if ($id_siswa == null) {
                     continue;
                 }
             }
             $created = null;
             $check = Pkl::where('mitra', $rowData[0][3])->where('lokasi', $rowData[0][4])->where('id_siswa', $id_siswa)->where('id_semester', $semester);
             $old = $check->first();
             if ($old) {
                 $created = $old->created_at;
                 $check->delete();
             }
             $new = new Pkl();
             $new->mitra = $rowData[0][3];
             $new->lokasi = $rowData[0][4];
             $new->lama = $rowData[0][5];
             $new->keterangan = $rowData[0][6];
             $new->id_siswa = $id_siswa;
             $new->id_semester = $semester;
             if ($created) {
                 $new->created_at = $created;
             }
             try {
                 $new->save();
             } catch (\Illuminate\Database\QueryException $e) {
                 $errors++;
             }
         }
     }
     if (!$start) {
         $message = "Tidak ada data ditemukan. Pastikan kolom nomor ada pada kolom A dan dimulai dengan angka 1.";
     } else {
         $message = "Upload file selesai. Terbaca ada {$data_count} data. ";
         $message .= $errors > 0 ? "Ada masalah dengan {$errors} data, dan tidak dapat dimasukkan ke dalam database." : "Semua data berhasil ditambahkan.";
     }
     return redirect()->route('nilai.pkl')->with('message', $message);
 }