andi 2 years ago
parent
commit
5eedb9bd66
44 changed files with 477 additions and 350 deletions
  1. 2 2
      actions/docPerbaikan.js
  2. 16 3
      actions/log.js
  3. 1 1
      actions/pelaporan.js
  4. 1 1
      actions/penjadwalan.js
  5. 2 1
      components/Banding/TableSanksi.js
  6. 2 1
      components/Bypass/TableBypass.js
  7. 2 1
      components/Delegasi/TableLaporan.js
  8. 2 1
      components/Keberatan/TableSanksi.js
  9. 1 1
      components/Main/Login.js
  10. 2 1
      components/Main/TableLaporan.js
  11. 4 4
      components/Main/TableSanksi.js
  12. 9 8
      components/Main/Timeline.js
  13. 42 40
      components/NaikSanksi/InputTanggal.js
  14. 7 6
      components/NaikSanksi/TableLaporan.js
  15. 1 0
      components/PT/DocPerbaikan/Riwayat.js
  16. 5 3
      components/Pelaporan/TableLaporan.js
  17. 3 2
      components/PelaporanTuntas/TableLaporan.js
  18. 1 0
      components/Pemeriksaan/InputEvaluasi.js
  19. 2 1
      components/Pemeriksaan/TableLaporan.js
  20. 1 1
      components/PencabutanSanksi/Riwayat.js
  21. 67 0
      components/PencabutanSanksi/RiwayatPerbaikan.js
  22. 2 1
      components/PencabutanSanksi/TableSanksi.js
  23. 3 1
      components/Penjadwalan/TableLaporan.js
  24. 30 28
      components/PerpanjanganSanksi/InputTanggal.js
  25. 4 3
      components/PerpanjanganSanksi/TableLaporan.js
  26. 15 28
      components/RekomendasiDelegasi/TableLaporan.js
  27. 23 7
      components/Riwayat/TableLaporan.js
  28. 21 23
      components/Sanksi/BeritaAcara.js
  29. 0 1
      components/Sanksi/Redudansi.js
  30. 12 3
      components/Sanksi/TableLaporan.js
  31. 72 54
      components/Sanksi/UploadSurat.js
  32. 30 28
      components/TurunSanksi/InputTanggal.js
  33. 5 5
      components/TurunSanksi/TableLaporan.js
  34. 2 2
      pages/_error.js
  35. 23 30
      pages/app/banding/detail.js
  36. 37 46
      pages/app/keberatan/detail.js
  37. 11 2
      pages/app/pencabutan-sanksi/detail.js
  38. 1 0
      pages/app/perbaikan/detail.js
  39. 1 1
      pages/app/pt/jawaban-pencabutan-sanksi/detail.js
  40. 1 1
      pages/app/pt/jawaban-pencabutan-sanksi/index.js
  41. 1 1
      pages/app/pt/pencabutan-sanksi/index.js
  42. 5 3
      pages/app/sanksi/proses.js
  43. 4 3
      pages/laporan/new/index.js
  44. 1 1
      styles/app/app/mycss.scss

+ 2 - 2
actions/docPerbaikan.js

