Pārlūkot izejas kodu

BYPASS II 35%
tmt check pelaporan tuntas fix detail pelaporan tuntas

andi 2 gadi atpakaļ
vecāks
revīzija
784bf28864

+ 61 - 0
components/BypassII/BeritaAcara.js

@@ -0,0 +1,61 @@
+import React, { useRef, Component } from 'react';
+import { Row, Col, Button, Popover, PopoverHeader, PopoverBody, Card, CardBody, Modal, ModalBody, ModalFooter } from "reactstrap";
+import ComponentToPrint from "./SuratBA_A";
+import ReactToPrint, { PrintContextConsumer } from 'react-to-print';
+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'
+import { removePesertaPleno } from '../../actions/sanksi';
+import { ToastContainer, toast } from "react-toastify";
+import Router from "next/router";
+import { getCsrf } from '../../actions/security';
+import { ENV } from '../../env';
+
+
+
+class BeritaAcara_Bypass extends Component {
+    constructor(props) {
+        super(props);
+        this.state = {
+            isEditTempat: false,
+            tempat: "",
+            isEditTanggal: false,
+            isEditTanggal_2: false,
+            tanggal: "",
+            tanggal_2: "",
+            setTanggal: false,
+            setTanggal_2: false,
+            isEditNamaPeserta: false,
+            isEditTemuanLain: false,
+            temuanLain: [],
+            memberatkan: [],
+            isEditKeberatan: false,
+            isEditMeringankan: false,
+            meringankan: [],
+            sanksi: "",
+            isEditSanksi: false,
+            copied: false,
+            setmeState: true,
+            descPelanggaran: [],
+            modalRemovePeserta: false,
+            selectedPeserta: ""
+        };
+    }
+
+
+    render() {
+        const { pt } = this.props
+        return (
+            <div>
+                <h4>{pt.data?.nama}</h4>
+            </div >
+        );
+    }
+}
+
+// const mapStateToProps = (state) => ({ user: state.user, token: state.token });
+// export default connect(mapStateToProps)(BeritaAcara)
+export default BeritaAcara_Bypass

+ 202 - 0
components/BypassII/SuratBA_A.js

@@ -0,0 +1,202 @@
+import React, { Component } from 'react';
+import SignatureCanvas from 'react-signature-canvas'
+import { getOneLaporan, updateLaporan } from "@/actions/pelaporan";
+import { Row, Col, Input, FormGroup, Label, Progress } from "reactstrap";
+import { connect } from "react-redux";
+import moment from "moment";
+import 'moment/locale/id'
+moment.locale('id')
+import { getAutoSave } from "@/actions/autosave";
+
+
+
+
+class ComponentToPrint extends React.Component {
+    formData = {}
+    constructor(props) {
+        super(props);
+        this.state = {
+            dataLaporan: {},
+
+        };
+    }
+
+    static getInitialProps = async ({ query }) => {
+        return { query };
+    };
+
+
+    componentDidMount = async () => {
+        const { query, token } = this.props;
+        const { id } = query;
+        const dataLaporan = await getOneLaporan(token, id);
+        const getDataSave = await getAutoSave({ id, laporan: true });
+        const autoSaveDataSuratBA = getDataSave.data?.PenetapanSanksi?.dataSuratBA;
+        const dataPelanggaran = getDataSave.data?.PenetapanSanksi?.dataPelanggaran?.data;
+        this.setState({ dataLaporan });
+        this.setState(dataPelanggaran)
+        this.setState(autoSaveDataSuratBA)
+
+    };
+
+    render() {
+        const { dataLaporan, descPelanggaran } = this.state
+        const { dataPelanggaran, dataSuratBA } = this.props
+        return (
+            <page>
+                <div className='BA-Header'>
+                    <img className='BA-logo' src="/static/img/logo-single-1-login.png" alt="logo" />
+                    <h3 >LAPORAN HASIL EVALUASI DAN PEMBAHASAN</h3>
+                    {dataLaporan.data && (<h3 className='text-uppercase' >{dataLaporan.data.pt.nama}</h3>)}
+                </div>
+                <div className='BA-body pt-3'>
+                    <p>
+                        Pada hari ini
+                        {dataSuratBA?.setTanggal === true || this.state?.setTanggal === true ?
+                            <span > {moment(dataSuratBA?.tanggal || this.state?.tanggal).locale("id").format("dddd")}, tanggal&nbsp;{moment(dataSuratBA?.tanggal || this.state?.tanggal).format("D")}&nbsp; bulan &nbsp;{moment(dataSuratBA?.tanggal || this.state?.tanggal).format("MMMM")} tahun &nbsp;{moment(dataSuratBA?.tanggal || this.state?.tanggal).format("YYYY")},</span> :
+                            <span> &nbsp;- &nbsp;</span>
+                        }
+                        bertempat di
+                        {dataSuratBA?.tempat || this.state?.tempat ?
+                            <span>
+                                &nbsp;{dataSuratBA?.tempat || this.state?.tempat}
+                            </span>
+                            :
+                            <span>-</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:
+                        <ol>
+                            {dataLaporan.data?.peserta_penetapan_sanksi?.map((value) => <li>{value.nama}</li>)}
+                        </ol>
+                    </p>
+                    <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:
+
+                        <ol className='mt-3'>
+                            <li>Telah dibacakan Berita Acara Evaluasi Kinerja Perguruan Tinggi  {dataLaporan.data && (<span>{dataLaporan.data.pt.nama}</span>)}, tanggal
+                                {dataSuratBA?.setTanggal_2 === true || this.state?.setTanggal_2 === true ?
+                                    <span> &nbsp;{moment(dataSuratBA?.tanggal_2 || this.state?.tanggal_2).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>
+                        </ol>
+                    </p>
+                    <div className='table-a my-4' >
+                        <table >
+                            <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>
+                                        {this.state.descPelanggaran ?
+                                            (
+                                                <td style={{ minWidth: "215px" }} >{"" || dataSuratBA?.descPelanggaran[e?._id]?.simpulan
+                                                    || this.state.descPelanggaran[e?._id]?.simpulan
+                                                }</td>
+                                            ) :
+                                            (<td style={{ minWidth: "215px" }} >{"" || dataSuratBA?.descPelanggaran[e?._id]?.simpulan
+                                                // || this.state.descPelanggaran[e?._id]?.simpulan
+                                            }</td>)
+                                        }
+                                        {/* <td style={{ minWidth: "215px" }} >{"" || dataSuratBA?.descPelanggaran[e?._id]?.simpulan
+                                            || this.state.descPelanggaran[e?._id]?.simpulan
+                                        }</td> */}
+                                        <td style={{ minWidth: "215px" }}>{`Sanksi Administratif berupa ${dataSuratBA?.sanksi || this.state.sanksi}` || ""}</td>
+                                    </tr>
+
+                                ))}
+                            </tbody>
+                        </table>
+                    </div>
+                    <p>
+                        <ol start="3">
+                            <li>Temuan Lain:
+                                <ol type="a">
+                                    {dataSuratBA?.temuanLain || this.state?.temuanLain ?
+                                        <span>{dataSuratBA?.temuanLain || this.state?.temuanLain.map((value) => <li>{value}</li>)}</span>
+                                        : "Belum Diisi"}
+                                </ol>
+                            </li>
+                            <li>Hal-hal yang memberatkan, sebagai berikut:
+                                <ol type="a">
+                                    {dataSuratBA?.memberatkan || this.state?.memberatkan ?
+                                        <span>{dataSuratBA?.memberatkan || this.state?.memberatkan.map((value) => <li>{value}</li>)}</span>
+                                        : "Belum Diisi"}
+                                </ol>
+                            </li>
+                            <li>hal-hal yang meringankan, sebagai berikut:
+                                <ol type="a">
+                                    {dataSuratBA?.meringankan || this.state?.meringankan ?
+                                        <span>{dataSuratBA?.meringankan || this.state?.meringankan.map((value) => <li>{value}</li>)}</span>
+                                        : "Belum Diisi"}
+                                </ol>
+                            </li>
+                            <li>
+                                Berdasarkan pembahasan yang dilakukan, disepakati untuk merekomendasikan <strong contenteditable='true'>“Sanksi Administratif berupa
+                                    {dataSuratBA?.sanksi || this.state?.sanksi ?
+                                        <span>{dataSuratBA?.sanksi || this.state?.sanksi}</span>
+                                        : "Belum Diisi"}
+                                    ”.</strong>
+                            </li>
+                        </ol>
+                    </p>
+                    <p>
+                        Demikian Laporan Evaluasi dan Pembahasan ini dibuat dengan sesungguhnya dan telah dibaca dan dicermati oleh peserta rapat yang hadir.
+                    </p>
+                    <div className='mt-5'>
+                        <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>
+
+                </div>
+
+
+
+                <div id="footer">
+                    <span>*LAPORAN HASIL EVALUASI DAN PEMBAHASAN …………. – …bulan&tahun…</span>
+                </div>
+            </page>
+
+
+        );
+    }
+}
+export default ComponentToPrint

