Kaynağa Gözat

Version 2.5 ~ 2.4
fix BA
ubah struktur component menu sanksi PT
Csrf Token
Fix menu bypass hanya bisa di akses pak dedi

andi 2 yıl önce
ebeveyn
işleme
a2b9a455e4
72 değiştirilmiş dosya ile 762 ekleme ve 814 silme
  1. 7 4
      actions/auth.js
  2. 33 8
      actions/banding.js
  3. 46 12
      actions/cabutSanksi.js
  4. 16 4
      actions/docPerbaikan.js
  5. 30 8
      actions/keberatan.js
  6. 18 10
      actions/pelaporan.js
  7. 12 3
      actions/pemeriksaan.js
  8. 6 4
      actions/pengunjung.js
  9. 10 3
      actions/penjadwalan.js
  10. 4 1
      actions/public.js
  11. 62 19
      actions/sanksi.js
  12. 13 0
      actions/security.js
  13. 2 2
      actions/user.js
  14. 4 1
      components/Bypass/TableBypass.js
  15. 53 4
      components/Extras/calendar.view.js
  16. 1 1
      components/Layout/Footer.js
  17. 7 4
      components/Layout/Header.js
  18. 1 7
      components/Layout/Menu.js
  19. 161 0
      components/Layout/MenuBypass.js
  20. 2 1
      components/Layout/Sidebar.js
  21. 5 3
      components/Main/Login.js
  22. 6 3
      components/NaikSanksi/InputTanggal.js
  23. 2 2
      components/PT/JawabanBanding/DetailJawaban.js
  24. 18 8
      components/PT/JawabanKeberatan/ModalPermohonan.js
  25. 5 5
      components/PT/Keberatan/ModalPermohonan.js
  26. 15 4
      components/Pelaporan/InputData.js
  27. 6 2
      components/Pemeriksaan/InputEvaluasi.js
  28. 6 4
      components/PerpanjanganSanksi/InputTanggal.js
  29. 7 4
      components/RekomendasiDelegasi/InputRekomendasi.js
  30. 0 1
      components/Riwayat/TableRiwayatt.js
  31. 4 1
      components/Sanksi/BeritaAcara.js
  32. 0 511
      components/Sanksi/BeritaAcara_A.js
  33. 3 1
      components/Sanksi/DetailSanksi.js
  34. 3 22
      components/Sanksi/Ringkasan.js
  35. 1 0
      components/Sanksi/SuratBA _detail.js
  36. 0 77
      components/Sanksi/TmtDate.js
  37. 3 2
      components/Sanksi/UploadSurat.js
  38. 4 2
      components/TurunSanksi/InputTanggal.js
  39. 5 0
      package-lock.json
  40. 1 0
      package.json
  41. 9 4
      pages/app/banding/detail.js
  42. 4 1
      pages/app/banding/index.js
  43. 5 2
      pages/app/index.js
  44. 9 4
      pages/app/keberatan/detail.js
  45. 4 2
      pages/app/keberatan/index.js
  46. 5 1
      pages/app/laporan-delegasi/detail.js
  47. 5 1
      pages/app/laporan-delegasi/index.js
  48. 1 1
      pages/app/naik-sanksi/detail.js
  49. 4 1
      pages/app/pelaporan/detail.js
  50. 4 1
      pages/app/pelaporan/index.js
  51. 4 1
      pages/app/pelaporan/new.js
  52. 5 2
      pages/app/pelaporan/search.js
  53. 6 3
      pages/app/pencabutan-sanksi/detail.js
  54. 1 1
      pages/app/rekomendasi-delegasi/detail.js
  55. 52 4
      pages/app/sanksi/proses.js
  56. 4 1
      pages/app/tuntas/detail.js
  57. 1 1
      pages/app/turun-sanksi/detail.js
  58. 0 1
      pages/app/turun-sanksi/index.js
  59. 4 2
      pages/app/verifikasi/index.js
  60. 10 4
      pages/laporan/new/index.js
  61. 1 3
      pages/pt/jawaban-pencabutan-sanksi/detail.js
  62. 6 3
      pages/pt/pencabutan-sanksi/detail.js
  63. 12 5
      pages/pt/sanksi/detail.js
  64. 7 5
      pages/pt/sanksi/dokumen-perbaikan/detail.js
  65. 0 0
      pages/pt/sanksi/dokumen-perbaikan/index.js
  66. 1 1
      pages/pt/sanksi/index.js
  67. 2 2
      pages/pt/sanksi/jawaban-banding/detail.js
  68. 0 0
      pages/pt/sanksi/jawaban-banding/index.js
  69. 8 6
      pages/pt/sanksi/jawaban-keberatan/detail.js
  70. 0 0
      pages/pt/sanksi/jawaban-keberatan/index.js
  71. 6 3
      pages/pt/sanksi/keberatan/detail.js
  72. 0 0
      pages/pt/sanksi/keberatan/index.js

+ 7 - 4
actions/auth.js

@@ -1,5 +1,7 @@
 import { get } from "../config/request";
 import axiosAPI from "../config/axios";
+import { createLog } from "./log";
+import { getCsrf } from "./security";
 
 export const login = async (username, password) => {
 	const data = {
@@ -34,22 +36,23 @@ export const getUser = async () => {
 	}
 };
 
-export const logout = async () => {
+export const logout = async ( _csrf) => {
 	try {
-		const response = await axiosAPI.delete("/auth/logout");
+		const response = await axiosAPI.delete(`/auth/logout?_csrf=${_csrf}`);
 		return response.data;
 	} catch (error) {
 		if (error.response) return error.response.data;
 	}
 };
 
-export const loginToPt = async (lembaga_id, password) => {
+
+export const loginToPt = async (lembaga_id, password, _csrf) => {
 	const data = {
 		lembaga_id,
 		password,
 	};
 
-	const response = await axiosAPI.post("/auth/login-to-pt", data, {
+	const response = await axiosAPI.post(`/auth/login-to-pt?_csrf=${_csrf}`, data, {
 		headers: {
 			"Content-Type": "application/json",
 		},

+ 33 - 8
actions/banding.js

@@ -1,26 +1,51 @@
 import axios from "../config/axios";
 import { createLog } from "./log";
+import { getCsrf } from "./security";
 
-export const addBanding = async (token, id, data) => {
+export const addBanding = async (token, id, data, _csrf) => {
 	try {
-		const res = await axios.post(`/sanksi/banding/create/${id}`, data, { headers: { Authorization: token } });
-		await createLog(token, { aktivitas: `Berhasil mengajukan Banding, id: ${id}` });
+		const res = await axios.post(`/sanksi/banding/create/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
+		logSuccessAddBanding(token, id)
 		return res.data;
 	} catch (error) {
 		console.log("error", error);
-		await createLog(token, { aktivitas: `Gagal mengajukan Banding, id: ${id}` });
+		logErrorAddBanding(token, id)
 		return false;
 	}
 };
+const logSuccessAddBanding = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil mengajukan Banding, id: ${id}`, _csrf: _csrf });
 
-export const addJawabanBanding = async (token, id, data) => {
+}
+const logErrorAddBanding = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Gagal mengajukan Banding, id: ${id}`, _csrf: _csrf });
+
+}
+
+export const addJawabanBanding = async (token, id, data, _csrf) => {
 	try {
-		const res = await axios.post(`/sanksi/banding/jawaban/create/${id}`, data, { headers: { Authorization: token } });
-		await createLog(token, { aktivitas: `Berhasil menjawab pengajuan Banding, id: ${id}` });
+		const res = await axios.post(`/sanksi/banding/jawaban/create/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
+		logSuccessAddJawabanBanding(token, id)
 		return res.data;
 	} catch (error) {
 		console.log("error", error);
-		await createLog(token, { aktivitas: `Gagal menjawab pengajuan Banding, id: ${id}` });
+		logErrorAddJawabanBanding(token, id)
 		return false;
 	}
 };
+const logSuccessAddJawabanBanding = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil menjawab pengajuan Banding, id: ${id}`, _csrf: _csrf });
+
+}
+const logErrorAddJawabanBanding = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Gagal menjawab pengajuan Banding, id: ${id}`, _csrf: _csrf });
+
+}

+ 46 - 12
actions/cabutSanksi.js

@@ -1,38 +1,72 @@
 import axios from "../config/axios";
 import { createLog } from "./log";
+import { getCsrf } from "./security";
 
-export const addCabutSanksi = async (token, id, data) => {
+export const addCabutSanksi = async (token, id, data, _csrf) => {
 	try {
-		const res = await axios.post(`/sanksi/cabut-sanksi/create/${id}`, data, { headers: { Authorization: token } });
-		await createLog(token, { aktivitas: `Berhasil mengajukan pencabutan sanksi, id: ${id}` });
+		const res = await axios.post(`/sanksi/cabut-sanksi/create/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
+		logSuccessAddCabutSanksi(token, id)
 		return res.data;
 	} catch (error) {
 		console.log("error", error);
-		await createLog(token, { aktivitas: `Gagal mengajukan pencabutan sanksi, id: ${id}` });
+		logErrorAddCabutSanksi(token, id)
 		return false;
 	}
 };
 
-export const addJawabanCabutSanksi = async (token, id, data) => {
+const logSuccessAddCabutSanksi = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil mengajukan pencabutan sanksi, id: ${id}`, _csrf: _csrf });
+}
+
+const logErrorAddCabutSanksi = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Gagal mengajukan pencabutan sanksi, id: ${id}`, _csrf: _csrf });
+}
+
+export const addJawabanCabutSanksi = async (token, id, data,_csrf) => {
 	try {
-		const res = await axios.post(`/sanksi/cabut-sanksi/jawaban/create/${id}`, data, { headers: { Authorization: token } });
-		await createLog(token, { aktivitas: `Berhasil menjawab pengajuan pencabutan sanksi, id: ${id}` });
+		const res = await axios.post(`/sanksi/cabut-sanksi/jawaban/create/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
+		logSuccessaddJawabanCabutSanksi(token, id)
 		return res.data;
 	} catch (error) {
 		console.log("error", error);
-		await createLog(token, { aktivitas: `Gagal menjawab pengajuan pencabutan sanksi, id: ${id}` });
+		logErroraddJawabanCabutSanksi(token, id)
 		return false;
 	}
 };
 
-export const bypassCabutSanksi = async (token, id) => {
+const logSuccessaddJawabanCabutSanksi = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil menjawab pengajuan pencabutan sanksi, id: ${id}`, _csrf: _csrf });
+}
+const logErroraddJawabanCabutSanksi = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Gagal menjawab pengajuan pencabutan sanksi, id: ${id}`, _csrf: _csrf });
+}
+
+export const bypassCabutSanksi = async (token, id, _csrf) => {
 	try {
-		const res = await axios.put(`/sanksi/cabut-sanksi/bypass/${id}`);
-		await createLog(token, { aktivitas: `Berhasil melakukan bypass ke pencabutan sanksi, id: ${id}` });
+		const res = await axios.put(`/sanksi/cabut-sanksi/bypass/${id}?_csrf=${_csrf}`);
+		logSuccessBypassCabutSanksi(token, id)
 		return res.data;
 	} catch (error) {
 		console.log("error", error);
-		await createLog(token, { aktivitas: `Gagal  melakukan bypass ke pencabutan sanksi, id: ${id}` });
+		logErrorBypassCabutSanksi(token, id)
 		return false;
 	}
 };
+const logSuccessBypassCabutSanksi = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil melakukan bypass ke pencabutan sanksi, id: ${id}`, _csrf: _csrf });
+}
+const logErrorBypassCabutSanksi = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Gagal melakukan bypass ke pencabutan sanksi, id: ${id}`, _csrf: _csrf });
+}

+ 16 - 4
actions/docPerbaikan.js

@@ -1,14 +1,26 @@
 import axios from "../config/axios";
 import { createLog } from "./log";
+import { getCsrf } from "./security";
 
-export const addDocPerbaikan = async (token, id, data) => {
+export const addDocPerbaikan = async (token, id, data, _csrf) => {
 	try {
-		const res = await axios.post(`/sanksi/perbaikan/add/${id}`, data, { headers: { Authorization: token } });
-		await createLog(token, { aktivitas: `Berhasil melakukan perbaikan dokumen, id: ${id}` });
+		const res = await axios.post(`/sanksi/perbaikan/add/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
+		logSuccessAddDocPerbaikan(token, id)
 		return res.data;
 	} catch (error) {
 		console.log("error", error);
-		await createLog(token, { aktivitas: `Gagal melakukan perbaikan dokumen, id: ${id}` });
+		logErrorAddDocPerbaikan(token, id)
 		return false;
 	}
 };
+const logSuccessAddDocPerbaikan = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil melakukan perbaikan dokumen, id: ${id}`, _csrf: _csrf });
+}
+
+const logErrorAddDocPerbaikan = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Gagal melakukan perbaikan dokumen, id: ${id}`, _csrf: _csrf });
+}

+ 30 - 8
actions/keberatan.js

@@ -1,26 +1,48 @@
 import axiosAPI from "../config/axios";
 import { createLog } from "./log";
+import { getCsrf } from "./security";
 
-export const addKeberatan = async (token, id, data) => {
+export const addKeberatan = async (token, id, data, _csrf) => {
 	try {
-		const res = await axiosAPI.post(`/sanksi/keberatan/create/${id}`, data, { headers: { Authorization: token } });
-		await createLog(token, { aktivitas: `Berhasil mengajukan keberatan, id: ${id}` });
+		const res = await axiosAPI.post(`/sanksi/keberatan/create/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
+		logSuccessAddKeberatan(token, id)
 		return res.data;
 	} catch (error) {
 		console.log("error", error);
-		await createLog(token, { aktivitas: `Gagal mengajukan keberatan, id: ${id}` });
+		logErrorAddKeberatan(token, id)
 		return false;
 	}
 };
+const logSuccessAddKeberatan = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil mengajukan keberatan, id: ${id}`, _csrf: _csrf });
+}
+const logErrorAddKeberatan = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Gagal mengajukan keberatan, id: ${id}`, _csrf: _csrf });
+}
 
-export const addJawabanKeberatan = async (token, id, data) => {
+export const addJawabanKeberatan = async (token, id, data, _csrf) => {
 	try {
-		const res = await axiosAPI.post(`/sanksi/keberatan/jawaban/create/${id}`, data, { headers: { Authorization: token } });
-		await createLog(token, { aktivitas: `Berhasil menjawab pengajuan keberatan, id: ${id}` });
+		const res = await axiosAPI.post(`/sanksi/keberatan/jawaban/create/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
+		logSuccessAddJawabanKeberatan(token, id)
 		return res.data;
 	} catch (error) {
 		console.log("error", error);
-		await createLog(token, { aktivitas: `Gagal menjawab pengajuan keberatan, id: ${id}` });
+		logErrorAddJawabanKeberatan(token, id)
 		return false;
 	}
 };
+
+const logSuccessAddJawabanKeberatan = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil menjawab mengajukan keberatan, id: ${id}`, _csrf: _csrf });
+}
+const logErrorAddJawabanKeberatan = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Gagal menjawab mengajukan keberatan, id: ${id}`, _csrf: _csrf });
+}

+ 18 - 10
actions/pelaporan.js

@@ -74,11 +74,16 @@ export const getPelaporanPublic = async ({ number, noHp }) => {
 	}
 };
 
-export const createPelaporan = async (token, data) => {
-	const res = await axiosAPI.post("/laporan/create", data, { headers: { Authorization: token } });
-	await createLog(token, { aktivitas: "Berhasil Membuat pelaporan" });
+export const createPelaporan = async (token, data, _csrf) => {
+	const res = await axiosAPI.post(`/laporan/create?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
+	logCreatePelaporan(token)
 	return res.data;
 };
