Procházet zdrojové kódy

4. ketika di halaman semua proses di menu proses sanksi, side bar 'proses sanksi' aktif (Login PT) DONE
6. login pak dedi untuk menu Bypass I (prioritas) DONE (untuk test, di dev login rizqevo yang bisa akses menu Bypass)

Implementasi Token CSRF di semua menu

andi před 2 roky
rodič
revize
217be87453
37 změnil soubory, kde provedl 315 přidání a 105 odebrání
  1. 2 2
      actions/auth.js
  2. 4 4
      actions/banding.js
  3. 6 6
      actions/cabutSanksi.js
  4. 2 2
      actions/docPerbaikan.js
  5. 4 4
      actions/keberatan.js
  6. 10 10
      actions/sanksi.js
  7. 4 1
      components/Bypass/TableBypass.js
  8. 1 7
      components/Layout/Menu.js
  9. 161 0
      components/Layout/MenuBypass.js
  10. 3 1
      components/Layout/Sidebar.js
  11. 6 3
      components/NaikSanksi/InputTanggal.js
  12. 2 2
      components/PT/JawabanBanding/DetailJawaban.js
  13. 18 8
      components/PT/JawabanKeberatan/ModalPermohonan.js
  14. 5 5
      components/PT/Keberatan/ModalPermohonan.js
  15. 6 4
      components/PerpanjanganSanksi/InputTanggal.js
  16. 7 4
      components/RekomendasiDelegasi/InputRekomendasi.js
  17. 4 1
      components/Sanksi/BeritaAcara.js
  18. 4 2
      components/TurunSanksi/InputTanggal.js
  19. 5 3
      pages/app/banding/detail.js
  20. 5 3
      pages/app/keberatan/detail.js
  21. 1 1
      pages/app/naik-sanksi/detail.js
  22. 6 3
      pages/app/pencabutan-sanksi/detail.js
  23. 1 1
      pages/app/rekomendasi-delegasi/detail.js
  24. 1 1
      pages/app/turun-sanksi/detail.js
  25. 4 2
      pages/app/verifikasi/index.js
  26. 1 1
      pages/pt/jawaban-pencabutan-sanksi/detail.js
  27. 6 3
      pages/pt/pencabutan-sanksi/detail.js
  28. 12 5
      pages/pt/sanksi/detail.js
  29. 7 5
      pages/pt/sanksi/dokumen-perbaikan/detail.js
  30. 0 0
      pages/pt/sanksi/dokumen-perbaikan/index.js
  31. 1 1
      pages/pt/sanksi/index.js
  32. 2 2
      pages/pt/sanksi/jawaban-banding/detail.js
  33. 0 0
      pages/pt/sanksi/jawaban-banding/index.js
  34. 8 5
      pages/pt/sanksi/jawaban-keberatan/detail.js
  35. 0 0
      pages/pt/sanksi/jawaban-keberatan/index.js
  36. 6 3
      pages/pt/sanksi/keberatan/detail.js
  37. 0 0
      pages/pt/sanksi/keberatan/index.js

+ 2 - 2
actions/auth.js

@@ -46,13 +46,13 @@ export const logout = async ( _csrf) => {
 };
 
 
-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",
 		},

+ 4 - 4
actions/banding.js