+ 175 - 0
components/BypassII/TablePenetapanSanksi.js

@@ -0,0 +1,175 @@
+import React, { Component } from "react";
+import { Card, Table } from "reactstrap";
+import { getPelanggaran } from "@/actions/pelanggaran";
+import { connect } from "react-redux";
+import Button from "reactstrap/lib/Button";
+import { getOneLaporan, updateLaporan } from "@/actions/pelaporan";
+import Router from "next/router";
+import { ToastContainer, toast } from "react-toastify";
+import { getAutoSave } from "@/actions/autosave";
+import Datatable from "@/components/Tables/Datatable";
+
+
+
+
+export class TablePenetapanSanksi_Bypass extends Component {
+	checkedData = [];
+
+	constructor(props) {
+		super(props);
+		this.state = {
+			// pelanggaran: null,
+			checkedData: [],
+			labelSanksi: [],
+			btnDelegasi: false,
+			trigger: false,
+		};
+		this.onHandleChange = this.onHandleChange.bind(this)
+	}
+
+	componentDidMount = async () => {
+		const { token, query } = this.props;
+		const { id } = query;
+		const pelanggaran = await getPelanggaran(token);
+		const getDataSave = await getAutoSave({ id, laporan: true });
+		const getDataPelanggaranfromAutoSave = getDataSave.data?.PenetapanSanksi?.dataPelanggaran;
+		if (this.state.trigger === false || this.ttate.trigger === true) {
+			if (getDataPelanggaranfromAutoSave === "null")
+				this.setState({ checkedData: [] })
+			else{
+				this.setState({
+					checkedData: getDataPelanggaranfromAutoSave ? getDataPelanggaranfromAutoSave?.data?.map(e => e._id) : [],
+					labelSanksi: getDataPelanggaranfromAutoSave ? getDataPelanggaranfromAutoSave?.data?.map(e => ({ value: e._id, labelSanksi: e.label_sanksi })) : []
+				})
+			}}
+			this.setState({
+				pelanggaran
+			});
+	};
+
+	onHandleChange = (evt) => {
+		const checked = evt.target.checked // item terceklis true/false
+		const item = evt.target.value;
+		if (checked)
+			this.state.checkedData.push(item)
+		else this.state.checkedData = this.state.checkedData.filter((e) => e != item)
+		this.setState({ trigger: !this.state.trigger })
+
+		this.props.setCheckedData(this.state.checkedData);
+	};
+
+	setLabelSanksi = (evt, label_sanksi) => {
+		const checked = evt.target.checked;
+		const item = evt.target.value;
+		if (checked) this.state.labelSanksi.push({ value: item, labelSanksi: label_sanksi });
+		else this.state.labelSanksi = this.state.labelSanksi.filter((e) => e.value != item);
+	}
+
+	ondelegasi = () => {
+		this.props.handleDelegasi(this.state)
+	}
+
+	render() {
+		const { pelanggaran, labelSanksi, checkedData } = this.state;
+		return (
+			<div className="card b ">
+				<div className="card-body card-over">
+					{pelanggaran && <Datatable options={{
+						responsive: false, ordering: true,
+						paging: false,
+						// searching:false,
+						ordering: false,
+						// info: false,
+					}}>
+						<table className="table w-100" >
+							<thead>
+								<tr>
+									<th>No</th>
+									<th>Jenis Pelanggaran</th>
+									<th>Sanksi</th>
+									<th></th>
+								</tr>
+							</thead>
+							<tbody>
+								{pelanggaran?.data?.map((jp, index) =>
+									<tr key={jp._id}>
+										<td>
+											<label>{index + 1}</label>
+										</td>
+										<td>
+											<div className="media align-items-center">
+												<div className="media-body d-flex">
+													<div>
+														<p>{jp.pelanggaran}</p>
+														{/* <p>TMT : {jp.tmt_bulan} Bulan</p> */}
+														<p>Jenis Sanksi Administratif : {jp.label_sanksi}</p>
+													</div>
+												</div>
+											</div>
+										</td>
+										<td>
+											<div className="media align-items-center">
+												<div className="media-body d-flex">
+													<div>
+														<p>{jp.sanksi}</p>
+														<p>Keterangan : {jp.keterangan_sanksi}</p>
+													</div>
+												</div>
+											</div>
+										</td>
+										<td>
+											<div className="checkbox c-checkbox">
+												<label>
+													<input type="checkbox" checked={checkedData.find(id => id === jp._id)} value={jp._id} onChange={(evt) => {
+														this.onHandleChange(evt)
+														this.setLabelSanksi(evt, jp.label_sanksi)
+														this.props.handleAutoSave()
+													}} />
+													<span className="fa fa-check"></span>
+												</label>
+											</div>
+										</td>
+									</tr>
+								)
+								}
+							</tbody>
+
+						</table>
+
+
+					</Datatable>
+
+					}
+					{/* {this.props.user?.role.id === 2020 ? (
+						labelSanksi.length && labelSanksi.filter((e) => e.labelSanksi === "Ringan" || e.labelSanksi === "Sedang").length === labelSanksi.length ? (
+							<Button className="btn-login float-right" color onClick={this.ondelegasi} >
+								<span className="font-color-white">
+									Delegasi ke LLDIKTI
+								</span>
+							</Button>
+						) : ("")
+					) : ("")
+					} */}
+					<div className="float-right m-2 ">
+						{this.props.user?.role.id === 2020 ? (
+							labelSanksi.length && labelSanksi.filter((e) => e.labelSanksi === "Ringan" || e.labelSanksi === "Sedang").length === labelSanksi.length ? (
+								<Button className="btn-login float-right" color onClick={this.ondelegasi} >
+									<span className="font-color-white">
+										Delegasi ke LLDIKTI
+									</span>
+								</Button>
+							) : ("")
+						) : ("")
+						}
+
+					</div>
+
+
+				</div>
+			</div>
+		);
+	}
+}
+
+const mapStateToProps = (state) => ({ user: state.user, token: state.token });
+export default connect(mapStateToProps)(TablePenetapanSanksi_Bypass);