+const logCreatePelaporan = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil Membuat pelaporan`, _csrf: _csrf });
+}
 
 // export const createLaporanPublic = async (data) => {
 // 	try {
@@ -90,9 +95,9 @@ export const createPelaporan = async (token, data) => {
 // 	}
 // };
 
-export const createLaporanPublic = async (token, data) => {
+export const createLaporanPublic = async (token, data, _csrf) => {
 	try {
-		const res = await axiosAPI.post("/public/laporan/create", data, { headers: { Authorization: token } });
+		const res = await axiosAPI.post(`/public/laporan/create?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
 		return res.data;
 	} catch (error) {
 		console.log("error", error.response.data);
@@ -110,18 +115,21 @@ export const createLaporanPublic = async (token, data) => {
 // 	}
 // };
 
-export const updateLaporan = async (token, id, data) => {
+export const updateLaporan = async (token, id, data, _csrf) => {
 	try {
-		const res = await axiosAPI.put(`/laporan/update/${id}`, data, { headers: { Authorization: token } });
-		if (data.aktif === "false") await createLog(token, { aktivitas: `Berhasil menutup laporan, id: ${id}` });
-		await createLog(token, { aktivitas: `Berhasil mengubah data laporan, id: ${id}` });
+		const res = await axiosAPI.put(`/laporan/update/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
+		if (data.aktif === "false") logUpdateLaporan(token, id);
 		return res.data;
 	} catch (error) {
 		console.log("error", error.response.data);
-		await createLog(token, { aktivitas: `Gagal mengubah data pelaporan, id: ${id}` });
 		return false;
 	}
 };
+const logUpdateLaporan = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil menutup laporan, id: ${id}`, _csrf: _csrf });
+}
 
 export const jumlahLaporan = async (token) => {
 	try {

+ 12 - 3
actions/pemeriksaan.js

@@ -1,8 +1,17 @@
 import axiosAPI from "../config/axios";
 import { createLog } from "./log";
 
-export const insertPemeriksaan = async (token, id, data) => {
-	const res = await axiosAPI.post(`/laporan/evaluasi/add/${id}`, data, { headers: { Authorization: token } });
-	await createLog(token, { aktivitas: `Berhasil menambah evaluasi, id: ${id}` });
+import { getCsrf } from "./security";
+
+export const insertPemeriksaan = async (token, id, data, _csrf) => {
+	const res = await axiosAPI.post(`/laporan/evaluasi/add/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
+	// await createLog(token, { aktivitas: `Berhasil menambah evaluasi, id: ${id}` });
+	log(token, id)
 	return res.data;
 };
+const log = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil menambah evaluasi, id: ${id}`, _csrf: _csrf });
+
+}

+ 6 - 4
actions/pengunjung.js

@@ -1,10 +1,10 @@
 import axios from "@/config/axios";
 import axios2 from "axios";
 
-export const createPengunjung = async () => {
+export const createPengunjung = async (_csrf) => {
 	try {
 		const jsonip = await axios2.get("https://ip-api.io/json");
-		const res = await axios.post("/pengunjung/create", {
+		const res = await axios.post(`/pengunjung/create?_csrf=${_csrf}`, {
 			os: navigator.userAgentData.platform,
 			ipv4: jsonip.data.ip,
 			location: {
@@ -38,12 +38,14 @@ export const getPengunjungPublic = async ({ bulan, tahun }) => {
 		let url = "/public/pengunjung";
 		if (bulan || tahun) {
 			url += "?";
+			const parseURL = [];
 			if (bulan) {
-				url += `bulan=${bulan}`;
+				parseURL.push(`bulan=${bulan}`);
 			}
 			if (tahun) {
-				url += `bulan=${tahun}`;
+				parseURL.push(`tahun=${tahun}`);
 			}
+			url += parseURL.join("&");
 		}
 		const res = await axios.get(url);
 		return res.data;

+ 10 - 3
actions/penjadwalan.js

@@ -1,13 +1,20 @@
 import axios from "../config/axios";
 import { createLog } from "./log";
+import { getCsrf } from "./security";
 
-export const updateJadwal = async (token, id, data) => {
+export const updateJadwal = async (token, id, data, _csrf) => {
 	// try {
-	const res = await axios.put(`/laporan/jadwal/update/${id}`, data, { headers: { Authorization: token } });
-	await createLog(token, { aktivitas: `Berhasil menetapkan jadwal, id: ${id}` });
+	const res = await axios.put(`/laporan/jadwal/update/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
+	logSuccessUpdateJadwal(token, id)
 	return res.data;
 	// } catch (error) {
 	// console.log("error", error);
 	// return false;
 	// }
 };
+const logSuccessUpdateJadwal = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil menetapkan jadwal, id: ${id}`, _csrf: _csrf });
+
+}

+ 4 - 1
actions/public.js

@@ -1,11 +1,14 @@
 import { get, post, del, put } from "../config/request";
 import axiosAPI from "../config/axios";
 import { createLog } from "./log";
+import { getCsrf } from "./security";
 
 
 export const addPesertaPleno = async (token, data) => {
+    const getToken = await getCsrf();
+    const _csrf = getToken.token;
     try {
-        const res = await axiosAPI.post('/public/sanksi/add-peserta-pleno', data, { headers: { Authorization: token } });
+        const res = await axiosAPI.post(`/public/sanksi/add-peserta-pleno?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
         return res.data;
     } catch (error) {
         console.log("error", error.response.data);

+ 62 - 19
actions/sanksi.js

@@ -2,12 +2,19 @@ import axiosAPI from "../config/axios";
 import axios from "../config/axios";
 import { bypassCabutSanksi } from "./cabutSanksi";
 import { createLog } from "./log";
+import { getCsrf } from "./security";
 
-export const createSanksi = async (token, id, data) => {
-	const res = await axiosAPI.post(`/sanksi/create/${id}`, data, { headers: { Authorization: token } });
-	await createLog(token, { aktivitas: `Berhasil melakukan penetapan sanksi, id: ${id}` });
+export const createSanksi = async (token, id, data, _csrf) => {
+	const res = await axiosAPI.post(`/sanksi/create/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
+	logCreateSanksi(token, id)
 	return res.data;
 };
+const logCreateSanksi = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil melakukan penetapan sanksi, id: ${id}`, _csrf: _csrf });
+
+}
 
 export const getSanksi = async (token, query = {}) => {
 	try {
@@ -58,38 +65,74 @@ export const getOneSanksi = async (token, id, query = {}) => {
 	}
 };
 
-export const addRekomendasiDelegasi = async (token, id, data) => {
+export const addRekomendasiDelegasi = async (token, id, data, _csrf) => {
 	try {
-		const res = await axiosAPI.post(`/rekomendasi/add/${id}`, data, { headers: { Authorization: token } });
-		await createLog(token, { aktivitas: `Berhasil melakukan Rekomendasi Delegasi, id: ${id}` });
+		const res = await axiosAPI.post(`/rekomendasi/add/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
+		logSuccessAddRekomendasiDelegasi(token, id)
 		return res.data;
 	} catch (error) {
 		console.log("error", error);
-		await createLog(token, { aktivitas: `Gagal melakukan Rekomendasi Delegasi, id: ${id}` });
+		logErrorAddRekomendasiDelegasi(token, id)
 		return false;
 	}
 };
+const logSuccessAddRekomendasiDelegasi = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil melakukan Rekomendasi Delegasi, id: ${id}`, _csrf: _csrf });
+
+}
+const logErrorAddRekomendasiDelegasi = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Gagal melakukan Rekomendasi Delegasi, id: ${id}`, _csrf: _csrf });
 
-export const editTmt = async (token, id, data) => {
-	const res = await axios.put(`sanksi/tmt/update/${id}`, data, { headers: { Authorization: token } });
-	await createLog(token, { aktivitas: `Berhasil perpanjangan sanksi, id: ${id}` });
+}
+
+export const editTmt = async (token, id, data, _csrf) => {
+	const res = await axios.put(`sanksi/tmt/update/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
+	logEditTmt(token, id)
 	return res.data;
 };
+const logEditTmt = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil perpanjangan sanksi, id: ${id}`, _csrf: _csrf });
+
+}
 
-export const update = async (token, id, data) => {
-	const res = await axios.put(`sanksi/update/${id}`, data, { headers: { Authorization: token } });
-	await createLog(token, { aktivitas: `Berhasil Merubah Sanksi, id: ${id}` });
+export const update = async (token, id, data, _csrf) => {
+	const res = await axios.put(`sanksi/update/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
+	logUpdate(token, id)
 	return res.data;
 };
 
-export const updatePT = async (token, id, data) => {
-	const res = await axiosAPI.put(`/sanksi/update-pt/${id}`, data, { headers: { Authorization: token } });
-	await createLog(token, { aktivitas: `Berhasil mengubah status sanksi, id: ${id}` });
+const logUpdate = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil Merubah Sanksi, id: ${id}`, _csrf: _csrf });
+
+}
+export const updatePT = async (token, id, data, _csrf) => {
+	const res = await axiosAPI.put(`/sanksi/update-pt/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
+	logUpdatePT(token, id)
 	return res.data;
 };
+const logUpdatePT = async (token, id) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil mengubah status sanksi, id: ${id}`, _csrf: _csrf });
+
+}
 
-export const removePesertaPleno = async (token, data) => {
-	const res = await axios.delete(`sanksi/remove-peserta-pleno/`, { headers: { Authorization: token }, data });
-	await createLog(token, { aktivitas: `Berhasil hapus peserta pleno` });
+export const removePesertaPleno = async (token, data,_csrf) => {
+	const res = await axios.delete(`sanksi/remove-peserta-pleno?_csrf=${_csrf}`, { headers: { Authorization: token }, data });
+	logRemovePesertaPleno(token)
 	return res.data;
 };
+const logRemovePesertaPleno = async (token) => {
+	const getToken = await getCsrf();
+	const _csrf = getToken.token;
+	await createLog(token, { aktivitas: `Berhasil hapus peserta pleno`, _csrf: _csrf });
+
+}

+ 13 - 0
actions/security.js

@@ -0,0 +1,13 @@
+import axios from "@/config/axios";
+import axios2 from "axios";
+
+export const getCsrf = async () => {
+    try {
+        let url = `/csrf`;
+        const res = await axios.get(url);
+        return res.data;
+    } catch (error) {
+        console.log("error", error);
+        return false;
+    }
+};

+ 2 - 2
actions/user.js

@@ -9,9 +9,9 @@ export const getPublicUser = async () => {
 	}
 };
 
-export const createPublicUser = async (data) => {
+export const createPublicUser = async (data, _csrf) => {
 	try {
-		const response = await axiosAPI.post("/public/user/create", data);
+		const response = await axiosAPI.post(`/public/user/create?_csrf=${_csrf}`, data);
 		return response.data;
 	} catch (error) {
 		if (error.response) return error.response.data;

+ 4 - 1
components/Bypass/TableBypass.js

@@ -8,6 +8,7 @@ import { ToastContainer, toast } from "react-toastify";
 import Router from "next/router";
 import { useState } from "react";
 import { Modal, ModalBody, ModalFooter } from "reactstrap";
+import { getCsrf } from "../../actions/security";
 
 
 function TableBypass({ listData, to, linkName }) {
@@ -28,7 +29,9 @@ function TableBypass({ listData, to, linkName }) {
                 <ModalFooter>
 
                     <Button color className="btn-login" onClick={async () => {
-                        await toast.promise(bypassCabutSanksi(token, seledtedID), {
+                        	const getToken = await getCsrf();
+                            const _csrf = getToken.token;
+                        await toast.promise(bypassCabutSanksi(token, seledtedID, _csrf), {
                             pending: "Loading",
                             success: "Success",
                             error: "Error",

+ 53 - 4
components/Extras/calendar.view.js

@@ -21,8 +21,11 @@ import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
 import Datetime from "react-datetime";
 import 'moment/locale/id';
+import { getCsrf } from "../../actions/security";
+import { createLog } from "../../actions/log";
 moment.locale('id')
 
+
 const status = [
 	{ value: "Ditindaklanjuti DIKTI", label: "Ditindaklanjuti DIKTI", className: "State-ACT" },
 	{ value: "Delegasi ke LLDIKTI", label: "Delegasi ke LLDIKTI", className: "State-ACT" },
@@ -122,19 +125,30 @@ class Calendar extends Component {
 		info.event.setProp("borderColor", styles.borderColor);
 		this.handleEventCalendar(info);
 	};
+	logSuccessUpdateJadwal = async () => {
+		const { query, token } = this.props;
+		const { id } = query;
+		const getToken = await getCsrf();
+		const _csrf = getToken.token;
+		await createLog(token, { aktivitas: `Berhasil menetapkan jadwal, id: ${id}`, _csrf: _csrf });
+
+	}
 
 	handleEventCalendar = async (data) => {
 		const { query, token } = this.props;
 		const { id } = query;
 		const { color, laporan } = this.state;
-
+		const getToken = await getCsrf();
+		const _csrf = getToken.token;
 		await toast.promise(
+
 			updateJadwal(token, id, {
 				judul: "No.Laporan " + laporan.data.no_laporan + " - " + data.judul,
 				dari_tanggal: data.dari_tanggal,
 				sampai_tanggal: data.sampai_tanggal,
 				warna: color,
-			}),
+			}, _csrf),
+
 			{
 				pending: "Loading",
 				success: "Success",
@@ -142,6 +156,22 @@ class Calendar extends Component {
 			}
 
 		);
+		// const toastid = toast.loading("Please wait...");
+		// const added = await updateJadwal(token, id, {
+		// 	judul: "No.Laporan " + laporan.data.no_laporan + " - " + data.judul,
+		// 	dari_tanggal: data.dari_tanggal,
+		// 	sampai_tanggal: data.sampai_tanggal,
+		// 	warna: color,
+		// }, _csrf)
+		// if (!added) {
+		// 	toast.update(toastid, { render: "Gagal menetapkan jadwal", type: "error", isLoading: false, autoClose: true, closeButton: true });
+		// } else {
+		// 	toast.update(toastid, { render: "Berhasil menetapkan jadwal", type: "success", isLoading: false, autoClose: true, closeButton: true });
+
+		// 	this.logSuccessUpdateJadwal()
+
+
+		// }
 		Router.push("/app/penjadwalan");
 		const dataLaporan = await getPelaporan(token, { jadwal: true });
 		this.setState({ dataLaporan });
@@ -154,8 +184,25 @@ class Calendar extends Component {
 	};
 
 	handleChangeSelect = (selectedOption) => this.setState({ selectedOption });
+	logUpdateLaporanSuccess = async () => {
+		const getToken = await getCsrf();
+		const _csrf = getToken.token;
+		const { token, query } = this.props;
+		const { id } = query;
+		await createLog(token, { aktivitas: `Berhasil mengubah data laporan, id: ${id}`, _csrf: _csrf });
+
+	}
+	logUpdateLaporanError = async () => {
+		const getToken = await getCsrf();
+		const _csrf = getToken.token;
+		const { token, query } = this.props;
+		const { id } = query;
+		await createLog(token, { aktivitas: `Berhasil mengubah data laporan, id: ${id}`, _csrf: _csrf });
+	}
 
 	handleSimpan = async (value) => {
+		const getToken = await getCsrf();
+		const _csrf = getToken.token;
 		const { token, query } = this.props;
 		const { id } = query;
 		let update = null;
@@ -164,18 +211,20 @@ class Calendar extends Component {
 			const data = { keterangan: value.keterangan };
 			if (value.status.value === this.getStatus()[1].value) {
 				data.change_role = "true";
-				update = await updateLaporan(token, id, data);
+				update = await updateLaporan(token, id, data, _csrf);
 				Router.push("/app/penjadwalan");
 			} else if (value.status.value === this.getStatus()[2].value) {
 				data.aktif = "false";
-				update = await updateLaporan(token, id, data);
+				update = await updateLaporan(token, id, data, _csrf);
 				Router.push("/app/penjadwalan");
 			}
 			if (!update) {
 				toast.update(toastid, { render: "Gagal simpan jadwal", type: "error", isLoading: false, autoClose: true, closeButton: true });
+				this.logUpdateLaporanError()
 
 			} else {
 				toast.update(toastid, { render: "Input jadwal berhasil", type: "success", isLoading: false, autoClose: true, closeButton: true });
+				this.logUpdateLaporanSuccess()
 				Router.push("/app/penjadwalan");
 			}
 			Router.push("/app/penjadwalan");

+ 1 - 1
components/Layout/Footer.js

@@ -7,7 +7,7 @@ class Footer extends Component {
         return (
             <footer className="footer-container">
                 <span>Sidali Dikti &copy; {year}</span>
-                <span className=' float-right'>Version 2.4 ~ 2.2</span>
+                <span className=' float-right'>Version 2.5 ~ 2.4</span>
             </footer>
         );
     }

+ 7 - 4
components/Layout/Header.js

@@ -12,8 +12,8 @@ import * as actions from "../../store/actions/actions";
 import ToggleFullscreen from "../Common/ToggleFullscreen";
 import HeaderSearch from "./HeaderSearch";
 import { ToastContainer, toast } from "react-toastify";
-
 import "react-toastify/dist/ReactToastify.css";
+import { getCsrf } from "../../actions/security";
 
 class Header extends Component {
 	state = {
@@ -55,13 +55,16 @@ class Header extends Component {
 		this.props.actions.toggleSetting("asideToggled");
 	};
 
+
 	handleLogout = async (e) => {
 		e.preventDefault();
-		await logout();
-		await createLog(this.props.token, { aktivitas: "Berhasil Logout" });
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
+		await logout(_csrf);
 		this.props.tokenNull();
 		this.props.userNull();
-		// if (cek.success) {
+
+
 		Router.push({ pathname: "/app" });
 		// }
 	};

+ 1 - 7
components/Layout/Menu.js

@@ -105,13 +105,7 @@ const Menu = [
 	{
 		heading: "Supporting Features",
 		translate: "sidebar.heading.SUPPORTING_FEATURES",
-		
-	},
-	{
-		name: "Bypass",
-		path: "/app/bypass",
-		icon: "fas fa-feather",
-		translate: "sidebar.nav.Riwayat",
+
 	},
 	{
 		name: "Verifikasi",

+ 161 - 0
components/Layout/MenuBypass.js

@@ -0,0 +1,161 @@
+const Menu = [
+	{
+		heading: "Main Navigation",
+		translate: "sidebar.heading.HEADER",
+	},
+	{
+		name: "Pemantauan",
+		path: "/app/pemantauan",
+		icon: "icon-speedometer",
+		translate: "sidebar.nav.PEMANTAUAN",
+	},
+	{
+		name: "Laporan Delegasi",
+		path: "/app/laporan-delegasi",
+		icon: "icon-notebook",
+		translate: "sidebar.nav.LAPORAN_DELEGASI",
+	},
+	{
+		name: "Pelaporan",
+		path: "/app/pelaporan",
+		icon: "icon-note",
+		translate: "sidebar.nav.PELAPORAN",
+	},
+	{
+		name: "Penjadwalan Evaluasi",
+		path: "/app/penjadwalan",
+		icon: "icon-event",
+		translate: "sidebar.nav.PENJADWALAN",
+	},
+	{
+		name: "Pemeriksaan",
+		path: "/app/pemeriksaan",
+		icon: "icon-book-open",
+		translate: "sidebar.nav.PEMERIKSAAN",
+	},
+	{
+		name: "Sanksi",
+		path: "/app/sanksi",
+		icon: "icon-social-steam",
+		translate: "sidebar.nav.SANKSI",
+	},
+	{
+		heading: "Dikti Ristek/LLDIKTI",
+		translate: "sidebar.heading.DIKTI_RISTEK",
+	},
+	{
+		name: "Keberatan",
+		path: "/app/keberatan",
+		icon: "icon-hourglass",
+		translate: "sidebar.nav.KEBERATAN",
+	},
+	{
+		name: "Banding",
+		path: "/app/banding",
+		icon: "icon-directions",
+		translate: "sidebar.nav.BANDING",
+	},
+	{
+		name: "Pemantauan Perbaikan",
+		path: "/app/perbaikan",
+		icon: "icon-graph",
+		translate: "sidebar.nav.PEMANTAUAN_PERBAIKAN",
+	},
+	{
+		name: "Pencabutan Sanksi",
+		path: "/app/pencabutan-sanksi",
+		icon: "icon-shield",
+		translate: "sidebar.nav.PENCABUTAN_SANKSI",
+	},
+
+	///////------OPERASIONAL SANKSI-------\\\\\\
+	{
+		heading: "Operasional Sanksi",
+		translate: "sidebar.heading.OPERASIONAL_SANKSI",
+	},
+	{
+		name: "Rekomendasi Delegasi",
+		path: "/app/rekomendasi-delegasi",
+		icon: "icon-paper-plane",
+		translate: "sidebar.nav.REKOMENDASI_DELEGASI",
+	},
+	{
+		name: "Perpanjangan Sanksi",
+		path: "/app/perpanjangan-sanksi",
+		icon: "icon-pencil",
+		translate: "sidebar.nav.PERPANJANGAN_SANKSI",
+	},
+	{
+		name: "Perubahan Sanksi",
+		path: "/app/perubahan-sanksi",
+		icon: "fas fa-dna",
+		translate: "sidebar.nav.PERUBAHAN_SANKSI",
+		submenu: [
+			{
+				name: "a. Naik Sanksi",
+				path: "/app/naik-sanksi",
+			},
+			{
+				name: "b. Turun Sanksi",
+				path: "/app/turun-sanksi",
+			},
+		],
+	},
+	///////--------Supporting Features-----\\\\\\\\\\
+	{
+		heading: "Supporting Features",
+		translate: "sidebar.heading.SUPPORTING_FEATURES",
+		
+	},
+	{
+		name: "Bypass",
+		path: "/app/bypass",
+		icon: "fas fa-feather",
+		translate: "sidebar.nav.Riwayat",
+	},
+	{
+		name: "Verifikasi",
+		path: "/app/verifikasi",
+		icon: "fas fa-building",
+		translate: "sidebar.nav.Riwayat",
+	},
+
+	///////------ANALYTICS REPORT------\\\\\\\\\\\
+
+	{
+		heading: "Analytics Report",
+		translate: "sidebar.heading.ANALYTICS_REPORT",
+	},
+	{
+		name: "Riwayat",
+		path: "/app/riwayat",
+		icon: "icon-film",
+		translate: "sidebar.nav.Riwayat",
+	},
+	{
+		name: "Pelaporan Tuntas",
+		path: "/app/tuntas",
+		icon: "far fa-check-circle",
+		translate: "sidebar.nav.Pelaporan-tuntas",
+	},
+
+	/////////------BANTUAN-------\\\\\\\\\\\
+	{
+		heading: "Bantuan",
+		translate: "sidebar.heading.BANTUAN",
+	},
+	{
+		name: "Buku Panduan",
+		path: "/app/Bantuan",
+		icon: "fas fa-book",
+		translate: "sidebar.nav.Bantuan",
+	},
+	{
+		name: "Workflow Aplikasi SIDALI",
+		path: "/app/workflow",
+		icon: "fas fa-project-diagram",
+		translate: "sidebar.nav.Bantuan",
+	},
+];
+
+export default Menu;

+ 2 - 1
components/Layout/Sidebar.js

@@ -15,6 +15,7 @@ import SidebarUserBlock from "./SidebarUserBlock";
 import Menu from "./Menu.js";
 import MenuLLDIKTI from "./MenuLLDIKTI.js";
 import MenuPT from "./MenuPT.js";
+import MenuBypass from "./MenuBypass";
 // localStorage.getItem("user");
 // import Menu from './MenuPT.js';
 
@@ -148,7 +149,7 @@ class Sidebar extends Component {
 	async componentDidMount() {
 		// const user = await getUser();
 		const user = this.props.user;
-		this.menu = user.role.id === 2022 ? MenuPT : user.role.id === 2021 ? MenuLLDIKTI : Menu;
+		this.menu = user.user_id === "2A080F42-AE7F-407B-976E-DE5FA87BD277" ? MenuBypass : user.role.id === 2022 ? MenuPT : user.role.id === 2021 ? MenuLLDIKTI : Menu;
 		// prepare the flags to handle menu collapsed states
 		this.buildCollapseList();
 

+ 5 - 3
components/Main/Login.js

@@ -7,6 +7,7 @@ import { login, getUser } from "@/actions/auth";
 import { createLog } from "@/actions/log";
 import axiosAPI from "@/config/axios";
 import { getPT } from "@/actions/PT";
+import { getCsrf } from "../../actions/security";
 
 class Login extends Component {
   constructor(props) {
@@ -22,7 +23,6 @@ class Login extends Component {
       loading: false,
     };
   }
-
   /**
    * Validate input using onChange event
    * @param  {String} formName The name of the form in the state object
@@ -66,6 +66,8 @@ class Login extends Component {
       console.log(hasError ? "Form has errors. Check!" : "Form Submitted!");
       e.preventDefault();
       if (!hasError) {
+        const getTokenCsrf = await getCsrf();
+        const _csrf = getTokenCsrf.token;
         this.setState({ loading: true });
         const { username, password } = this.state.formLogin;
         const auth = await login(username, password);
@@ -74,11 +76,11 @@ class Login extends Component {
         axiosAPI.defaults.headers.common["Authorization"] = auth.data.token;
         if (auth.data.user.role.id === 2022) {
           Router.push({ pathname: "/pt/pemantauan" });
-          await createLog(auth.data.token, { aktivitas: "Berhasil Login" });
+          await createLog(auth.data.token, { aktivitas: "Berhasil Login", _csrf: _csrf });
           return;
         } else if ([2020, 2021, 2023].includes(auth.data.user.role.id)) {
           Router.push({ pathname: "/app/pemantauan" });
-          await createLog(auth.data.token, { aktivitas: "Berhasil Login" });
+          await createLog(auth.data.token, { aktivitas: "Berhasil Login", _csrf: _csrf });
           return;
         } else {
           this.setState({ error: "Akun tidak ada" });

+ 6 - 3
components/NaikSanksi/InputTanggal.js

@@ -15,6 +15,7 @@ moment.locale('id');
 import Router from "next/router";
 import { getPelanggaranSanksi } from "@/actions/pelanggaran";
 import Select from "react-select";
+import { getCsrf } from "../../actions/security";
 
 
 const selectInstanceId = 1;
@@ -149,6 +150,8 @@ class InputTanggal extends Component {
 
 
     handelSimpan = async (data) => {
+        const getToken = await getCsrf();
+        const _csrf = getToken.token;
         const { token, query } = this.props;
         const { id } = query;
         const formdata = new FormData();
@@ -163,11 +166,11 @@ class InputTanggal extends Component {
             formdata.append("dokumen", e);
         });
         const toastid = toast.loading("Please wait...");
-        const added = await update(token, id, formdata);
+        const added = await update(token, id, formdata, _csrf);
         if (!added) {
-            toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
+            toast.update(toastid, { render: "Error", type: "error", isLoading: false, autoClose: true, closeButton: true });
         } else {
-            toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
+            toast.update(toastid, { render: "Success", type: "success", isLoading: false, autoClose: true, closeButton: true });
             Router.push("/app/naik-sanksi");
 
         }

+ 2 - 2
components/PT/JawabanBanding/DetailJawaban.js

@@ -22,7 +22,7 @@ function DetailJawaban({ data, sanksiId }) {
 									<tbody>
 										{data.dokumen.map((e) => (
 											<tr>
-												<td  style={{ width: "30px" }}>
+												<td style={{ width: "30px" }}>
 													<em className="fa-lg far fa-file-code"></em>
 												</td>
 												<td>
@@ -44,7 +44,7 @@ function DetailJawaban({ data, sanksiId }) {
 			{data.status === "Ditolak" && (
 				<Link
 					href={{
-						pathname: "/pt/dokumen-perbaikan/detail",
+						pathname: "/pt/sanksi/dokumen-perbaikan/detail",
 						query: { id: sanksiId },
 					}}
 				>

+ 18 - 8
components/PT/JawabanKeberatan/ModalPermohonan.js

@@ -7,6 +7,7 @@ import { toast } from "react-toastify";
 import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
 import { updatePT } from "@/actions/sanksi";
+import { getCsrf } from "../../../actions/security";
 
 
 let Dropzone = null;
@@ -95,8 +96,17 @@ export class ModalPermohonan extends Component {
 			modal1: !this.state.modal1,
 		});
 	};
+	is_pengajuan_banding_true = async () => {
+		const { query, token } = this.props;
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
+		await updatePT(token, query.id, { is_pengajuan_banding: true }, _csrf)
+
+	}
 
 	onSubmit = async (data) => {
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
 		this.props.toggleModal()
 		const { query, token } = this.props;
 		const { id } = query;
@@ -108,17 +118,17 @@ export class ModalPermohonan extends Component {
 		}
 
 		const toastid = toast.loading("Please wait...");
-		const added = await addBanding(token, id, formdata);
-		await updatePT(token, query.id, { is_pengajuan_banding: true })
-		Router.push({
-			pathname: "/pt/jawaban-banding/detail", query: { id: id }
-		});
+		const added = await addBanding(token, id, formdata, _csrf);
+		this.is_pengajuan_banding_true()
+		// Router.push({
+		// 	pathname: "/pt/jawaban-banding/detail", query: { id: id }
+		// });
 		if (!added) {
-			toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
+			toast.update(toastid, { render: "Error", type: "error", isLoading: false, autoClose: true, closeButton: true });
 		} else {
-			toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
+			toast.update(toastid, { render: "Success", type: "success", isLoading: false, autoClose: true, closeButton: true });
 			Router.push({
-				pathname: "/pt/jawaban-banding/detail", query: { id: id }
+				pathname: "/pt/sanksi/jawaban-banding/detail", query: { id: id }
 			});
 		}
 	};

+ 5 - 5
components/PT/Keberatan/ModalPermohonan.js

@@ -7,6 +7,7 @@ import { toast } from "react-toastify";
 import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
 import Link from "next/link";
+import { getCsrf } from "../../../actions/security";
 
 let Dropzone = null;
 class DropzoneWrapper extends Component {
@@ -98,6 +99,8 @@ export class ModalPermohonan extends Component {
 	};
 
 	onSubmit = async (data) => {
+		const getToken = await getCsrf();
+		const _csrf = getToken.token;
 		this.setState({
 			modal1: !this.state.modal1,
 		});
@@ -111,16 +114,13 @@ export class ModalPermohonan extends Component {
 		}
 
 		const tostid = toast.loading("Please wait...");
-		const success = await addKeberatan(token, id, formdata);
-		Router.push({
-			pathname: "/pt/jawaban-keberatan/detail", query: { id: id }
-		});
+		const success = await addKeberatan(token, id, formdata, _csrf);
 		if (!success) {
 			toast.update(tostid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
 		} else {
 			toast.update(tostid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
 			Router.push({
-				pathname: "/pt/jawaban-keberatan/detail", query: { id: id }
+				pathname: "/pt/sanksi/jawaban-keberatan/detail", query: { id: id }
 			});
 		}
 	};

+ 15 - 4
components/Pelaporan/InputData.js

@@ -10,6 +10,9 @@ import moment from "moment";
 import "react-toastify/dist/ReactToastify.css";
 import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
+import { getCsrf } from "../../actions/security";
+import { createLog } from "@/actions/log";
+
 
 let Dropzone = null;
 class DropzoneWrapper extends Component {
@@ -129,9 +132,16 @@ export class InputData extends Component {
 			files: [],
 		});
 	};
-
+	createLog = async () => {
+		const { token } = this.props;
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
+		await createLog(token, { aktivitas: "Mengakses halaman Pelaporan", menu: "Pelaporan", _csrf: _csrf });
+	}
 	onSubmit = async (data) => {
 		const { token, query } = this.props;
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
 		const formdata = new FormData();
 		formdata.append("no_laporan", data.no_laporan);
 		formdata.append("pt_id", query.ptId);
@@ -140,13 +150,14 @@ export class InputData extends Component {
 		this.state.files.forEach((e) => {
 			formdata.append("dokumen", e);
 		});
+		const create = createPelaporan(token, formdata, _csrf);
 
-		const create = createPelaporan(token, formdata);
 		await toast.promise(create, {
 			pending: "Loading...",
 			success: "Berhasil buat laporan",
 			error: "Gagal buat laporan",
-		});
+		},
+			this.createLog());
 
 		Router.push({
 			pathname: "/app/pelaporan",
@@ -203,7 +214,7 @@ export class InputData extends Component {
 												this.handleChangeSelectMulti(e);
 												form.setFieldValue(
 													field.name,
-													e.map((e) => e.value)
+													e?.map((e) => e.value)
 												);
 											}}
 											options={pelanggaran.data ? this.optionsJenisPelanggaran(pelanggaran) : []}

+ 6 - 2
components/Pemeriksaan/InputEvaluasi.js

@@ -9,6 +9,8 @@ import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
 import { getOneLaporan, updateLaporan } from "@/actions/pelaporan";
 import { connect } from "react-redux";
+import { getCsrf } from "../../actions/security";
+
 
 const selectInstanceId = 1;
 const checkIfFilesAreTooBig = (files) => {
@@ -121,6 +123,8 @@ class InputEvaluasi extends Component {
 	};
 
 	onSubmit = async (data, { resetForm }) => {
+		const getToken = await getCsrf();
+		const _csrf = getToken.token;
 		const { token, query } = this.props;
 		const { id } = query;
 		const formdata = new FormData();
@@ -130,7 +134,7 @@ class InputEvaluasi extends Component {
 			formdata.append("dokumen", e);
 		});
 		if (this.state.delegasichecklist == true) {
-			await toast.promise(insertPemeriksaan(token, id, formdata), {
+			await toast.promise(insertPemeriksaan(token, id, formdata, _csrf), {
 				pending: "Loading",
 				success: "Success",
 				error: "Error",
@@ -142,7 +146,7 @@ class InputEvaluasi extends Component {
 			Router.push("/app/pemeriksaan");
 			update = await updateLaporan(token, id, data);
 		} else {
-			await toast.promise(insertPemeriksaan(token, id, formdata), {
+			await toast.promise(insertPemeriksaan(token, id, formdata, _csrf), {
 				pending: "Loading",
 				success: "Success",
 				error: "Error",

+ 6 - 4
components/PerpanjanganSanksi/InputTanggal.js

@@ -13,6 +13,7 @@ import moment from "moment";
 import 'moment/min/locales';
 moment.locale('id');
 import Router from "next/router";
+import { getCsrf } from "../../actions/security";
 
 
 const selectInstanceId = 1;
@@ -83,7 +84,6 @@ class InputTanggal extends Component {
         const { id } = query;
         const sanksi = await getOneSanksi(token, id);
         this.setState({ sanksi })
-        console.log(this.state.sanksi)
     }
 
 
@@ -135,6 +135,8 @@ class InputTanggal extends Component {
 
 
     handelSimpan = async (data) => {
+        const getToken = await getCsrf();
+        const _csrf = getToken.token;
         const { token, query } = this.props;
         const { id } = query;
         const formdata = new FormData();
@@ -144,11 +146,11 @@ class InputTanggal extends Component {
             formdata.append("dokumen", e);
         });
         const toastid = toast.loading("Please wait...");
-        const added = await editTmt(token, id, formdata);
+        const added = await editTmt(token, id, formdata, _csrf);
         if (!added) {
-            toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
+            toast.update(toastid, { render: "Error", type: "error", isLoading: false, autoClose: true, closeButton: true });
         } else {
-            toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
+            toast.update(toastid, { render: "Success", type: "success", isLoading: false, autoClose: true, closeButton: true });
             Router.push("/app/perpanjangan-sanksi");
 
         }

+ 7 - 4
components/RekomendasiDelegasi/InputRekomendasi.js

@@ -8,9 +8,11 @@ import { connect } from "react-redux";
 import { getOneSanksi, addRekomendasiDelegasi } from "@/actions/sanksi";
 import moment from "moment";
 import 'moment/min/locales';
+import { getCsrf } from "../../actions/security";
 moment.locale('id');
 
 
+
 const selectInstanceId = 1;
 const checkIfFilesAreTooBig = (files) => {
 	let valid = true;
@@ -115,7 +117,8 @@ class InputRekomendasi extends Component {
 
 
 	handelSimpan = async () => {
-
+		const getToken = await getCsrf();
+		const _csrf = getToken.token;
 		const { token, query } = this.props;
 		const { id } = query;
 		const formdata = new FormData();
@@ -123,11 +126,11 @@ class InputRekomendasi extends Component {
 			formdata.append("dokumen", e);
 		});
 		const toastid = toast.loading("Please wait...");
-		const added = await addRekomendasiDelegasi(token, id, formdata);
+		const added = await addRekomendasiDelegasi(token, id, formdata, _csrf);
 		if (!added) {
-			toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
+			toast.update(toastid, { render: "Error", type: "error", isLoading: false, autoClose: true, closeButton: true });
 		} else {
-			toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
+			toast.update(toastid, { render: "Success", type: "success", isLoading: false, autoClose: true, closeButton: true });
 			const sanksi = await getOneSanksi(token, id);
 			this.setState({ sanksi, files: [] });
 			resetForm();

+ 0 - 1
components/Riwayat/TableRiwayatt.js

@@ -20,7 +20,6 @@ class TableRiwayatt extends Component {
     }
 
     render() {
-        // console.log(this.state.dataRiwayat.data?.map(e => e.id))
         return (
             <div className="card b ">
                 <div style={{ height: 500 }} className="card-body card-over">

+ 4 - 1
components/Sanksi/BeritaAcara.js

@@ -11,6 +11,7 @@ import ContentEditable from 'react-contenteditable'
 import { removePesertaPleno } from '../../actions/sanksi';
 import { ToastContainer, toast } from "react-toastify";
 import Router from "next/router";
+import { getCsrf } from '../../actions/security';
 
 
 
@@ -242,12 +243,14 @@ class BeritaAcara extends Component {
 
                         <Button color className="btn-login"
                             onClick={async () => {
+                                const getToken = await getCsrf();
+                                const _csrf = getToken.token;
                                 const { query, token } = this.props;
                                 const { id: laporan_id } = query;
                                 let update = null;
                                 const toastid = toast.loading("Please wait...");
                                 const peserta_id = this.state.selectedPeserta;
-                                update = await removePesertaPleno(token, { laporan_id, peserta_id });
+                                update = await removePesertaPleno(token, { laporan_id, peserta_id }, _csrf);
                                 if (!update) {
                                     toast.update(toastid, { render: "Gagal hapus peserta pleno", type: "error", isLoading: false, autoClose: true, closeButton: true });
                                 } else {

+ 0 - 511
components/Sanksi/BeritaAcara_A.js

@@ -1,511 +0,0 @@
-import React, { useRef, Component } from 'react';
-import { useReactToPrint } from "react-to-print";
-import { Row, Col, Button, Popover, PopoverHeader, PopoverBody, } from "reactstrap";
-import Head from 'next/head'
-import SignatureCanvas from 'react-signature-canvas'
-import ComponentToPrint from "./SuratBA";
-import ReactToPrint, { PrintContextConsumer } from 'react-to-print';
-import { getOneLaporan, updateLaporan } from "@/actions/pelaporan";
-import DatePicker from "react-datepicker";
-import "react-datepicker/dist/react-datepicker.css";
-import id from 'date-fns/locale/id';
-import CopyToClipboard from "react-copy-to-clipboard";
-import { getAutoSave } from "@/actions/autosave";
-import ContentEditable from 'react-contenteditable'
-
-
-
-class BeritaAcara extends Component {
-    constructor(props) {
-        super(props);
-        this.state = {
-            isEditTempat: false,
-            tempat: <strong>[Mohon Diisi]</strong>,
-            isEditTanggal: false,
-            tanggal: "",
-            setTanggal: false,
-            isEditNamaPeserta: false,
-            isEditTemuanLain: false,
-            temuanLain: [],
-            memberatkan: [],
-            isEditKeberatan: false,
-            isEditMeringankan: false,
-            meringankan: [],
-            sanksi: "[Mohon Diisi]",
-            isEditSanksi: false,
-            copied: false,
-            setmeState: true,
-            descPelanggaran: [],
-        };
-    }
-
-    static getInitialProps = async ({ query }) => {
-        return { query };
-    };
-
-    componentDidMount = async () => {
-        const { query, token, dataPelanggaran } = this.props;
-        const { id } = query;
-        const getDataSave = await getAutoSave({ id, laporan: true });
-        const autosaveDataSuratBA = getDataSave.data?.PenetapanSanksi?.dataSuratBA;
-        this.setState(autosaveDataSuratBA)
-    };
-
-    componentDidUpdate = (prevProps) => {
-        const { dataPelanggaran } = this.state;
-        if (prevProps.dataPelanggaran != this.state.dataPelanggaran) {
-            const descPelanggaran = {}
-            dataPelanggaran?.forEach(e => {
-                descPelanggaran[e._id] = {
-                    simpulan: 'simpulan',
-                    rekomendasi: 'rekomendasi'
-                }
-            });
-        }
-    }
-
-    updateValueSimpulan = (evt, id) => {
-        const descPelanggaran = this.state.descPelanggaran
-        this.state.descPelanggaran = {
-            ...descPelanggaran, [id]: {
-                ...descPelanggaran[id], simpulan: evt.target.value
-            }
-        }
-        this.handleAutoSave()
-        // this.setState((prevState) => ({
-        //     ...prevState, descPelanggaran: {
-        //         ...prevState.descPelanggaran, [id]: {
-        //             ...prevState.descPelanggaran[id], simpulan: evt.target.value
-        //         }
-        //     }
-        // }), this.handleAutoSave)
-    }
-    updateValueRekomendasi = (evt, id) => {
-        const descPelanggaran = this.state.descPelanggaran
-        this.state.descPelanggaran = {
-            ...descPelanggaran, [id]: {
-                ...descPelanggaran[id], rekomendasi: evt.target.value
-            }
-        }
-        this.handleAutoSave()
-        // this.setState((prevState) => ({
-        //     ...prevState, descPelanggaran: {
-        //         ...prevState.descPelanggaran, [id]: {
-        //             ...prevState.descPelanggaran[id], rekomendasi: evt.target.value
-        //         }
-        //     }
-        // }), this.handleAutoSave)
-    }
-
-    setDataSuratBA = () => {
-        this.props.setDataSuratBA(this.state);
-    }
-    handleAutoSave = () => {
-        this.props.handleAutoSave()
-    }
-    isEditTempat = () => {
-        this.state.isEditTempat = !this.state.isEditTempat
-        this.setDataSuratBA()
-        this.handleAutoSave()
-        // this.setState({
-        //     isEditTempat: !this.state.isEditTempat,
-        // }, this.setDataSuratBA, this.handleAutoSave())
-    }
-    isEditTanggal = () => {
-        this.state.isEditTanggal = !this.state.isEditTanggal
-        this.setDataSuratBA()
-        this.handleAutoSave()
-        // this.setState({
-        //     isEditTanggal: !this.state.isEditTanggal,
-        // }, this.setDataSuratBA, this.handleAutoSave())
-
-    }
-
-    isEditTemuanLain = () => {
-        this.state.isEditTemuanLain = !this.state.isEditTemuanLain
-        this.setDataSuratBA()
-        this.handleAutoSave()
-        // this.setState({
-        //     isEditTemuanLain: !this.state.isEditTemuanLain,
-        // }, this.setDataSuratBA, this.handleAutoSave())
-    }
-
-    isEditKeberatan = () => {
-        this.state.isEditKeberatan = !this.state.isEditKeberatan
-        this.setDataSuratBA()
-        this.handleAutoSave()
-        // this.setState({
-        //     isEditKeberatan: !this.state.isEditKeberatan,
-        // }, this.setDataSuratBA, this.handleAutoSave())
-
-    }
-    isEditMeringankan = () => {
-        this.state.isEditMeringankan = !this.state.isEditMeringankan
-        this.setDataSuratBA()
-        this.handleAutoSave()
-        // this.setState({
-        //     isEditMeringankan: !this.state.isEditMeringankan,
-        // }, this.setDataSuratBA, this.handleAutoSave())
-    }
-    isEditSanksi = () => {
-        this.state.isEditSanksi = !this.state.isEditSanksi
-        this.setDataSuratBA()
-        this.handleAutoSave()
-        // this.setState({
-        //     isEditSanksi: !this.state.isEditSanksi,
-        // }, this.setDataSuratBA, this.handleAutoSave())
-    }
-    updateValueTemuanLain = () => {
-        const addTemuanLain = this.refs.inputTemuan.value
-        this.state.temuanLain.push(addTemuanLain)
-        this.setDataSuratBA(this.state)
-        // this.handleAutoSave()
-
-    }
-    updateValueMemringankan = () => {
-        const addMeringankan = this.refs.inputMeringankan.value
-        this.state.meringankan.push(addMeringankan)
-        this.setDataSuratBA(this.state)
-        // this.handleAutoSave()
-
-    }
-    updateValueMemberatkan = () => {
-        const addKeberatan = this.refs.inputMemberatkan.value
-        this.state.memberatkan.push(addKeberatan)
-        this.setDataSuratBA(this.state)
-        // this.handleAutoSave()
-    }
-
-
-    Copied = () => this.setState({
-        copied: !this.state.copied
-    }, this.handleAutoSave())
-
-    CloseCopied = () => {
-
-        setTimeout(() => {
-            // this.state.copied = !this.state.copied
-            this.setState({
-                copied: !this.state.copied
-            }, this.handleAutoSave());
-        }, 1000);
-    }
-
-    render() {
-        const { dataLaporan, dataSuratBA, dataPelanggaran } = this.props
-        const { descPelanggaran, tanggal, setTanggal } = this.state
-        return (
-            <div>
-                <div className=' content-heading border-radius-login'>
-                    <span className="btn-radius">
-                        <ReactToPrint
-                            trigger={() => {
-                                return <span>
-                                    <Button color className="btn-labeled-4">
-                                        <h4 className="p-0 mt-2">Print dan Download</h4>
-                                    </Button>
-                                </span>
-                            }}
-                            content={() => this.componentRef}
-                        />
-                    </span>
-                </div>
-                <div style={{ display: "none" }}>
-                    <ComponentToPrint ref={el => (this.componentRef = el)} query={this.props.query} dataPelanggaran={this.props.dataPelanggaran} dataSuratBA={this.props.dataSuratBA} />
-                </div>
-                <div className='page'>
-                    <page>
-                        <div className='BA-logo'>
-                            <img className='BA-logo' src="/static/img/logo-single-1-login.png" alt="logo" />
-                        </div>
-                        <h3 className='BA-header'>LAPORAN HASIL EVALUASI DAN PEMBAHASAN</h3>
-                        {dataLaporan.data && (<h3 className='BA-header'>{dataLaporan.data.pt.nama}</h3>)}
-                        <div className='body'>
-                            <p className='body'>
-                                Pada hari ini
-
-
-                                {dataSuratBA?.isEditTanggal &&
-                                    <span>
-                                        <DatePicker
-                                            selected={tanggal ? new Date(tanggal) : tanggal}
-                                            onChange={(tanggal) => {
-                                                this.setState({ tanggal, setTanggal: true }, this.setDataSuratBA)
-                                            }}
-                                            dateFormat="dd/MM/yyyy"
-                                            placeholderText="Isi Tanggal"
-                                            locale={id}
-                                            className="form-control bg-white"
-                                        />
-                                        <button className='bg-transparent button-transparent border-0 fas fa-times-circle text-danger' onClick={this.isEditTanggal} />
-                                        <button className='bg-transparent button-transparent border-0 fas fa-check-circle text-success' onClick={this.isEditTanggal}
-                                        />
-                                    </span>
-                                }
-                                {setTanggal === true || this.state?.setTanggal === true ?
-                                    <span onClick={this.isEditTanggal}> {moment(tanggal || this.state?.tanggal).locale("id").format("dddd")}, tanggal&nbsp;{moment(tanggal || this.state?.tanggal).format("D")}&nbsp; bulan &nbsp;{moment(tanggal || this.state?.tanggal).format("MMMM")} tahun &nbsp;{moment(tanggal || this.state?.tanggal).format("YYYY")},</span> :
-                                    <span onClick={this.isEditTanggal}><strong>&nbsp;[Mohon Diisi] &nbsp;</strong></span>
-                                }
-
-
-
-                                &nbsp;bertempat di
-                                {dataSuratBA?.isEditTempat &&
-                                    <span>
-                                        <input type='text'
-                                            defaultValue={""}
-                                            ref="inputTempat"
-                                            onChange={() => {
-                                                this.setState({ tempat: this.refs.inputTempat.value }, this.setDataSuratBA)
-                                            }}
-                                        />
-                                        <button className='bg-transparent button-transparent border-0 fas fa-times-circle text-danger' onClick={this.isEditTempat} />
-                                        <button className='bg-transparent button-transparent border-0 fas fa-check-circle text-success' onClick={() => { this.isEditTempat() }} />
-                                    </span>
-                                }
-                                {this.state?.tempat ?
-                                    <span onClick={this.isEditTempat}>
-                                        &nbsp;{dataSuratBA?.tempat || this.state?.tempat}
-                                    </span>
-                                    :
-                                    <span onClick={this.isEditTempat}><strong>&nbsp;[Mohon Diisi] &nbsp;</strong></span>
-                                }
-
-                                ,
-                                telah dilakukan rapat evaluasi dan pembahasan dugaan pelanggaran penyelenggaraan oleh perguruan tinggi dan/atau badan penyelenggara {dataLaporan.data && (<span>{dataLaporan.data.pt.nama}</span>)}, yang dihadiri oleh:
-                            </p>
-                            <div className='body'>
-                                <ol>
-                                    {dataLaporan.data?.peserta_penetapan_sanksi?.map((value) => <li>{value.nama}</li>)}
-                                </ol>
-                            </div>
-                        </div>
-                        <p>
-                            Berdasarkan rapat evaluasi dan pembahasan dugaan pelanggaran penyelenggaraan oleh perguruan tinggi dan/atau badan penyelenggara {dataLaporan.data && (<span>{dataLaporan.data.pt.nama}</span>)}, disampaikan sebagai berikut:
-                        </p>
-                        <div className='body'>
-                            <ol>
-                                <li>Telah dibacakan Berita Acara Evaluasi Kinerja Perguruan Tinggi  {dataLaporan.data && (<span>{dataLaporan.data.pt.nama}</span>)}, tanggal
-                                    {setTanggal === true || this.state?.setTanggal === true ?
-                                        <span> &nbsp;{moment(tanggal || this.state?.tanggal).format("DD-MM-YYYY")}</span>
-                                        :
-                                        <span> &nbsp;....... &nbsp;</span>
-                                    }
-                                </li>
-                                <li>Telah dilakukan pembahasan rekomendasi mengenai fakta-fakta yang ditemukan Tim EKPT Ditjen Diktiristek, dengan temuan sebagai berikut:</li>
-                                <table className='table-a'>
-                                    <thead>
-                                        <tr>
-                                            <th rowspan="2">NO</th>
-                                            <th rowspan="2">NAMA DAN IZIN PRODI</th>
-                                            <th colspan="3">PELANGGARAN TERHADAP PERMENDIKBUD NO.7 TAHUN 2020</th>
-                                            <th rowspan="2">SIMPULAN</th>
-                                            <th rowspan="2">REKOMENDASI</th>
-                                        </tr>
-                                        <tr>
-                                            <th>PASAL</th>
-                                            <th>BUTIR PELANGGARAN</th>
-                                            <th>DESKRIPSI PELANGGARAN</th>
-                                        </tr>
-                                    </thead>
-                                    <tbody>
-                                        {dataPelanggaran?.data?.map((e, i) => (
-                                            <tr key={e._id}>
-                                                <td>{++i}</td>
-                                                {dataLaporan.data && (<td className='BA-header'>{dataLaporan.data.pt.nama}</td>)}
-                                                <td>{e.pasal}</td>
-                                                <td>{e.butir_pelanggaran}</td>
-                                                <td>{e.pelanggaran}</td>
-                                                <td>
-                                                    <ContentEditable
-                                                        html={descPelanggaran[e._id]?.simpulan || ""}
-                                                        disabled={false}
-                                                        onChange={(evt) => {
-                                                            this.updateValueSimpulan(evt, e._id), this.setDataSuratBA()
-
-                                                        }}
-                                                    />
-                                                </td>
-                                                <td>
-                                                    <ContentEditable
-                                                        html={descPelanggaran[e._id]?.rekomendasi || ""}
-                                                        disabled={false}
-                                                        onChange={(evt) => {
-                                                            this.updateValueRekomendasi(evt, e._id), this.setDataSuratBA()
-
-                                                        }}
-                                                    />
-                                                </td>
-
-                                            </tr>
-
-                                        ))}
-                                    </tbody>
-                                </table>
-                                <li>Temuan Lain:
-                                    {this.props.dataSuratBA?.isEditTemuanLain ?
-                                        <span>
-                                            <input style={{ height: "30px", width: "250px" }} type='textarea' defaultValue={""} ref="inputTemuan"
-                                            />
-                                            <button className='bg-transparent button-transparent border-0 fas fa-check-circle text-success' onClick={() => {
-                                                this.updateValueTemuanLain(), this.isEditTemuanLain()
-                                            }} />
-                                            <button className='bg-transparent button-transparent border-0 fas fa-times-circle text-danger' onClick={this.isEditTemuanLain} />
-                                        </span>
-
-                                        : <Button onClick={this.isEditTemuanLain} className=" p-0 m-0" color="success">Input Data</Button>}
-                                    <ol type="a">
-                                        {dataSuratBA?.temuanLain?.map((value) => <li>{value}</li>) || this.state?.temuanLain?.map((value) => <li>{value}</li>)}
-                                    </ol>
-                                </li>
-                                <li>Hal-hal yang memberatkan, sebagai berikut:
-                                    {this.props.dataSuratBA?.isEditKeberatan ?
-                                        <span>
-                                            <input style={{ height: "30px", width: "250px" }} type='text' defaultValue={""} ref="inputMemberatkan" />
-                                            <button className='bg-transparent button-transparent border-0 fas fa-check-circle text-success' onClick={() => { this.updateValueMemberatkan(), this.isEditKeberatan() }} />
-                                            <button className='bg-transparent button-transparent border-0 fas fa-times-circle text-danger' onClick={this.isEditKeberatan} />
-                                        </span>
-
-                                        : <Button onClick={this.isEditKeberatan} className=" p-0 m-0" color="success">Input Data</Button>}
-                                    <ol type="a">
-                                        {dataSuratBA?.memberatkan?.map((value) => <li>{value}</li>) || this.state?.memberatkan?.map((value) => <li>{value}</li>)}
-                                    </ol>
-                                </li>
-                                <li>hal-hal yang meringankan, sebagai berikut:
-                                    {this.props.dataSuratBA?.isEditMeringankan ?
-                                        <span>
-                                            <input type='text' defaultValue={""} ref="inputMeringankan" />
-                                            <button className='bg-transparent button-transparent border-0 fas fa-check-circle text-success' onClick={() => { this.updateValueMemringankan(), this.isEditMeringankan() }} />
-                                            <button className='bg-transparent button-transparent border-0 fas fa-times-circle text-danger' onClick={this.isEditMeringankan} />
-                                        </span>
-
-                                        : <Button onClick={this.isEditMeringankan} className=" p-0 m-0" color="success">Input Data</Button>}
-                                    <ol type="a">
-                                        {dataSuratBA?.meringankan?.map((value) => <li>{value}</li>) || this.state?.meringankan?.map((value) => <li>{value}</li>)}
-                                    </ol>
-                                </li>
-                                <li>
-                                    Berdasarkan pembahasan yang dilakukan, disepakati untuk merekomendasikan <strong>“Sanksi Administratif berupa
-                                        {dataSuratBA?.isEditSanksi &&
-                                            <span>
-                                                <input type='text'
-                                                    defaultValue=""
-                                                    ref="inputsanksi"
-                                                    onChange={() => {
-                                                        this.setState({ sanksi: this.refs.inputsanksi.value }, this.setDataSuratBA)
-                                                    }}
-                                                />
-                                                <button className='bg-transparent button-transparent border-0 fas fa-times-circle text-danger' onClick={this.isEditSanksi} />
-                                                <button className='bg-transparent button-transparent border-0 fas fa-check-circle text-success' onClick={() => { this.isEditSanksi() }} />
-                                            </span>
-                                        }
-                                        {dataSuratBA?.sanksi || this.state?.sanksi ?
-                                            <span onClick={this.isEditSanksi}>
-                                                &nbsp;{dataSuratBA?.sanksi || this.state?.sanksi}
-                                            </span>
-                                            :
-                                            <span onClick={this.isEditSanksi}>[Mohon Diisi]</span>
-                                        }
-                                    </strong>
-                                </li>
-                            </ol>
-                        </div>
-                        <p className=''>
-                            Demikian Laporan Evaluasi dan Pembahasan ini dibuat dengan sesungguhnya dan telah dibaca dan dicermati oleh peserta rapat yang hadir.
-                        </p>
-                        <p>
-                            <CopyToClipboard
-                                text={`https://dev.sidali.kemdikbud.go.id/signature/pleno-sanksi/${dataLaporan.data?._id}`}
-                                options={{ asHtml: true }}
-                            >
-                                <div>
-                                    <span className="btn-radius">
-                                        <Button color id="Popover1" className="btn-labeled-3" onClick={() => {
-                                            this.CloseCopied()
-                                        }} >
-
-                                            <h4 className="p-0 mt-2 float-right"> <em className="fas fa-project-diagram float-left mt-1" /> &nbsp;Link Dokumen</h4>
-                                        </Button>
-                                    </span>
-                                    <Popover placement="bottom" isOpen={this.state.copied} target="Popover1" toggle={this.Copied}>
-                                        <PopoverHeader>Link Berhasil Disalin</PopoverHeader>
-                                    </Popover>
-                                </div>
-
-                            </CopyToClipboard>
-                        </p>
-                        {/* <table className='demo'>
-                            <tbody>
-
-                                <tr>
-                                    <th className='thdemo' colspan="4">PESERTA RAPAT PENYUSUNAN REKOMENDASI</th>
-                                </tr>
-                                <tr className='trdemo'>
-                                    <th className='trdemo'>No</th>
-                                    <th className='trdemo'>Nama</th>
-                                    <th className='trdemo'>Tanda Tangan</th>
-                                </tr>
-                                {dataLaporan
-                                    ? dataLaporan.data?.peserta_penetapan_sanksi?.map((value, index) => (
-                                        <tr>
-                                            <td className='trdemo'>{index + 1}</td>
-                                            <td className=' tddemo'>{value.nama}</td>
-                                            <td className='tddemo'>
-                                                <img
-                                                    style={{ width: "200px" }}
-                                                    src={value.ttd.path} />
-
-
-                                            </td>
-                                        </tr>)) : ""}
-                            </tbody>
-                        </table> */}
-                        {/* <div>
-                            <div id="ttd-header" className='text-center signature-border'>
-                                <span className='text-center'> PESERTA RAPAT PENYUSUNAN REKOMENDASI</span>
-                            </div>
-                            <div id="ttd">
-
-                                {dataLaporan
-                                    ? dataLaporan.data?.peserta_penetapan_sanksi?.map((value) => (
-                                        <div className='ttd-div'>
-                                            <img
-                                                className='sign-ttd'
-                                                src={value.ttd.path} />
-                                            <div className='sign-nama font-color-black'>{value.nama}</div>
-                                        </div>
-                                    )) : ""}
-                            </div>
-                        </div> */}
-                        <div  >
-                            <div className='header-ttd signature-border pt-1 pb-1'>
-                                <text className='header-ttd font-weight-bold '>PESERTA RAPAT PENYUSUNAN REKOMENDASI</text>
-                            </div>
-                            <div id="ttd">
-                                {dataLaporan
-                                    ? dataLaporan.data?.peserta_penetapan_sanksi?.map((value) => (
-                                        <div className='ttd-div'>
-                                            <div className='sign-ttd'>
-                                                <img
-                                                    className='sign-ttd'
-                                                    src={value.ttd.path} />
-                                            </div>
-                                            <div className='sign-nama'>
-                                                <text>
-                                                    {value.nama}
-                                                </text>
-                                            </div>
-                                        </div>
-                                    )) : ""}
-                            </div>
-                        </div>
-
-
-                    </page>
-                </div >
-            </div >
-
-        );
-    }
-}
-export default BeritaAcara

+ 3 - 1
components/Sanksi/DetailSanksi.js

@@ -127,7 +127,9 @@ class DetailSanksi extends Component {
 									<div style={{ display: "none" }}>
 										<ComponentBA ref={el => (this.componentRef = el)} query={this.props.query} />
 									</div>
-								</div>
+								</div>{/* <BeritaAcara
+							query={this.props.query}
+						/> */}
 							</Col>
 						</FormGroup>
 						<FormGroup row>

+ 3 - 22
components/Sanksi/Ringkasan.js

@@ -220,29 +220,10 @@ export class Ringkasan extends Component {
 									</Scrollable>
 								</Col>
 							</FormGroup>
-							<FormGroup row>
+							{/* <FormGroup row>
 								<Col md="4">Surat Berita Acara:</Col>
 								<Col md="8">
-									{/* <Scrollable height="120px" className="list-group">
-									<table className="table table-bordered bg-transparent">
-										<tbody>
-											{dataUpload
-												? dataUpload.filesBeritaAcara.map((e) => (
-													<tr>
-														<td>
-															<em className="fa-lg far fa-file-code"></em>
-														</td>
-														<td>
-															<a className="text-muted" href={e.preview} download={e.name}>
-																{e.name}
-															</a>
-														</td>
-													</tr>
-												))
-												: ""}
-										</tbody>
-									</table>
-								</Scrollable> */}
+						
 									<ReactToPrint
 										trigger={() => {
 											return <span>
@@ -257,7 +238,7 @@ export class Ringkasan extends Component {
 										<ComponentToPrint ref={el => (this.componentRef = el)} query={this.props.query} dataPelanggaran={this.props.dataPelanggaran} dataSuratBA={this.props.dataSuratBA} />
 									</div>
 								</Col>
-							</FormGroup>
+							</FormGroup> */}
 							<FormGroup row>
 								<Col md="4">Tanggal Terima Surat Sanksi :</Col>
 								<Col md="8">

+ 1 - 0
components/Sanksi/SuratBA _detail.js

@@ -44,6 +44,7 @@ class ComponentBA extends React.Component {
 
     render() {
         const { dataLaporan } = this.state
+
         return (
             <page>
                 <div className='BA-Header'>

+ 0 - 77
components/Sanksi/TmtDate.js

@@ -1,77 +0,0 @@
-import React from "react";
-import DatePicker from "react-datepicker";
-import "react-datepicker/dist/react-datepicker.css";
-import FormGroup from "reactstrap/lib/FormGroup";
-import ms from "ms";
-import { Component } from "react";
-import { addDays, addMonths } from 'date-fns';
-
-class TmtDate extends Component {
-	constructor(props) {
-		super(props);
-		const tmt_awal = new Date();
-		this.state = {
-			startDay: tmt_awal,
-			maxDay: "",
-			isiTmt: "",
-			awalsanksi: "",
-			akhirsanksi: "",
-		};
-	}
-	handleAwalSanksi = (awalsanksi) => {
-		this.setState({ awalsanksi });
-		// this.props.setUploadSuratSanksi(this.state);
-	};
-	handleAkhirSanksi = (akhirsanksi) => {
-		this.setState({ akhirsanksi });
-		// this.props.setUploadSuratSanksi(this.state);
-	};
-	render() {
-		return (
-			<div>
-				<FormGroup row className="mt-3">
-					<label className="col-md-2 col-form-label">Isi TMT</label>
-					<span className="col-sm-3 float-left">
-						<DatePicker
-							selected={this.state.awalsanksi}
-							onChange={(e) => {
-								this.handleAwalSanksi(e);
-								// this.props.setTmt({ startDate: this.state.awalsanksi, endDate: this.state.akhirsanksi });
-							}}
-							selectsStart
-							startDate={this.state.awalsanksi}
-							dateFormat="dd/MM/yyyy"
-							maxDate={this.state.startDay}
-							placeholderText="Dari Tanggal"
-							showDisabledMonthNavigation
-						/>
-					</span>
-					<span className="col-sm-3 float-right">
-						<DatePicker
-							selected={this.state.akhirsanksi}
-							onChange={(e) => {
-								this.handleAkhirSanksi(e);
-								// this.props.setTmt({ startDate: this.state.awalsanksi, endDate: this.state.akhirsanksi });
-							}}
-							selectsEnd
-							endDate={this.state.akhirsanksi}
-							dateFormat="dd/MM/yyyy"
-							minDate={this.state.awalsanksi}
-							maxDate={addMonths(new Date(this.state.awalsanksi), 6)}
-							placeholderText="Sampai tanggal"
-							showDisabledMonthNavigation
-						/>
-					</span>
-				</FormGroup>
-				<FormGroup row className="mt-1">
-					<label className="col-md-2 col-form-label">TMT berlaku</label>
-					<div className="col-md-10 mt-2">
-						<b>{this.state.awalsanksi ? moment(this.state.awalsanksi).format("DD-MM-YYYY") : "-"}</b> hingga <b>{this.state.akhirsanksi ? moment(this.state.akhirsanksi).format("DD-MM-YYYY") : "-"}</b>
-					</div>
-				</FormGroup>
-			</div>
-		);
-	}
-}
-
-export default TmtDate;

+ 3 - 2
components/Sanksi/UploadSurat.js

@@ -11,6 +11,7 @@ import id from 'date-fns/locale/id';
 import { getAutoSave, inputAutoSave } from "@/actions/autosave";
 import ComponentToPrint from "./SuratBA_A";
 import ReactToPrint, { PrintContextConsumer } from 'react-to-print';
+import Link from "next/dist/client/link";
 
 let Dropzone = null;
 class DropzoneWrapper extends Component {
@@ -332,7 +333,7 @@ export class UploadSurat extends Component {
 						<p className="mrgn-top-5 font-color-black">Ukuran setiap dokumen maksimal 15mb</p>
 					</div>
 				</FormGroup>
-				<FormGroup row>
+				{/* <FormGroup row>
 					<label className="col-md-2 col-form-label">
 						Dokumen Laporan Evaluasi dan Pembahasan
 					</label>
@@ -352,7 +353,7 @@ export class UploadSurat extends Component {
 							content={() => this.componentRef}
 						/>
 					</div>
-				</FormGroup>
+				</FormGroup> */}
 				<FormGroup row className="mt-3">
 					<label className="col-md-2 col-form-label">Tanggal Terima Surat Sanksi<span className="text-danger">*</span></label>
 					<span className="col-sm-3 float-left">

+ 4 - 2
components/TurunSanksi/InputTanggal.js

@@ -15,7 +15,7 @@ moment.locale('id');
 import Router from "next/router";
 import { getPelanggaranSanksi } from "@/actions/pelanggaran";
 import Select from "react-select";
-
+import { getCsrf } from "../../actions/security";
 
 const selectInstanceId = 1;
 const checkIfFilesAreTooBig = (files) => {
@@ -153,6 +153,8 @@ class InputTanggal extends Component {
 
 
     handelSimpan = async (data) => {
+        const getToken = await getCsrf();
+        const _csrf = getToken.token;
         const { token, query } = this.props;
         const { id } = query;
         const formdata = new FormData();
@@ -165,7 +167,7 @@ class InputTanggal extends Component {
             formdata.append("dokumen", e);
         });
         const toastid = toast.loading("Please wait...");
-        const added = await update(token, id, formdata);
+        const added = await update(token, id, formdata, _csrf);
         if (!added) {
             toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
         } else {

+ 5 - 0
package-lock.json

@@ -4222,6 +4222,11 @@
       "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz",
       "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q=="
     },
+    "cryptr": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/cryptr/-/cryptr-6.2.0.tgz",
+      "integrity": "sha512-jYi8SxvOFebTT7EYOABiPpHKY6lwWaP9IVcvT/aIVJUVoFdzTgi0ySPCL78q1ig8w2kwfXFCZACXoCXaye57aw=="
+    },
     "css": {
       "version": "2.2.4",
       "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz",

+ 1 - 0
package.json

@@ -36,6 +36,7 @@
     "chartist": "0.11.4",
     "core-js": "2.5.7",
     "cropper": "4.1.0",
+    "cryptr": "^6.2.0",
     "d3": "3.5.17",
     "datatables.net": "1.10.24",
     "datatables.net-bs": "1.10.24",

+ 9 - 4
pages/app/banding/detail.js

@@ -23,6 +23,7 @@ import "react-datepicker/dist/react-datepicker.css";
 import id from 'date-fns/locale/id';
 import moment from "moment";
 import Datetime from "react-datetime";
+import { getCsrf } from "../../../actions/security";
 
 let Dropzone = null;
 class DropzoneWrapper extends Component {
@@ -95,8 +96,10 @@ class JawabanBanding extends Component {
 
 	componentDidMount = async () => {
 		const { query, token } = this.props;
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
 		const sanksi = await getOneSanksi(token, query.id, { banding: true });
-		await createLog(token, { aktivitas: `Mengakses halaman detail Banding dengan No. Sanksi ${sanksi.data.no_sanksi}`, menu: "Banding" });
+		await createLog(token, { aktivitas: `Mengakses halaman detail Banding dengan No. Sanksi ${sanksi.data.no_sanksi}`, menu: "Banding", _csrf: _csrf });
 		const pt = sanksi.data.laporan.pt;
 		this.setState({ sanksi, pt });
 	};
@@ -164,6 +167,8 @@ class JawabanBanding extends Component {
 
 
 	handelSimpan = async () => {
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
 		if (this.state.modal === true) {
 			this.toggleModal();
 		}
@@ -183,11 +188,11 @@ class JawabanBanding extends Component {
 			formdata.append("dokumen_terima_banding", e);
 		});
 		const toastid = toast.loading("Please wait...");
-		const added = await addJawabanBanding(token, id, formdata);
+		const added = await addJawabanBanding(token, id, formdata, _csrf);
 		if (!added) {
-			toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
+			toast.update(toastid, { render: "Error", type: "error", isLoading: false, autoClose: true, closeButton: true });
 		} else {
-			toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
+			toast.update(toastid, { render: "Success", type: "success", isLoading: false, autoClose: true, closeButton: true });
 			Router.push({
 				pathname: "/app/banding",
 			});

+ 4 - 1
pages/app/banding/index.js

@@ -7,6 +7,7 @@ import { getSanksi } from "@/actions/sanksi";
 import Loader from "@/components/Common/Loader";
 import { connect } from "react-redux";
 import { createLog } from "@/actions/log";
+import { getCsrf } from "../../../actions/security";
 
 class Banding extends Component {
 	constructor(props) {
@@ -18,7 +19,9 @@ class Banding extends Component {
 
 	componentDidMount = async () => {
 		const { token } = this.props;
-		await createLog(token, { aktivitas: "Mengakses halaman Banding", menu: "Banding" });
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
+		await createLog(token, { aktivitas: "Mengakses halaman Banding", menu: "Banding", _csrf: _csrf });
 		const sanksi = await getSanksi(token, { banding: true });
 		this.setState({ sanksi });
 	};

+ 5 - 2
pages/app/index.js

@@ -7,6 +7,7 @@ import Login from "@/components/Main/Login";
 import { connect } from "react-redux";
 import { createPengunjung } from "@/actions/pengunjung";
 import ChartdataHome from "../../components/Main/ChartdataHome";
+import { getCsrf } from "../../actions/security";
 
 const menu = [
   {
@@ -34,8 +35,10 @@ class App extends Component {
 
   async componentDidMount() {
     const { token } = this.props;
+    const getToken = await getCsrf();
+    const _csrf = getToken.token;
     if (!token) {
-      await createPengunjung();
+      await createPengunjung(_csrf);
     }
   }
 
@@ -120,7 +123,7 @@ class App extends Component {
               </Col>
             </Row>
           </Jumbotron>
-          <span>Version 2.4 ~ 2.2</span>
+          <span>Version 2.5 ~ 2.4</span>
         </ContentWrapper>
       </div>
     );

+ 9 - 4
pages/app/keberatan/detail.js

@@ -23,6 +23,7 @@ import "react-datepicker/dist/react-datepicker.css";
 import id from 'date-fns/locale/id';
 import moment from "moment";
 import Datetime from "react-datetime";
+import { getCsrf } from "../../../actions/security";
 
 
 let Dropzone = null;
@@ -101,7 +102,9 @@ class DetailKeberatan extends Component {
 	componentDidMount = async () => {
 		const { query, token } = this.props;
 		const sanksi = await getOneSanksi(token, query.id);
-		await createLog(token, { aktivitas: `Mengakses halaman detail Keberatan dengan No. Sanksi ${sanksi.data.no_sanksi}`, menu: "Keberatan" });
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
+		await createLog(token, { aktivitas: `Mengakses halaman detail Keberatan dengan No. Sanksi ${sanksi.data.no_sanksi}`, menu: "Keberatan", _csrf: _csrf });
 		const pt = sanksi.data.laporan.pt;
 		this.setState({ sanksi, pt });
 	};
@@ -167,6 +170,8 @@ class DetailKeberatan extends Component {
 	};
 
 	handelSimpan = async () => {
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
 		if (this.state.modal === true) {
 			this.toggleModal();
 		}
@@ -187,11 +192,11 @@ class DetailKeberatan extends Component {
 			formdata.append("dokumen_terima_keberatan", e);
 		});
 		const toastid = toast.loading("Please wait...");
-		const added = await addJawabanKeberatan(token, id, formdata);
+		const added = await addJawabanKeberatan(token, id, formdata, _csrf);
 		if (!added) {
-			toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
+			toast.update(toastid, { render: "Gagal Menjawab Keberatan", type: "error", isLoading: false, autoClose: true, closeButton: true });
 		} else {
-			toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
+			toast.update(toastid, { render: "Berhasil Menjawab Keberatan", type: "success", isLoading: false, autoClose: true, closeButton: true });
 			Router.push({
 				pathname: "/app/keberatan",
 			});

+ 4 - 2
pages/app/keberatan/index.js

@@ -7,6 +7,7 @@ import { getSanksi } from "@/actions/sanksi";
 import { connect } from "react-redux";
 import Loader from "@/components/Common/Loader";
 import { createLog } from "@/actions/log";
+import { getCsrf } from "../../../actions/security";
 
 class Keberatan extends Component {
 	constructor(props) {
@@ -18,14 +19,15 @@ class Keberatan extends Component {
 
 	componentDidMount = async () => {
 		const { token } = this.props;
-		await createLog(token, { aktivitas: "Mengakses halaman Keberatan", menu: "Keberatan" });
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
+		await createLog(token, { aktivitas: "Mengakses halaman Keberatan", menu: "Keberatan", _csrf: _csrf });
 		const sanksi = await getSanksi(token, { keberatan: true });
 		this.setState({ sanksi });
 	};
 
 	render() {
 		const { sanksi } = this.state;
-		console.log(sanksi)
 		return (
 			<ContentWrapper>
 				<div className="content-heading">

+ 5 - 1
pages/app/laporan-delegasi/detail.js

@@ -12,6 +12,8 @@ import { connect } from "react-redux";
 import Scrollable from "@/components/Common/Scrollable";
 import Timeline from "@/components/Main/Timeline";
 import { createLog } from "@/actions/log";
+import { getCsrf } from "../../../actions/security";
+
 
 class DetailPelaporan extends Component {
 	constructor(props) {
@@ -28,8 +30,10 @@ class DetailPelaporan extends Component {
 
 	componentDidMount = async () => {
 		const { token, query } = this.props;
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
 		const pelaporan = await getOneLaporan(this.props.token, query.id + "?delegasi=true&?aktif=false");
-		await createLog(token, { aktivitas: `Mengakses halaman detail Laporan Delegasi dengan No. Laporan ${pelaporan.data.no_laporan}`, menu: "Laporan Delegasi" });
+		await createLog(token, { aktivitas: `Mengakses halaman detail Laporan Delegasi dengan No. Laporan ${pelaporan.data.no_laporan}`, menu: "Laporan Delegasi", _csrf: _csrf });
 		const pemantauan = await getLog(this.props.token, query.id + "?delegasi=true&asc=true");
 		pemantauan.data = pemantauan.data.filter((e) => e.action != "CREATE LAPORAN");
 		this.setState({ pelaporan, pemantauan });

+ 5 - 1
pages/app/laporan-delegasi/index.js

@@ -10,6 +10,8 @@ import Loader from "@/components/Common/Loader";
 import Router from "next/router";
 import { createLog } from "@/actions/log";
 import swal from "sweetalert2";
+import { getCsrf } from "../../../actions/security";
+
 
 
 class Pelaporan extends Component {
@@ -24,7 +26,9 @@ class Pelaporan extends Component {
 
 	componentDidMount = async () => {
 		const { token } = this.props;
-		await createLog(token, { aktivitas: "Mengakses halaman Laporan Delegasi", menu: "Laporan Delegasi" });
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
+		await createLog(token, { aktivitas: "Mengakses halaman Laporan Delegasi", menu: "Laporan Delegasi", _csrf: _csrf });
 		const pelaporan = await getPelaporan(this.props.token, { delegasi: true });
 		const graph = await getGraph(this.props.token, { jumlahLaporan: true });
 		this.setState({ pelaporan, graph });

+ 1 - 1
pages/app/naik-sanksi/detail.js

@@ -4,7 +4,7 @@ import ContentWrapper from "@/components/Layout/ContentWrapper";
 import DetailSanksi from "@/components/PerpanjanganSanksi/DetailSanksi";
 import Link from "next/link";
 import DetailPT from "@/components/Main/DetailPT";
-import { getOneSanksi, addRekomendasiDelegasi } from "@/actions/sanksi";
+import { getOneSanksi } from "@/actions/sanksi";
 import Loader from "@/components/Common/Loader";
 import { connect } from "react-redux";
 import TableRiwayat from "@/components/NaikSanksi/TableRiwayat"

+ 4 - 1
pages/app/pelaporan/detail.js

@@ -9,6 +9,7 @@ import { Row, Col, Card, Button, CardBody } from "reactstrap";
 import Loader from "@/components/Common/Loader";
 import { connect } from "react-redux";
 import { createLog } from "@/actions/log";
+import { getCsrf } from "../../../actions/security";
 
 class DetailPelaporan extends Component {
 	constructor(props) {
@@ -25,7 +26,9 @@ class DetailPelaporan extends Component {
 	componentDidMount = async () => {
 		const { token, query } = this.props;
 		const pelaporan = await getOneLaporan(this.props.token, query.id);
-		await createLog(token, { aktivitas: `Mengakses halaman detail Pelaporan dengan No. Laporan ${pelaporan.data.no_laporan}`, menu: "Pelaporan" });
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
+		await createLog(token, { aktivitas: `Mengakses halaman detail Pelaporan dengan No. Laporan ${pelaporan.data.no_laporan}`, menu: "Pelaporan", _csrf: _csrf });
 		this.setState({ pelaporan });
 	};
 

+ 4 - 1
pages/app/pelaporan/index.js

@@ -11,6 +11,7 @@ import Loader from "@/components/Common/Loader";
 import Router from "next/router";
 import { createLog } from "@/actions/log";
 import swal from "sweetalert2";
+import { getCsrf } from "../../../actions/security";
 
 class Pelaporan extends Component {
 	constructor(props) {
@@ -25,7 +26,9 @@ class Pelaporan extends Component {
 
 	componentDidMount = async () => {
 		const { token } = this.props;
-		await createLog(token, { aktivitas: "Mengakses halaman Pelaporan", menu: "Pelaporan" });
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
+		await createLog(token, { aktivitas: "Mengakses halaman Pelaporan", menu: "Pelaporan", _csrf: _csrf });
 		const pelaporan = await getPelaporan(this.props.token);
 		const graph = await getGraph(this.props.token, {
 			laporanTahun: true,

+ 4 - 1
pages/app/pelaporan/new.js

@@ -9,6 +9,7 @@ import ContentWrapper from "@/components/Layout/ContentWrapper";
 import { Row, Col, Card, CardHeader, CardBody, Button } from "reactstrap";
 import Loader from "@/components/Common/Loader";
 import { createLog } from "@/actions/log";
+import { getCsrf } from "../../../actions/security";
 
 class PelaporanNew extends Component {
 	constructor(props) {
@@ -23,9 +24,11 @@ class PelaporanNew extends Component {
 	};
 
 	componentDidMount = async () => {
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
 		const { query, token } = this.props;
 		const pt = await getOnePT(token, query.ptId);
-		await createLog(token, { aktivitas: `Mengakses halaman Buat Pelaporan untuk ${pt.data.nama}`, menu: "Pelaporan" });
+		await createLog(token, { aktivitas: `Mengakses halaman Buat Pelaporan untuk ${pt.data.nama}`, menu: "Pelaporan", _csrf: _csrf });
 		this.setState({ pt });
 	};
 

+ 5 - 2
pages/app/pelaporan/search.js

@@ -9,6 +9,7 @@ import "react-datetime/css/react-datetime.css";
 import { connect } from "react-redux";
 import Loader from "@/components/Common/Loader";
 import { createLog } from "@/actions/log";
+import { getCsrf } from "../../../actions/security";
 
 var pembina = [];
 const selectInstanceId = 1;
@@ -49,9 +50,11 @@ class Search extends Component {
 	};
 
 	handleClick = async (e, PT_ID, pt_name) => {
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
 		e.preventDefault();
 		const { token } = this.props;
-		await createLog(token, { aktivitas: `Mencari ${pt_name} untuk Pembuatan Laporan`, menu: "Pelaporan" });
+		await createLog(token, { aktivitas: `Mencari ${pt_name} untuk Pembuatan Laporan`, menu: "Pelaporan", _csrf: _csrf });
 		Router.push({
 			pathname: "/app/pelaporan/new",
 			query: { ptId: PT_ID },
@@ -131,7 +134,7 @@ class Search extends Component {
 				<div className="content-heading">
 					<div className="font-color-white">
 						Pelaporan
-						<div className="font-color-white" style={{ fontSize:"12px", marginTop:"3px" }}>Pilih Perguruan Tinggi</div>
+						<div className="font-color-white" style={{ fontSize: "12px", marginTop: "3px" }}>Pilih Perguruan Tinggi</div>
 					</div>
 					<div className="ml-auto">
 						<Link href="/app/pelaporan">

+ 6 - 3
pages/app/pencabutan-sanksi/detail.js

@@ -17,6 +17,7 @@ import { toast } from "react-toastify";
 import { connect } from "react-redux";
 import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
+import { getCsrf } from "../../../actions/security";
 
 const checkIfFilesAreTooBig = (files) => {
 	let valid = true;
@@ -130,6 +131,8 @@ class JawabanPencabutanSanksi extends Component {
 	};
 
 	handleSimpan = async () => {
+		const getToken = await getCsrf();
+		const _csrf = getToken.token;
 		const { data } = this.state;
 		const { token, query } = this.props;
 		const formdata = new FormData();
@@ -139,11 +142,11 @@ class JawabanPencabutanSanksi extends Component {
 			formdata.append("dokumen", e);
 		});
 		const toastid = toast.loading("Please wait...");
-		const added = await addJawabanCabutSanksi(token, query.id, formdata);
+		const added = await addJawabanCabutSanksi(token, query.id, formdata, _csrf);
 		if (!added) {
-			toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
+			toast.update(toastid, { render: "Error", type: "error", isLoading: false, autoClose: true, closeButton: true });
 		} else {
-			toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
+			toast.update(toastid, { render: "Success", type: "success", isLoading: false, autoClose: true, closeButton: true });
 			Router.push({
 				pathname: "/app/pencabutan-sanksi",
 			});

+ 1 - 1
pages/app/rekomendasi-delegasi/detail.js

@@ -6,7 +6,7 @@ import TableRiwayat from "@/components/RekomendasiDelegasi/TableRiwayat"
 import InputRekomendasi from "@/components/RekomendasiDelegasi/InputRekomendasi";
 import Link from "next/link";
 import DetailPT from "@/components/Main/DetailPT";
-import { getOneSanksi, addRekomendasiDelegasi } from "@/actions/sanksi";
+import { getOneSanksi } from "@/actions/sanksi";
 import Loader from "@/components/Common/Loader";
 import { connect } from "react-redux";
 

+ 52 - 4
pages/app/sanksi/proses.js

@@ -1,5 +1,5 @@
 import React, { Component } from "react";
-import { Card, CardBody, TabContent, TabPane, Nav, NavItem, NavLink, Button, Row, Col } from "reactstrap";
+import { Card, CardBody, TabContent, TabPane, Nav, NavItem, NavLink, Button, Row, Col, FormGroup } from "reactstrap";
 import Router from "next/router";
 import classnames from "classnames";
 import ContentWrapper from "@/components/Layout/ContentWrapper";
@@ -19,6 +19,9 @@ import { ToastContainer, toast } from "react-toastify";
 import BeritaAcara from "@/components/Sanksi/BeritaAcara";
 import { getAutoSave, inputAutoSave } from "@/actions/autosave";
 import swal from "sweetalert2";
+import { getCsrf } from "../../../actions/security";
+import ComponentToPrint from "../../../components/Sanksi/SuratBA_A";
+import ReactToPrint, { PrintContextConsumer } from 'react-to-print';
 
 
 
@@ -55,7 +58,6 @@ class ProsesSanksi extends Component {
 		const activeStep = getDataSave.data?.PenetapanSanksi?.activeStep
 		this.setState({ pelaporan, listSanksi, activeStep: activeStep || "1" });
 		this.setState({ dataPelanggaran: autoSaveDataPelanggaran })
-
 	};
 
 
@@ -67,6 +69,8 @@ class ProsesSanksi extends Component {
 		await inputAutoSave({ data: { PenetapanSanksi: { dataSuratBA, dataUpload, dataPelanggaran: data, activeStep } }, token, id, laporan: true })
 	}
 	done = async (e) => {
+		const getToken = await getCsrf();
+		const _csrf = getToken.token;
 		const toastid = toast.loading("Please wait...");
 		this.setState({
 			loading: true
@@ -98,7 +102,7 @@ class ProsesSanksi extends Component {
 			// 		formdata.append("berita_acara", e);
 			// 	});
 			// }
-			await createSanksi(token, id, formdata);
+			await createSanksi(token, id, formdata, _csrf);
 
 			toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
 			Router.push({
@@ -111,6 +115,9 @@ class ProsesSanksi extends Component {
 
 
 	handleDelegasi = async (data) => {
+
+		const getToken = await getCsrf();
+		const _csrf = getToken.token;
 		const { token, query } = this.props;
 		const { id } = query;
 		let update = null;
@@ -346,6 +353,28 @@ class ProsesSanksi extends Component {
 												<h2>Penetapan Sanksi</h2>
 												{this.state.listSanksi && <UploadSurat setUploadSuratSanksi={this.setUploadSuratSanksi} listSanksi={this.state.listSanksi} query={this.props.query} handleAutoSave={this.handleAutoSave} dataPelanggaran={this.state.dataPelanggaran} dataSuratBA={dataSuratBA} />}
 											</div>
+											<FormGroup row className="mt-3">
+												<label className="col-md-2 col-form-label">
+													Dokumen Laporan Evaluasi dan Pembahasan
+												</label>
+												<div className="col-md-10">
+
+													<div style={{ display: "none" }}>
+														<ComponentToPrint ref={el => (this.componentRef = el)} query={this.props.query} handleAutoSave={this.handleAutoSave} dataPelanggaran={this.state.dataPelanggaran} setDataSuratBA={this.setDataSuratBA} dataLaporan={pelaporan} dataSuratBA={dataSuratBA} />
+													</div>
+													<ReactToPrint
+														trigger={() => {
+															return <span>
+
+																<Button color className="btn-labeled-4 mt-0">
+																	<h5 className="p-0 mt-2"><em className="fas fa-download mr-2" />Print dan Download</h5>
+																</Button>
+															</span>
+														}}
+														content={() => this.componentRef}
+													/>
+												</div>
+											</FormGroup>
 											<hr />
 											<div className="d-flex">
 												<Button color className="btn-login color-3e3a8e" onClick={this.toggleStep("4")}>
@@ -359,7 +388,26 @@ class ProsesSanksi extends Component {
 										<TabPane tabId="6">
 											<div className="pt-3 mb-3">
 												<h2>Ringkasan</h2>
-												{pelaporan.data ? <Ringkasan dataSuratBA={dataSuratBA} query={this.props.query} dataLaporan={pelaporan.data} dataPelanggaran={dataPelanggaran?.data} dataUpload={dataUpload} /> : <Loader />}
+												{pelaporan.data ? <Ringkasan dataSuratBA={dataSuratBA} query={this.props.query} dataLaporan={pelaporan.data} dataPelanggaran={dataPelanggaran?.data} dataPelanggaranBA={this.state.dataPelanggaran} dataUpload={dataUpload} /> : <Loader />}
+												<FormGroup row>
+													<Col md="4">Surat Berita Acara:</Col>
+													<Col md="8">
+
+														<ReactToPrint
+															trigger={() => {
+																return <span>
+																	<Button color className="btn-labeled-4 mt-0">
+																		<h5 className="p-0 mt-2"><em className="fas fa-download mr-2" />Print dan Download</h5>
+																	</Button>
+																</span>
+															}}
+															content={() => this.componentRef}
+														/>
+														<div style={{ display: "none" }}>
+															<ComponentToPrint ref={el => (this.componentRef = el)} query={this.props.query} handleAutoSave={this.handleAutoSave} dataPelanggaran={this.state.dataPelanggaran} setDataSuratBA={this.setDataSuratBA} dataLaporan={pelaporan} dataSuratBA={dataSuratBA} />
+														</div>
+													</Col>
+												</FormGroup>
 											</div>
 											<hr />
 											<div className="d-flex">

+ 4 - 1
pages/app/tuntas/detail.js

@@ -9,6 +9,7 @@ import { Row, Col, Card, Button, CardBody } from "reactstrap";
 import Loader from "@/components/Common/Loader";
 import { connect } from "react-redux";
 import { createLog } from "@/actions/log";
+import { getCsrf } from "../../../actions/security";
 
 class DetailPelaporan extends Component {
 	constructor(props) {
@@ -24,8 +25,10 @@ class DetailPelaporan extends Component {
 
 	componentDidMount = async () => {
 		const { token, query } = this.props;
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
 		const pelaporan = await getOneLaporan(this.props.token, query.id + "?aktif=false");
-		await createLog(token, { aktivitas: `Mengakses halaman detail Pelaporan Tuntas dengan No. Laporan ${pelaporan.data.no_laporan}`, menu: "Pelaporan" });
+		await createLog(token, { aktivitas: `Mengakses halaman detail Pelaporan Tuntas dengan No. Laporan ${pelaporan.data.no_laporan}`, menu: "Pelaporan", _csrf: _csrf });
 		this.setState({ pelaporan });
 	};
 

+ 1 - 1
pages/app/turun-sanksi/detail.js

@@ -4,7 +4,7 @@ import ContentWrapper from "@/components/Layout/ContentWrapper";
 import DetailSanksi from "@/components/PerpanjanganSanksi/DetailSanksi";
 import Link from "next/link";
 import DetailPT from "@/components/Main/DetailPT";
-import { getOneSanksi, addRekomendasiDelegasi } from "@/actions/sanksi";
+import { getOneSanksi } from "@/actions/sanksi";
 import Loader from "@/components/Common/Loader";
 import { connect } from "react-redux";
 import TableRiwayat from "@/components/TurunSanksi/TableRiwayat"

+ 0 - 1
pages/app/turun-sanksi/index.js

@@ -27,7 +27,6 @@ class NaikSanksi extends Component {
 
 	render() {
 		const { pelaporan, sanksi } = this.state;
-		console.log(sanksi)
 		return (
 			<ContentWrapper>
 				<div className="content-heading">

+ 4 - 2
pages/app/verifikasi/index.js

@@ -7,6 +7,7 @@ import AsyncSelect from "react-select/async";
 import { loginToPt } from "../../../actions/auth";
 import { connect } from "react-redux";
 import { ToastContainer, toast } from "react-toastify";
+import { getCsrf } from "../../../actions/security";
 
 
 
@@ -69,11 +70,12 @@ class Verifikasi extends React.Component {
         this.setState({ pt_id: selected_PT.value });
     };
     onSubmit = async () => {
-
+        const getToken = await getCsrf();
+        const _csrf = getToken.token;
         this.setState({ loading: true });
         const { password } = this.state.formLogin;
         const { pt_id } = this.state
-        const auth = await toast.promise(loginToPt(pt_id, password), {
+        const auth = await toast.promise(loginToPt(pt_id, password, _csrf), {
             pending: "Loading",
             success: "Success",
             error: "Akun tidak ada",

+ 10 - 4
pages/laporan/new/index.js

@@ -37,7 +37,7 @@ import { ToastContainer, toast } from "react-toastify";
 import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
 import swal from "sweetalert2";
-
+import { getCsrf } from "../../../actions/security";
 import "react-toastify/dist/ReactToastify.css";
 
 const checkIfFilesAreTooBig = (files) => {
@@ -211,6 +211,8 @@ class App extends Component {
   };
 
   handleKirim = async (data, { resetForm }) => {
+    const getToken = await getCsrf();
+    const _csrf = getToken.token;
     const formdata = new FormData();
     formdata.append("no_laporan", data.no_laporan);
     formdata.append("pt_id", data.pt_id);
@@ -231,7 +233,7 @@ class App extends Component {
 
     const toastid = toast.loading("Please wait...");
 
-    const success = await createLaporanPublic(formdata);
+    const success = await createLaporanPublic(formdata, _csrf);
     if (!success) {
       swal.fire({
         title: "Data tidak berhasil dikirim",
@@ -249,6 +251,8 @@ class App extends Component {
   };
 
   createLaporan = async (token, kode = "") => {
+    const getToken = await getCsrf();
+    const _csrf = getToken.token;
     const data = this.state.data;
     const formdata = new FormData();
     formdata.append("pt_id", data.pt_id);
@@ -264,7 +268,7 @@ class App extends Component {
     }
 
     this.setState({ loading: true });
-    const success = await createLaporanPublic(token, formdata);
+    const success = await createLaporanPublic(token, formdata, _csrf);
     if (!success) {
       swal.fire({
         title: "Kode verifikasi salah",
@@ -286,6 +290,8 @@ class App extends Component {
   };
 
   createUser = async (data) => {
+    const getToken = await getCsrf();
+    const _csrf = getToken.token;
     const formdata = new FormData();
     formdata.append("no_laporan", data.no_laporan);
     formdata.append("pt_id", data.pt_id);
@@ -295,7 +301,7 @@ class App extends Component {
     if (data.alamat) formdata.append("alamat", data.alamat);
     formdata.append("is_private", data.is_private);
     if (data.foto.length > 0) formdata.append("foto", data.foto[0]);
-    return await createPublicUser(formdata);
+    return await createPublicUser(formdata, _csrf);
   };
 
   render() {

+ 1 - 3
pages/pt/jawaban-pencabutan-sanksi/detail.js

@@ -30,8 +30,6 @@ class DetailJawabanPencabutanSanksi extends Component {
 	render() {
 		const { sanksi, pt } = this.state;
 		const jawaban = sanksi.data?.jawaban.cabut_sanksi || null;
-		// console.log(sanksi)
-		console.log(jawaban)
 		return (
 			<ContentWrapper unwrap>
 				{pt && <Header data={pt} />}
@@ -102,7 +100,7 @@ class DetailJawabanPencabutanSanksi extends Component {
 												{jawaban && jawaban.status === "Rekomendasi Perbaikan" && (
 													<Link
 														href={{
-															pathname: "/pt/dokumen-perbaikan/detail",
+															pathname: "/pt/sanksi/dokumen-perbaikan/detail",
 															query: { id: sanksi.data._id },
 														}}
 													>

+ 6 - 3
pages/pt/pencabutan-sanksi/detail.js

@@ -14,6 +14,7 @@ import Loader from "@/components/Common/Loader";
 import { toast } from "react-toastify";
 import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
+import { getCsrf } from "../../../actions/security";
 
 const checkIfFilesAreTooBig = (files) => {
 	let valid = true;
@@ -108,17 +109,19 @@ class DetailPencabutanSanksi extends Component {
 	};
 
 	handleKirim = async (data) => {
+		const getToken = await getCsrf();
+		const _csrf = getToken.token;
 		const { user, query, token } = this.props;
 		const formdata = new FormData();
 		data.dokumen.forEach((e) => {
 			formdata.append("dokumen", e);
 		});
 		const id = toast.loading("Please wait...");
-		const added = await addCabutSanksi(token, query.id, formdata);
+		const added = await addCabutSanksi(token, query.id, formdata, _csrf);
 		if (!added) {
-			toast.update(id, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
+			toast.update(id, { render: "Error", type: "error", isLoading: false, autoClose: true, closeButton: true });
 		} else {
-			toast.update(id, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
+			toast.update(id, { render: "Success", type: "success", isLoading: false, autoClose: true, closeButton: true });
 			Router.push({
 				pathname: "/pt/jawaban-pencabutan-sanksi",
 			});

+ 12 - 5
pages/pt/sanksi/detail.js

@@ -13,6 +13,7 @@ import { connect } from "react-redux";
 import Router from "next/router";
 import Loader from "@/components/Common/Loader";
 import { ToastContainer, toast } from "react-toastify";
+import { getCsrf } from "../../../actions/security";
 
 class Sanksi extends Component {
 	state = {
@@ -24,9 +25,11 @@ class Sanksi extends Component {
 	static getInitialProps = ({ query }) => ({ query });
 
 	componentDidMount = async () => {
+		const getToken = await getCsrf();
+		const _csrf = getToken.token;
 		const { token, query } = this.props;
 		const sanksi = await getOneSanksi(token, query.id);
-		updatePT(token, query.id, { is_read: true })
+		updatePT(token, query.id, { is_read: true }, _csrf)
 		this.setState({ sanksi, pt: sanksi.data.laporan.pt });
 	};
 	setModal = (modal) => {
@@ -43,12 +46,14 @@ class Sanksi extends Component {
 					<ModalBody>Apakah anda akan tidak mengajukan permohonan keberatan atas pengenaan sanksi?</ModalBody>
 					<ModalFooter>
 						<Button color className="btn-login" onClick={async () => {
+							const getToken = await getCsrf();
+							const _csrf = getToken.token;
 							const toastid = toast.loading("Please wait...");
 							try {
 								const { token, query } = this.props;
-								await updatePT(token, query.id, { is_pengajuan_keberatan: false })
+								await updatePT(token, query.id, { is_pengajuan_keberatan: false }, _csrf)
 								toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
-								Router.push(`/pt/dokumen-perbaikan/detail?id=${sanksi.data._id}`);
+								Router.push(`/pt/sanksi/dokumen-perbaikan/detail?id=${sanksi.data._id}`);
 							} catch (error) {
 								toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
 							}
@@ -96,13 +101,15 @@ class Sanksi extends Component {
 															Pengajuan dilakukan paling lambat tanggal {moment(sanksi.data.tanggal_akhir_keberatan).locale("id").format("DD MMMM YYYY")}
 														</p>
 														<p className="lead">
-															<Link href={{ pathname: "/pt/keberatan/detail", query: { id: sanksi.data._id } }}>
+															<Link href={{ pathname: "/pt/sanksi/keberatan/detail", query: { id: sanksi.data._id } }}>
 																<span className="btn-radius">
 																	<Button color="" className="btn-labeled-notHover" onClick={async () => {
 																		// const toastid = toast.loading("Please wait...");
+																		const getToken = await getCsrf();
+																		const _csrf = getToken.token;
 																		try {
 																			const { token, query } = this.props;
-																			await updatePT(token, query.id, { is_pengajuan_keberatan: true })
+																			await updatePT(token, query.id, { is_pengajuan_keberatan: true }, _csrf)
 																			// toast.update(toastid, { render: "Berhasil", type: "success", isLoading: false, autoClose: true, closeButton: true });
 																		} catch (error) {
 																			// toast.update(toastid, { render: "Gagal", type: "error", isLoading: false, autoClose: true, closeButton: true });

+ 7 - 5
pages/pt/dokumen-perbaikan/detail.js → pages/pt/sanksi/dokumen-perbaikan/detail.js

@@ -15,7 +15,7 @@ import Loader from "@/components/Common/Loader";
 import { toast } from "react-toastify";
 import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
-
+import { getCsrf } from "../../../../actions/security";
 const checkIfFilesAreTooBig = (files) => {
 	let valid = true;
 	if (files) {
@@ -112,6 +112,8 @@ class DetailPerbaikanDoc extends Component {
 	};
 
 	handleKirim = async (data, { resetForm }) => {
+		const getToken = await getCsrf();
+		const _csrf = getToken.token;
 		const { token, query } = this.props;
 		const { id } = query;
 		const formdata = new FormData();
@@ -120,11 +122,11 @@ class DetailPerbaikanDoc extends Component {
 			formdata.append("dokumen", e);
 		});
 		const toastid = toast.loading("Please wait...");
-		const added = await addDocPerbaikan(token, id, formdata);
+		const added = await addDocPerbaikan(token, id, formdata, _csrf);
 		if (!added) {
-			toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
+			toast.update(toastid, { render: "Error", type: "error", isLoading: false, autoClose: true, closeButton: true });
 		} else {
-			toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
+			toast.update(toastid, { render: "Success", type: "success", isLoading: false, autoClose: true, closeButton: true });
 			const sanksi = await getOneSanksi(token, id);
 			this.setState({ sanksi, files: [] });
 			resetForm();
@@ -151,7 +153,7 @@ class DetailPerbaikanDoc extends Component {
 					<div className="content-heading">
 						<span className="font-color-white">Dokumen Perbaikan</span>
 						<div className="ml-auto">
-							<Link href="/pt/dokumen-perbaikan">
+							<Link href="/pt/sanksi">
 								<Button className="color-3e3a8e" color>
 									<span className="font-color-white">&lt; Kembali</span>
 								</Button>

+ 0 - 0
pages/pt/dokumen-perbaikan/index.js → pages/pt/sanksi/dokumen-perbaikan/index.js


+ 1 - 1
pages/pt/sanksi/index.js

@@ -28,7 +28,7 @@ class Sanksi extends Component {
 						Sanksi
 					</span></div>
 				<Row>
-					<Col lg={12}>{sanksi.data?.length ? <TableSanksi listData={sanksi.data} to="/pt/sanksi/detail" toKeberatan="/pt/keberatan/detail" toPerbaikan="/pt/dokumen-perbaikan/detail" toJwbKeberatan="/pt/jawaban-keberatan/detail" toJwbBanding="/pt/jawaban-banding/detail" toJwbBanding2="/pt/jawaban-banding/detail" toCabutSanksi="/pt/pencabutan-sanksi/detail" toJwbCabutSanksi="/pt/jawaban-pencabutan-sanksi/detail" linkName="Detail" /> : sanksi.data ? "Tidak ada Sanksi" : <Loader />}</Col>
+					<Col lg={12}>{sanksi.data?.length ? <TableSanksi listData={sanksi.data} to="/pt/sanksi/detail" toKeberatan="/pt/sanksi/keberatan/detail" toPerbaikan="/pt/dokumen-perbaikan/detail" toJwbKeberatan="/pt/sanksi/jawaban-keberatan/detail" toJwbBanding="/pt/sanksi/jawaban-banding/detail" toJwbBanding2="/pt/sanksi/jawaban-banding/detail" toCabutSanksi="/pt/sanksi/pencabutan-sanksi/detail" toJwbCabutSanksi="/pt/sanksi/jawaban-pencabutan-sanksi/detail" linkName="Detail" /> : sanksi.data ? "Tidak ada Sanksi" : <Loader />}</Col>
 				</Row>
 			</ContentWrapper>
 		);

+ 2 - 2
pages/pt/jawaban-banding/detail.js → pages/pt/sanksi/jawaban-banding/detail.js

@@ -40,7 +40,7 @@ class JawabanBanding extends Component {
 							Jawaban Atas Permohonan Banding
 						</span>
 						<div className="ml-auto">
-							<Link href="/pt/jawaban-banding">
+							<Link href="/pt/sanksi">
 								<Button className="color-3e3a8e" color>
 									<span className="font-color-white">
 										&lt; Kembali
@@ -80,7 +80,7 @@ class JawabanBanding extends Component {
 
 						<Col xl="9">
 							<p className="pb-5">
-								<Link href={{ pathname: "/pt/jawaban-keberatan/detail", query: { id: sanksi.data._id } }}>
+								<Link href={{ pathname: "/pt/sanksi/jawaban-keberatan/detail", query: { id: sanksi.data._id } }}>
 									<span className="btn-radius float-left">
 										<Button color="" className="btn-labeled-3-notHover" >
 											<h4 className=" mt-1 mb-md-2 text-center">Previous</h4>

+ 0 - 0
pages/pt/jawaban-banding/index.js → pages/pt/sanksi/jawaban-banding/index.js


+ 8 - 6
pages/pt/jawaban-keberatan/detail.js → pages/pt/sanksi/jawaban-keberatan/detail.js

@@ -14,6 +14,7 @@ import { withRouter } from "next/router";
 import Loader from "@/components/Common/Loader";
 import Router from "next/router";
 import { ToastContainer, toast } from "react-toastify";
+import { getCsrf } from "../../../../actions/security";
 
 class JawabanKeberatan extends Component {
 	constructor(props) {
@@ -42,7 +43,7 @@ class JawabanKeberatan extends Component {
 		}
 	};
 	toPerbaikan = () => {
-		Router.push("/pt/dokumen-perbaikan");
+		Router.push("/pt/sanksi/dokumen-perbaikan");
 	}
 	setModalTidak = (modalTidak) => {
 		this.setState({
@@ -52,7 +53,6 @@ class JawabanKeberatan extends Component {
 
 	render() {
 		const { sanksi, pt } = this.state;
-		console.log(this.state.modal)
 		return (
 			<ContentWrapper unwrap>
 				<Modal isOpen={this.state.modalTidak} >
@@ -60,10 +60,12 @@ class JawabanKeberatan extends Component {
 					<ModalFooter>
 
 						<Button color className="btn-login" onClick={async () => {
+							const getTokenCsrf = await getCsrf();
+							const _csrf = getTokenCsrf.token;
 							const toastid = toast.loading("Please wait...");
 							try {
 								const { token, query } = this.props;
-								await updatePT(token, query.id, { is_pengajuan_banding: false, is_pengajuan_keberatan: false })
+								await updatePT(token, query.id, { is_pengajuan_banding: false, is_pengajuan_keberatan: false }, _csrf)
 								toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
 								Router.push("/pt/sanksi");
 							} catch (error) {
@@ -86,7 +88,7 @@ class JawabanKeberatan extends Component {
 							Jawaban Atas Permohonan Keberatan
 						</span>
 						<div className="ml-auto">
-							<Link href="/pt/jawaban-keberatan">
+							<Link href="/pt/sanksi">
 								<Button className="btn-login" color>
 									<span className="font-color-white">
 										&lt; Kembali
@@ -155,7 +157,7 @@ class JawabanKeberatan extends Component {
 
 						<Col xl="9">
 							<p className="pb-5">
-								<Link href={{ pathname: "/pt/keberatan/detail", query: { id: sanksi.data._id } }}>
+								<Link href={{ pathname: "/pt/sanksi/keberatan/detail", query: { id: sanksi.data._id } }}>
 									<span className="btn-radius float-left">
 										<Button color="" className="btn-labeled-3-notHover" >
 											<h4 className=" mt-1 mb-md-2 text-center">Previous</h4>
@@ -163,7 +165,7 @@ class JawabanKeberatan extends Component {
 									</span>
 								</Link>
 								{sanksi.data.pengajuan?.banding ? (
-									<Link href={{ pathname: "/pt/jawaban-banding/detail", query: { id: sanksi.data._id } }}>
+									<Link href={{ pathname: "/pt/sanksi/jawaban-banding/detail", query: { id: sanksi.data._id } }}>
 										<span className="btn-radius float-rigt">
 											<Button color="" className="btn-labeled-notHover" >
 												<h4 className="mt-2 mb-md-2 text-center font-color-white pl-3 pr-3">Next</h4>

+ 0 - 0
pages/pt/jawaban-keberatan/index.js → pages/pt/sanksi/jawaban-keberatan/index.js


+ 6 - 3
pages/pt/keberatan/detail.js → pages/pt/sanksi/keberatan/detail.js

@@ -14,6 +14,7 @@ import { withRouter } from "next/router";
 import Loader from "@/components/Common/Loader";
 import { ToastContainer, toast } from "react-toastify";
 import Router from "next/router";
+import { getCsrf } from "../../../../actions/security";
 
 class Keberatan extends Component {
 	state = {
@@ -55,12 +56,14 @@ class Keberatan extends Component {
 					<ModalFooter>
 
 						<Button color className="btn-login" onClick={async () => {
+							const getToken = await getCsrf();
+							const _csrf = getToken.token;
 							const toastid = toast.loading("Please wait...");
 							try {
 								const { token, query } = this.props;
-								await updatePT(token, query.id, { is_pengajuan_keberatan: false })
+								await updatePT(token, query.id, { is_pengajuan_keberatan: false }, _csrf)
 								toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
-								Router.push(`/pt/dokumen-perbaikan/detail?id=${sanksi.data._id}`);
+								Router.push(`/pt/sanksi/dokumen-perbaikan/detail?id=${sanksi.data._id}`);
 							} catch (error) {
 								toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
 							}
@@ -137,7 +140,7 @@ class Keberatan extends Component {
 							{sanksi.data.pengajuan?.keberatan ? (
 								<Col xl="9">
 									<p className=" lead float-right">
-										<Link href={{ pathname: "/pt/jawaban-keberatan/detail", query: { id: sanksi.data._id } }}>
+										<Link href={{ pathname: "/pt/sanksi/jawaban-keberatan/detail", query: { id: sanksi.data._id } }}>
 											<span className="btn-radius">
 												<Button color="" className="btn-labeled-notHover" >
 													<h4 className="mt-2 mb-md-2 text-center font-color-white pl-3 pr-3">Next</h4>

+ 0 - 0
pages/pt/keberatan/index.js → pages/pt/sanksi/keberatan/index.js