@@ -2,9 +2,9 @@ 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 } });
+		const res = await axios.post(`/sanksi/banding/create/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
 		logSuccessAddBanding(token, id)
 		return res.data;
 	} catch (error) {
@@ -26,9 +26,9 @@ const logErrorAddBanding = async (token, id) => {
 
 }
 
-export const addJawabanBanding = async (token, id, data) => {
+export const addJawabanBanding = async (token, id, data, _csrf) => {
 	try {
-		const res = await axios.post(`/sanksi/banding/jawaban/create/${id}`, data, { headers: { Authorization: token } });
+		const res = await axios.post(`/sanksi/banding/jawaban/create/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
 		logSuccessAddJawabanBanding(token, id)
 		return res.data;
 	} catch (error) {

+ 6 - 6
actions/cabutSanksi.js

@@ -2,9 +2,9 @@ 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 } });
+		const res = await axios.post(`/sanksi/cabut-sanksi/create/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
 		logSuccessAddCabutSanksi(token, id)
 		return res.data;
 	} catch (error) {
@@ -26,9 +26,9 @@ const logErrorAddCabutSanksi = async (token, id) => {
 	await createLog(token, { aktivitas: `Gagal mengajukan pencabutan sanksi, id: ${id}`, _csrf: _csrf });
 }
 
-export const addJawabanCabutSanksi = async (token, id, data) => {
+export const addJawabanCabutSanksi = async (token, id, data,_csrf) => {
 	try {
-		const res = await axios.post(`/sanksi/cabut-sanksi/jawaban/create/${id}`, data, { headers: { Authorization: token } });
+		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) {
@@ -49,9 +49,9 @@ const logErroraddJawabanCabutSanksi = async (token, id) => {
 	await createLog(token, { aktivitas: `Gagal menjawab pengajuan pencabutan sanksi, id: ${id}`, _csrf: _csrf });
 }
 
-export const bypassCabutSanksi = async (token, id) => {
+export const bypassCabutSanksi = async (token, id, _csrf) => {
 	try {
-		const res = await axios.put(`/sanksi/cabut-sanksi/bypass/${id}`);
+		const res = await axios.put(`/sanksi/cabut-sanksi/bypass/${id}?_csrf=${_csrf}`);
 		logSuccessBypassCabutSanksi(token, id)
 		return res.data;
 	} catch (error) {

+ 2 - 2
actions/docPerbaikan.js

@@ -2,9 +2,9 @@ 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 } });
+		const res = await axios.post(`/sanksi/perbaikan/add/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
 		logSuccessAddDocPerbaikan(token, id)
 		return res.data;
 	} catch (error) {

+ 4 - 4
actions/keberatan.js

@@ -2,9 +2,9 @@ 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 } });
+		const res = await axiosAPI.post(`/sanksi/keberatan/create/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
 		logSuccessAddKeberatan(token, id)
 		return res.data;
 	} catch (error) {
@@ -24,9 +24,9 @@ const logErrorAddKeberatan = async (token, id) => {
 	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 } });
+		const res = await axiosAPI.post(`/sanksi/keberatan/jawaban/create/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
 		logSuccessAddJawabanKeberatan(token, id)
 		return res.data;
 	} catch (error) {

+ 10 - 10
actions/sanksi.js

@@ -65,9 +65,9 @@ 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 } });
+		const res = await axiosAPI.post(`/rekomendasi/add/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
 		logSuccessAddRekomendasiDelegasi(token, id)
 		return res.data;
 	} catch (error) {
@@ -89,8 +89,8 @@ const logErrorAddRekomendasiDelegasi = async (token, id) => {
 
 }
 
-export const editTmt = async (token, id, data) => {
-	const res = await axios.put(`sanksi/tmt/update/${id}`, data, { headers: { Authorization: token } });
+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;
 };
@@ -101,8 +101,8 @@ const logEditTmt = async (token, id) => {
 
 }
 
-export const update = async (token, id, data) => {
-	const res = await axios.put(`sanksi/update/${id}`, data, { headers: { Authorization: token } });
+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;
 };
@@ -113,8 +113,8 @@ const logUpdate = async (token, id) => {
 	await createLog(token, { aktivitas: `Berhasil Merubah Sanksi, id: ${id}`, _csrf: _csrf });
 
 }
-export const updatePT = async (token, id, data) => {
-	const res = await axiosAPI.put(`/sanksi/update-pt/${id}`, data, { headers: { Authorization: token } });
+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;
 };
@@ -125,8 +125,8 @@ const logUpdatePT = async (token, id) => {
 
 }
 
-export const removePesertaPleno = async (token, data) => {
-	const res = await axios.delete(`sanksi/remove-peserta-pleno/`, { headers: { Authorization: token }, data });
+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;
 };

+ 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",

+ 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;

+ 3 - 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,8 @@ 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;
+		console.log(user)
+		this.menu = user.user_id === "28DB23AE-2976-47E0-9410-241A11EE1F88" ? MenuBypass : user.role.id === 2022 ? MenuPT : user.role.id === 2021 ? MenuLLDIKTI : Menu;
 		// prepare the flags to handle menu collapsed states
 		this.buildCollapseList();
 

+ 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 }
 			});
 		}
 	};

+ 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();

+ 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 {

+ 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 - 3
pages/app/banding/detail.js

@@ -167,6 +167,8 @@ class JawabanBanding extends Component {
 
 
 	handelSimpan = async () => {
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
 		if (this.state.modal === true) {
 			this.toggleModal();
 		}
@@ -186,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",
 			});

+ 5 - 3
pages/app/keberatan/detail.js

@@ -170,6 +170,8 @@ class DetailKeberatan extends Component {
 	};
 
 	handelSimpan = async () => {
+		const getTokenCsrf = await getCsrf();
+		const _csrf = getTokenCsrf.token;
 		if (this.state.modal === true) {
 			this.toggleModal();
 		}
@@ -190,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",
 			});

+ 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"

+ 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";
 

+ 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"

+ 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",

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

@@ -100,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 - 5
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({
@@ -59,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) {
@@ -85,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
@@ -154,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>
@@ -162,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