+ 443 - 0
components/BypassII/UploadSurat.js

@@ -0,0 +1,443 @@
+import React, { Component } from "react";
+import { Row, Col, Input, FormGroup, Label, Progress, Button } from "reactstrap";
+import Select from "react-select";
+import DatePicker from "react-datepicker";
+import "react-datepicker/dist/react-datepicker.css";
+// import "react-datepicker/dist/react-datepicker.css";
+import ms from "ms";
+import { addDays, addMonths } from 'date-fns';
+import id from 'date-fns/locale/id';
+// registerLocale('id', 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 {
+	state = {
+		isClient: false,
+	};
+	componentDidMount = () => {
+		Dropzone = require("react-dropzone").default;
+		this.setState({ isClient: true });
+	};
+	render() {
+		return Dropzone ? <Dropzone {...this.props}>{this.props.children}</Dropzone> : null;
+	}
+}
+const formatOptionLabel = ({ value, sanksi, label_sanksi }) => (
+	<div style={{ display: "flex" }}>
+		<span className="">{value}</span>
+		<div style={{ marginLeft: "10px", color: "#adaca8" }}>{label_sanksi}</div>
+	</div>
+);
+
+export class UploadSurat_Bypass extends Component {
+	constructor(props) {
+		super(props);
+		const tmt_awal = new Date();
+		this.state = {
+			files: [],
+			nomorSanksi: "",
+			keterangan: "",
+			listSanksi: "",
+			startDay: tmt_awal,
+			maxDay: "",
+			awalTMT: "",
+			akhirTMT: "",
+			tidakPerluTMTCheck: false,
+			terimaSuratSanksi: "",
+			tglAkhirKeberatan: "",
+			filesTandaTerimaSS: [],
+			selectedFile: {}
+
+		};
+	}
+
+	onDrop = (selectedFile) => {
+		this.setState({
+			selectedFile: selectedFile.map((file) =>
+				Object.assign(file, {
+					preview: URL.createObjectURL(file),
+				})
+			),
+			stat: "Added " + selectedFile.length + " file(s)",
+		});
+		const selectFile = this.state.selectedFile
+		this.setState(prevState => ({
+			files: [...prevState.files, ...selectFile]
+		}))
+	};
+	onDropTandaTerimaSS = (filesTandaTerimaSS) => {
+		this.setState({
+			filesTandaTerimaSS: filesTandaTerimaSS.map((file) =>
+				Object.assign(file, {
+					preview: URL.createObjectURL(file),
+				})
+			),
+			stat: "file tanda terima sanksi " + filesTandaTerimaSS.length + " file",
+		});
+		this.props.setUploadSuratSanksi(this.state);
+	};
+
+	componentDidMount = async () => {
+		const { query, token } = this.props;
+		const { id } = query;
+		// const getDataSave = await getAutoSave({ id, laporan: true });
+		// const autosaveDataUpload = getDataSave.data?.PenetapanSanksi?.dataUpload;
+		// this.setState(autosaveDataUpload)
+	}
+
+	clearFiles = (e) => {
+		e.preventDefault();
+		e.stopPropagation();
+		this.setState({
+			stat: this.state.files.length ? this.state.files.length + " file(s) cleared." : "No files to clear.",
+		});
+		this.setState({
+			files: [],
+		});
+		this.props.setUploadSuratSanksi(this.state);
+	};
+	clearFilesTerimaSanksi = (e) => {
+		e.preventDefault();
+		e.stopPropagation();
+		this.setState({
+			stat: this.state.filesTandaTerimaSS.length ? this.state.filesTandaTerimaSS.length + " file(s) cleared." : "No files to clear.",
+		});
+		this.setState({
+			filesTandaTerimaSS: [],
+		});
+		this.props.setUploadSuratSanksi(this.state);
+	};
+
+	// handleAutoSave = () => {
+	// 	this.props.handleAutoSave()
+	// }
+
+	setUploadSuratSanksi = () => {
+		this.props.setUploadSuratSanksi(this.state);
+	};
+
+	setNomorSanksi = (e) => {
+		// this.setState({ nomorSanksi: e.target.value }, this.setUploadSuratSanksi);
+		this.state.nomorSanksi = e.target.value
+		this.setUploadSuratSanksi()
+		// this.handleAutoSave()
+
+	};
+
+	setKeterangan = (e) => {
+		// this.setState({ keterangan: e.target.value }, this.setUploadSuratSanksi);
+		this.state.keterangan = e.target.value
+		this.setUploadSuratSanksi()
+		// this.handleAutoSave()
+	};
+	setAkhirSanksi = (akhirTMT) => {
+		// this.setState({ keterangan: e.target.value }, this.setUploadSuratSanksi);
+		this.state.akhirTMT = akhirTMT
+		this.setUploadSuratSanksi()
+		// this.handleAutoSave()
+	};
+
+	setListSanksi = (ls) => {
+		this.setState({ listSanksi: ls.target.value }, this.setUploadSuratSanksi);
+	};
+	handleChangeListSanksi = (listSanksi) => {
+		this.setState({ listSanksi }, this.setUploadSuratSanksi);
+	};
+	handleTmtCheck = () => {
+		// this.setState({ tmtCheck: !this.state.tmtCheck }, this.setUploadSuratSanksi);
+		this.state.tidakPerluTMTCheck = !this.state.tidakPerluTMTCheck
+		this.setUploadSuratSanksi()
+		// this.handleAutoSave()
+	}
+	render() {
+		const { files, terimaSuratSanksi, tglAkhirKeberatan, filesTandaTerimaSS, tidakPerluTMTCheck } = this.state;
+		const removeFile = file => () => {
+			const newFiles = [...files]
+			newFiles.splice(newFiles.indexOf(file), 1)
+			this.setState({
+				files: newFiles,
+			});
+		}
+		const removeFileTandaTerimaSS = file => () => {
+			const newFiles = [...filesTandaTerimaSS]
+			newFiles.splice(newFiles.indexOf(file), 1)
+			this.setState({
+				filesTandaTerimaSS: newFiles,
+			});
+		}
+		const thumbs = files.map((file, index) => (
+			<p>
+				<em className="far fa-file" />&nbsp;&nbsp;{file.name}
+				<button className="bg-transparent button-transparent border-0 fas fa-trash text-danger float-right" onClick={removeFile(file)} />
+			</p>
+		));
+		const thumbsTandaTerimaSS = filesTandaTerimaSS.map((file, index) => (
+			<p>
+				<em className="far fa-file" />&nbsp;&nbsp;{file.name}
+				<button className="bg-transparent button-transparent border-0 fas fa-trash text-danger float-right" onClick={removeFileTandaTerimaSS(file)} />
+			</p>
+		));
+		return (
+			<form className="form-horizontal" method="get" action="/" onSubmit={this.onSubmit}>
+				<FormGroup row>
+					<label className="col-md-2 col-form-label">Nomor Surat<span className="text-danger">*</span></label>
+					<div className="col-md-10">
+						<Input type="text" value={this.state.nomorSanksi} onChange={(e) => { this.setNomorSanksi(e) }} />
+					</div>
+				</FormGroup>
+				<FormGroup row className="mt-3">
+					<label className="col-md-2 col-form-label">Keterangan<span className="text-danger">*</span></label>
+					<div className="col-md-10">
+						<Input type="textarea" value={this.state.keterangan} onChange={(e) => { this.setKeterangan(e) }} required />
+					</div>
+				</FormGroup>
+				<FormGroup row>
+					<label className="col-md-2 col-form-label">Tidak Perlu TMT</label>
+					<div className="col-md-10 mt-2">
+						<div className="checkbox c-checkbox">
+							<label>
+								<Input type="checkbox" onChange={() => this.handleTmtCheck()} defaultChecked={this.state.tidakPerluTMTCheck} />
+								<span className="fa fa-check"></span></label>
+						</div>
+					</div>
+				</FormGroup>
+				{/* {this.state.tidakPerluTMTCheck && (
+					<FormGroup row className="mt-3">
+						<label className="col-md-2 col-form-label">Tanggal Penetapan Sanksi</label>
+						<span className="col-sm-3 float-left">
+							<DatePicker
+								selected={this.state.awalTMT ? new Date(this.state.awalTMT) : this.state.awalTMT}
+								onChange={(awalTMT) => {
+									this.setState({ awalTMT }, this.setUploadSuratSanksi)
+								}}
+								dateFormat="dd/MM/yyyy"
+								maxDate={new Date(this.state.startDay)}
+								placeholderText="Isi Tanggal"
+								locale={id}
+								className="form-control bg-white"
+							/>
+						</span>
+					</FormGroup>
+				)} */}
+				{!this.state.tidakPerluTMTCheck && (
+					<FormGroup row className="mt-3">
+						<label className="col-md-2 col-form-label">Isi TMT</label>
+						<Row >
+							<Col>
+								<FormGroup>
+									<span className="ml-3">
+										<DatePicker
+											selected={this.state.awalTMT ? new Date(this.state.awalTMT) : this.state.awalTMT}
+											onChange={(awalTMT) => {
+												this.setState({ awalTMT }, this.setUploadSuratSanksi)
+											}}
+											dateFormat="dd/MM/yyyy"
+											maxDate={new Date(this.state.startDay)}
+											placeholderText="Dari Tanggal"
+											locale={id}
+											className="form-control bg-white"
+										/>
+									</span>
+
+								</FormGroup>
+							</Col>
+							<Col>
+								<FormGroup>
+									<span className="ml-3">
+										<DatePicker
+											selected={this.state.akhirTMT ? new Date(this.state.akhirTMT) : this.state.akhirTMT}
+											// onChange={(akhirTMT, e) => {
+											// 	this.setState({ akhirTMT }, this.setUploadSuratSanksi(e), this.props.handleAutoSave(e))
+											// }}
+											onChange={(akhirTMT) => { this.setAkhirSanksi(akhirTMT) }}
+											dateFormat="dd/MM/yyyy"
+											minDate={new Date(this.state.awalTMT)}
+											maxDate={addMonths(new Date(this.state.awalTMT), 6)}
+											placeholderText="Sampai tanggal"
+											locale={id}
+											className="form-control bg-white"
+										/>
+									</span>
+								</FormGroup>
+							</Col>
+						</Row>
+					</FormGroup>
+				)}
+				{!this.state.tidakPerluTMTCheck && (
+					<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.awalTMT ? moment(this.state.awalTMT).format("DD-MM-YYYY") : "-"}</b> hingga <b>{this.state.akhirTMT ? moment(this.state.akhirTMT).format("DD-MM-YYYY") : "-"}</b>
+						</div>
+					</FormGroup>
+				)}
+				{!this.state.tidakPerluTMTCheck && (
+					<FormGroup row className="mt-1">
+						<label className="col-md-2 col-form-label">TMT</label>
+						<div className="col-md-10 mt-2">
+							<b>{this.state.akhirTMT ? moment(this.state.akhirTMT).diff(this.state.awalTMT, 'month') : "-"} bulan</b>
+						</div>
+					</FormGroup>
+				)}
+				<FormGroup row className="mt-3">
+					<label className="col-md-2 col-form-label">List sanksi </label>
+					<div className="col-md-10">
+						<Select
+							options={this.props.listSanksi.map(e => ({ value: `Sanksi Administratif ${e.split(";")[0]} - ${e.split(";")[1]}` }))}
+							isMulti
+							formatOptionLabel={formatOptionLabel}
+							onChange={(e) => {
+								this.handleChangeListSanksi(e);
+							}}
+						/>
+					</div>
+				</FormGroup>
+				<FormGroup row>
+					<label className="col-md-2 col-form-label">
+						Dokumen Surat Sanksi<span className="text-danger">*</span>
+					</label>
+					<div className="col-md-10">
+						<DropzoneWrapper className="" onDrop={this.onDrop}>
+							{({ getRootProps, getInputProps, isDragActive }) => {
+								return (
+									<div {...getRootProps()} className={"dropzone card" + (isDragActive ? "dropzone-drag-active" : "")}>
+										<input {...getInputProps()} />
+										<div className="dropzone-style-1">
+											<div className="center-ver-hor dropzone-previews flex">
+												{this.state.files.length > 0 ? (
+													<div className="text-center fa-2x icon-cloud-upload mr-2 ">
+														<h5 className="text-center dz-default dz-message">Klik untuk tambah file</h5>
+													</div>
+												) : (
+													<div className="text-center fa-2x icon-cloud-upload mr-2 ">
+														<h5 className="text-center dz-default dz-message">Klik untuk upload dokumen</h5>
+													</div>
+												)}
+											</div>
+										</div>
+										<div className="d-flex align-items-center">
+											<small className="ml-auto">
+												<button type="button" className="btn btn-link" onClick={this.clearFiles}>
+													Reset dokumen
+												</button>
+											</small>
+										</div>
+									</div>
+								);
+							}}
+						</DropzoneWrapper>
+						<div>
+							{thumbs}
+						</div>
+						<p className="mrgn-top-5 font-color-black">Ukuran setiap dokumen maksimal 15mb</p>
+					</div>
+				</FormGroup>
+				{/* <FormGroup row>
+					<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} dataPelanggaran={this.props.dataPelanggaran} dataSuratBA={this.props.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> */}
+				<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">
+						<DatePicker
+							selected={this.state.terimaSuratSanksi ? new Date(this.state.terimaSuratSanksi) : this.state.terimaSuratSanksi}
+							onChange={(terimaSuratSanksi) => {
+								this.setState({ terimaSuratSanksi }, this.setUploadSuratSanksi)
+							}}
+							dateFormat="dd/MM/yyyy"
+							minDate={new Date(this.state.awalTMT)}
+							placeholderText="Isi Tanggal"
+							locale={id}
+							className="form-control bg-white"
+						/>
+					</span>
+				</FormGroup>
+				<FormGroup row>
+					<label className="col-md-2 col-form-label">
+						Dokumen Tanda Terima Surat Sanksi<span className="text-danger">*</span>
+					</label>
+					<div className="col-md-10">
+						<DropzoneWrapper className="" onDrop={this.onDropTandaTerimaSS}>
+							{({ getRootProps, getInputProps, isDragActive }) => {
+								return (
+									<div {...getRootProps()} className={"dropzone card" + (isDragActive ? "dropzone-drag-active" : "")}>
+										<input {...getInputProps()} />
+										<div className="dropzone-style-1">
+											<div className="center-ver-hor dropzone-previews flex">
+												{this.state.filesTandaTerimaSS.length > 0 ? (
+													<div className="text-center fa-2x icon-cloud-upload mr-2 ">
+														<h5 className="text-center dz-default dz-message">Klik untuk tambah file</h5>
+													</div>
+												) : (
+													<div className="text-center fa-2x icon-cloud-upload mr-2 ">
+														<h5 className="text-center dz-default dz-message">Klik untuk upload dokumen</h5>
+													</div>
+												)}
+											</div>
+										</div>
+										<div className="d-flex align-items-center">
+											<small className="ml-auto">
+												<button type="button" className="btn btn-link" onClick={this.clearFilesTerimaSanksi}>
+													Reset dokumen
+												</button>
+											</small>
+										</div>
+									</div>
+								);
+							}}
+						</DropzoneWrapper>
+						<div>
+							{thumbsTandaTerimaSS}
+						</div>
+						<p className="mrgn-top-5 font-color-black">Ukuran setiap dokumen maksimal 15mb</p>
+					</div>
+				</FormGroup>
+				{!this.state.tidakPerluTMTCheck && (
+					<FormGroup row className="mt-3">
+						<label className="col-md-2 col-form-label">Tanggal Akhir Pengajuan Keberatan<span className="text-danger">*</span>
+							<p>
+								Note : 21 hari kerja
+							</p>
+						</label>
+						<span className="col-sm-3 float-left">
+							<DatePicker
+								selected={this.state.tglAkhirKeberatan ? new Date(this.state.tglAkhirKeberatan) : this.state.tglAkhirKeberatan}
+								onChange={(tglAkhirKeberatan) => {
+									this.setState({ tglAkhirKeberatan }, this.setUploadSuratSanksi)
+								}}
+								dateFormat="dd/MM/yyyy"
+								minDate={new Date(terimaSuratSanksi)}
+								placeholderText="Isi Tanggal"
+								locale={id}
+								className="form-control bg-white"
+							/>
+						</span>
+					</FormGroup>
+				)}
+			</form >
+		);
+	}
+}
+
+export default UploadSurat_Bypass;

