Эх сурвалжийг харах

surat BA , add peserta public 65%

andi 2 жил өмнө
parent
commit
11b8747a87

+ 2 - 2
actions/autosave.js

@@ -1,6 +1,6 @@
 import axios from "@/config/axios";
 
-export const getAutoSave = async ({ token, laporan, sanksi, id }) => {
+export const getAutoSave = async ({ laporan, sanksi, id }) => {
     try {
         let url = "";
         if (laporan) {
@@ -9,7 +9,7 @@ export const getAutoSave = async ({ token, laporan, sanksi, id }) => {
         if (sanksi) {
             url += `/auto/save/${id}?sanksi=true`;
         }
-        const res = await axios.get(url, { headers: { Authorization: token } });
+        const res = await axios.get(url);
         return res.data;
     } catch (error) {
         console.log("error", error);

+ 36 - 0
actions/public.js

@@ -0,0 +1,36 @@
+import { get, post, del, put } from "../config/request";
+import axiosAPI from "../config/axios";
+import { createLog } from "./log";
+
+
+export const createAddPeserta = async (token, data) => {
+    try {
+        const res = await axiosAPI.post('/public/sanksi/add-peserta-pleno', data, { headers: { Authorization: token } });
+        return res.data;
+    } catch (error) {
+        console.log("error", error.response.data);
+        return false;
+    }
+};
+export const getOneLaporanPublic = async (id, query = {}) => {
+    try {
+        let url = `public/laporan/${id}`;
+        if (query != null) {
+            const { aktif, all } = query;
+            url += "?";
+            const parseURL = [];
+            if (all) {
+                parseURL.push(`all=true`);
+            }
+            if (aktif === false) {
+                parseURL.push(`aktif=false`);
+            }
+            url += parseURL.join("&");
+        }
+        const res = await axiosAPI.get(url);
+        return res.data;
+    } catch (error) {
+        console.log("error", error);
+        return false;
+    }
+};

+ 18 - 7
components/Sanksi/BeritaAcara_A.js

@@ -51,31 +51,39 @@ class BeritaAcara extends Component {
     setDataSuratBA = () => {
         this.props.setDataSuratBA(this.state);
     }
+    handleAutoSave = () => {
+        this.props.handleAutoSave()
+    }
     isEditTempat = () => {
         this.setState({
             isEditTempat: !this.state.isEditTempat,
         })
+        this.handleAutoSave()
     }
     isEditTanggal = () => {
         this.setState({
             isEditTanggal: !this.state.isEditTanggal,
         })
+        this.handleAutoSave()
     }
     isEditNamaPeserta = () => {
         this.setState({
             isEditNamaPeserta: !this.state.isEditNamaPeserta,
         })
+        this.handleAutoSave()
 
     }
     isEditTemuanLain = () => {
         this.setState({
             isEditTemuanLain: !this.state.isEditTemuanLain,
         })
+        this.handleAutoSave()
     }
     isEditKeberatan = () => {
         this.setState({
             isEditKeberatan: !this.state.isEditKeberatan,
         })
+        this.handleAutoSave()
     }
     isEditMeringankan = () => {
         this.setState({
@@ -86,42 +94,49 @@ class BeritaAcara extends Component {
         this.setState({
             isEditSanksi: !this.state.isEditSanksi,
         })
+        this.handleAutoSave()
     }
     updateValueTempat = () => {
         this.setState({
             isEditTempat: false,
             tempat: this.refs.inputTempat.value
         }, this.setDataSuratBA)
+        this.handleAutoSave()
     }
     updateValueNamaPeserta = () => {
         const addNamaPeserta = this.refs.inputNamaPeserta.value
         this.setState({
             namaPeserta: [...this.state.namaPeserta, addNamaPeserta]
         }, this.setDataSuratBA)
+        this.handleAutoSave()
     }
     updateValueTemuanLain = () => {
         const addTemuanLain = this.refs.inputTemuan.value
         this.setState({
             temuanLain: [...this.state.temuanLain, addTemuanLain]
         }, this.setDataSuratBA)
+        this.handleAutoSave()
     }
     updateValueMemringankan = () => {
         const addMeringankan = this.refs.inputMeringankan.value
         this.setState({
             meringankan: [...this.state.meringankan, addMeringankan]
         }, this.setDataSuratBA)
+        this.handleAutoSave()
     }
     updateValueMemberatkan = () => {
         const addKeberatan = this.refs.inputMemberatkan.value
         this.setState({
             memberatkan: [...this.state.memberatkan, addKeberatan]
         }, this.setDataSuratBA)
+        this.handleAutoSave()
     }
     updateValueSanksi = () => {
         this.setState({
             isEditSanksi: false,
             sanksi: this.refs.inputSanksi.value
         }, this.setDataSuratBA)
+        this.handleAutoSave()
     }
 
     sigPad = []
@@ -138,7 +153,7 @@ class BeritaAcara extends Component {
     render() {
         const { dataPelanggaran, dataLaporan } = this.props
         const { isEditTempat, tempat, isEditTanggal, tanggal, setTanggal, namaPeserta, isEditNamaPeserta, simpulan, isEditTemuanLain, temuanLain, memberatkan, isEditKeberatan, isEditMeringankan, meringankan, sanksi, isEditSanksi, trimmedDataURL } = this.state
-        console.log(this.state.tempat)
+
         return (
             <div>
                 <div className=' content-heading border-radius-login'>
@@ -160,10 +175,6 @@ class BeritaAcara extends Component {
                 <div style={{ display: "none" }}>
                     <ComponentToPrint ref={el => (this.componentRef = el)} query={this.props.query} dataPelanggaran={this.props.dataPelanggaran} dataSuratBA={this.props.dataSuratBA} />
                 </div>
-
-
-
-
                 <div className='page'>
                     <page>
                         <div className='BA-logo'>
@@ -202,7 +213,7 @@ class BeritaAcara extends Component {
                                             defaultValue=""
                                             ref="inputTempat" />
                                         <button className='bg-transparent button-transparent border-0 fas fa-times-circle text-danger' onClick={this.isEditTempat} />
-                                        <button className='bg-transparent button-transparent border-0 fas fa-check-circle text-success' onClick={this.updateValueTempat} />
+                                        <button className='bg-transparent button-transparent border-0 fas fa-check-circle text-success' onClick={() => { this.updateValueTempat(), this.handleAutoSave() }} />
                                     </span>
                                     :
                                     <span onClick={this.isEditTempat}>&nbsp;{tempat}</span>
@@ -275,7 +286,7 @@ class BeritaAcara extends Component {
                                     {isEditTemuanLain ?
                                         <span>
                                             <input style={{ height: "30px", width: "250px" }} type='textarea' defaultValue={""} ref="inputTemuan" />
-                                            <button className='bg-transparent button-transparent border-0 fas fa-check-circle text-success' onClick={() => { this.updateValueTemuanLain(), this.isEditTemuanLain() }} />
+                                            <button className='bg-transparent button-transparent border-0 fas fa-check-circle text-success' onClick={() => { this.updateValueTemuanLain(), this.isEditTemuanLain(), this.handleAutoSave() }} />
                                             <button className='bg-transparent button-transparent border-0 fas fa-times-circle text-danger' onClick={this.isEditTemuanLain} />
                                         </span>
 

+ 1 - 0
components/Sanksi/TablePenetapanSanksi.js

@@ -96,6 +96,7 @@ export class TablePenetapanSanksi extends Component {
 												<input type="checkbox" value={jp._id} onChange={(evt) => {
 													this.onHandleChange(evt)
 													this.setLabelSanksi(evt, jp.label_sanksi)
+													this.props.handleAutoSave()
 												}} />
 												<span className="fa fa-check"></span>
 											</label>

+ 8 - 8
components/Sanksi/UploadSurat.js

@@ -134,13 +134,13 @@ export class UploadSurat extends Component {
 		this.setState(saveData)
 	}
 
-	handleAutoSave = async () => {
-		const { query, token } = this.props;
-		const { id } = query;
-		const { nomorSanksi, keterangan } = this.state
-		const saveData = await inputAutoSave({ data: { penetapanSanksi: { nomorSanksi, keterangan } }, token, id, laporan: true })
+	// handleAutoSave = async () => {
+	// 	const { query, token } = this.props;
+	// 	const { id } = query;
+	// 	const { nomorSanksi, keterangan } = this.state
+	// 	const saveData = await inputAutoSave({ data: { penetapanSanksi: { nomorSanksi, keterangan } }, token, id, laporan: true })
 
-	}
+	// }
 
 	uploadFiles = (e) => {
 		e.preventDefault();
@@ -254,13 +254,13 @@ export class UploadSurat extends Component {
 				<FormGroup row>
 					<label className="col-md-2 col-form-label">Nomor Surat:</label>
 					<div className="col-md-10">
-						<Input type="text" value={this.state.nomorSanksi} onChange={(e) => { this.setNomorSanksi(e); this.handleAutoSave() }} />
+						<Input type="text" value={this.state.nomorSanksi} onChange={(e) => { this.setNomorSanksi(e); this.props.handleAutoSave() }} />
 					</div>
 				</FormGroup>
 				<FormGroup row className="mt-3">
 					<label className="col-md-2 col-form-label">Keterangan</label>
 					<div className="col-md-10">
-						<Input type="textarea" value={this.state.keterangan} onChange={(e) => { this.setKeterangan(e); this.handleAutoSave() }} required />
+						<Input type="textarea" value={this.state.keterangan} onChange={(e) => { this.setKeterangan(e); this.props.handleAutoSave() }} required />
 					</div>
 				</FormGroup>
 				<FormGroup row>

+ 15 - 6
pages/app/sanksi/proses.js

@@ -17,7 +17,8 @@ import { connect } from "react-redux";
 import Loader from "@/components/Common/Loader";
 import { ToastContainer, toast } from "react-toastify";
 import BeritaAcara from "@/components/Sanksi/BeritaAcara_A";
-import { autosave } from "@/actions/autosave";
+import { getAutoSave, inputAutoSave } from "@/actions/autosave";
+
 
 
 const stepNavitemStyle = {
@@ -48,9 +49,18 @@ class ProsesSanksi extends Component {
 		const { id } = query;
 		const pelaporan = await getOneLaporan(token, id);
 		const { data: listSanksi } = await getPelanggaranSanksi(token)
-		this.setState({ pelaporan, listSanksi });
+		const getDataSave = await getAutoSave({ token, id, laporan: true });
+		const saveData = getDataSave.data?.PenetapanSanksi;
+		this.setState({ pelaporan, listSanksi, saveData });
 	};
 
+	handleAutoSave = async () => {
+		const { query, token } = this.props;
+		const { id } = query;
+		const { dataSuratBA, dataUpload, dataPelanggaran } = this.state
+		await inputAutoSave({ data: { PenetapanSanksi: { dataSuratBA, dataUpload, dataPelanggaran } }, token, id, laporan: true })
+
+	}
 	done = async (e) => {
 		const toastid = toast.loading("Please wait...");
 		try {
@@ -131,7 +141,6 @@ class ProsesSanksi extends Component {
 
 	render() {
 		const { dataUpload, dataPelanggaran, pelaporan, dataSuratBA } = this.state;
-		console.log(dataSuratBA)
 		return (
 			<ContentWrapper unwrap>
 				{/* <Header /> */}
@@ -259,7 +268,7 @@ class ProsesSanksi extends Component {
 										<TabPane tabId="3">
 											<div className="pt-3 mb-3">
 												<h2>Penetapan Jenis Pelanggaran</h2>
-												<TablePenetapanSanksi handleDelegasi={this.handleDelegasi} setCheckedData={this.setCheckedData} dataPelanggaran={dataPelanggaran.data} data={pelaporan.data} />
+												<TablePenetapanSanksi handleDelegasi={this.handleDelegasi} handleAutoSave={this.handleAutoSave} setCheckedData={this.setCheckedData} dataPelanggaran={dataPelanggaran.data} data={pelaporan.data} />
 											</div>
 											<hr />
 											<div className="d-flex">
@@ -273,7 +282,7 @@ class ProsesSanksi extends Component {
 										</TabPane>
 										<TabPane tabId="4">
 											<Card>
-												<BeritaAcara query={this.props.query} dataPelanggaran={dataPelanggaran.data} setDataSuratBA={this.setDataSuratBA} dataLaporan={pelaporan} dataSuratBA={dataSuratBA} />
+												<BeritaAcara query={this.props.query} handleAutoSave={this.handleAutoSave} dataPelanggaran={dataPelanggaran.data} setDataSuratBA={this.setDataSuratBA} dataLaporan={pelaporan} dataSuratBA={dataSuratBA} />
 											</Card>
 											<div className="d-flex">
 												<Button color className="btn-login color-3e3a8e" onClick={this.toggleStep("3")}>
@@ -287,7 +296,7 @@ class ProsesSanksi extends Component {
 										<TabPane tabId="5">
 											<div className="pt-3 mb-3">
 												<h2>Penetapan Sanksi</h2>
-												{this.state.listSanksi && <UploadSurat setUploadSuratSanksi={this.setUploadSuratSanksi} listSanksi={this.state.listSanksi} dataPelanggaran={dataPelanggaran.data} query={this.props.query} />}
+												{this.state.listSanksi && <UploadSurat setUploadSuratSanksi={this.setUploadSuratSanksi} listSanksi={this.state.listSanksi} dataPelanggaran={dataPelanggaran.data} query={this.props.query} handleAutoSave={this.handleAutoSave} />}
 											</div>
 											<hr />
 											<div className="d-flex">

+ 166 - 0
pages/signature/pleno-sanksi/[id].js

@@ -0,0 +1,166 @@
+import React, { Component } from 'react';
+import BasePage from "@/components/Layout/BasePage";
+// import ComponentToPrint from "./SuratBA";
+// import ComponentToPrint from "../../components/sanksi/SuratBA";
+import { getOneLaporan, updateLaporan } from "@/actions/pelaporan";
+import { withRouter } from 'next/router';
+import { getOneLaporanPublic } from '../../../actions/public';
+import { getAutoSave } from "@/actions/autosave";
+
+
+
+class PlenoSanksi extends Component {
+    constructor(props) {
+        super(props);
+        this.state = {
+            dataLaporan: {},
+        }
+    }
+    static getInitialProps = async ({ query }) => {
+        return { query };
+
+    };
+
+    componentDidMount = async () => {
+        const { query } = this.props;
+        const { id } = query;
+        const dataLaporan = await getOneLaporanPublic(id);
+        const getDataSave = await getAutoSave({ id, laporan: true });
+        const dataSuratBA = getDataSave.data?.PenetapanSanksi?.dataSuratBA;
+        const dataPelanggaran = getDataSave.data?.PenetapanSanksi?.dataPelanggaran.data;
+        this.setState({ dataLaporan, dataSuratBA, dataPelanggaran });
+    };
+
+
+
+
+    render() {
+        const { dataPelanggaran, dataLaporan, dataSuratBA } = this.state
+        console.log(dataPelanggaran)
+
+        return (
+            <div className='page'>
+                <div className='BA-logo'>
+                    <img className='BA-logo' src="/static/img/logo-single-1-login.png" alt="logo" />
+                </div>
+                <h3 className='BA-header'>LAPORAN HASIL EVALUASI DAN PEMBAHASAN</h3>
+                {dataLaporan.data && (<h3 className='BA-header'>{dataLaporan.data.pt.nama}</h3>)}
+                <div className='body'>
+                    <p className='body'>
+                        Pada hari ini
+                        {dataSuratBA?.setTanggal === true ?
+                            <span > {moment(dataSuratBA.tanggal).locale("id").format("dddd")}, tanggal&nbsp;{moment(dataSuratBA.tanggal).format("D")}&nbsp;bulan&nbsp;{moment(dataSuratBA.tanggal).locale("id").format("MMMM")} tahun &nbsp;{moment(dataSuratBA.tanggal).format("YYYY")},</span> :
+                            <span> &nbsp;......................... &nbsp;</span>
+                        }
+                        &nbsp;bertempat di
+                        {dataSuratBA?.tempat === "[Mohon Diisi]" ?
+                            <span>Belum Diisi Oleh Dikti</span>
+                            :
+                            <span>
+                                &nbsp;{dataSuratBA?.tempat}
+                            </span>
+                        }
+                        ,
+                        telah dilakukan rapat evaluasi dan pembahasan dugaan pelanggaran penyelenggaraan oleh perguruan tinggi dan/atau badan penyelenggara {dataLaporan.data && (<span>{dataLaporan.data.pt.nama}</span>)}, yang dihadiri oleh:
+
+                    </p>
+                    <div className='BA-body'>
+                        <ol>
+                            {dataSuratBA?.namaPeserta ?
+                                <span>
+                                    {dataSuratBA.namaPeserta.map((value) => <li>{value}</li>)}
+                                </span>
+                                :
+                                <span>........</span>
+                            }
+
+                        </ol>
+                    </div>
+                </div>
+                <p>
+                    Berdasarkan rapat evaluasi dan pembahasan dugaan pelanggaran penyelenggaraan oleh perguruan tinggi dan/atau badan penyelenggara {dataLaporan.data && (<span>{dataLaporan.data.pt.nama}</span>)}, disampaikan sebagai berikut:
+                </p>
+                <div className='body'>
+                    <ol>
+                        <li>Telah dibacakan Berita Acara Evaluasi Kinerja Perguruan Tinggi {dataLaporan.data && (<span>{dataLaporan.data.pt.nama}</span>)}, tanggal
+                            {dataSuratBA?.setTanggal === true ?
+                                <span> &nbsp;{moment(dataSuratBA.tanggal).format("DD-MM-YYYY")}</span>
+                                :
+                                <span> &nbsp;....... &nbsp;</span>
+                            }</li>
+                        <li>Telah dilakukan pembahasan rekomendasi mengenai fakta-fakta yang ditemukan Tim EKPT Ditjen Diktiristek, dengan temuan sebagai berikut:</li>
+                        <table className='table-a'>
+                            <thead>
+                                <tr>
+                                    <th rowspan="2">NO</th>
+                                    <th rowspan="2">NAMA DAN IZIN PRODI</th>
+                                    <th colspan="3">PELANGGARAN TERHADAP PERMENDIKBUD NO.7 TAHUN 2020</th>
+                                    <th rowspan="2">SIMPULAN</th>
+                                    <th rowspan="2">REKOMENDASI</th>
+                                </tr>
+                                <tr>
+                                    <th>PASAL</th>
+                                    <th>BUTIR PELANGGARAN</th>
+                                    <th>DESKRIPSI PELANGGARAN</th>
+                                </tr>
+                            </thead>
+                            <tbody>
+                                {dataPelanggaran
+                                    ? dataPelanggaran.map((e, i) => (
+                                        <tr key={e._id}>
+                                            <td>{++i}</td>
+                                            {dataLaporan.data && (<td className='BA-header'>{dataLaporan.data.pt.nama}</td>)}
+                                            <td>{e.pasal}</td>
+                                            <td>{e.butir_pelanggaran}</td>
+                                            <td>{e.pelanggaran}</td>
+                                            <td >[Mohon Diisi]</td>
+                                            <td >[Mohon Diisi]</td>
+                                        </tr>
+
+                                    ))
+                                    : ""}
+                            </tbody>
+                        </table>
+                        <li>Temuan Lain:
+                            <ol type="a">
+                                {dataSuratBA?.temuanLain ?
+                                    <span>{dataSuratBA.temuanLain.map((value) => <li>{value}</li>)}</span>
+                                    : "Belum Diisi"}
+                            </ol>
+                        </li>
+                        <li>Hal-hal yang memberatkan, sebagai berikut:
+                            <ol type="a">
+                                {dataSuratBA?.memberatkan ?
+                                    <span>{dataSuratBA.memberatkan.map((value) => <li>{value}</li>)}</span>
+                                    : "Belum Diisi"}
+                            </ol>
+                        </li>
+                        <li>hal-hal yang meringankan, sebagai berikut:
+                            <ol type="a">
+                                {dataSuratBA?.meringankan ?
+                                    <span>{dataSuratBA.meringankan.map((value) => <li>{value}</li>)}</span>
+                                    : "Belum Diisi"}
+                            </ol>
+                        </li>
+                        <li>
+                            Berdasarkan pembahasan yang dilakukan, disepakati untuk merekomendasikan <strong >“Sanksi Administratif berupa&nbsp;
+                                {dataSuratBA?.sanksi === "[Mohon Diisi]" ?
+                                    "Belum Diisi Oleh Dikti"
+                                    : <span>{dataSuratBA?.sanksi}</span>}
+                                ”.</strong>
+                        </li>
+                    </ol>
+                </div>
+                <p className='body'>
+                    Demikian Laporan Evaluasi dan Pembahasan ini dibuat dengan sesungguhnya dan telah dibaca dan dicermati oleh peserta rapat yang hadir.
+                </p>
+            </div>
+        );
+    }
+
+}
+
+PlenoSanksi.Layout = BasePage;
+export default PlenoSanksi;
+
+