andi před 2 roky
rodič
revize
dbaba2eeeb

+ 16 - 3
actions/log.js

@@ -52,10 +52,23 @@ export const createLog = async (token, data) => {
 	}
 };
 
-export const getLog2 = async (token) => {
+export const getLog2 = async (token, query = {}) => {
 	try {
-		const res = await axios.get(`/log`, { headers: { Authorization: token } });
-		return res.data;
+		let url = "/log";
+		if (query != null) {
+			const { fromDate, toDate } = query;
+			url += "?";
+			const parseURL = [];
+			if (fromDate) {
+				parseURL.push(`from_date=${fromDate}`);
+			}
+			if (toDate) {
+				parseURL.push(`to_date=${toDate}`);
+			}
+			url += parseURL.join("&")
+		}
+		const res = await axios.get(url, { headers: { Authorization: token } });
+		return res.data
 	} catch (error) {
 		console.log("error", error);
 		return false;

+ 1 - 1
actions/pelaporan.js

@@ -105,7 +105,7 @@ export const createLaporanPublic = async (token, data, _csrf) => {
 		return res.data;
 	} catch (error) {
 		console.log("error", error.response.data);
-		return false;
+		return { error: error.response.data };
 	}
 };
 

+ 1 - 1
components/Main/Login.js

@@ -75,7 +75,7 @@ class Login extends Component {
         this.props.setUser(auth.data.user);
         axiosAPI.defaults.headers.common["Authorization"] = auth.data.token;
         if (auth.data.user.role.id === 2022) {
-          await createLog(auth.data.token, { aktivitas: "Berhasil Login", _csrf: _csrf });
+          await createLog(auth.data.token, { aktivitas: "PT berhasil Login", _csrf: _csrf });
           return location.href = '/pt/pemantauan';
         } else if ([2020, 2021, 2023, 2024].includes(auth.data.user.role.id)) {
           await createLog(auth.data.token, { aktivitas: "Berhasil Login", _csrf: _csrf });

+ 2 - 2
components/Main/TableSanksi.js

@@ -41,8 +41,8 @@ function TableSanksi({ listData, to, linkName }) {
 														<div className="media-body d-flex">
 															<div>
 																{/* <h4 className="m-0">{data.laporan.pt.nama}</h4> */}
-																<h4 className="m-0">{data.laporan.pt.nama.length > 25 ? data.laporan.pt.nama.substring(0, 25) + "..." : data.laporan.pt.nama}</h4>
-																<p>{data.keterangan.length > 30 ? data.keterangan.substring(0, 30) + "..." : data.keterangan}</p>
+																<h4 className="m-0">{ data.laporan.pt.nama}</h4>
+																<p>{data.keterangan}</p>
 															</div>
 														</div>
 													</div>

+ 9 - 8
components/Main/Timeline.js

@@ -4,6 +4,7 @@ import { useSelector } from "react-redux";
 function Timeline({ data, noFile = false, noJadwal = false }) {
 	const date = data && [...new Set(data.map((e) => moment(e.createdAt).format("DD MMMM YYYY")))];
 	const user = useSelector((state) => state.user);
+	console.log(data)
 	return (
 		<ul className="timeline-alt">
 			{date.map((value) => (
@@ -13,9 +14,9 @@ function Timeline({ data, noFile = false, noJadwal = false }) {
 						.filter((e) => moment(e.createdAt).format("DD MMMM YYYY") === value)
 						.map((data, i) => (
 							<>
-								<li className={data.user.role?.id === 2022 ? "timeline-inverted" : ""}>
-									<div className={`timeline-badge ${data.user.role?.id === 2022 ? " danger" : "info"}`}>
-										<em className={`fas fa-${data.user.role?.id === 2022 ? "graduation-cap" : "file"}`}></em>
+								<li className={data?.user?.role?.id === 2022 ? "timeline-inverted" : ""}>
+									<div className={`timeline-badge ${data?.user?.role?.id === 2022 ? " danger" : "info"}`}>
+										<em className={`fas fa-${data?.user?.role?.id === 2022 ? "graduation-cap" : "file"}`}></em>
 									</div>
 
 									<div className="timeline-card">
@@ -25,12 +26,12 @@ function Timeline({ data, noFile = false, noJadwal = false }) {
 												<div className="d-flex align-items-center mb-3">
 													<img
 														className="mr-3 rounded-circle thumb48"
-														src={`/static/img${data.user.role?.id === 2022 ? "/univ-avatar.png" : data.user.isPublic ? "/user/user.png" : "/logo-single.png"}`}
+														src={`/static/img${data.user?.role?.id === 2022 ? "/univ-avatar.png" : data.user?.isPublic ? "/user/user.png" : "/logo-single.png"}`}
 														alt="Avatar"
 													/>
 													<p className="m-0">
 														<strong>
-															{!data.user.isPrivate && data.user.nama ? data.user.nama : "Rahasia"} - {data.user.isPublic ? "Umum" : data.user.role.nama}
+															{!data.user?.isPrivate && data.user?.nama ? data.user?.nama : "Rahasia"}  {data.user?.isPublic ? "Umum" : data.user?.role?.nama}
 														</strong>
 														<br />
 														{data.keterangan}
@@ -45,7 +46,7 @@ function Timeline({ data, noFile = false, noJadwal = false }) {
 														<p className="text-muted m-0">{moment(data.createdAt).format("hh:mm")}</p>
 													</p>
 												</div>
-												{!data.user.isPublic && user?.role.id !== 2022 && data.jawaban && (
+												{!data.user?.isPublic && user?.role?.id !== 2022 && data.jawaban && (
 													<>
 														<p className="text-muted my-2">Jawaban</p>
 														<div className="p-2">
@@ -53,7 +54,7 @@ function Timeline({ data, noFile = false, noJadwal = false }) {
 														</div>
 													</>
 												)}
-												{!data.user.isPublic && data.jadwal && (
+												{!data.user?.isPublic && data.jadwal && (
 													<>
 														<p className="text-muted my-2">Jadwal Pemeriksaan</p>
 														<div className="p-2">
@@ -61,7 +62,7 @@ function Timeline({ data, noFile = false, noJadwal = false }) {
 														</div>
 													</>
 												)}
-												{!data.user.isPublic && data.dokumen?.length ? (
+												{!data.user?.isPublic && data.dokumen?.length ? (
 													<>
 														<p className="text-muted my-2">Dokumen</p>
 														{data.dokumen.map((e) => (

+ 3 - 3
components/NaikSanksi/TableLaporan.js

@@ -50,7 +50,7 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
 												<div className="media align-items-center">
 													<div className="media-body d-flex">
 														<div>
-														<p  style={{ display: "none" }}>{data.createdAt}</p>
+															<p style={{ display: "none" }}>{data.createdAt}</p>
 															<h4>{data.laporan.no_laporan}</h4>
 															<p>{moment(data.createdAt).format("DD-MMMM-YYYY")}</p>
 														</div>
@@ -62,7 +62,7 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
 											</td>
 											<td className="col-md-6">
 												<div>
-													<h4 className="m-0">{data.laporan.pt.nama.length > 64 ? data.laporan.pt.nama.substring(0, 64) + "..." : data.laporan.pt.nama}</h4>
+													<h4 className="m-0">{data.laporan.pt.nama}</h4>
 													<p>{data.laporan.keterangan.length > 100 ? data.laporan.keterangan.substring(0, 100) + "..." : data.laporan.keterangan}</p>
 												</div>
 											</td>
@@ -72,7 +72,7 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
 													<h4>
 														Sanksi Administratif : {getLabelSanksi(data.sanksi, "level") === 3 ? "Berat" : getLabelSanksi(data.sanksi, "level") === 2 ? "Sedang" : "Ringan"}
 													</h4>
-													<p>{data.keterangan.length>100?data.keterangan.substring(0, 100) + "..." : data.keterangan}</p>
+													<p>{data.keterangan.length > 100 ? data.keterangan.substring(0, 100) + "..." : data.keterangan}</p>
 												</div>
 											</td>
 											{!noBy && <td>{data.user.isPrivate ? "" : data.user.nama}</td>}

+ 1 - 0
components/PT/DocPerbaikan/Riwayat.js

@@ -3,6 +3,7 @@ import moment from "moment";
 import { Card, CardHeader, CardBody, CardTitle } from "reactstrap";
 
 function Riwayat({ data }) {
+	console.log(data)
 	return (
 		<Card className="card-default">
 			<CardHeader>

+ 4 - 3
components/Pelaporan/TableLaporan.js

@@ -19,7 +19,7 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
                 </div>
                 {listData && (
                     <Datatable options={{
-                        responsive: false, ordering: true, 
+                        responsive: false, ordering: true,
                         // paging: false,
                         // searching:false,
                         // ordering: false,
@@ -45,7 +45,7 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
                                                 <div className="media align-items-center">
                                                     <div className="media-body d-flex">
                                                         <div>
-														<p  style={{ display: "none" }}>{data.createdAt}</p>
+                                                            <p style={{ display: "none" }}>{data.createdAt}</p>
                                                             <h4>{data.no_laporan}</h4>
                                                             <p>{moment(data.createdAt).format("DD-MM-YYYY")}</p>
                                                         </div>
@@ -75,7 +75,8 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
                                             ) : (
                                                 ""
                                             )}
-                                            {!noBy && <td>{data.user.isPrivate ? "" : data.user.nama}</td>}
+                                            {<td>{data.user?.isPrivate === true ? "" : data.user?.nama}</td>}
+                                
                                             <td>
                                                 <div className="ml-auto">
                                                     <Link

+ 1 - 1
components/PencabutanSanksi/Riwayat.js

@@ -17,7 +17,7 @@ function Riwayat({ data, role }) {
 	return (
 		<Card className="card-default">
 			<CardHeader>
-				<CardTitle>Riwayat</CardTitle>
+				<CardTitle>Riwayat Jawaban Pencabutan Sanksi</CardTitle>
 			</CardHeader>
 			<CardBody>
 				<Datatable options={{ responsive: true }}>

+ 3 - 3
components/PerpanjanganSanksi/TableLaporan.js

@@ -30,7 +30,7 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
 												<div className="media align-items-center">
 													<div className="media-body d-flex">
 														<div>
-														<p  style={{ display: "none" }}>{data.createdAt}</p>
+															<p style={{ display: "none" }}>{data.createdAt}</p>
 															<h4>{data.laporan.no_laporan}</h4>
 															<p>{moment(data.createdAt).format("DD-MMMM-YYYY")}</p>
 														</div>
@@ -54,7 +54,7 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
 														<div className="media-body d-flex">
 															<div>
 																<h4 className="m-0">{data.laporan.pt.nama.length > 64 ? data.laporan.pt.nama.substring(0, 64) + "..." : data.laporan.pt.nama}</h4>
-																<p className="w-105">{data.laporan.keterangan}</p>
+																<p >{data.keterangan.length > 100 ? data.keterangan.substring(0, 100) + "..." : data.keterangan}</p>
 															</div>
 														</div>
 													</div>
@@ -64,7 +64,7 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
 
 											<td>
 												{data.masa_berlaku?.to_date ? (<h4 className="m-0"> {moment(data.masa_berlaku?.from_date).format("DD MMMM YYYY")} - {moment(data.masa_berlaku?.to_date).format("DD MMMM YYYY")}</h4>) : (<h4 className="m-0">6 Bulan</h4>)}
-												<p className="w-105">{data.keterangan}</p>
+												<p >{data.keterangan}</p>
 											</td>
 											{!noBy && <td>{data.user.isPrivate ? "" : data.user.nama}</td>}
 											<td>

+ 12 - 26
components/RekomendasiDelegasi/TableLaporan.js

@@ -33,7 +33,7 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
 								<tr>
 									<th>No.Laporan</th>
 									<th>No.Sanksi</th>
-									<th>Deskripsi Laporan</th>
+									<th>Deskripcasdasi Laporan</th>
 									{status && <th>Status</th>}
 									{!noBy && <th>Dibuat Oleh</th>}
 									{/* <th>Created</th> */}
@@ -49,47 +49,33 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
 												<div className="media align-items-center">
 													<div className="media-body d-flex">
 														<div>
-														<p  style={{ display: "none" }}>{data.createdAt}</p>
+															<p style={{ display: "none" }}>{data.createdAt}</p>
 															<h4>{data.laporan.no_laporan}</h4>
 															<p>{moment(data.createdAt).format("DD-MMMM-YYYY")}</p>
 														</div>
 													</div>
 												</div>
 											</td>
-											<td>
-												{/* <td>{data.no_laporan}</td> */}
-												<div className="media align-items-center">
-													<div className="media-body d-flex">
-														<div>
-															<h4>{data.no_sanksi}</h4>
-														</div>
-													</div>
+											<td className=" col-md-3">
+												<div>
+													<h4>{data.no_sanksi}</h4>
 												</div>
 											</td>
 
 											<td className=" col-md-6">
-												<div className="table-desc">
-													<div className="media align-items-center">
-														<div className="media-body d-flex">
-															<div>
-																<h4 className="m-0">{data.laporan.pt.nama.length > 64 ? data.laporan.pt.nama.substring(0, 64) + "..." : data.laporan.pt.nama}</h4>
-																<p className="w-105">{data.laporan.keterangan}</p>
-															</div>
-														</div>
-													</div>
+												<div>
+													<h4 className="m-0">{data.laporan.pt.nama.length > 64 ? data.laporan.pt.nama.substring(0, 64) + "..." : data.laporan.pt.nama}</h4>
+													<p>{data.laporan.keterangan}</p>
 												</div>
 											</td>
-
-											{status ? (
-												<td className=" col-md-5">
+											<td className=" col-md-5">
+												<div>
 													<h4 className="m-0">{data.laporan.role_data === "dikti" ? "Ditindaklanjuti DIKTI" : "Delegasi Ke LLDIKTI"}</h4>
 													{/* {data.pelanggaran.map((e) => (<h2 className="w-105">Sanksi Administratif:  {e.label_sanksi}</h2>))} */}
 													Sanksi Administratif : {getLabelSanksi(data.sanksi, "level") === 3 ? "Berat" : getLabelSanksi(data.sanksi, "level") === 2 ? "Sedang" : "Ringan"}
+												</div>
 
-												</td>
-											) : (
-												""
-											)}
+											</td>
 											{!noBy && <td>{data.user.isPrivate ? "" : data.user.nama}</td>}
 											<td>
 												<div className="ml-auto">

+ 3 - 2
components/Riwayat/TableLaporan.js

@@ -14,7 +14,9 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
                             <thead>
                                 <tr>
                                     <th>No.Laporan</th>
-                                    <th>Tanggal Laporan</th>
+                                    <th style={{
+                                 whiteSpace:"nowrap",
+                                }}>Tanggal Laporan</th>
                                     <th>Deskripsi Laporan</th>
                                      <th>Status</th>
                                     {/* {!noBy && <th>Dibuat Oleh</th>} */}
@@ -31,7 +33,6 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
                                                         <div>
                                                             <p  style={{ display: "none" }}>{data.createdAt}</p>
                                                             <h4>{data.no_laporan}</h4>
-                                                            <p>{moment(data.createdAt).format("DD-MM-YYYY")}</p>
                                                         </div>
                                                     </div>
                                                 </div>

+ 46 - 6
components/Riwayat/TableRiwayat.js

@@ -14,15 +14,43 @@ class TableRiwayat extends Component {
         super(props);
         this.state = {
             dataRiwayat: "",
+            dataRiwayatsort:"",
+            fromDate: "",
+            toDate: "",
+            updateTable: false
         };
     }
     componentDidMount = async () => {
         const { token } = this.props;
-        const dataRiwayat = await getLog2(this.props.token);
+
+        const dataRiwayat = await getLog2(this.props.token)
         this.setState({ dataRiwayat });
     }
+    onFilter = async () => {
+        // const date1 = moment(this.state.fromDate).format("YYYY-MM-DD")
+        // const date2 = moment(this.state.toDate).format("YYYY-MM-DD")
+        // const dataRiwayat = await getLog2(this.props.token, { fromDate: date1, toDate: date2 })
+        // this.setState({ dataRiwayat });
+        this.setState({ updateTable: true });
+        setTimeout(() => {
+            this.setState({ updateTable: false });
+        }, 1);
+
+    }
+    componentDidUpdate = async () => {
+        const dataRiwayatsort = this.state
+        if (this.state.updateTable === true) {
+            const date1 = moment(this.state.fromDate).format("YYYY-MM-DD")
+            const date2 = moment(this.state.toDate).format("YYYY-MM-DD")
+            const dataRiwayat = await getLog2(this.props.token, { fromDate: date1, toDate: date2 })
+            this.setState({ dataRiwayatsort });
+            // this.setState({ dataRiwayat });
+        }
+    }
+
 
     render() {
+        console.log(this.state.dataRiwayat)
         return (
             <div className="card b ">
 
@@ -34,23 +62,35 @@ class TableRiwayat extends Component {
                             <Datetime
                                 timeFormat={false}
                                 inputProps={{ className: "form-control" }}
-                                value={"Default"}
+                                closeOnSelect={true}
+                                value={this.state.fromDate ? moment(this.state.fromDate).format("DD-MM-YYYY") : "DD/MM/YYYY"}
+                                onChange={(fromDate) => {
+                                    this.setState({ fromDate })
+                                }}
                             />
                         </span>
                         <span>
                             <Datetime
                                 timeFormat={false}
                                 inputProps={{ className: "form-control" }}
-                                value={"Default"}
+                                closeOnSelect={true}
+                                value={this.state.toDate ? moment(this.state.toDate).format("DD-MM-YYYY") : "DD/MM/YYYY"}
+                                onChange={(toDate) => {
+                                    this.setState({ toDate })
+                                }}
                             />
                         </span>
-                        <Button color= "info" className=" mt-4">Filter</Button>
+                        <Button color="info" className=" mt-4" onClick={this.onFilter}>Filter</Button>
 
                     </span>
                     {this.state.dataRiwayat && (
                         <Datatable options={{
-                            responsive: false, ordering: false, keys: false, lengthChange: false, searching: true, aLengthMenu: [500], paging: true, scrollX: true, scrollY: "370px",
-                            bordered: true, "pageLength": 100
+                            searching: true, 
+                            aLengthMenu: [500],
+                            paging: false,
+                            scrollX: true, scrollY: "370px",
+                            bordered: true,
+                            "pageLength": 10
                         }}>
                             <table className="table w-100" data-order='[[3, "desc"]]'>
                                 <thead>

+ 12 - 4
components/Sanksi/TableLaporan.js

@@ -9,18 +9,21 @@ function TableLaporan({ listData }) {
 			<div className="card-body card-over">
 				{listData && (
 					<Datatable options={{ responsive: false }}>
-						<table className="table w-100" data-order='[[0, "desc"]]'>
+						<table className="table w-100" data-order='[[3, "asc"]]'>
 							<thead>
 								<tr>
 									<th>No.Laporan</th>
 									<th>Deskripsi Laporan</th>
+									<th>Status TMT</th>
 									<th>Status</th>
-									{/* <th>Created</th> */}
-									<th></th>
+									<th>Aksi</th>
+
+
 								</tr>
 							</thead>
 							<tbody>
 								{listData.map((data) => {
+									console.log(data)
 									return (
 										<tr key={data._id}>
 											{/* <td>{data.no_laporan}</td> */}
@@ -28,7 +31,7 @@ function TableLaporan({ listData }) {
 												<div className="media align-items-center">
 													<div className="media-body d-flex">
 														<div>
-														<p  style={{ display: "none" }}>{data.createdAt}</p>
+															<p style={{ display: "none" }}>{data.createdAt}</p>
 															<h4>{data.no_laporan}</h4>
 															<p>{moment(data.createdAt).format("DD-MM-YYYY")}</p>
 														</div>
@@ -49,6 +52,11 @@ function TableLaporan({ listData }) {
 													</div>
 												</div>
 											</td>
+											<td>
+												{data.sanksi?.masa_berlaku ? (
+													new Date(data.sanksi?.masa_berlaku.to_date).getTime() + 86400000 > Date.now() ? <div className="badge badge-primary">Berlaku</div> : <div className="badge badge-warning">Tidak berlaku</div>
+												) : ""}
+											</td>
 											<td>{data.sanksi ? <div className="badge badge-green">Sudah ditetapkan</div> : <div className="badge badge-red">Belum ditetapkan</div>}</td>
 											{/* <td>{moment(data.createdAt).format("MM-DD-YYYY")}</td> */}
 											<td>

+ 15 - 4
components/Sanksi/UploadSurat.js

@@ -33,7 +33,7 @@ export class UploadSurat extends Component {
 			files: [],
 			nomorSanksi: "",
 			keterangan: "",
-			listSanksi: "",
+			listSanksi: null,
 			startDay: tmt_awal,
 			maxDay: "",
 			awalTMT: "",
@@ -143,8 +143,16 @@ export class UploadSurat extends Component {
 		// this.setState({ tmtCheck: !this.state.tmtCheck }, this.setUploadSuratSanksi);
 		this.state.tidakPerluTMTCheck = !this.state.tidakPerluTMTCheck
 		this.setUploadSuratSanksi()
+		if (this.state.tidakPerluTMTCheck) {
+			this.setState({ awalTMT: "", akhirTMT: "" })
+		}
 		// this.handleAutoSave()
 	}
+	setsanksi = () => {
+		if (!this.state.listSanksi?.find(z => z.value === "Sanksi Administratif Berat - Pencabutan izin Program Studi" || z.value === "Sanksi Administratif Berat - Pembubaran PTN atau pencabutan izin PTS")) {
+			this.setState({ awalTMT: "", akhirTMT: "" })
+		}
+	}
 	render() {
 		const { files, terimaSuratSanksi, tglAkhirKeberatan, filesTandaTerimaSS, tidakPerluTMTCheck } = this.state;
 		const removeFile = file => () => {
@@ -173,7 +181,6 @@ export class UploadSurat extends Component {
 				<button className="bg-transparent button-transparent border-0 fas fa-trash text-danger float-right" onClick={removeFileTandaTerimaSS(file)} />
 			</p>
 		));
-		console.log(addMonths(new Date(this.state.awalTMT), 6))
 		return (
 			<form className="form-horizontal" method="get" action="/" onSubmit={this.onSubmit}>
 				<FormGroup row>
@@ -188,6 +195,7 @@ export class UploadSurat extends Component {
 						<Input type="textarea" value={this.state.keterangan} onChange={(e) => { this.setKeterangan(e) }} required />
 					</div>
 				</FormGroup>
+
 				<FormGroup row>
 					<label className="col-md-4 col-form-label">Tidak Perlu TMT</label>
 					<div className="col-md-8 mt-2">
@@ -198,6 +206,7 @@ export class UploadSurat extends Component {
 						</div>
 					</div>
 				</FormGroup>
+
 				{!this.state.tidakPerluTMTCheck && (
 					<FormGroup row className="mt-3">
 						<label className="col-md-4 col-form-label">Isi TMT</label>
@@ -213,7 +222,8 @@ export class UploadSurat extends Component {
 										}}
 										closeOnSelect={true}
 										isValidDate={(e) => {
-											return e.isBefore(new Date())
+											return !this.state.listSanksi?.find(z => z.value === "Sanksi Administratif Berat - Pencabutan izin Program Studi" || z.value === "Sanksi Administratif Berat - Pembubaran PTN atau pencabutan izin PTS") ? e.isBefore(new Date())
+												: false
 										}}
 
 									/>
@@ -233,7 +243,7 @@ export class UploadSurat extends Component {
 										}}
 										closeOnSelect={true}
 										isValidDate={(e) => {
-											return e.isBefore(addMonths(new Date(this.state.awalTMT), 6)) && e.isAfter(new Date(this.state.awalTMT))
+											return !this.state.listSanksi?.find(z => z.value === "Sanksi Administratif Berat - Pencabutan izin Program Studi" || z.value === "Sanksi Administratif Berat - Pembubaran PTN atau pencabutan izin PTS") ? e.isBefore(addMonths(new Date(this.state.awalTMT), 6)) && e.isAfter(new Date(this.state.awalTMT)) : false
 										}}
 									// isValidDate={(e) => {
 									// 	return e.isAfter(moment(new Date) && e.isBefore(moment(new Date)))
@@ -270,6 +280,7 @@ export class UploadSurat extends Component {
 							formatOptionLabel={formatOptionLabel}
 							onChange={(e) => {
 								this.handleChangeListSanksi(e);
+								this.setsanksi(e)
 							}}
 						/>
 					</div>

+ 1 - 2
components/TurunSanksi/TableLaporan.js

@@ -68,11 +68,10 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
 											</td>
 											<td className=" col-md-6">
 												<div>
-													<h4 className="m-0">{data.laporan.pt.nama.length > 64 ? data.laporan.pt.nama.substring(0, 64) + "..." : data.laporan.pt.nama}</h4>
+													<h4 className="m-0">{ data.laporan.pt.nama}</h4>
 													<p>{data.laporan.keterangan.length > 100 ? data.laporan.keterangan.substring(0, 100) + "..." : data.laporan.keterangan}</p>
 												</div>
 											</td>
-
 											<td className=" col-md-5">
 												<div>
 													<h4>

+ 2 - 2
pages/_error.js

@@ -15,8 +15,8 @@ class Error extends React.Component {
         return (
             <ContentWrapper>
                 {this.props.statusCode
-                    ? `An error ${this.props.statusCode} occurred on server`
-                    : 'An error occurred on client'}
+                    ? `${this.props.statusCode}, silahkan coba beberapa saat lagi`
+                    : 'Jaringan bermasalah, silahkan coba beberapa saat lagi'}
             </ContentWrapper>
         );
     }

+ 11 - 2
pages/app/pencabutan-sanksi/detail.js

@@ -19,6 +19,7 @@ import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
 import { getCsrf } from "../../../actions/security";
 import Swal from "sweetalert2";
+import RiwayatPerbaikan from "../../../components/PencabutanSanksi/RiwayatPerbaikan";
 
 const checkIfFilesAreTooBig = (files) => {
 	let valid = true;
@@ -86,6 +87,7 @@ class JawabanPencabutanSanksi extends Component {
 		const sanksi = await getOneSanksi(token, query.id);
 		const pt = sanksi.data?.laporan?.pt;
 		this.setState({ sanksi, pt });
+		console.log(sanksi)
 	};
 
 	toggleModal = () => {
@@ -270,7 +272,7 @@ class JawabanPencabutanSanksi extends Component {
 															)}
 															{selectedOption && selectedOption.value === "Rekomendasi Perbaikan" ? (
 																<FormGroup row>
-																	<label className="col-md-2 col-form-label">Upload File Pendukung<span className="text-danger">*</span></label>
+																	<label className="col-md-2 col-form-label">Upload File Pendukung</label>
 																	<div className="col-md-10">
 																		<Field name="dokumen">
 																			{({ field, form, meta }) => (
@@ -325,7 +327,7 @@ class JawabanPencabutanSanksi extends Component {
 																</FormGroup>
 															) : (
 																<FormGroup row>
-																	<label className="col-md-2 col-form-label">Upload File Pendukung<span className="text-danger">*</span></label>
+																	<label className="col-md-2 col-form-label">Upload File Pendukung</label>
 																	<div className="col-md-10">
 																		<Field name="dokumen">
 																			{({ field, form, meta }) => (
@@ -408,6 +410,13 @@ class JawabanPencabutanSanksi extends Component {
 							</Col>
 						</Row>
 					)}
+					{sanksi.data && (
+						<Row>
+							<Col>
+								<RiwayatPerbaikan data={sanksi.data.perbaikan} role={this.props.user.role.id} />
+							</Col>
+						</Row>
+					)}
 				</div>
 				<Modal isOpen={this.state.modal} toggle={this.toggleModal}>
 					<ModalBody>Apakah anda yakin ingin mengubah jawaban sebelumnya?</ModalBody>

+ 1 - 0
pages/app/perbaikan/detail.js

@@ -31,6 +31,7 @@ class PemantauanDokumen extends Component {
 
 	render() {
 		const { sanksi, pt } = this.state;
+		console.log(sanksi)
 		return (
 			<ContentWrapper unwrap>
 				{/* <Header /> */}

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

@@ -57,7 +57,7 @@ class DetailJawabanPencabutanSanksi extends Component {
 													<FormGroup>
 														<label md="4">Jawaban:</label>
 														<div md="8">
-															<h3>{jawaban && jawaban.status}</h3>
+															<h3>{jawaban && jawaban?.status}</h3>
 														</div>
 													</FormGroup>
 													<FormGroup>

+ 1 - 1
pages/app/pt/jawaban-pencabutan-sanksi/index.js

@@ -27,7 +27,7 @@ class JawabanCabutSanksi extends Component {
 			<ContentWrapper>
 				<div className="content-heading">Jawaban Permohonan Pencabutan Sanksi</div>
 				<Row>
-					<Col lg={12}>{sanksi.data && sanksi.data.length ? <TableSanksi listData={sanksi.data} to="/app/pt/jawaban-pencabutan-sanksi/detail" linkName="Detail" /> : sanksi.data ? '' : <Loader />}</Col>
+					<Col lg={12}>{sanksi.data && sanksi.data.length ? <TableSanksi listData={sanksi?.data} to="/app/pt/jawaban-pencabutan-sanksi/detail" linkName="Detail" /> : sanksi?.data ? '' : <Loader />}</Col>
 				</Row>
 			</ContentWrapper>
 		);

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

@@ -27,7 +27,7 @@ class PencabutanSanksi extends Component {
 			<ContentWrapper>
 				<div className="content-heading">Permohonan Pencabutan Sanksi</div>
 				<Row>
-					<Col lg={12}>{sanksi.data && sanksi.data.length ? <TableSanksi listData={sanksi.data} to="/app/pt/pencabutan-sanksi/detail" linkName="Detail" /> : sanksi.data ? 'Tidak ada Sanksi' : <Loader />}</Col>
+					<Col lg={12}>{sanksi?.data && sanksi?.data.length ? <TableSanksi listData={sanksi?.data} to="/app/pt/pencabutan-sanksi/detail" linkName="Detail" /> : sanksi?.data ? 'Tidak ada Sanksi' : <Loader />}</Col>
 				</Row>
 			</ContentWrapper>
 		);

+ 2 - 1
pages/app/sanksi/proses.js

@@ -126,7 +126,8 @@ class ProsesSanksi extends Component {
 		const _csrf = getToken.token;
 		const dataUpload = this.state.dataUpload
 		const toastid = toast.loading("Please wait...");
-		if (dataUpload.tidakPerluTMTCheck === true) {
+		if (dataUpload.tidakPerluTMTCheck === true || dataUpload?.awalTMT === undefined || dataUpload?.awalTMT === "" ||
+			dataUpload?.akhirTMT === undefined || dataUpload?.akhirTMT === "") {
 			try {
 				const { query, token } = this.props;
 				const { id } = query;

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

@@ -268,11 +268,12 @@ class App extends Component {
     }
 
     this.setState({ loading: true });
-    const success = await createLaporanPublic(token, formdata, _csrf);
-    if (!success) {
+    const response = await createLaporanPublic(token, formdata, _csrf);
+    if (response.error) {
       swal.fire({
-        title: "Kode verifikasi salah",
+        title: response.error.message,
         icon: "error",
+        content: response.error.message,
         confirmButtonColor: "#3e3a8e",
       });
       this.setState({ kodeVerifNotOK: true, error: false });

+ 26 - 24
pages/pt/jawaban-pencabutan-sanksi/detail.js

@@ -72,30 +72,32 @@ class DetailJawabanPencabutanSanksi extends Component {
 															</div>
 														</FormGroup>
 													)}
-													<FormGroup>
-														<label md="4">Dokumen Jawaban:</label>
-														<div md="8">
-															<Scrollable height="120px" className="list-group">
-																<table className="table table-bordered bg-transparent">
-																	<tbody>
-																		{jawaban &&
-																			jawaban.dokumen.map((e) => (
-																				<tr>
-																					<td style={{ width: "30px" }}>
-																						<em className="fa-lg far fa-file-code"></em>
-																					</td>
-																					<td>
-																						<a className="text-muted" href={e.path} target="_blank" download={e.judul}>
-																							{e.judul}
-																						</a>
-																					</td>
-																				</tr>
-																			))}
-																	</tbody>
-																</table>
-															</Scrollable>
-														</div>
-													</FormGroup>
+													{jawaban && jawaban?.dokumen &&
+														<FormGroup>
+															<label md="4">Dokumen Jawaban:</label>
+															<div md="8">
+																<Scrollable height="120px" className="list-group">
+																	<table className="table table-bordered bg-transparent">
+																		<tbody>
+																			{jawaban &&
+																				jawaban?.dokumen.map((e) => (
+																					<tr>
+																						<td style={{ width: "30px" }}>
+																							<em className="fa-lg far fa-file-code"></em>
+																						</td>
+																						<td>
+																							<a className="text-muted" href={e.path} target="_blank" download={e.judul}>
+																								{e.judul}
+																							</a>
+																						</td>
+																					</tr>
+																				))}
+																		</tbody>
+																	</table>
+																</Scrollable>
+															</div>
+														</FormGroup>
+													}
 												</form>
 												{jawaban && jawaban.status === "Rekomendasi Perbaikan" && (
 													<Link