+ 6 - 0
components/Layout/Menu.js

@@ -113,6 +113,12 @@ const Menu = [
 		icon: "fas fa-building",
 		translate: "sidebar.nav.Riwayat",
 	},
+	{
+		name: "Bypass II",
+		path: "/app/bypassII",
+		icon: "fas fa-building",
+		translate: "sidebar.nav.Riwayat",
+	},
 
 	///////------ANALYTICS REPORT------\\\\\\\\\\\
 

+ 9 - 1
components/Layout/Sidebar.js

@@ -16,6 +16,7 @@ import Menu from "./Menu.js";
 import MenuLLDIKTI from "./MenuLLDIKTI.js";
 import MenuPT from "./MenuPT.js";
 import MenuBypass from "./MenuBypass";
+import { ENV } from "../../env";
 // localStorage.getItem("user");
 // import Menu from './MenuPT.js';
 
@@ -149,7 +150,14 @@ class Sidebar extends Component {
 	async componentDidMount() {
 		// const user = await getUser();
 		const user = this.props.user;
-		this.menu = user.user_id === "28DB23AE-2976-47E0-9410-241A11EE1F88" ? MenuBypass : user.role.id === 2022 ? MenuPT : user.role.id === 2021 ? MenuLLDIKTI : Menu;
+		if (ENV === "production") {
+			this.menu = user.user_id === "2A080F42-AE7F-407B-976E-DE5FA87BD277" ? MenuBypass : user.role.id === 2022 ? MenuPT : user.role.id === 2021 ? MenuLLDIKTI : Menu;
+		}
+		if (ENV === "development") {
+			this.menu = user.user_id === "28DB23AE-2976-47E0-9410-241A11EE1F88" ? MenuBypass : 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();
 

+ 1 - 1
components/Main/Login.js

@@ -78,7 +78,7 @@ class Login extends Component {
           Router.push({ pathname: "/pt/pemantauan" });
           await createLog(auth.data.token, { aktivitas: "Berhasil Login", _csrf: _csrf });
           return;
-        } else if ([2020, 2021, 2023].includes(auth.data.user.role.id)) {
+        } else if ([2020, 2021, 2023, 2024].includes(auth.data.user.role.id)) {
           Router.push({ pathname: "/app/pemantauan" });
           await createLog(auth.data.token, { aktivitas: "Berhasil Login", _csrf: _csrf });
           return;

+ 204 - 0
pages/app/bypassII/detail.js

@@ -0,0 +1,204 @@
+import React, { Component } from "react";
+import ContentWrapper from "@/components/Layout/ContentWrapper";
+import { getLog } from "@/actions/log";
+import { Card, CardBody, TabContent, TabPane, Nav, NavItem, NavLink, Button, Row, Col, FormGroup } from "reactstrap";
+import Timeline from "@/components/Main/Timeline";
+import { getOnePT } from "@/actions/PT";
+import { connect } from "react-redux";
+import { getOneLaporan, getPelaporan } from "../../../actions/pelaporan";
+import DetailLaporan from "@/components/Main/DetailLaporan";
+import Link from "next/link";
+import Loader from "@/components/Common/Loader";
+import DetailPT from "@/components/Main/DetailPT";
+import moment from "moment";
+import Datatable from "@/components/Tables/Datatable";
+import classnames from "classnames";
+import BeritaAcara_Bypass from "../../../components/BypassII/BeritaAcara";
+import { UploadSurat_Bypass } from "../../../components/BypassII/UploadSurat";
+import { TablePenetapanSanksi_Bypass } from "../../../components/BypassII/TablePenetapanSanksi";
+
+
+const stepNavitemStyle = {
+    backgroundColor: "#fcfcfc",
+};
+
+class bypassIIDetail extends Component {
+    constructor(props) {
+        super(props);
+        this.state = {
+            activeStep: "1",
+
+            log: {},
+            detailLaporanPt: {},
+            pelaporan: {},
+            pt: {},
+        };
+    }
+
+    static async getInitialProps({ query }) {
+        return { query };
+    }
+
+    componentDidMount = async () => {
+        const { query, token } = this.props;
+        const ptId = query.ptId;
+        const pelaporan = await getPelaporan(token, { pt_id: ptId, all: true, aktif: true });
+        const pt = await getOnePT(token, ptId);
+        this.setState({ pelaporan, pt });
+    };
+
+    toggleStep = (activeStep) => () => {
+        if (this.state.activeStep !== activeStep) {
+            this.setState({
+                activeStep: activeStep
+            });
+            // this.handleAutoSave(this.state.dataPelanggaran, activeStep)
+
+        }
+    };
+
+
+    render() {
+        return (
+            <ContentWrapper unwrap>
+                {/* <Header /> */}
+                <div className="p-3">
+                    <div className="content-heading">
+                        <span className="font-color-white">Bypass II</span>
+                        <div className="ml-auto">
+                            <Link href="/app/bypassII">
+                                <Button className="color-3e3a8e" color>
+                                    <span className="font-color-white">&lt; Kembali</span>
+                                </Button>
+                            </Link>
+                        </div>
+                    </div>
+                    <Card className="card-default">
+                        <CardBody>
+                            <Row>
+                                <Col xs="4">
+                                    <Nav pills vertical={true} className="cursor-pointer">
+                                        <NavItem style={stepNavitemStyle}>
+                                            <NavLink
+                                                tag="div"
+                                                className={classnames({
+                                                    active: this.state.activeStep === "1",
+                                                })}
+                                                onClick={this.toggleStep("1")}
+                                            >
+                                                <h4 className="text-left my-3">1. Penetapan Sanksi</h4>
+                                            </NavLink>
+                                        </NavItem>
+                                        <NavItem style={stepNavitemStyle}>
+                                            <NavLink
+                                                tag="div"
+                                                className={classnames({
+                                                    active: this.state.activeStep === "2",
+                                                })}
+                                                onClick={this.toggleStep("2")}
+                                            >
+                                                <h4 className="text-left my-3">2. Penetapan Jenis Pelanggaran</h4>
+                                            </NavLink>
+                                        </NavItem>
+                                        <NavItem style={stepNavitemStyle}>
+                                            <NavLink
+                                                tag="div"
+                                                className={classnames({
+                                                    active: this.state.activeStep === "3",
+                                                })}
+                                                onClick={this.toggleStep("3")}
+                                            >
+                                                <h4 className="text-left my-3">3. Berita Acara Pleno</h4>
+                                            </NavLink>
+                                        </NavItem>
+                                    </Nav>
+                                </Col>
+
+                                <Col xs="8">
+                                    <TabContent activeTab={this.state.activeStep} className="border-0">
+                                    <TabPane tabId="1">
+											<div className="pt-3 mb-3">
+												<h2>Penetapan Sanksi</h2>
+												{/* {this.state.listSanksi && <UploadSurat setUploadSuratSanksi={this.setUploadSuratSanksi} listSanksi={this.state.listSanksi}  />}
+											</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")}>
+													<span className="font-color-white">Previous</span>
+												</Button>
+												<Button className="ml-auto btn-login color-3e3a8e" color onClick={() => { this.validation() }}>
+													<span className="font-color-white">Next</span>
+												</Button> */}
+											</div>
+										</TabPane>
+                                        <TabPane tabId="2">
+											<div className="pt-3 mb-3">
+												<h2>Penetapan Jenis Pelanggaran</h2>
+												{/* <TablePenetapanSanksi query={this.props.query} handleDelegasi={this.handleDelegasi} handleAutoSave={this.handleAutoSave} setCheckedData={this.setCheckedData} dataPelanggaran={dataPelanggaran} />
+											</div>
+											<hr />
+											<div className="d-flex">
+												<Button color className="btn-login color-3e3a8e" onClick={this.toggleStep("2")}>
+													<span className="font-color-white">Previous</span>
+												</Button>
+												<Button className="ml-auto btn-login color-3e3a8e" color onClick={this.toggleStep("4")}>
+													<span className="font-color-white">Next</span>
+												</Button> */}
+											</div>
+										</TabPane>
+                                        <TabPane tabId="3">
+											{/* <Card>
+												<BeritaAcara query={this.props.query} handleAutoSave={this.handleAutoSave} dataPelanggaran={this.state.dataPelanggaran} setDataSuratBA={this.setDataSuratBA} dataLaporan={pelaporan} dataSuratBA={dataSuratBA} />
+											</Card> */}
+                                            <Card>
+                                                 <BeritaAcara_Bypass pt={this.state.pt}/>
+                                            </Card>
+                                           
+											<div className="d-flex">
+												<Button color className="btn-login color-3e3a8e" onClick={this.toggleStep("3")}>
+													<span className="font-color-white">Previous</span>
+												</Button>
+												<Button className="ml-auto btn-login color-3e3a8e" color onClick={this.toggleStep("5")}>
+													<span className="font-color-white">Next</span>
+												</Button>
+											</div>
+										</TabPane>
+                                    </TabContent>
+                                </Col>
+                            </Row>
+                        </CardBody>
+                    </Card>
+
+
+
+                </div>
+            </ContentWrapper>
+        )
+    }
+
+
+}
+const mapStateToProps = (state) => ({ user: state.user, token: state.token });
+export default connect(mapStateToProps)(bypassIIDetail);

+ 118 - 0
pages/app/bypassII/index.js

@@ -0,0 +1,118 @@
+import React from "react";
+import ContentWrapper from '@/components/Layout/ContentWrapper';
+import { Container, Row, Col, Card, CardBody, CardFooter, CardHeader, Input, Button } from 'reactstrap';
+import FormValidator from "@/components/Forms/Validator.js";
+import { ptPublic } from "@/actions/PT";
+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";
+import Router from "next/router";
+
+
+
+
+
+const loadOptions = (inputValue, callback) => {
+    setTimeout(async () => {
+        const pt = await ptPublic({ search: inputValue });
+        const data = pt?.data.map((e) => ({
+            value: e.id,
+            label: e.nama,
+            className: "State-ACT",
+        }));
+        callback(data);
+    }, 1000);
+};
+class BypassII extends React.Component {
+    constructor(props) {
+        super(props);
+        this.state = {
+            formLogin: {
+                password: ""
+            },
+            loading: false,
+            inputValue: "",
+            pt_id: ""
+
+        };
+    }
+
+
+
+    handleChangeSelectPerguruanTinggi = (selected_PT) => {
+        this.setState({ pt_id: selected_PT.value });
+    };
+    handleClick = (e, PT_ID) => {
+        e.preventDefault();
+        Router.push({
+            pathname: "/app/bypassII/detail",
+            query: { ptId: PT_ID },
+        });
+
+    }
+
+
+    render() {
+        return (
+            <ContentWrapper>
+                <div className="content-heading">
+                    <span className="font-color-white">
+                        Bypass II
+                    </span>
+                </div>
+                <Container className="container-sm pt-5" >
+                    <Card
+                        style={{ margin: "20px", borderRadius: "15px" }}
+                    >
+                        <CardHeader className="text-center">
+                            <div className="card-title font-weight-bold mt-4  font-color-black"
+                                style={{ fontSize: "20px" }}
+                            >Pilih Perguruan tinggi</div>
+                        </CardHeader>
+                        <CardBody>
+                            <div className="form-group">
+                                <label className="col-form-label font-color-black mb-0 font-weight-bold">Perguruan Tinggi</label>
+                                <AsyncSelect
+                                    style={{ borderRadius: "7px" }}
+                                    cacheOptions
+                                    loadOptions={loadOptions}
+                                    defaultOptions
+                                    onChange={(e) => {
+                                        this.handleChangeSelectPerguruanTinggi(e);
+                                    }}
+                                // onInputChange={this.handleInputChange}
+                                />
+                                <span className="invalid-feedback">Field is required</span>
+                            </div>
+                            <Button color className="btn-login float-right mt-3"
+                                style={{ borderRadius: "7px" }}
+                                onClick={(e) => this.handleClick(e, this.state.pt_id)}
+                            >
+                                <span className="font-color-white">
+                                    {this.state.loading ? (
+                                        <div class="d-flex justify-content-center">
+                                            <div
+                                                class="spinner-border spinner-border-sm"
+                                                role="status"
+                                            ></div>
+                                        </div>
+                                    ) : (
+                                        "Pilih"
+                                    )}
+                                </span>
+                            </Button>
+                        </CardBody>
+                    </Card>
+                </Container>
+            </ContentWrapper>)
+    }
+}
+
+
+
+
+
+const mapStateToProps = (state) => ({ user: state.user, token: state.token });
+export default connect(mapStateToProps)(BypassII);

+ 33 - 10
pages/app/tuntas/detail.js

@@ -10,6 +10,8 @@ import Loader from "@/components/Common/Loader";
 import { connect } from "react-redux";
 import { createLog } from "@/actions/log";
 import { getCsrf } from "../../../actions/security";
+import { getOneSanksi } from "../../../actions/sanksi";
+import DetailSanksi from "../../../components/PelaporanTuntas/DetailSanksi";
 
 class DetailPelaporan extends Component {
 	constructor(props) {
@@ -27,13 +29,23 @@ class DetailPelaporan extends Component {
 		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", _csrf: _csrf });
-		this.setState({ pelaporan });
+		if (query.data === "sanksi") {
+			const sanksi = await getOneSanksi(this.props.token, query.id + "?aktif=false");
+			await createLog(token, { aktivitas: `Mengakses halaman detail Pelaporan Tuntas dengan No. Laporan ${sanksi.data.laporan.no_laporan}`, menu: "Pelaporan", _csrf: _csrf });
+			this.setState({ sanksi });
+		}
+		else {
+			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", _csrf: _csrf });
+			this.setState({ pelaporan });
+		}
+
+
 	};
 
 	render() {
-		const { pelaporan } = this.state;
+		const { query } = this.props
+		const { pelaporan, sanksi } = this.state;
 		return (
 			<ContentWrapper unwrap>
 				{/* <Header /> */}
@@ -50,19 +62,30 @@ class DetailPelaporan extends Component {
 					</div>
 					<Row>
 						<Col xl="9">
-							{pelaporan.data ? (
+							{query?.data === "sanksi" &&
+								<Card className="card-default">
+									<CardBody>
+										<Row>
+											<Col lg={12}>
+												{sanksi?.data && query?.data === "sanksi" ? <DetailSanksi data={sanksi.data} /> : <Loader />}
+											</Col>
+										</Row>
+									</CardBody>
+								</Card>
+							}
+							{query?.data === "laporan" &&
 								<Card className="card-default">
 									<CardBody>
 										<Row>
-											<Col lg={12}>{<DetailLaporan data={pelaporan.data} />}</Col>
+											<Col lg={12}>
+												{pelaporan?.data && query.data === "laporan" ? <DetailLaporan data={pelaporan.data} /> : <Loader />}</Col>
 										</Row>
 									</CardBody>
 								</Card>
-							) : (
-								<Loader />
-							)}
+							}
 						</Col>
-						<Col xl="3">{pelaporan.data ? <DetailPT data={pelaporan.data.pt} /> : <Loader />}</Col>
+						{query?.data === "sanksi" && <Col xl="3">{sanksi?.data ? <DetailPT data={sanksi?.data.laporan?.pt} /> : <Loader />}</Col>}
+						{query?.data === "laporan" && <Col xl="3">{pelaporan?.data ? <DetailPT data={pelaporan?.data.pt} /> : <Loader />}</Col>}
 					</Row>
 				</div>
 			</ContentWrapper>