import React, { Component } from "react"; import { Card, CardBody, TabContent, TabPane, Nav, NavItem, NavLink, Button, Row, Col, FormGroup } from "reactstrap"; import Router from "next/router"; import classnames from "classnames"; import ContentWrapper from "@/components/Layout/ContentWrapper"; import DetailLaporan from "@/components/Main/DetailLaporan"; import Header from "@/components/Main/Header"; import TableRiwayat from "@/components/Pemeriksaan/TableRiwayat"; import UploadSurat from "@/components/Sanksi/UploadSurat"; import Ringkasan from "@/components/Sanksi/Ringkasan"; import TablePenetapanSanksi from "@/components/Sanksi/TablePenetapanSanksi"; import Link from "next/link"; import { getOneLaporan, updateLaporan } from "@/actions/pelaporan"; import { createSanksi } from "@/actions/sanksi"; import { getPelanggaran, getPelanggaranSanksi } from "@/actions/pelanggaran"; import { connect } from "react-redux"; import Loader from "@/components/Common/Loader"; import { ToastContainer, toast } from "react-toastify"; import BeritaAcara from "@/components/Sanksi/BeritaAcara"; import { getAutoSave, inputAutoSave } from "@/actions/autosave"; import swal from "sweetalert2"; import { getCsrf } from "../../../actions/security"; import ComponentToPrint from "../../../components/Sanksi/SuratBA_A"; import ReactToPrint, { PrintContextConsumer } from 'react-to-print'; import { updatePddikti } from "../../../actions/sanksi"; import { ENV } from "../../../env"; import Swal from "sweetalert2"; import Redudansi from "../../../components/Sanksi/Redudansi"; import { createLog } from "../../../actions/log"; import Modul from "../../../components/Sanksi/Modul"; import { getDaftarHadirPeserta } from "../../../actions/public"; const stepNavitemStyle = { backgroundColor: "#fcfcfc", }; class ProsesSanksi extends Component { // dataUpload = {}; constructor(props) { super(props); this.state = { activeStep: "1", dataUpload: null, dataSuratBA: null, dataPelanggaran: {}, pelaporan: {}, listSanksi: [], loading: false, localSuccess: false, }; } static getInitialProps = async ({ query }) => { return { query }; }; componentDidMount = async () => { const { query, token } = this.props; const { id } = query; const pelaporan = await getOneLaporan(token, id); const daftarPeserta = await getDaftarHadirPeserta(token, id) const { data: listSanksi } = await getPelanggaranSanksi(token) const getDataSave = await getAutoSave({ id, laporan: true }); const autoSaveDataPelanggaran = getDataSave.data?.PenetapanSanksi?.dataPelanggaran; const dataform = getDataSave.data?.PenetapanSanksi?.dataUpload const activeStep = getDataSave.data?.PenetapanSanksi?.activeStep this.setState({daftarPeserta, pelaporan, listSanksi, activeStep: activeStep || "1" }); this.setState({ dataPelanggaran: autoSaveDataPelanggaran, dataUpload:dataform }) }; handleAutoSave = async (data, activeStep) => { if (this.props?.user?.role.id === 2024) { "" } else { const { query, token } = this.props; const { id } = query; const { dataSuratBA, dataUpload } = this.state await inputAutoSave({ data: { PenetapanSanksi: { dataSuratBA, dataUpload, dataPelanggaran: data, activeStep } }, token, id, laporan: true }) } } done = async () => { if (this.props?.user?.role.id === 2024) { Swal.fire({ icon: 'error', title: 'Oops...', html: 'Maaf anda tidak memiliki akses untuk menyelesaikan

proses ini.

', confirmButtonColor: "#3e3a8e", confirmButtonText: 'Oke' }) } else { this.setState({ loading: true }) const sanksi = await this.tambahSanksi() if (sanksi && ENV === "production") { await this.updatePddikti(sanksi.data._id) //kirim sanksiID ke function updatePDDIKTI } await Router.push({ pathname: "/app/sanksi", }); } }; updatePddikti = async (sanksiId) => { const getToken = await getCsrf(); const _csrf2 = getToken.token; const toastPddikti = toast.loading("Updating pddikti..."); try { const { query, token } = this.props; const { id } = query; await updatePddikti(token, sanksiId, _csrf2) toast.update(toastPddikti, { render: "Berhasil Update PDDIKTI", type: "success", isLoading: false, autoClose: true, closeButton: true }); } catch (error) { toast.update(toastPddikti, { render: ("Gagal Update PDDIKTI"), type: "error", isLoading: false, autoClose: true, closeButton: true }); } } tambahSanksi = async () => { const getToken = await getCsrf(); const _csrf = getToken.token; const dataUpload = this.state.dataUpload const toastid = toast.loading("Please wait..."); if (dataUpload.tidakPerluTMTCheck === true || dataUpload?.awalTMT === undefined || dataUpload?.awalTMT === "" || dataUpload?.akhirTMT === undefined || dataUpload?.akhirTMT === "") { try { const { query, token } = this.props; const { id } = query; const formdata = new FormData(); formdata.append("no_sanksi", this.state.dataUpload.nomorSanksi); formdata.append("keterangan", this.state.dataUpload.keterangan); formdata.append("tanggal_terima_sanksi", this.state.dataUpload.terimaSuratSanksi); formdata.append("tanggal_akhir_keberatan", this.state.dataUpload.tglAkhirKeberatan); formdata.append("pelanggaran_id", this.state.dataPelanggaran.data.map((e) => e._id).join()); if (this.state.dataUpload.files && this.state.dataUpload.files.length > 0) { this.state.dataUpload.files.forEach((e) => { formdata.append("dokumen", e); }); } if (this.state.dataUpload.filesTandaTerimaSS && this.state.dataUpload.filesTandaTerimaSS.length > 0) { this.state.dataUpload.filesTandaTerimaSS.forEach((e) => { formdata.append("dokumen_terima_sanksi", e); }); } const sanksi = await createSanksi(token, id, formdata, _csrf) toast.update(toastid, { render: "Berhasil membuat sanksi", type: "success", isLoading: false, autoClose: true, closeButton: true }); return sanksi } catch (error) { toast.update(toastid, { render: error.response.data.message || error.message, type: "error", isLoading: false, autoClose: true, closeButton: true }); return null } } else { try { const { query, token } = this.props; const { id } = query; const formdata = new FormData(); formdata.append("no_sanksi", this.state.dataUpload.nomorSanksi); formdata.append("keterangan", this.state.dataUpload.keterangan); formdata.append("from_date", this.state.dataUpload.awalTMT); formdata.append("to_date", this.state.dataUpload.akhirTMT); formdata.append("tanggal_terima_sanksi", this.state.dataUpload.terimaSuratSanksi); formdata.append("tanggal_akhir_keberatan", this.state.dataUpload.tglAkhirKeberatan); formdata.append("sanksi", JSON.stringify(this.state.dataUpload.listSanksi.map((e) => ({ label: e.value.split(";")[0], level: e.level })))); formdata.append("pelanggaran_id", this.state.dataPelanggaran.data.map((e) => e._id).join()); if (this.state.dataUpload.files && this.state.dataUpload.files.length > 0) { this.state.dataUpload.files.forEach((e) => { formdata.append("dokumen", e); }); } if (this.state.dataUpload.filesTandaTerimaSS && this.state.dataUpload.filesTandaTerimaSS.length > 0) { this.state.dataUpload.filesTandaTerimaSS.forEach((e) => { formdata.append("dokumen_terima_sanksi", e); }); } const sanksi = await createSanksi(token, id, formdata, _csrf) toast.update(toastid, { render: "Berhasil membuat sanksi", type: "success", isLoading: false, autoClose: true, closeButton: true }); return sanksi } catch (error) { toast.update(toastid, { render: error.response.data.message || error.message, type: "error", isLoading: false, autoClose: true, closeButton: true }); return null } } } logdelegasi = async () => { const getToken = await getCsrf(); const _csrf = getToken.token; const { token, query } = this.props; const { id } = query; await createLog(token, { aktivitas: `Berhasil Delegasi Laporan, id: ${id}`, _csrf: _csrf, menu: "Sanksi" }); } handleDelegasi = async (data) => { if (this.props?.user?.role.id === 2024) { Swal.fire({ icon: 'error', title: 'Oops...', html: 'Maaf anda tidak memiliki akses untuk menyelesaikan

proses ini.

', confirmButtonColor: "#3e3a8e", confirmButtonText: 'Oke' // footer: 'Why do I have this issue?' }) } else { const getToken = await getCsrf(); const _csrf = getToken.token; const { token, query } = this.props; const { id } = query; let update = null; const toastid = toast.loading("Please wait..."); data.change_role = "true"; data.keterangan = "delegasi ke DIKTI" update = await updateLaporan(token, id, data, _csrf); if (!update) { toast.update(toastid, { render: "Laporan gagal didelegasi", type: "error", isLoading: false, autoClose: true, closeButton: true }); } else { toast.update(toastid, { render: "Laporan berhasil didelegasi", type: "success", isLoading: false, autoClose: true, closeButton: true }); await this.logdelegasi() Router.push("/app/sanksi"); } } }; toggleStep = (activeStep) => () => { if (this.state.activeStep !== activeStep) { this.setState({ activeStep: activeStep }); this.handleAutoSave(this.state.dataPelanggaran, activeStep)// parameter 1 untuk data pelanggaran 1 untuk activestep // this.state.activeStep = activeStep; } }; setCheckedData = async (data) => { if (data.length === 0) { this.handleAutoSave("null") this.setState({ dataPelanggaran: "null" }) } else { const { token } = this.props; const result = await getPelanggaran(token, { id: data.join(",") }); this.setState({ dataPelanggaran: result }); this.handleAutoSave(result) } }; setUploadSuratSanksi = (data) => { this.setState({ dataUpload: data }, () => this.handleAutoSave()); }; setDataSuratBA = (data) => { this.setState({ dataSuratBA: data }); }; setDataStatusLaporan = async (data) => { await this.setState({ dataStatusLaporan: data }); const thisclose = data.selectedOption.value this.setState({ thisclose }) }; validasiSanksiOn5 = (empat, lima) => () => { const dataPelanggaran = this.state.dataPelanggaran if (dataPelanggaran?.data === undefined) { swal.fire({ title: "Penetapan Jenis Pelanggaran belum diisi", html: 'Mohon diisi terlebih dahulu sebelum melanjutkan ke tahap berikutnya', icon: "error", confirmButtonColor: "#3e3a8e", }); this.setState({ activeStep: "4" }); this.handleAutoSave(this.state.dataPelanggaran, empat) } else { this.setState({ activeStep: "5" }); this.handleAutoSave(this.state.dataPelanggaran, lima) } } validasiSanksiOn6 = (empat, enam) => () => { const dataPelanggaran = this.state.dataPelanggaran if (dataPelanggaran?.data === undefined) { swal.fire({ title: "Penetapan Jenis Pelanggaran belum diisi", icon: "error", html: 'Mohon diisi terlebih dahulu sebelum melanjutkan ke tahap berikutnya', confirmButtonColor: "#3e3a8e", }); this.setState({ activeStep: "4" }); this.handleAutoSave(this.state.dataPelanggaran, empat) } else { this.setState({ activeStep: "6" }); this.handleAutoSave(this.state.dataPelanggaran, enam) } } validation = (activeStep) => { const dataUpload = this.state.dataUpload const dataPelanggaran = this.state.dataPelanggaran if (dataUpload?.tidakPerluTMTCheck === true || dataUpload?.awalTMT === undefined || dataUpload?.awalTMT === "" || dataUpload?.akhirTMT === undefined || dataUpload?.akhirTMT === "") { if ( dataUpload?.nomorSanksi === undefined || dataUpload?.nomorSanksi === "" || dataUpload?.keterangan === undefined || dataUpload?.keterangan === "" || // dataUpload?.awalsanksi === undefined || dataUpload?.awalsanksi === "" || dataUpload?.listSanksi === undefined || dataUpload?.listSanksi === null || dataUpload?.files === undefined || dataUpload?.files.length === 0 || dataUpload?.files === null || // dataUpload?.terimaSuratSanksi === undefined || dataUpload?.terimaSuratSanksi === "" || // dataUpload?.tglAkhirKeberatan === undefined || dataUpload?.tglAkhirKeberatanbe === "" || dataUpload?.filesTandaTerimaSS === undefined || dataUpload?.filesTandaTerimaSS.length === 0 || dataUpload?.filesTandaTerimaSS === null // dataPelanggaran?.data === undefined ) { swal.fire({ title: "Form Wajib Diisi", icon: "error", confirmButtonColor: "#3e3a8e", }); this.setState({ activeStep: "7" }); } else { this.setState({ activeStep: "7" }); } } else { if ( dataUpload?.nomorSanksi === undefined || dataUpload?.nomorSanksi === "" || dataUpload?.keterangan === undefined || dataUpload?.keterangan === "" || dataUpload?.awalTMT === undefined || dataUpload?.awalTMT === "" || dataUpload?.akhirTMT === undefined || dataUpload?.akhirTMT === "" || dataUpload?.listSanksi === undefined || dataUpload?.listSanksi === null || dataUpload?.files === undefined || dataUpload?.files.length === 0 || dataUpload?.files === null || dataUpload?.terimaSuratSanksi === undefined || dataUpload?.terimaSuratSanksi === "" || dataUpload?.tglAkhirKeberatan === undefined || dataUpload?.tglAkhirKeberatan === "" || dataUpload?.filesTandaTerimaSS === undefined || dataUpload?.filesTandaTerimaSS.length === 0 || dataUpload?.filesTandaTerimaSS === null // dataPelanggaran?.data === undefined ) { swal.fire({ title: "Form Wajib Diisi", icon: "error", confirmButtonColor: "#3e3a8e", }); this.setState({ validationForm: true }); this.setState({ activeStep: "7" }); } else { this.setState({ activeStep: "7" }); } } } validasiDone = () => { const dataUpload = this.state.dataUpload const dataPelanggaran = this.state.dataPelanggaran if (dataUpload?.tidakPerluTMTCheck === true || dataUpload?.awalTMT === undefined || dataUpload?.awalTMT === "" || dataUpload?.akhirTMT === undefined || dataUpload?.akhirTMT === "") { if ( dataUpload?.nomorSanksi === undefined || dataUpload?.nomorSanksi === "" || dataUpload?.keterangan === undefined || dataUpload?.keterangan === "" || // dataUpload?.awalsanksi === undefined || dataUpload?.awalsanksi === "" || dataUpload?.listSanksi === undefined || dataUpload?.listSanksi === null || dataUpload?.files === undefined || dataUpload?.files.length === 0 || dataUpload?.files === null || // dataUpload?.terimaSuratSanksi === undefined || dataUpload?.terimaSuratSanksi === "" || // dataUpload?.tglAkhirKeberatan === undefined || dataUpload?.tglAkhirKeberatanbe === "" || dataUpload?.filesTandaTerimaSS === undefined || dataUpload?.filesTandaTerimaSS.length === 0 || dataUpload?.filesTandaTerimaSS === null // dataPelanggaran?.data === undefined ) { swal.fire({ title: "Data belum lengkap", icon: "error", html: 'Mohon diisi terlebih dahulu sebelum melanjutkan ke tahap berikutnya', confirmButtonColor: "#3e3a8e", }); this.setState({ activeStep: "6" }); } else { this.done() } } else { if ( dataUpload?.nomorSanksi === undefined || dataUpload?.nomorSanksi === "" || dataUpload?.keterangan === undefined || dataUpload?.keterangan === "" || dataUpload?.awalTMT === undefined || dataUpload?.awalTMT === "" || dataUpload?.akhirTMT === undefined || dataUpload?.akhirTMT === "" || dataUpload?.listSanksi === undefined || dataUpload?.listSanksi === null || dataUpload?.files === undefined || dataUpload?.files.length === 0 || dataUpload?.files === null || dataUpload?.terimaSuratSanksi === undefined || dataUpload?.terimaSuratSanksi === "" || dataUpload?.tglAkhirKeberatan === undefined || dataUpload?.tglAkhirKeberatan === "" || dataUpload?.filesTandaTerimaSS === undefined || dataUpload?.filesTandaTerimaSS.length === 0 || dataUpload?.filesTandaTerimaSS === null // dataPelanggaran?.data === undefined ) { swal.fire({ title: "Data belum lengkap", html: 'Mohon diisi terlebih dahulu sebelum melanjutkan ke tahap berikutnya', icon: "error", confirmButtonColor: "#3e3a8e", }); this.setState({ activeStep: "6" }); } else { this.done() } } } handleOpenAlert = () => { Swal.fire({ icon: 'error', title: 'Oops...', html: 'Maaf anda tidak memiliki akses untuk menyelesaikan

proses ini.

', confirmButtonColor: "#3e3a8e", confirmButtonText: 'Oke' }) }; render() { const { dataUpload, dataPelanggaran, pelaporan, dataSuratBA, thisclose, daftarPeserta } = this.state return ( {/*
*/}
Penetapan Sanksi

Detail Laporan

{pelaporan.data ? : }

Status Laporan


Hasil Evaluasi

{pelaporan.data ? ( ) : ( )}

Penetapan Jenis Pelanggaran


Penetapan Sanksi

{this.state.listSanksi && }
(this.componentRef = el)} query={this.props.query} handleAutoSave={this.handleAutoSave} dataPelanggaran={this.state.dataPelanggaran} setDataSuratBA={this.setDataSuratBA} dataLaporan={pelaporan} dataSuratBA={dataSuratBA} />
{this.props?.user?.role.id === 2024 ? : { return }} content={() => this.componentRef} /> }

Ringkasan

{pelaporan.data ? : } Surat Berita Acara: {this.props.user?.role?.id === 2024 ? : { return }} content={() => this.componentRef} /> }
(this.componentRef = el)} query={this.props.query} handleAutoSave={this.handleAutoSave} dataPelanggaran={this.state.dataPelanggaran} setDataSuratBA={this.setDataSuratBA} dataLaporan={pelaporan} dataSuratBA={dataSuratBA} />

{/* */}
); } } const mapStateToProps = (state) => ({ user: state.user, token: state.token }); export default connect(mapStateToProps)(ProsesSanksi);