@@ -16,11 +16,11 @@ export const addDocPerbaikan = async (token, id, data, _csrf) => {
 const logSuccessAddDocPerbaikan = async (token, id) => {
 	const getToken = await getCsrf();
 	const _csrf = getToken.token;
-	await createLog(token, { aktivitas: `Berhasil melakukan perbaikan dokumen, id: ${id}`, _csrf: _csrf });
+	await createLog(token, { aktivitas: `Berhasil melakukan perbaikan dokumen, id: ${id}`, menu: "Dokuemen Perbaikan", _csrf: _csrf });
 }
 
 const logErrorAddDocPerbaikan = async (token, id) => {
 	const getToken = await getCsrf();
 	const _csrf = getToken.token;
-	await createLog(token, { aktivitas: `Gagal melakukan perbaikan dokumen, id: ${id}`, _csrf: _csrf });
+	await createLog(token, { aktivitas: `Gagal melakukan perbaikan dokumen, id: ${id}`, menu: "Dokuemen Perbaikan", _csrf: _csrf });
 }

+ 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
actions/penjadwalan.js

@@ -15,6 +15,6 @@ export const updateJadwal = async (token, id, data, _csrf) => {
 const logSuccessUpdateJadwal = async (token, id) => {
 	const getToken = await getCsrf();
 	const _csrf = getToken.token;
-	await createLog(token, { aktivitas: `Berhasil menetapkan jadwal, id: ${id}`, _csrf: _csrf });
+	await createLog(token, { aktivitas: `Berhasil menetapkan jadwal, id: ${id}`, menu: "Penjadwalan", _csrf: _csrf });
 
 }

+ 2 - 1
components/Banding/TableSanksi.js

@@ -8,7 +8,7 @@ function TableSanksi({ listData, to, linkName }) {
 		<div className="card b">
 			<div className="card-body card-over">
 				<Datatable options={{ responsive: false, ordering: true }}>
-					<table className="table w-100" data-order='[3,"desc"]'>
+					<table className="table w-100" data-order='[0,"desc"]'>
 						<thead>
 							<tr>
 								<th>Nomor Sanksi</th>
@@ -28,6 +28,7 @@ function TableSanksi({ listData, to, linkName }) {
 												<div className="media align-items-center">
 													<div className="media-body d-flex">
 														<div>
+															<p style={{ display: "none" }}>{data.createdAt}</p>
 															<h4>{data.no_sanksi}</h4>
 															<p>{moment(data.createdAt).format("MM-DD-YYYY")}</p>
 														</div>

+ 2 - 1
components/Bypass/TableBypass.js

@@ -59,7 +59,7 @@ function TableBypass({ listData, to, linkName, role }) {
             </Modal>
             <div className="card-body card-over">
                 <Datatable options={{ responsive: false, ordering: true }}>
-                    <table className="table w-100" data-order='[[3, "desc"]]'>
+                    <table className="table w-100" data-order='[[0, "desc"]]'>
                         <thead>
                             <tr>
                                 <th>Nomor Sanksi</th>
@@ -79,6 +79,7 @@ function TableBypass({ listData, to, linkName, role }) {
                                                 <div className="media align-items-center">
                                                     <div className="media-body d-flex">
                                                         <div>
+														<p  style={{ display: "none" }}>{data.createdAt}</p>
                                                             <h4>{data.no_sanksi}</h4>
                                                             <p>{moment(data.createdAt).format("DD-MM-YYYY")}</p>
                                                         </div>

+ 2 - 1
components/Delegasi/TableLaporan.js

@@ -9,7 +9,7 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
             <div className="card-body card-over">
                 {listData && (
                     <Datatable options={{ responsive: false, ordering: true }}>
-                        <table className="table w-100" data-order='[[3, "desc"]]'>
+                        <table className="table w-100" data-order='[[0, "desc"]]'>
                             <thead>
                                 <tr>
                                     <th>No.Laporan</th>
@@ -29,6 +29,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>
                                                             <h4>{data.no_laporan}</h4>
                                                             <p>{moment(data.createdAt).format("DD-MM-YYYY")}</p>
                                                         </div>

+ 2 - 1
components/Keberatan/TableSanksi.js

@@ -8,7 +8,7 @@ function TableSanksi({ listData, to, linkName }) {
 		<div className="card b">
 			<div className="card-body card-over">
 				<Datatable options={{ responsive: false, ordering: true }}>
-					<table className="table w-100" data-order='[[3, "desc"]]'>
+					<table className="table w-100" data-order='[[0, "desc"]]'>
 						<thead>
 							<tr>
 								<th>Nomor Sanksi</th>
@@ -28,6 +28,7 @@ function TableSanksi({ listData, to, linkName }) {
 												<div className="media align-items-center">
 													<div className="media-body d-flex">
 														<div>
+														<p  style={{ display: "none" }}>{data.createdAt}</p>
 															<h4>{data.no_sanksi}</h4>
 															<p>{moment(data.createdAt).format("DD-MM-YYYY")}</p>
 														</div>

+ 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 - 1
components/Main/TableLaporan.js

@@ -9,7 +9,7 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
 			<div className="card-body card-over">
 				{listData && (
 					<Datatable options={{ responsive: false, ordering: true }}>
-						<table className="table w-100" data-order='[[3, "desc"]]'>
+						<table className="table w-100" data-order='[[0, "desc"]]'>
 							<thead>
 								<tr>
 									<th>No.Laporan</th>
@@ -29,6 +29,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>
 															<h4>{data.no_laporan}</h4>
 															<p>{moment(data.createdAt).format("DD-MM-YYYY")}</p>
 														</div>

+ 4 - 4
components/Main/TableSanksi.js

@@ -9,8 +9,7 @@ function TableSanksi({ listData, to, linkName }) {
 			<div className="card-body card-over">
 				{listData && (
 					<Datatable options={{ responsive: false, ordering: true }}>
-						{/* <table className="table w-100" data-order='[[2, "asc"], [3, "desc"]]'> */}
-						<table className="table w-100" data-order='[[2, "asc"]]'>
+						<table className="table w-100" data-order='[[0, "desc"]]'>
 							<thead>
 								<tr>
 									<th>Nomor Sanksi</th>
@@ -30,6 +29,7 @@ function TableSanksi({ listData, to, linkName }) {
 													<div className="media align-items-center">
 														<div className="media-body d-flex">
 															<div>
+																<p style={{ display: "none" }}>{data.createdAt}</p>
 																<h4>{data.no_sanksi}</h4>
 																<p>{moment(data.createdAt).format("DD-MM-YYYY")}</p>
 															</div>
@@ -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) => (

+ 42 - 40
components/NaikSanksi/InputTanggal.js

@@ -5,8 +5,6 @@ import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
 import { connect } from "react-redux";
 import { getOneSanksi, update } from "@/actions/sanksi";
-import DatePicker from "react-datepicker";
-import "react-datepicker/dist/react-datepicker.css";
 import { addDays, addMonths } from 'date-fns';
 import id from 'date-fns/locale/id';
 import moment from "moment";
@@ -17,6 +15,8 @@ import { getPelanggaranSanksi } from "@/actions/pelanggaran";
 import Select from "react-select";
 import { getCsrf } from "../../actions/security";
 import Swal from "sweetalert2";
+import Datetime from "react-datetime";
+
 
 
 const selectInstanceId = 1;
@@ -255,18 +255,19 @@ class InputTanggal extends Component {
                                         <span className="col-sm-3 float-left">
                                             <Field name="from_date">
                                                 {({ field, form }) => (
-                                                    <DatePicker
-                                                        selected={this.state.from_date}
-                                                        onChange={(from_date) => {
-                                                            this.setState({ from_date })
-                                                            form.setFieldValue(field.name, from_date);
-                                                        }}
-                                                        dateFormat="dd/MM/yyyy"
-                                                        maxDate={this.state.startDay}
-                                                        placeholderText="Dari Tanggal"
-                                                        locale={id}
-                                                        className="form-control bg-white"
-                                                    />
+                                                    <Datetime
+                                                    timeFormat={false}
+                                                    inputProps={{ className: "form-control" }}
+                                                    value={field.value || "DD/MM/YYYY"}
+                                                    onChange={(from_date) => {
+                                                        form.setFieldValue(field.name, from_date);
+                                                        this.setState({ from_date })
+                                                    }}
+                                                    closeOnSelect={true}
+                                                    isValidDate={(e) => {
+                                                        return e.isBefore(new Date())
+                                                    }}
+                                                />
                                                 )}
                                             </Field>
                                             <ErrorMessage name="from_date" component="div" className="form-text text-danger" />
@@ -282,18 +283,19 @@ class InputTanggal extends Component {
                                                     <FormGroup>
                                                         <Field name="from_date">
                                                             {({ field, form }) => (
-                                                                <DatePicker
-                                                                    selected={this.state.from_date}
-                                                                    onChange={(from_date) => {
-                                                                        this.setState({ from_date })
-                                                                        form.setFieldValue(field.name, from_date);
-                                                                    }}
-                                                                    dateFormat="dd/MM/yyyy"
-                                                                    maxDate={this.state.startDay}
-                                                                    placeholderText="Dari Tanggal"
-                                                                    locale={id}
-                                                                    className="form-control bg-white"
-                                                                />
+                                                                <Datetime
+                                                                timeFormat={false}
+                                                                inputProps={{ className: "form-control" }}
+                                                                value={field.value || "DD/MM/YYYY"}
+                                                                onChange={(from_date) => {
+                                                                    form.setFieldValue(field.name, from_date);
+                                                                    this.setState({ from_date })
+                                                                }}
+                                                                closeOnSelect={true}
+                                                                isValidDate={(e) => {
+                                                                    return e.isBefore(new Date())
+                                                                }}
+                                                            />
                                                             )}
                                                         </Field>
                                                         <ErrorMessage name="from_date" component="div" className="form-text text-danger" />
@@ -303,19 +305,19 @@ class InputTanggal extends Component {
                                                     <FormGroup>
                                                         <Field name="to_date">
                                                             {({ field, form }) => (
-                                                                <DatePicker
-                                                                    selected={this.state.to_date}
-                                                                    onChange={(to_date) => {
-                                                                        this.setState({ to_date })
-                                                                        form.setFieldValue(field.name, to_date);
-                                                                    }}
-                                                                    dateFormat="dd/MM/yyyy"
-                                                                    minDate={this.state.from_date}
-                                                                    maxDate={addMonths(new Date(this.state.from_date), 6)}
-                                                                    placeholderText="Sampai tanggal"
-                                                                    locale={id}
-                                                                    className="form-control bg-white"
-                                                                />
+                                                                <Datetime
+                                                                timeFormat={false}
+                                                                inputProps={{ className: "form-control" }}
+                                                                value={field.value || "DD/MM/YYYY"}
+                                                                onChange={(to_date) => {
+                                                                    form.setFieldValue(field.name, to_date);
+                                                                    this.setState({ to_date })
+                                                                }}
+                                                                closeOnSelect={true}
+                                                                isValidDate={(e) => {
+                                                                    return e.isBefore(addMonths(new Date(this.state.from_date), 6)) && e.isAfter(new Date(this.state.from_date))
+                                                                }}
+                                                            />
                                                             )}
                                                         </Field>
                                                         <ErrorMessage name="to_date" component="div" className="form-text text-danger" />
@@ -378,7 +380,7 @@ class InputTanggal extends Component {
                                                                                 <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">Upload dokumen rekomendasi delegasi</h5>
+                                                                                <h5 className="text-center dz-default dz-message">Upload dokumen Naik Sanksi</h5>
                                                                             </div>
                                                                         }
                                                                         </div>

+ 7 - 6
components/NaikSanksi/TableLaporan.js

@@ -29,7 +29,7 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
 			<div className="card-body card-over">
 				{listData && (
 					<Datatable options={{ responsive: false, ordering: true }}>
-						<table className="table w-100" data-order='[[3, "desc"]]'>
+						<table className="table w-100" data-order='[[0, "desc"]]'>
 							<thead>
 								<tr>
 									<th>No.Laporan</th>
@@ -50,6 +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>
 															<h4>{data.laporan.no_laporan}</h4>
 															<p>{moment(data.createdAt).format("DD-MMMM-YYYY")}</p>
 														</div>
@@ -59,19 +60,19 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
 											<td>
 												<h4>{data.no_sanksi}</h4>
 											</td>
-											<td className=" col-md-6">
+											<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>
-													<p className="w-105">{data.laporan.keterangan.length > 100 ? data.laporan.keterangan.substring(0, 100) + "..." : data.laporan.keterangan}</p>
+													<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">
+											<td className="col-md-5">
 												<div>
 													<h4>
 														Sanksi Administratif : {getLabelSanksi(data.sanksi, "level") === 3 ? "Berat" : getLabelSanksi(data.sanksi, "level") === 2 ? "Sedang" : "Ringan"}
 													</h4>
-													<p className="w-105">{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>

+ 5 - 3
components/Pelaporan/TableLaporan.js

@@ -19,13 +19,13 @@ 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,
                         // info: false,
                     }}>
-                        <table className="table w-100" data-order='[[3, "desc"]]'>
+                        <table className="table w-100" data-order='[[0, "desc"]]'>
                             <thead>
                                 <tr>
                                     <th>No.Laporan</th>
@@ -45,6 +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>
                                                             <h4>{data.no_laporan}</h4>
                                                             <p>{moment(data.createdAt).format("DD-MM-YYYY")}</p>
                                                         </div>
@@ -74,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

+ 3 - 2
components/PelaporanTuntas/TableLaporan.js

@@ -9,7 +9,7 @@ function TableLaporan({ listData, to, linkName }) {
 			<div className="card-body card-over">
 				{listData && (
 					<Datatable options={{ responsive: false, ordering: true }}>
-						<table className="table w-100" data-order='[[2, "asc"], [3, "desc"]]'>
+						<table className="table w-100" data-order='[[3, "desc"]]'>
 							<thead>
 								<tr>
 									<th>No.Laporan</th>
@@ -27,6 +27,7 @@ function TableLaporan({ listData, to, linkName }) {
 												<div className="media align-items-center">
 													<div className="media-body d-flex">
 														<div>
+															<p style={{ display: "none" }}>{data.createdAt}</p>
 															<h4>{data.laporan?.no_laporan || data.no_laporan}</h4>
 															<p>{moment(data.createdAt).format("MM-DD-YYYY")}</p>
 														</div>
@@ -46,7 +47,7 @@ function TableLaporan({ listData, to, linkName }) {
 												</div>
 											</td>
 											<td>
-												{data.flag === "diterima" ? <div className="badge badge-success">Selesai - Diterima</div> :data.status === "Diterima" ? <div className="badge badge-success">Selesai - Diterima</div> : data.status === "Ditutup" ? <div className="badge badge-danger">Ditutup</div> : data.status === "Selesai" ? <div className="badge badge-success">Selesai</div> : ""}
+												{data.flag === "diterima" ? <div className="badge badge-success">Selesai - Diterima</div> : data.status === "Diterima" ? <div className="badge badge-success">Selesai - Diterima</div> : data.status === "Ditutup" ? <div className="badge badge-danger">Ditutup</div> : data.status === "Selesai" ? <div className="badge badge-success">Selesai</div> : ""}
 											</td>
 											<td>
 												<div className="ml-auto">

+ 1 - 0
components/Pemeriksaan/InputEvaluasi.js

@@ -271,6 +271,7 @@ class InputEvaluasi extends Component {
 				<button className="bg-transparent button-transparent border-0 fas fa-trash text-danger float-right" onClick={removeFile(file)} />
 			</p>
 		));
+		console.log(new Date(this.state.tanggal))
 		return (
 			<>
 				<Formik

+ 2 - 1
components/Pemeriksaan/TableLaporan.js

@@ -9,7 +9,7 @@ function TableLaporan({ listData, to, linkName }) {
 			<div className="card-body card-over">
 				{listData && (
 					<Datatable options={{ responsive: false, ordering: true }}>
-						<table className="table w-100" data-order='[[2, "asc"], [3, "desc"]]'>
+						<table className="table w-100" data-order='[ [0, "desc"]]'>
 							<thead>
 								<tr>
 									<th>No.Laporan</th>
@@ -28,6 +28,7 @@ function TableLaporan({ listData, to, linkName }) {
 												<div className="media align-items-center">
 													<div className="media-body d-flex">
 														<div>
+														<p  style={{ display: "none" }}>{data.createdAt}</p>
 															<h4>{data.no_laporan}</h4>
 															<p>{moment(data.createdAt).format("MM-DD-YYYY")}</p>
 														</div>

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

+ 67 - 0
components/PencabutanSanksi/RiwayatPerbaikan.js

@@ -0,0 +1,67 @@
+import Datatable from "@/components/Tables/Datatable";
+import moment from "moment";
+import { Card, CardHeader, CardBody, CardTitle } from "reactstrap";
+import Swal from "sweetalert2";
+
+function RiwayatPerbaikan({ data, role }) {
+	const handleOpenAlert = () => {
+		Swal.fire({
+			icon: 'error',
+			title: 'Oops...',
+			html: 'Maaf anda tidak memiliki akses untuk menyelesaikan<p> proses ini.</p>',
+			confirmButtonColor: "#3e3a8e",
+			confirmButtonText: 'Oke'
+		})
+	};
+	return (
+		<Card className="card-default">
+			<CardHeader>
+				<CardTitle>Riwayat Dokumen Perbaikan</CardTitle>
+			</CardHeader>
+			<CardBody>
+				<Datatable options={{ responsive: true }}>
+					<table className="table table-striped my-4 w-100">
+						<thead>
+							<tr>
+								<th>Tanggal</th>
+								<th>Keterangan</th>
+								<th>Dokumen</th>
+								<th>index</th>
+							</tr>
+						</thead>
+						<tbody>
+							{data.length
+								? data.map((value, i) => (
+									<tr>
+										<td>{moment(value.createdAt).format("DD MMMM YYYY")}</td>
+										<td>{value.keterangan}</td>
+										<td>
+											{value.dokumen.map((e) => (
+												<>
+													<em className="fa-lg far fa-file-code"></em>
+													{role === 2024 ?
+														<a className="text-muted" onClick={handleOpenAlert}>
+															{e.judul}
+														</a>
+														:
+														<a className="text-muted" href={e.path} target="_blank" download={e.judul}>
+															{e.judul}
+														</a>
+
+													}
+												</>
+											))}
+										</td>
+										<td>{++i}</td>
+									</tr>
+								))
+								: ""}
+						</tbody>
+					</table>
+				</Datatable>
+			</CardBody>
+		</Card>
+	);
+}
+
+export default RiwayatPerbaikan;

+ 2 - 1
components/PencabutanSanksi/TableSanksi.js

@@ -8,7 +8,7 @@ function TableSanksi({ listData, to, linkName }) {
 		<div className="card b">
 			<div className="card-body card-over">
 				<Datatable options={{ responsive: false, ordering: true }}>
-					<table className="table w-100" data-order='[3, "asc"]'>
+					<table className="table w-100" data-order='[0, "desc"]'>
 						<thead>
 							<tr>
 								<th>Nomor Sanksi</th>
@@ -28,6 +28,7 @@ function TableSanksi({ listData, to, linkName }) {
 												<div className="media align-items-center">
 													<div className="media-body d-flex">
 														<div>
+														<p  style={{ display: "none" }}>{data.createdAt}</p>
 															<h4>{data.no_sanksi}</h4>
 															<p>{moment(data.createdAt).format("MM-DD-YYYY")}</p>
 														</div>

+ 3 - 1
components/Penjadwalan/TableLaporan.js

@@ -9,7 +9,7 @@ function TableLaporan({ listData, to, linkName }) {
 			<div className="card-body card-over">
 				{listData && (
 					<Datatable options={{ responsive: false, ordering: true }}>
-						<table className="table w-100" data-order='[[2, "desc"], [3, "desc"]]'>
+						<table className="table w-100" data-order='[[0, "desc"]]'>
 							<thead>
 								<tr>
 									<th>No.Laporan</th>
@@ -28,6 +28,8 @@ function TableLaporan({ listData, to, linkName }) {
 												<div className="media align-items-center">
 													<div className="media-body d-flex">
 														<div>
+															
+														<p  style={{ display: "none" }}>{data.createdAt}</p>
 															<h4>{data.no_laporan}</h4>
 															<p>{moment(data.createdAt).format("MM-DD-YYYY")}</p>
 														</div>

+ 30 - 28
components/PerpanjanganSanksi/InputTanggal.js

@@ -5,8 +5,6 @@ import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
 import { connect } from "react-redux";
 import { getOneSanksi, editTmt } from "@/actions/sanksi";
-import DatePicker from "react-datepicker";
-import "react-datepicker/dist/react-datepicker.css";
 import { addDays, addMonths } from 'date-fns';
 import id from 'date-fns/locale/id';
 import moment from "moment";
@@ -15,6 +13,8 @@ moment.locale('id');
 import Router from "next/router";
 import { getCsrf } from "../../actions/security";
 import Swal from "sweetalert2";
+import Datetime from "react-datetime";
+
 
 
 const selectInstanceId = 1;
@@ -213,18 +213,20 @@ class InputTanggal extends Component {
                                                 <FormGroup>
                                                     <Field name="from_date">
                                                         {({ field, form }) => (
-                                                            <DatePicker
-                                                                selected={this.state.from_date}
-                                                                onChange={(from_date) => {
-                                                                    this.setState({ from_date })
-                                                                    form.setFieldValue(field.name, from_date);
-                                                                }}
-                                                                dateFormat="dd/MM/yyyy"
-                                                                maxDate={this.state.startDay}
-                                                                placeholderText="Dari Tanggal"
-                                                                locale={id}
-                                                                className="form-control bg-white"
-                                                            />
+                                                            <Datetime
+                                                            timeFormat={false}
+                                                            inputProps={{ className: "form-control" }}
+                                                            value={field.value || "DD/MM/YYYY"}
+                                                            onChange={(from_date) => {
+                                                                form.setFieldValue(field.name, from_date);
+                                                                this.setState({ from_date })
+                                                            }}
+                                                            closeOnSelect={true}
+                                                            isValidDate={(e) => {
+                                                                return e.isBefore(new Date())
+                                                            }}
+
+                                                        />
                                                         )}
                                                     </Field>
                                                     <ErrorMessage name="from_date" component="div" className="form-text text-danger" />
@@ -234,19 +236,19 @@ class InputTanggal extends Component {
                                                 <FormGroup>
                                                     <Field name="to_date">
                                                         {({ field, form }) => (
-                                                            <DatePicker
-                                                                selected={this.state.to_date}
-                                                                onChange={(to_date) => {
-                                                                    this.setState({ to_date })
-                                                                    form.setFieldValue(field.name, to_date);
-                                                                }}
-                                                                dateFormat="dd/MM/yyyy"
-                                                                minDate={this.state.from_date}
-                                                                maxDate={addMonths(new Date(this.state.from_date), 6)}
-                                                                placeholderText="Sampai tanggal"
-                                                                locale={id}
-                                                                className="form-control bg-white"
-                                                            />
+                                                            <Datetime
+                                                            timeFormat={false}
+                                                            inputProps={{ className: "form-control" }}
+                                                            value={field.value || "DD/MM/YYYY"}
+                                                            onChange={(to_date) => {
+                                                                form.setFieldValue(field.name, to_date);
+                                                                this.setState({ to_date })
+                                                            }}
+                                                            closeOnSelect={true}
+                                                            isValidDate={(e) => {
+                                                                return e.isBefore(addMonths(new Date(this.state.from_date), 6)) && e.isAfter(new Date(this.state.from_date))
+                                                            }}
+                                                        />
                                                         )}
                                                     </Field>
                                                     <ErrorMessage name="to_date" component="div" className="form-text text-danger" />
@@ -278,7 +280,7 @@ class InputTanggal extends Component {
                                                                                 <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">Upload dokumen rekomendasi delegasi</h5>
+                                                                                <h5 className="text-center dz-default dz-message">Upload dokumen Perpanjangan Sanksi</h5>
                                                                             </div>
                                                                         }
                                                                         </div>

+ 4 - 3
components/PerpanjanganSanksi/TableLaporan.js

@@ -11,7 +11,7 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
 			<div className="card-body card-over">
 				{listData && (
 					<Datatable options={{ responsive: false, ordering: true }}>
-						<table className="table w-100" data-order='[[3, "desc"]]'>
+						<table className="table w-100" data-order='[[0, "desc"]]'>
 							<thead>
 								<tr>
 									<th>No.Laporan</th>
@@ -30,6 +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>
 															<h4>{data.laporan.no_laporan}</h4>
 															<p>{moment(data.createdAt).format("DD-MMMM-YYYY")}</p>
 														</div>
@@ -53,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>
@@ -63,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>

+ 15 - 28
components/RekomendasiDelegasi/TableLaporan.js

@@ -28,12 +28,12 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
 			<div className="card-body card-over">
 				{listData && (
 					<Datatable options={{ responsive: false, ordering: true }}>
-						<table className="table w-100" data-order='[[3, "desc"]]'>
+						<table className="table w-100" data-order='[[0, "desc"]]'>
 							<thead>
 								<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,46 +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>
 															<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>
-												<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>
+											<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>
+													<p>{data.laporan.keterangan}</p>
 												</div>
 											</td>
-
-											{status ? (
-												<td>
+											<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) => (<p className="w-105">Sanksi Administratif:  {e.label_sanksi}</p>))} */}
+													{/* {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">

+ 23 - 7
components/Riwayat/TableLaporan.js

@@ -8,14 +8,18 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
         <div className="card b ">
             <div className="card-body card-over">
                 {listData && (
-                    <Datatable options={{ responsive: false, ordering: true }}>
-                        <table className="table w-100" data-order='[[1, "desc"]]'>
+                    <Datatable options={{ responsive: false, ordering: true
+                    }}>
+                        <table className="table w-100" data-order='[[0, "desc"]]'>
                             <thead>
                                 <tr>
                                     <th>No.Laporan</th>
+                                    <th style={{
+                                 whiteSpace:"nowrap",
+                                }}>Tanggal Laporan</th>
                                     <th>Deskripsi Laporan</th>
                                      <th>Status</th>
-                                    {!noBy && <th>Dibuat Oleh</th>}
+                                    {/* {!noBy && <th>Dibuat Oleh</th>} */}
                                 </tr>
                             </thead>
                             <tbody>
@@ -27,20 +31,32 @@ 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>
                                                             <h4>{data.no_laporan}</h4>
-                                                            <p>{moment(data.createdAt).format("DD-MM-YYYY")}</p>
                                                         </div>
                                                     </div>
                                                 </div>
                                             </td>
 
-                                            <td>
+											<td>
+												{/* <td>{data.no_laporan}</td> */}
+												<div className="media align-items-center">
+													<div className="media-body">
+														<div>
+														<p  style={{ display: "none" }}>{data.createdAt}</p>
+															<h4>{moment(data.createdAt).format("DD-MM-YYYY")}</h4>
+														</div>
+													</div>
+												</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.pt.nama.length > 64 ? data.pt.nama.substring(0, 64) + "..." : data.pt.nama}</h4>
-                                                                <p className="w-105">{data.keterangan}</p>
+                                                                <p className="">{data.keterangan.length>100?data.keterangan.substring(0, 100) + "..." : data.keterangan}</p>
+
                                                             </div>
                                                         </div>
                                                     </div>
@@ -54,7 +70,7 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
                                             ) : (
                                                 ""
                                             )}
-                                            {!noBy && <td>{data.user.isPrivate ? "" : data.user.nama}</td>}
+                                            {/* {!noBy && <td>{data.user.isPrivate ? "" : data.user.nama}</td>} */}
                                             {/* <td>
                                                 <div className="ml-auto">
                                                     <Link

+ 21 - 23
components/Sanksi/BeritaAcara.js

@@ -2,8 +2,6 @@ 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";
@@ -13,8 +11,8 @@ import { ToastContainer, toast } from "react-toastify";
 import Router from "next/router";
 import { getCsrf } from '../../actions/security';
 import { ENV } from '../../env';
-import { connect } from "react-redux";
 import Swal from 'sweetalert2';
+import Datetime from "react-datetime";
 
 
 
@@ -327,16 +325,16 @@ class BeritaAcara extends Component {
                             Pada hari ini
                             {dataSuratBA?.isEditTanggal &&
                                 <span style={{ textIndent: "0rem" }}>
-                                    <DatePicker
-                                        selected={tanggal ? new Date(tanggal) : tanggal}
-                                        onChange={(tanggal) => {
-                                            this.setState({ tanggal, setTanggal: true }, this.setDataSuratBA)
-                                        }}
-                                        dateFormat="dd/MM/yyyy"
-                                        placeholderText="Isi Tanggal"
-                                        locale={id}
-                                        className="form-control bg-white"
-                                    />
+                                     <Datetime
+																			timeFormat={false}
+																			inputProps={{ className: "form-control" }}
+																			value={tanggal ? new Date(tanggal) : tanggal || "Isi Tanggal"}
+                                                                            onChange={(tanggal) => {
+                                                                                this.setState({ tanggal, setTanggal: true }, this.setDataSuratBA)
+                                                                            }}
+																			closeOnSelect={true}
+																			
+																		/>
                                     <button className='bg-transparent button-transparent border-0 fas fa-times-circle text-danger' onClick={this.isEditTanggal} />
                                     <button className='bg-transparent button-transparent border-0 fas fa-check-circle text-success' onClick={this.isEditTanggal}
                                     />
@@ -397,16 +395,16 @@ class BeritaAcara extends Component {
                                     } */}
                                     {dataSuratBA?.isEditTanggal_2 &&
                                         <span style={{ textIndent: "0rem" }}>
-                                            <DatePicker
-                                                selected={tanggal_2 ? new Date(tanggal_2) : tanggal_2}
-                                                onChange={(tanggal_2) => {
-                                                    this.setState({ tanggal_2, setTanggal_2: true }, this.setDataSuratBA)
-                                                }}
-                                                dateFormat="dd/MM/yyyy"
-                                                placeholderText="Isi Tanggal"
-                                                locale={id}
-                                                className="form-control bg-white"
-                                            />
+                                            <Datetime
+																			timeFormat={false}
+																			inputProps={{ className: "form-control" }}
+																			value={tanggal_2 ? new Date(tanggal_2) : tanggal_2 || "Isi Tanggal"}
+                                                                            onChange={(tanggal_2) => {
+                                                                                this.setState({ tanggal_2, setTanggal_2: true }, this.setDataSuratBA)
+                                                                            }}
+																			closeOnSelect={true}
+																			
+																		/>
                                             <button className='bg-transparent button-transparent border-0 fas fa-times-circle text-danger' onClick={this.isEditTanggal_2} />
                                             <button className='bg-transparent button-transparent border-0 fas fa-check-circle text-success' onClick={this.isEditTanggal_2}
                                             />

+ 0 - 1
components/Sanksi/Redudansi.js

@@ -1,7 +1,6 @@
 import React, { Component } from "react";
 import { Row, Col, Input, FormGroup, Label, Progress, Button } from "reactstrap";
 import Select from "react-select";
-import "react-datepicker/dist/react-datepicker.css";
 import Swal from "sweetalert2";
 import * as Yup from "yup";
 import { connect } from "react-redux";

+ 12 - 3
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='[[2, "asc"], [3, "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,6 +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>
 															<h4>{data.no_laporan}</h4>
 															<p>{moment(data.createdAt).format("DD-MM-YYYY")}</p>
 														</div>
@@ -48,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>

+ 72 - 54
components/Sanksi/UploadSurat.js

@@ -1,17 +1,9 @@
 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";
+import Datetime from "react-datetime";
+import moment from "moment";
 
 let Dropzone = null;
 class DropzoneWrapper extends Component {
@@ -41,7 +33,7 @@ export class UploadSurat extends Component {
 			files: [],
 			nomorSanksi: "",
 			keterangan: "",
-			listSanksi: "",
+			listSanksi: null,
 			startDay: tmt_awal,
 			maxDay: "",
 			awalTMT: "",
@@ -151,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: "", tglAkhirKeberatan: "", terimaSuratSanksi: "" })
+		}
 		// 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: "", tglAkhirKeberatan: "", terimaSuratSanksi: "" })
+		}
+	}
 	render() {
 		const { files, terimaSuratSanksi, tglAkhirKeberatan, filesTandaTerimaSS, tidakPerluTMTCheck } = this.state;
 		const removeFile = file => () => {
@@ -195,32 +195,39 @@ 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">
-						<div className="checkbox c-checkbox">
-							<label>
-								<Input type="checkbox" onChange={() => this.handleTmtCheck()} defaultChecked={this.state.tidakPerluTMTCheck} />
-								<span className="fa fa-check"></span></label>
+
+				{!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") &&
+					<FormGroup row>
+						<label className="col-md-4 col-form-label">Tidak Perlu TMT</label>
+						<div className="col-md-8 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>
-					</div>
-				</FormGroup>
-				{!this.state.tidakPerluTMTCheck && (
+					</FormGroup>
+				}
+
+				{!this.state.tidakPerluTMTCheck && !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") && (
 					<FormGroup row className="mt-3">
 						<label className="col-md-4 col-form-label">Isi TMT</label>
 						<Col>
 							<FormGroup>
 								<span>
-									<DatePicker
-										selected={this.state.awalTMT ? new Date(this.state.awalTMT) : this.state.awalTMT}
+									<Datetime
+										timeFormat={false}
+										inputProps={{ className: "form-control" }}
+										value={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"
+										closeOnSelect={true}
+										isValidDate={(e) => {
+											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
+										}}
+
 									/>
 								</span>
 
@@ -229,15 +236,20 @@ export class UploadSurat extends Component {
 						<Col>
 							<FormGroup>
 								<span >
-									<DatePicker
-										selected={this.state.akhirTMT ? new Date(this.state.akhirTMT) : this.state.akhirTMT}
-										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"
+									<Datetime
+										timeFormat={false}
+										inputProps={{ className: "form-control" }}
+										value={this.state.akhirTMT ? new Date(this.state.akhirTMT) : this.state.akhirTMT}
+										onChange={(akhirTMT) => {
+											this.setState({ akhirTMT }, this.setUploadSuratSanksi)
+										}}
+										closeOnSelect={true}
+										isValidDate={(e) => {
+											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)))
+									// }}
 									/>
 								</span>
 							</FormGroup>
@@ -245,7 +257,7 @@ export class UploadSurat extends Component {
 
 					</FormGroup>
 				)}
-				{!this.state.tidakPerluTMTCheck && (
+				{!this.state.tidakPerluTMTCheck && !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") && (
 					<FormGroup row className="mt-1">
 						<label className="col-md-4 col-form-label">TMT berlaku</label>
 						<div className="col-md-8 mt-2">
@@ -253,7 +265,7 @@ export class UploadSurat extends Component {
 						</div>
 					</FormGroup>
 				)}
-				{!this.state.tidakPerluTMTCheck && (
+				{!this.state.tidakPerluTMTCheck && !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") && (
 					<FormGroup row className="mt-1">
 						<label className="col-md-4 col-form-label">TMT</label>
 						<div className="col-md-8 mt-2">
@@ -270,6 +282,7 @@ export class UploadSurat extends Component {
 							formatOptionLabel={formatOptionLabel}
 							onChange={(e) => {
 								this.handleChangeListSanksi(e);
+								this.setsanksi(e)
 							}}
 						/>
 					</div>
@@ -317,16 +330,20 @@ export class UploadSurat extends Component {
 				<FormGroup row className="mt-3">
 					<label className="col-md-4 col-form-label">Tanggal Terima Surat Sanksi<span className="text-danger">*</span></label>
 					<span className="col-sm-8 float-left">
-						<DatePicker
-							selected={this.state.terimaSuratSanksi ? new Date(this.state.terimaSuratSanksi) : this.state.terimaSuratSanksi}
+						<Datetime
+							timeFormat={false}
+							inputProps={{ className: "form-control" }}
+							value={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="DD/MM/YYYY"
-							locale={id}
-							className="form-control bg-white"
+							closeOnSelect={true}
+							isValidDate={(e) => {
+								return e.isAfter(new Date(this.state.awalTMT))
+							}}
+						// isValidDate={(e) => {
+						// 	return e.isAfter(moment(new Date) && e.isBefore(moment(new Date)))
+						// }}
 						/>
 					</span>
 				</FormGroup>
@@ -370,7 +387,7 @@ export class UploadSurat extends Component {
 						<p className="mrgn-top-5 font-color-black">Ukuran setiap dokumen maksimal 15mb</p>
 					</div>
 				</FormGroup>
-				{!this.state.tidakPerluTMTCheck && (
+				{!this.state.tidakPerluTMTCheck && !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") && (
 					<FormGroup row className="mt-3">
 						<label className="col-md-4 col-form-label">Tanggal Akhir Pengajuan Keberatan<span className="text-danger">*</span>
 							<p>
@@ -378,16 +395,17 @@ export class UploadSurat extends Component {
 							</p>
 						</label>
 						<span className="col-sm-8 float-left">
-							<DatePicker
-								selected={this.state.tglAkhirKeberatan ? new Date(this.state.tglAkhirKeberatan) : this.state.tglAkhirKeberatan}
+							<Datetime
+								timeFormat={false}
+								inputProps={{ className: "form-control" }}
+								value={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="DD/MM/YYYY "
-								locale={id}
-								className="form-control bg-white"
+								closeOnSelect={true}
+								isValidDate={(e) => {
+									return e.isAfter(new Date(this.state.terimaSuratSanksi))
+								}}
 							/>
 						</span>
 					</FormGroup>

+ 30 - 28
components/TurunSanksi/InputTanggal.js

@@ -5,8 +5,6 @@ import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
 import { connect } from "react-redux";
 import { getOneSanksi, update } from "@/actions/sanksi";
-import DatePicker from "react-datepicker";
-import "react-datepicker/dist/react-datepicker.css";
 import { addDays, addMonths } from 'date-fns';
 import id from 'date-fns/locale/id';
 import moment from "moment";
@@ -17,6 +15,7 @@ import { getPelanggaranSanksi } from "@/actions/pelanggaran";
 import Select from "react-select";
 import { getCsrf } from "../../actions/security";
 import Swal from "sweetalert2";
+import Datetime from "react-datetime";
 
 const selectInstanceId = 1;
 const checkIfFilesAreTooBig = (files) => {
@@ -255,17 +254,18 @@ class InputTanggal extends Component {
                                         <span className="col-sm-3 float-left">
                                             <Field name="from_date">
                                                 {({ field, form }) => (
-                                                    <DatePicker
-                                                        selected={this.state.from_date}
+                                                    <Datetime
+                                                        timeFormat={false}
+                                                        inputProps={{ className: "form-control" }}
+                                                        value={field.value || "DD/MM/YYYY"}
                                                         onChange={(from_date) => {
-                                                            this.setState({ from_date })
                                                             form.setFieldValue(field.name, from_date);
+                                                            this.setState({ from_date })
+                                                        }}
+                                                        closeOnSelect={true}
+                                                        isValidDate={(e) => {
+                                                            return e.isBefore(new Date())
                                                         }}
-                                                        dateFormat="dd/MM/yyyy"
-                                                        maxDate={this.state.startDay}
-                                                        placeholderText="Dari Tanggal"
-                                                        locale={id}
-                                                        className="form-control bg-white"
                                                     />
                                                 )}
                                             </Field>
@@ -282,17 +282,19 @@ class InputTanggal extends Component {
                                                     <FormGroup>
                                                         <Field name="from_date">
                                                             {({ field, form }) => (
-                                                                <DatePicker
-                                                                    selected={this.state.from_date}
+                                                                <Datetime
+                                                                    timeFormat={false}
+                                                                    inputProps={{ className: "form-control" }}
+                                                                    value={field.value || "DD/MM/YYYY"}
                                                                     onChange={(from_date) => {
-                                                                        this.setState({ from_date })
                                                                         form.setFieldValue(field.name, from_date);
+                                                                        this.setState({ from_date })
                                                                     }}
-                                                                    dateFormat="dd/MM/yyyy"
-                                                                    maxDate={this.state.startDay}
-                                                                    placeholderText="Dari Tanggal"
-                                                                    locale={id}
-                                                                    className="form-control bg-white"
+                                                                    closeOnSelect={true}
+                                                                    isValidDate={(e) => {
+                                                                        return e.isBefore(new Date())
+                                                                    }}
+
                                                                 />
                                                             )}
                                                         </Field>
@@ -303,18 +305,18 @@ class InputTanggal extends Component {
                                                     <FormGroup>
                                                         <Field name="to_date">
                                                             {({ field, form }) => (
-                                                                <DatePicker
-                                                                    selected={this.state.to_date}
+                                                                <Datetime
+                                                                    timeFormat={false}
+                                                                    inputProps={{ className: "form-control" }}
+                                                                    value={field.value || "DD/MM/YYYY"}
                                                                     onChange={(to_date) => {
-                                                                        this.setState({ to_date })
                                                                         form.setFieldValue(field.name, to_date);
+                                                                        this.setState({ to_date })
+                                                                    }}
+                                                                    closeOnSelect={true}
+                                                                    isValidDate={(e) => {
+                                                                        return e.isBefore(addMonths(new Date(this.state.from_date), 6)) && e.isAfter(new Date(this.state.from_date))
                                                                     }}
-                                                                    dateFormat="dd/MM/yyyy"
-                                                                    minDate={this.state.from_date}
-                                                                    maxDate={addMonths(new Date(this.state.from_date), 6)}
-                                                                    placeholderText="Sampai tanggal"
-                                                                    locale={id}
-                                                                    className="form-control bg-white"
                                                                 />
                                                             )}
                                                         </Field>
@@ -378,7 +380,7 @@ class InputTanggal extends Component {
                                                                                 <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">Upload dokumen rekomendasi delegasi</h5>
+                                                                                <h5 className="text-center dz-default dz-message">Upload dokumen Turun Sanksi</h5>
                                                                             </div>
                                                                         }
                                                                         </div>

+ 5 - 5
components/TurunSanksi/TableLaporan.js

@@ -28,7 +28,7 @@ function TableLaporan({ listData, to, linkName, status = false, noBy = false })
 			<div className="card-body card-over">
 				{listData && (
 					<Datatable options={{ responsive: false, ordering: true }}>
-						<table className="table w-100" data-order='[[3, "desc"]]'>
+						<table className="table w-100" data-order='[[0, "desc"]]'>
 							<thead>
 								<tr>
 									<th>No.Laporan</th>
@@ -49,6 +49,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>
 															<h4>{data.laporan.no_laporan}</h4>
 															<p>{moment(data.createdAt).format("DD-MMMM-YYYY")}</p>
 														</div>
@@ -67,17 +68,16 @@ 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>
-													<p className="w-105">{data.laporan.keterangan.length > 100 ? data.laporan.keterangan.substring(0, 100) + "..." : data.laporan.keterangan}</p>
+													<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>
 														Sanksi Administratif : {getLabelSanksi(data.sanksi, "level") === 3 ? "Berat" : getLabelSanksi(data.sanksi, "level") === 2 ? "Sedang" : "Ringan"}
 													</h4>
-													<p className="w-105">{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>}

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

+ 23 - 30
pages/app/banding/detail.js

@@ -3,7 +3,6 @@ import Router from "next/router";
 import Link from "next/link";
 import Select from "react-select";
 import DetailSanksi from "@/components/Main/DetailSanksi";
-import Header from "@/components/Main/Header";
 import DetailPT from "@/components/Main/DetailPT";
 import PermohonanPT from "@/components/Main/PermohonanPT";
 import Riwayat from "@/components/Banding/Riwayat";
@@ -11,16 +10,12 @@ import { getOneSanksi } from "@/actions/sanksi";
 import { addJawabanBanding } from "@/actions/banding";
 import ContentWrapper from "@/components/Layout/ContentWrapper";
 import { Row, Col, Card, CardBody, FormGroup, Button, Modal, ModalHeader, ModalBody, ModalFooter, Input } from "reactstrap";
-import { getPT } from "@/actions/PT";
 import Loader from "@/components/Common/Loader";
 import { toast } from "react-toastify";
 import { connect } from "react-redux";
 import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
 import { createLog } from "@/actions/log";
-import DatePicker from "react-datepicker";
-import "react-datepicker/dist/react-datepicker.css";
-import id from 'date-fns/locale/id';
 import moment from "moment";
 import Datetime from "react-datetime";
 import { getCsrf } from "../../../actions/security";
@@ -325,18 +320,16 @@ class JawabanBanding extends Component {
 																<div className="row-md-10">
 																	<Field name="tanggal_terima_banding">
 																		{({ field, form }) => (
-
-																			<DatePicker
-																				selected={this.state.tglTerimaBanding || field.value}
-																				onChange={(e) => {
-																					form.setFieldValue(field.name, e);
-																					this.setTglTerimaBanding(e)
-																				}}
-																				dateFormat="dd/MM/yyyy"
-																				placeholderText="Isi Tanggal"
-																				locale={id}
-																				className="form-control bg-white"
-																			/>
+																			<Datetime
+																			timeFormat={false}
+																			inputProps={{ className: "form-control" }}
+																			value={field.value || "DD/MM/YYYY"}
+																			onChange={(tglTerimaBanding) => {
+																				form.setFieldValue(field.name, tglTerimaBanding);
+																				this.setState({ tglTerimaBanding })
+																			}}
+																			closeOnSelect={true}
+																		/>
 																		)}
 																	</Field>
 																	<ErrorMessage name="tanggal_terima_banding" component="div" className="form-text text-danger" />
@@ -398,19 +391,19 @@ class JawabanBanding extends Component {
 																<div className="row-md-10">
 																	<Field name="tanggal_surat_banding">
 																		{({ field, form }) => (
-
-																			<DatePicker
-																				selected={this.state.tglSuratBanding || field.value}
-																				onChange={(e) => {
-																					form.setFieldValue(field.name, e);
-																					this.setTglSuratBanding(e)
-																				}}
-																				minDate={tglTerimaBanding}
-																				dateFormat="dd/MM/yyyy"
-																				placeholderText="Isi Tanggal"
-																				locale={id}
-																				className="form-control bg-white"
-																			/>
+																			<Datetime
+																			timeFormat={false}
+																			inputProps={{ className: "form-control" }}
+																			value={field.value || "DD/MM/YYYY"}
+																			onChange={(tglSuratBanding) => {
+																				form.setFieldValue(field.name, tglSuratBanding);
+																				this.setState({ tglSuratBanding })
+																			}}
+																			closeOnSelect={true}
+																			isValidDate={(e) => {
+																				return e.isAfter(new Date(this.state.tglTerimaBanding))
+																			}}
+																		/>
 																		)}
 																	</Field>
 																	<ErrorMessage name="tanggal_surat_banding" component="div" className="form-text text-danger" />

+ 37 - 46
pages/app/keberatan/detail.js

@@ -3,23 +3,18 @@ import Router from "next/router";
 import Link from "next/link";
 import Select from "react-select";
 import DetailSanksi from "@/components/Main/DetailSanksi";
-import Header from "@/components/Main/Header";
 import DetailPT from "@/components/Main/DetailPT";
 import PermohonanPT from "@/components/Main/PermohonanPT";
 import Riwayat from "@/components/Keberatan/Riwayat";
 import { getOneSanksi } from "@/actions/sanksi";
-import { addJawabanKeberatan } from "@/actions/keberatan";
 import ContentWrapper from "@/components/Layout/ContentWrapper";
 import { Row, Col, Card, CardBody, FormGroup, Input, Button, Modal, ModalHeader, ModalBody, ModalFooter } from "reactstrap";
-import { getPT } from "@/actions/PT";
 import Loader from "@/components/Common/Loader";
 import { toast } from "react-toastify";
 import { connect } from "react-redux";
 import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
 import { createLog } from "@/actions/log";
-import DatePicker from "react-datepicker";
-import "react-datepicker/dist/react-datepicker.css";
 import id from 'date-fns/locale/id';
 import moment from "moment";
 import Datetime from "react-datetime";
@@ -213,6 +208,7 @@ class DetailKeberatan extends Component {
 			data.dokumen_terima_keberatan.forEach((e) => {
 				formdata.append("dokumen_terima_keberatan", e);
 			});
+			console.log(data)
 			const toastid = toast.loading("Please wait...");
 			const added = await addJawabanKeberatan(token, id, formdata, _csrf);
 			if (!added) {
@@ -225,12 +221,6 @@ class DetailKeberatan extends Component {
 			}
 		}
 	};
-	setTglTerimaKeberatan = (tglTerimaKeberatan) => {
-		this.setState({ tglTerimaKeberatan })
-	}
-	setTglSuratKeberatan = (tglSuratKeberatan) => {
-		this.setState({ tglSuratKeberatan })
-	}
 
 	render() {
 		const { files, sanksi, pt, fileTTSKeberatan, tglTerimaKeberatan, tglSuratKeberatan } = this.state;
@@ -342,18 +332,16 @@ class DetailKeberatan extends Component {
 																<div className="row-md-10">
 																	<Field name="tanggal_surat_keberatan">
 																		{({ field, form }) => (
-
-																			<DatePicker
-																				selected={this.state.tglSuratKeberatan || field.value}
-																				onChange={(e) => {
-																					form.setFieldValue(field.name, e);
-																					this.setTglSuratKeberatan(e)
-																				}}
-																				dateFormat="dd/MM/yyyy"
-																				placeholderText="Isi Tanggal"
-																				locale={id}
-																				className="form-control bg-white"
-																			/>
+																			<Datetime
+																			timeFormat={false}
+																			inputProps={{ className: "form-control" }}
+																			value={field.value || "DD/MM/YYYY"}
+																			onChange={(tglSuratKeberatan) => {
+																				form.setFieldValue(field.name, tglSuratKeberatan);
+																				this.setState({ tglSuratKeberatan })
+																			}}
+																			closeOnSelect={true}
+																		/>
 																		)}
 																	</Field>
 																	<ErrorMessage name="tanggal_surat_keberatan" component="div" className="form-text text-danger" />
@@ -415,19 +403,20 @@ class DetailKeberatan extends Component {
 																<div className="row-md-10">
 																	<Field name="tanggal_terima_keberatan">
 																		{({ field, form }) => (
+																			<Datetime
+																			timeFormat={false}
+																			inputProps={{ className: "form-control" }}
+																			value={field.value || "DD/MM/YYYY"}
+																			onChange={(tglTerimaKeberatan) => {
+																				form.setFieldValue(field.name, tglTerimaKeberatan);
+																				this.setState({ tglTerimaKeberatan })
+																			}}
+																			closeOnSelect={true}
+																			isValidDate={(e) => {
+																				return e.isAfter(new Date(this.state.tglSuratKeberatan))
+																			}}
 
-																			<DatePicker
-																				selected={this.state.tglTerimaKeberatan || field.value}
-																				onChange={(e) => {
-																					form.setFieldValue(field.name, e);
-																					this.setTglTerimaKeberatan(e)
-																				}}
-																				dateFormat="dd/MM/yyyy"
-																				minDate={tglSuratKeberatan}
-																				placeholderText="Isi Tanggal"
-																				locale={id}
-																				className="form-control bg-white"
-																			/>
+																		/>
 																		)}
 																	</Field>
 																	<ErrorMessage name="tanggal_terima_keberatan" component="div" className="form-text text-danger" />
@@ -490,17 +479,19 @@ class DetailKeberatan extends Component {
 																<div className="row-md-10">
 																	<Field name="tanggal_akhir_banding">
 																		{({ field, form }) => (
-																			<DatePicker
-																				selected={this.state.tglAkhirBanding || field.value}
-																				onChange={(e) => {
-																					form.setFieldValue(field.name, e);
-																				}}
-																				minDate={tglTerimaKeberatan}
-																				dateFormat="dd/MM/yyyy"
-																				placeholderText="Isi Tanggal"
-																				locale={id}
-																				className="form-control bg-white"
-																			/>
+																			<Datetime
+																			timeFormat={false}
+																			inputProps={{ className: "form-control" }}
+																			value={field.value || "DD/MM/YYYY"}
+																			onChange={(tglAkhirBanding) => {
+																				form.setFieldValue(field.name, tglAkhirBanding);
+																				this.setState({ tglAkhirBanding })
+																			}}
+																			closeOnSelect={true}
+																			isValidDate={(e) => {
+																				return e.isAfter(new Date(this.state.tglTerimaKeberatan))
+																			}}
+																		/>
 																		)}
 																	</Field>
 																	<ErrorMessage name="tanggal_akhir_banding" component="div" className="form-text text-danger" />

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

+ 5 - 3
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;
@@ -279,14 +280,15 @@ class ProsesSanksi extends Component {
 	validation = (activeStep) => {
 		const dataUpload = this.state.dataUpload
 		const dataPelanggaran = this.state.dataPelanggaran
-		if (dataUpload?.tidakPerluTMTCheck === true) {
+		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?.terimaSuratSanksi === undefined || dataUpload?.terimaSuratSanksi === "" ||
 				// dataUpload?.tglAkhirKeberatan === undefined || dataUpload?.tglAkhirKeberatanbe === "" ||
 				dataUpload?.filesTandaTerimaSS === undefined || dataUpload?.filesTandaTerimaSS.length === 0 || dataUpload?.filesTandaTerimaSS === null ||
 				dataPelanggaran?.data === undefined

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

+ 1 - 1
styles/app/app/mycss.scss

@@ -209,4 +209,4 @@ border-radius: 4px;
       font-size: 20px;
     }
 
-    ///////////////////////// Menu Verifikasi
+