<?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'];
		$jumlah['offset'] = $offset;
		$token = $_POST['token'];
		$jumlah['token'] = $_POST['token'];

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

		$error_kelas = "";
		$sukses_count = 0;
		$error_count = 0;
		$error_count_in = 0;
		$error_msg = array();
		$id_kelas_feeder = array();
		$update_data = array();
		$update_data_status = array();
	
		$update_data_er =array();
		$update_data_er_status =array();
		$error_mk = "";

		$data_id_sukses = array();
		$data_id_error= array();
	
		$all_errors = array();
		$all_error = array();
		$query_not_in = "";
		$id_mk = "";
		$error_mk = "";
		$msg = "";
		$query_matkul = '';
		$query_kelas = '';
		$query_jurusan = '';
		$all_id = array();
		$data_rencana = array();
		$data_kls = array();
		$filter_mk_where = array();

		$array_id_mk = array();
		$array_id_mk_cross = array();
		$data_rencana_evaluasi = array();
		$error_data = "";
		$error_update_data = array();
		$data_id_error = array();
		$array_exist_evaluasi = array();
		$kode_mk = array();

		//merdeka
		$data_rencana = array();

		$sem = "";
		if ($_POST['sem']!='all') {
			$sem = "and kelas_komponen_evaluasi.semester='".$_POST['sem']."'";
		}
		if ($_POST['matkul']!='all') {
			$query_matkul = "and trim(kode_mk)='".trim($_POST['matkul'])."'";
		}

		if ($_POST['jurusan']!='all') {
			$query_jurusan = "and trim(jurusan.kode_jurusan)='".trim($_POST['jurusan'])."'";
		} else {
			if ($_SESSION['level']!=1) {
				$query_jurusan = "and trim(jurusan.kode_jurusan)='".$_SESSION['jurusan']."'";
			} else {
				$query_jurusan = "";
			}
		}

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

 		$get_kode_mk = $db->fetch_custom_single("select kelas_komponen_evaluasi.id as id_evaluasi,kelas_komponen_evaluasi.*,nm_jns_eval,jurusan.kode_jurusan,id_sms from kelas_komponen_evaluasi inner join jurusan on kelas_komponen_evaluasi.kode_jurusan=jurusan.kode_jurusan 
			left join jenis_evaluasi on id_jenis_evaluasi=jenis_evaluasi.id_jns_eval
			where kelas_komponen_evaluasi.id is not null $query_jurusan and status_error!=1 $sem $query_matkul $query_not_in group by kode_mk,jurusan.kode_jurusan limit 1");

		$data = $db->fetch_custom("select kelas_komponen_evaluasi.id as id_evaluasi,kelas_komponen_evaluasi.*,nm_jns_eval,jurusan.kode_jurusan,id_sms from kelas_komponen_evaluasi inner join jurusan on kelas_komponen_evaluasi.kode_jurusan=jurusan.kode_jurusan 
			left join jenis_evaluasi on id_jenis_evaluasi=jenis_evaluasi.id_jns_eval
			where kelas_komponen_evaluasi.id is not null $query_jurusan and status_error!=1 $sem $query_matkul $query_not_in");

		$id_kelas_where = array();
		foreach ($data as $dt_id) {
			$filter_mk_where[$dt_id->id_sms.convert_ascii($dt_id->kode_mk)] = "('".$dt_id->id_sms."','".convert_ascii($dt_id->kode_mk)."')";
			$data_rencana_evaluasi[] = $dt_id;
			$id_kelas_where[$dt_id->id_sms.trim($dt_id->kode_mk).trim($dt_id->nama_kelas).$dt_id->semester] = "('".$dt_id->id_sms."','".trim($dt_id->kode_mk)."','".trim($dt_id->nama_kelas)."','".trim($dt_id->semester)."')";
			$ids_array[] = $dt_id->id;
		}
			

			$implode_id_kelas = implode(",", $id_kelas_where);
			$kelas_filter = "(id_prodi,trim(kode_mata_kuliah),trim(nama_kelas_kuliah),id_semester) IN ($implode_id_kelas)";

			$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_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_only_kelas[] = "'".$dt_id_kelas->id_kelas_kuliah."'";
				}
			}
			$komponen_evaluasi_kelas23 = array();
			$komponen_evaluasi_kelas = 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) {
						//check komponen id_jns 2,3
						$komponen_evaluasi_kelas23[$kom_kelas->id_kelas_kuliah.$kom_kelas->id_jenis_evaluasi] = $kom_kelas;
						$komponen_evaluasi_kelas[$kom_kelas->id_kelas_kuliah.$kom_kelas->id_jenis_evaluasi.$kom_kelas->nama] = $kom_kelas; 
					}
					
				}
					
				}

			//dump($komponen_evaluasi_kelas);

