<?php
session_start();
include "../../inc/config.php";
$json_response = array();
$jumlah = array();
if ($_POST['total_data']>0) {
		$url_rest = get_service_url('rest');

		$offset = $_POST['offset'];
		$token = $_POST['token'];

		$jumlah['offset'] = $offset;
		$jumlah['token'] = $_POST['token'];

		if ($offset==0) {
			$token = get_token();
		    $jumlah['token'] = $token;
		}

		$sem = "";
		$query_matkul = "";
		$query_kelas  = "";
		$jurusan = "";
		$status_data  = "";
		$query_not_in = "";
		$nim_concat = array();
		$nim_sms_concat = array();
		$data_loop_kelas = array();
		$id_kelas_where = array();
		$id_kelas_feeder = array();
		$nim_data = array();
		$id_kls_reg_pd = array();
		$error_code = "";
		$data_krs = array();
		$data_ids = array();
		$error_update_data = array();
		$data_id_error = array();
		$data_nim = array();
		$update_data = array();
		$data_id_sukses = array();
		$data_id_sukses_restore = array();
		$data_krs_update = array();
		$data_ids_up = array();
		$jumlah_sukses = 0;
		$jumlah_error = 0;
		$all_errors = array();
		$msg = "";
		$all_id = array();
		$all_krs_nilai_evaluasi_mahasiswa = array();
		$id_kls_reg_pd_error = array();
		$data_krs_nilai_evaluasi_mahasiswa = array();

		$data_update_nilai_evaluasi_mahasiswa = array();
		$data_id_update_nilai_evaluasi_mahasiswa = array();
		$data_update_nilai_evaluasi_mahasiswa_temp = array();
		$data_nilai_evaluasi_mahasiswa_temp_restore = array();
		$data_nilai_evaluasi_mahasiswa = array();
		$data_nilai_evaluasi_mahasiswa_temp_restore_final = array();
		$data_nilai_evaluasi_mahasiswa_sukses_restore = array();
		$data_id_final = array();


    	if ($_POST['sem']!='all') {
      		$sem = "and nilai_evaluasi_mahasiswa.semester='".$_POST['sem']."'";
    	}

		if ($_POST['matkul']!='all') {
			$query_matkul = "and kode_mk='".$_POST['matkul']."'";
		}
		if ($_POST['kelas']!='all') {
			$query_kelas  = "and nama_kelas='".$_POST['kelas']."'";
		}
		
		if ($_POST['jurusan']!='all') {
			$jurusan = "and trim(nilai_evaluasi_mahasiswa.kode_jurusan_kelas)='".trim($_POST['jurusan'])."'";
		} else {
			if ($_SESSION['level']!=1) {
				$jurusan = "and trim(nilai_evaluasi_mahasiswa.kode_jurusan_kelas)='".$_SESSION['jurusan']."'";
			}
		}

		  if ($_POST['status_data']!='all') {
		    $status_data  = "and status_error='".$_POST['status_data']."'";
		  } else {
		    $status_data  = "and status_error!=1";
		  }

		 $query_not_in = "and unik_id not in(".$_POST['random_number'].")"; ;

		$data_for_id_kelas = $db->fetch_custom("select nilai_evaluasi_mahasiswa.*,jurusan.id_sms as id_sms_kelas,nilai_evaluasi_mahasiswa.id as id_krs,
		(select id_sms from jurusan where jurusan.kode_jurusan=nilai_evaluasi_mahasiswa.kode_jurusan) as id_sms_mhs from nilai_evaluasi_mahasiswa inner join jurusan on nilai_evaluasi_mahasiswa.kode_jurusan_kelas=jurusan.kode_jurusan
		 where nilai_evaluasi_mahasiswa.id is not null $sem $jurusan $status_data $query_matkul $query_kelas $query_not_in limit 4");

		
		foreach ($data_for_id_kelas as $dt_id) {
			//$id_kelas_array[] = $dt_id->id_krs;
			//$nim_concat[convert_ascii($dt_id->nim)] = "('".$dt_id->nim."')";
			//$nim_sms_concat[convert_ascii($dt_id->nim)] = "('".$dt_id->nim."','".$dt_id->id_sms_mhs."')";
			$kode_mk_like[$dt_id->kode_mk] = "kode_mata_kuliah like '%$dt_id->kode_mk%'";
			$nim_like[$dt_id->nim] = "nim like '%$dt_id->nim%'";
			$sms_and[$dt_id->id_sms_mhs] = "('".$dt_id->id_sms_mhs."')";
			$sms_and_kelas[$dt_id->id_sms_kelas] = "('".$dt_id->id_sms_kelas."')";
			$nama_kelas_like[$dt_id->nama_kelas] = "nama_kelas_kuliah like '%$dt_id->nama_kelas%'";
			$id_semester_in[$dt_id->semester] = "('".$dt_id->semester."')";
			$data_loop_kelas[] = $dt_id;
			$id_kelas_where[$dt_id->id_sms_kelas.trim($dt_id->kode_mk).trim($dt_id->nama_kelas).$dt_id->semester] = "('".$dt_id->id_sms_kelas."','".trim($dt_id->kode_mk)."','".trim($dt_id->nama_kelas)."','".trim($dt_id->semester)."')";
			//check periode
			//$periode_concat[convert_ascii($dt_id->id_sms).convert_ascii($dt_id->semester)] = "('".$dt_id->id_sms."','".$dt_id->semester."')";

		}



		$implode_prodi = implode(",",$sms_and);
		$implode_id_kelas = implode(",", $id_kelas_where);
		$implode_sms_kelas = implode(",", $sms_and_kelas);
		$implode_semester = implode(",", $id_semester_in);
		$implode_nama_kelas_like = implode(" or ",$nama_kelas_like);
		$implode_kode_mk_like = implode(" or ",$kode_mk_like);
		
		$kelas_filter = "(id_prodi,trim(kode_mata_kuliah),trim(nama_kelas_kuliah),id_semester) IN ($implode_id_kelas)";
$kelas_filter = "id_prodi in($implode_sms_kelas) and id_semester in($implode_semester) and ($implode_kode_mk_like) and ($implode_nama_kelas_like)";
			$data_req_kelas = [
				'act' => 'GetDetailKelasKuliah',
			    'token' => $token,
			    'filter' => $kelas_filter,
			    'order' => "",
			    'limit' => "",
			    'offset' => ""

			];
			$check_kelas_exist = json_decode($db->run($data_req_kelas,$url_rest));
/*			dump($data_req_kelas);
			dump($check_kelas_exist);*/
			$id_only_kelas = array();
			if (!empty($check_kelas_exist->data)) {
				foreach ($check_kelas_exist->data as $dt_id_kelas) {
				$id_only_kelas[] = "'".$dt_id_kelas->id_kelas_kuliah."'";
				$id_kelas_feeder[$dt_id_kelas->id_prodi.convert_ascii($dt_id_kelas->kode_mata_kuliah).convert_ascii($dt_id_kelas->nama_kelas_kuliah).convert_ascii($dt_id_kelas->id_semester)] = $dt_id_kelas->id_kelas_kuliah;
				}
			}

			$komponen_evaluasi_kelas23 = array();
			$komponen_evaluasi_kelas = array();
			$partisipasi_id = array();
			$proyek_id = array();
			$quiz_id = array();
			$tugas_id = array();
			$uts_id = array();
			$uas_id = array();
			//check if update
				if (!empty($id_only_kelas)) {
					$implode_kelas = implode(",",$id_only_kelas);
					$data_req_kelas_komponen = [
					'act' => 'GetListKomponenEvaluasiKelas',
				    'token' => $token,
				    'filter' => "id_kelas_kuliah in($implode_kelas)"
				];
				$check_kelas_komponen_exist = json_decode($db->run($data_req_kelas_komponen,$url_rest));
				if (!empty($check_kelas_komponen_exist->data)) {
					foreach ($check_kelas_komponen_exist->data as $kom_kelas) {

						if ($kom_kelas->id_jenis_evaluasi==2) {
							$partisipasi_id[$kom_kelas->id_kelas_kuliah] = $kom_kelas->id_komponen_evaluasi;
						} elseif ($kom_kelas->id_jenis_evaluasi==3) {
							$proyek_id[$kom_kelas->id_kelas_kuliah] = $kom_kelas->id_komponen_evaluasi;
						} elseif ($kom_kelas->id_jenis_evaluasi==4 && $kom_kelas->nama=='QIZ') {
							$quiz_id[$kom_kelas->id_kelas_kuliah] = $kom_kelas->id_komponen_evaluasi;
						} elseif ($kom_kelas->id_jenis_evaluasi==4 && $kom_kelas->nama=='TGS') {
							$tugas_id[$kom_kelas->id_kelas_kuliah] = $kom_kelas->id_komponen_evaluasi;
						} elseif ($kom_kelas->id_jenis_evaluasi==4 && $kom_kelas->nama=='UTS') {
							$uts_id[$kom_kelas->id_kelas_kuliah] = $kom_kelas->id_komponen_evaluasi;
						} elseif ($kom_kelas->id_jenis_evaluasi==4 && $kom_kelas->nama=='UAS') {
							$uas_id[$kom_kelas->id_kelas_kuliah] = $kom_kelas->id_komponen_evaluasi;
						}
					}
					
				}
					
				}

		$implode_nim_like = implode(" or ",$nim_like);
		
		//$filter_mhs = "(regexp_replace(trim(nim), '[^[:alnum:]\s.]+', ''), id_prodi) in ($nim_concat_where)";
		//$filter_mhs = "(trim(nim),id_prodi) in ($nim_concat_where)";
		$data_req_mhs = [
			'act' => 'GetListMahasiswa',
		    'token' => $token,
		    //'filter' => $filter_mhs,
		    'filter' => "id_registrasi_mahasiswa is not null and ($implode_nim_like) and id_prodi in($implode_prodi)",
		    'order' => "",
		    'limit' => "",
		    'offset' => ""

		];

		$nim_data_keluar = array();
		$check_nim_exist = json_decode($db->run($data_req_mhs,$url_rest));

		/*dump($data_req_mhs);
		dump($check_nim_exist);*/
		if (!empty($check_nim_exist->data)) {
			foreach ($check_nim_exist->data as $nim_mhs) {
				//dump($nim_data);
				$nim_data[convert_ascii($nim_mhs->nim).'n'] = $nim_mhs->id_registrasi_mahasiswa;
			
			}
		}
		//dump($nim_data);


	$native_array_data = array();
	$ids_data = array();
	$kls_reg = array();
	$data_insert_krs = array();
	$data_id = array();
	$array_komponen = array(
		1 => 'partisipatif',2 => 'proyek',3 => 'quiz',4 => 'tugas',5 => 'uts',6 => 'uas'
	);
	$error_push = "";
		foreach ($data_loop_kelas as $value) {
			$nim = convert_ascii($value->nim).'n';
			$kode_mk = trim($value->kode_mk);
			$kelas = trim($value->nama_kelas);
			$semester = $value->semester;
			$id_sms = trim($value->id_sms_kelas);
			$kelas_nilai_evaluasi_mahasiswa_id = $value->id_sms_kelas.convert_ascii($kode_mk).convert_ascii($kelas).convert_ascii($semester);
			//check if mhs exist
				if (in_array($nim, array_keys($nim_data))) {
					$id_reg_pd = $nim_data[$nim];
					if (in_array($kelas_nilai_evaluasi_mahasiswa_id, array_keys($id_kelas_feeder))) {
						$id_kls = $id_kelas_feeder[$id_sms.$kode_mk.$kelas.$semester];
						
						if (!in_array($id_kls,array_keys($partisipasi_id))) {
							$error_update_data[] = array(
								'keterangan' => "Komponen Evaluasi Kelas belum ada, silakan import di menu Komponen Evaluasi Kelas",
								'status_error' => 2
							);
							$data_id_error[] = $value->id_krs;
							$error_push = 'Komponen Evaluasi Kelas belum ada, silakan import di menu Komponen Evaluasi Kelas';
						} else {
							$error_push = "";
							foreach ($array_komponen as $key => $iterator) {
								if ($key==1 && in_array($id_kls,array_keys($partisipasi_id))) {
									$key_update['id_komponen_evaluasi'] = $partisipasi_id[$id_kls];
									$key_update['id_registrasi_mahasiswa'] = $id_reg_pd;
									$record_update = array(
										'nilai_komponen_evaluasi' => $value->partisipatif
									);
								  	$data_dic = [
								      'act' => 'UpdateNilaiPerkuliahanKelasKomponenEvaluasi',
								      'key' => $key_update,
								        'token' => $token,
								        'record' => $record_update,
								    ];
									$update_nilai_evaluasi_mahasiswa = service_request($data_dic);
									/*dump($data_dic);
									dump($update_nilai_evaluasi_mahasiswa);
									exit();*/
									$value_data = addslashes($update_nilai_evaluasi_mahasiswa->error_desc);
									if ($value_data!='') {
										$error_push .= $value_data;
									}
								}
								//id 3
								if ($key==2 && in_array($id_kls,array_keys($proyek_id))) {
									$key_update['id_komponen_evaluasi'] = $proyek_id[$id_kls];
									$key_update['id_registrasi_mahasiswa'] = $id_reg_pd;
									$record_update = array(
										'nilai_komponen_evaluasi' => ($value->proyek==''?'0':$value->proyek)
									);
								  	$data_dic = [
								      'act' => 'UpdateNilaiPerkuliahanKelasKomponenEvaluasi',
								      'key' => $key_update,
								        'token' => $token,
								        'record' => $record_update,
								    ];
									$update_nilai_evaluasi_mahasiswa = service_request($data_dic);
									/*dump($data_dic);
									dump($update_nilai_evaluasi_mahasiswa);*/
									$value_data = addslashes($update_nilai_evaluasi_mahasiswa->error_desc);
									if ($value_data!='') {
										$error_push .= $value_data;
										}
								}
								//id 4 kuis
								if ($key==3 && in_array($id_kls,array_keys($quiz_id))) {
									$key_update['id_komponen_evaluasi'] = $quiz_id[$id_kls];
									$key_update['id_registrasi_mahasiswa'] = $id_reg_pd;
									$record_update = array(
										'nilai_komponen_evaluasi' => ($value->quiz==''?'0':$value->quiz)
									);
								  	$data_dic = [
								      'act' => 'UpdateNilaiPerkuliahanKelasKomponenEvaluasi',
								      'key' => $key_update,
								        'token' => $token,
								        'record' => $record_update,
								    ];
									$update_nilai_evaluasi_mahasiswa = service_request($data_dic);
									/*dump($data_dic);
									dump($update_nilai_evaluasi_mahasiswa);*/
									$value_data = addslashes($update_nilai_evaluasi_mahasiswa->error_desc);
									if ($value_data!='') {
										$error_push .= $value_data;
										}
								}
								//id 4 tugas
								if ($key==4 && in_array($id_kls,array_keys($tugas_id))) {
									$key_update['id_komponen_evaluasi'] = $tugas_id[$id_kls];
									$key_update['id_registrasi_mahasiswa'] = $id_reg_pd;
									$record_update = array(
										'nilai_komponen_evaluasi' => ($value->tugas==''?0:$value->tugas)
									);
								  	$data_dic = [
								      'act' => 'UpdateNilaiPerkuliahanKelasKomponenEvaluasi',
								      'key' => $key_update,
								        'token' => $token,
								        'record' => $record_update,
								    ];
									$update_nilai_evaluasi_mahasiswa = service_request($data_dic);
									/*dump($data_dic);
									dump($update_nilai_evaluasi_mahasiswa);*/
									$value_data = addslashes($update_nilai_evaluasi_mahasiswa->error_desc);
									if ($value_data!='') {
										$error_push .= $value_data;
										}
								}
								//id 4 uts
								if ($key==5 && in_array($id_kls,array_keys($uts_id))) {
									$key_update['id_komponen_evaluasi'] = $uts_id[$id_kls];
									$key_update['id_registrasi_mahasiswa'] = $id_reg_pd;
									$record_update = array(
										'nilai_komponen_evaluasi' => ($value->uts==''?'0':$value->uts)
									);
								  	$data_dic = [
								      'act' => 'UpdateNilaiPerkuliahanKelasKomponenEvaluasi',
								      'key' => $key_update,
								        'token' => $token,
								        'record' => $record_update,
								    ];
									$update_nilai_evaluasi_mahasiswa = service_request($data_dic);
									/*dump($data_dic);
									dump($update_nilai_evaluasi_mahasiswa);*/
									$value_data = addslashes($update_nilai_evaluasi_mahasiswa->error_desc);
									if ($value_data!='') {
										$error_push .= $value_data;
										}
								}
								//id 4 uas
								if ($key==6 && in_array($id_kls,array_keys($uas_id))) {
									$key_update['id_komponen_evaluasi'] = $uas_id[$id_kls];
									$key_update['id_registrasi_mahasiswa'] = $id_reg_pd;
									$record_update = array(
										'nilai_komponen_evaluasi' => ($value->uas==''?'0':$value->uas)
									);
								  	$data_dic = [
								      'act' => 'UpdateNilaiPerkuliahanKelasKomponenEvaluasi',
								      'key' => $key_update,
								        'token' => $token,
								        'record' => $record_update,
								    ];
									$update_nilai_evaluasi_mahasiswa = service_request($data_dic);
									/*dump($data_dic);
									dump($update_nilai_evaluasi_mahasiswa);*/
									$value_data = addslashes($update_nilai_evaluasi_mahasiswa->error_desc);
									if ($value_data!='') {
										$error_push .= $value_data;
										}
								}
							}
						}

						if ($error_push!='') {
							$error_update_data[] = array(
								'keterangan' => $error_push ,
								'status_error' => 2
							);
							$data_id_error[] = $value->id_krs;
						} else {
							$update_data[] = array(
										'keterangan' => '',
										'status_error' => 1
									);
							$data_id_sukses[] = $value->id_krs;
						}
					} else {
						$error_update_data[] = array(
							'keterangan' => "Pastikan Kelas Sudah Dibuat",
							'status_error' => 2
						);
						$data_id_error[] = $value->id_krs;
					}

				} else {
					$error_update_data[] = array(
						'keterangan' => "Nim Mahasiswa ini tidak ditemukan di feeder",
						'status_error' => 2
					);
					$data_id_error[] = $value->id_krs;
				}
			$all_id[] = $value->id_krs;
			$id_kls = "";
			$id_reg_pd = "";
		}

		
		//update error
		if (!empty($error_update_data)) {
			updateMulti('nilai_evaluasi_mahasiswa',$error_update_data,'id',$data_id_error);
		}
		$error_update_data = array();
		$data_id_error = array();
		//update sukses
		if (!empty($update_data)) {
			updateMulti('nilai_evaluasi_mahasiswa',$update_data,'id',$data_id_sukses);
		}

		$update_data = array();
		$data_id_sukses = array();

		$implode_id = implode(",", $all_id);
		
		$db->fetch_custom("update nilai_evaluasi_mahasiswa set unik_id=".$_POST['random_number']." where id in (".$implode_id.")");

		if (isset($_POST['id_data'])) {

		$jml_error_sukses = $db->fetch_custom_single("SELECT COUNT(IF(status_error='1',1,NULL)) AS jml_sukses,COUNT(IF(status_error='2',1,NULL)) AS jml_error FROM nilai_evaluasi_mahasiswa where unik_id=".$_POST['random_number']);

		$jumlah_sukses = $jml_error_sukses->jml_sukses;
		$jumlah_error = $jml_error_sukses->jml_error;

		$db->fetch_custom("update nilai_evaluasi_mahasiswa set unik_id=0 where  unik_id=".$_POST['random_number']);
		
		$msg =  "<div class=\"alert alert-warning \" role=\"alert\">
		<font color=\"#3c763d\">".$jumlah_sukses." data Nilai Evaluasi Mahasiswa berhasil ditambah</font><br />
		<font color=\"#ce4844\" >".$jumlah_error." data tidak bisa ditambahkan </font>";
		
		if (!$jumlah_error==0) {
			$msg .= "<a data-toggle=\"collapse\" href=\"#collapseExample\" aria-expanded=\"false\" aria-controls=\"collapseExample\">Detail error</a>";

			$all_errors = array('Silakan lihat detail error di list data');
			
		}
		//echo "<br />Total: ".$i." baris data";
		$msg .= "<div class=\"collapse\" id=\"collapseExample\">";
				$i=1;
				foreach ($all_errors as $pesan) {
						$msg .= "<div class=\"bs-callout bs-callout-danger\">".$pesan."</div><br />";
					$i++;
					}
		$msg .= "</div>
		</div>";


		$jumlah['last_notif'] = $msg;
	}


} else {
	$msg =  "Tidak ada data yang bisa diproses<p>";
		$jumlah['last_notif'] = $msg;
}

array_push($json_response, $jumlah);
echo json_encode($json_response);
//echo convert(memory_get_usage(true)); // 123 kb