$array_kom = array(
'TGS','QIZ','UTS','UAS'
);
//check validasi
function validasiData($val) {
	global $db;
	//check if jumlah is 6 record
	$jml_record = $db->fetch_custom_single("select count(id) as jml_record,sum(bobot_evaluasi) as jml_bobot from kelas_komponen_evaluasi where kode_jurusan='$val->kode_jurusan' and kode_mk='$val->kode_mk' and nama_kelas='$val->nama_kelas' and semester='".$_POST['sem']."'");
	if ($jml_record->jml_record!=6) {
		$res = array(
			'status' => false,
			'error_desc' => 'Pastikan jumlah data untuk Komponen evaluasi kelas ini berjumlah 6 data'
		);
	} elseif ($jml_record->jml_bobot < 100) {
		$res = array(
			'status' => false,
			'error_desc' => 'Total bobot Komponen evaluasi kelas ini tidak boleh kurang dari 100'
		);
	} elseif ($jml_record->jml_bobot > 100) {
		$res = array(
			'status' => false,
			'error_desc' => 'Total bobot Komponen evaluasi kelas ini tidak boleh lebih dari 100'
		);
	} else {
		$res = array(
			'status' => true,
			'error_desc' => 'Total bobot Komponen evaluasi kelas ini tidak boleh lebih dari 100'
		);
	}
	return $res;
}
		$is_hapus = 0;
		if (!empty($data_rencana_evaluasi)) {
			foreach ($data_rencana_evaluasi as $dt) {
				if ($dt->id_jenis_evaluasi==2) {
					$nomor_urut = 1;
				} elseif ($dt->id_jenis_evaluasi==3) {
					$nomor_urut = 2;
				} elseif ($dt->id_jenis_evaluasi==4 && $dt->komponen_evaluasi=='TGS') {
					$nomor_urut = 3;
				} elseif ($dt->id_jenis_evaluasi==4 && $dt->komponen_evaluasi=='QIZ') {
					$nomor_urut = 4;
				} elseif ($dt->id_jenis_evaluasi==4 && $dt->komponen_evaluasi=='UTS') {
					$nomor_urut = 5;
				} elseif ($dt->id_jenis_evaluasi==4 && $dt->komponen_evaluasi=='UAS') {
					$nomor_urut = 6;
				}
				if (!in_array($dt->id_sms.convert_ascii($dt->kode_mk).convert_ascii($dt->nama_kelas).convert_ascii($dt->semester), array_keys($id_kelas_feeder))) {
						$error_update_data[] = array(
							'keterangan' => "Kelas tidak ditemukan di Feeder",
							'status_error' => 2
						);
						$data_id_error[] = $dt->id;
				} elseif (in_array($dt->id_jenis_evaluasi,array(4)) && !in_array($dt->komponen_evaluasi,$array_kom)) {
					$error_update_data[] = array(
						'keterangan' => "Pastikan data sesuai format template",
						'status_error' => 2
					);
					$data_id_error[] = $dt->id;
				} elseif (!in_array($dt->id_jenis_evaluasi,array(2,3,4))) {
					$error_update_data[] = array(
						'keterangan' => "Pastikan data sesuai format template",
						'status_error' => 2
					);
					$data_id_error[] = $dt->id;
				} elseif (validasiData($dt)['status']==false) {
					$error_update_data[] = array(
						'keterangan' => validasiData($dt)['error_desc'],
						'status_error' => 2
					);
					$data_id_error[] = $dt->id;
				} else {
					if ($dt->id_jenis_evaluasi==2 or $dt->id_jenis_evaluasi==3) {
						$nama_kom = '-';
					} else {
						$nama_kom  = $dt->komponen_evaluasi;
					}
						if ($_POST['method']=='up') {
							$kelas_id = $dt->id_sms.convert_ascii($dt->kode_mk).$dt->nama_kelas.$dt->semester;				
							if (in_array($dt->id_jenis_evaluasi,array(2,3)) && !in_array($id_kelas_feeder[$kelas_id]->id_kelas_kuliah.$dt->id_jenis_evaluasi, array_keys($komponen_evaluasi_kelas23))) {
								$error_update_data[] = array(
									'keterangan' => "Komponen Evaluasi Kelas ini belum ada di feeder, silakan import pilih Method Insert",
									'status_error' => 2
								);
								$data_id_error[] = $dt->id;
							} elseif ($dt->id_jenis_evaluasi==4 && !in_array($id_kelas_feeder[$kelas_id]->id_kelas_kuliah.$dt->id_jenis_evaluasi.$nama_kom, array_keys($komponen_evaluasi_kelas))) {
								$error_update_data[] = array(
									'keterangan' => "Komponen Evaluasi Kelas ini belum ada di feeder, silakan import pilih Method Insert",
									'status_error' => 2
								);
								$data_id_error[] = $dt->id;
							} else {
									$record_update = array(
										'id_kelas_kuliah' => $id_kelas_feeder[$dt->id_sms.convert_ascii($dt->kode_mk).convert_ascii($dt->nama_kelas).convert_ascii($dt->semester)]->id_kelas_kuliah,
										'id_jenis_evaluasi' => $dt->id_jenis_evaluasi,
										'nama' => $nama_kom,
										'nama_inggris' => $dt->deskripsi_inggris,
										'nomor_urut' => $nomor_urut,
										'bobot_evaluasi' => (float)$dt->bobot_evaluasi
									);

									if(in_array($dt->id_jenis_evaluasi,array(2,3))) {
										$key_update['id_komponen_evaluasi'] = $komponen_evaluasi_kelas23[$id_kelas_feeder[$kelas_id]->id_kelas_kuliah.$dt->id_jenis_evaluasi]->id_komponen_evaluasi;
									} else {
										$key_update['id_komponen_evaluasi'] = $komponen_evaluasi_kelas[$id_kelas_feeder[$kelas_id]->id_kelas_kuliah.$dt->id_jenis_evaluasi.$nama_kom]->id_komponen_evaluasi;
									}
									  $data_dic = [
									      'act' => 'UpdateKomponenEvaluasiKelas',
									      'key' => $key_update,
									        'token' => $token,
									        'record' => $record_update,
									    ];
									$update_evaluasi = service_request($data_dic);
									$value_data = addslashes($update_evaluasi->error_desc);
									if ($value_data!='') {
										$error_update_data[] = array(
											'keterangan' => $value_data,
											'status_error' => 2
										);
										$data_id_error[] = $dt->id_evaluasi;
									} else {
										$update_data[] = array(
											'keterangan' => '',
											'status_error' => 1
										);
										$data_id_sukses[] = $dt->id_evaluasi;
									}

						}

						} elseif ($_POST['method']=='in') {
							$kelas_id = $dt->id_sms.convert_ascii($dt->kode_mk).$dt->nama_kelas.$dt->semester;			
							if (in_array($dt->id_jenis_evaluasi,array(2,3)) && in_array($id_kelas_feeder[$kelas_id]->id_kelas_kuliah.$dt->id_jenis_evaluasi, array_keys($komponen_evaluasi_kelas23))) {
								$error_update_data[] = array(
									'keterangan' => "Komponen Evaluasi Kelas ini sudah ada di feeder, pilih metode update jika ingin update",
									'status_error' => 2
								);
								$data_id_error[] = $dt->id;
							} elseif ($dt->id_jenis_evaluasi==4 && in_array($id_kelas_feeder[$kelas_id]->id_kelas_kuliah.$dt->id_jenis_evaluasi.$nama_kom, array_keys($komponen_evaluasi_kelas))) {
								$error_update_data[] = array(
									'keterangan' => "Komponen Evaluasi Kelas ini sudah ada di feeder, pilih metode update jika ingin update",
									'status_error' => 2
								);
								$data_id_error[] = $dt->id;
							} else {
									$temp_data_insert = array(
										'id_kelas_kuliah' => $id_kelas_feeder[$dt->id_sms.convert_ascii($dt->kode_mk).convert_ascii($dt->nama_kelas).convert_ascii($dt->semester)]->id_kelas_kuliah,
										'id_jenis_evaluasi' => $dt->id_jenis_evaluasi,
										'nama' => $nama_kom,
										'nama_inggris' => $dt->deskripsi_inggris,
										'nomor_urut' => $nomor_urut,
										'bobot_evaluasi' => (float)$dt->bobot_evaluasi
									);
									if ($dt->id_jenis_evaluasi==2 or $dt->id_jenis_evaluasi==3) {
										$temp_data_insert['nama'] = '-';
									}
									//dump($temp_data_insert);
								  	$data_dic = [
								      'act' => 'InsertKomponenEvaluasiKelas',
								        'token' => $token,
								        'record' => $temp_data_insert,
								    ];
								    $temp_recs = service_request($data_dic);
							/*	    dump($data_dic);
								    dump($temp_recs);*/

									$value_data = addslashes($temp_recs->error_desc);
									if ($value_data!='') {
										$error_update_data[] = array(
											'keterangan' => $value_data,
											'status_error' => 2
										);
										$data_id_error[] = $dt->id_evaluasi;
									} else {
										$update_data[] = array(
											'keterangan' => '',
											'status_error' => 1
										);
										$data_id_sukses[] = $dt->id_evaluasi;
									}
							}

						}

				}
					$all_id[] = $dt->id;
			}
		}

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


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

		$implode_id = implode(",", $all_id);

	
		

		//$db->fetch_custom("update kelas_komponen_evaluasi set unik_id=".$_POST['random_number']." where concat(kode_mk,kode_jurusan) IN('".implode("','",$kode_mk)."')");

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

		//echo $db->getErrorMessage();

	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 kelas_komponen_evaluasi where unik_id=".$_POST['random_number']);

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

		$db->fetch_custom("update kelas_komponen_evaluasi set unik_id=0 where unik_id=".$_POST['random_number']);

	
		$msg =  "<div class=\"alert alert-warning \" role=\"alert\">
		<font color=\"#3c763d\">".$jumlah_sukses." data Rencana Evaluasi berhasil Di Import Ke Feeder DIKTI</font><br />
		<font color=\"#ce4844\" >".$jumlah_error." data tidak bisa Di Import </font>";
		
		if (!$jumlah_error==0) {
			$msg .= "<a data-toggle=\"collapse\" href=\"#collapseExample\" aria-expanded=\"false\" aria-controls=\"collapseExample\">Detail error</a>";
			//pesan error 
			$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\">".$i.". ".$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