浏览代码

Version 2.4 ~ 2.2
13 08 2023
fix table penetapan sanksi
fix berita acara in detail sanksi
menu bypass/detail.js
menu verifikasi

andi 2 年之前
父节点
当前提交
54d3fcf9c4
共有 55 个文件被更改,包括 1203 次插入295 次删除
  1. 15 0
      actions/auth.js
  2. 12 0
      actions/cabutSanksi.js
  3. 3 1
      actions/sanksi.js
  4. 1 1
      components/Delegasi/DetailLaporan.js
  5. 4 5
      components/Extras/calendar.view.js
  6. 1 1
      components/Layout/Footer.js
  7. 18 0
      components/Layout/Menu.js
  8. 1 1
      components/Main/ChartdataHome.js
  9. 1 1
      components/Main/DetailLaporan.js
  10. 1 1
      components/Main/DetailSanksi.js
  11. 1 1
      components/Main/PermohonanPT.js
  12. 2 1
      components/Main/TableSanksi.js
  13. 1 1
      components/NaikSanksi/DetailSanksi.js
  14. 2 2
      components/NaikSanksi/InputTanggal.js
  15. 1 1
      components/PT/JawabanBanding/DetailJawaban.js
  16. 1 1
      components/PT/JawabanKeberatan/DetailJawaban.js
  17. 6 6
      components/PT/JawabanKeberatan/ModalPermohonan.js
  18. 28 26
      components/PT/JawabanPencabutanSanksi/TableSanksiJawaban.js
  19. 67 64
      components/PT/Keberatan/ModalPermohonan.js
  20. 4 6
      components/PT/Sanksi/TableSanksi.js
  21. 1 1
      components/PT/TableSanksi.js
  22. 0 5
      components/Pelaporan/InputData.js
  23. 1 1
      components/PelaporanTuntas/DetailLaporan.js
  24. 1 1
      components/Pemeriksaan/DetailLaporan.js
  25. 100 96
      components/Pemeriksaan/InputEvaluasi.js
  26. 12 1
      components/PencabutanSanksi/TableSanksi.js
  27. 1 1
      components/Penjadwalan/DetailLaporan.js
  28. 1 1
      components/PerpanjanganSanksi/DetailSanksi.js
  29. 2 2
      components/PerpanjanganSanksi/InputTanggal.js
  30. 1 1
      components/Public/DetailLaporan.js
  31. 1 1
      components/RekomendasiDelegasi/DetailLaporan.js
  32. 1 1
      components/RekomendasiDelegasi/DetailSanksi.js
  33. 321 0
      components/Sanksi/DetailSanksi.js
  34. 2 2
      components/Sanksi/Ringkasan.js
  35. 202 0
      components/Sanksi/SuratBA _detail.js
  36. 20 10
      components/Sanksi/TablePenetapanSanksi.js
  37. 1 1
      components/TurunSanksi/DetailSanksi.js
  38. 2 2
      components/TurunSanksi/InputTanggal.js
  39. 2 2
      pages/app/banding/detail.js
  40. 75 0
      pages/app/bypass/detail.js
  41. 39 0
      pages/app/bypass/index.js
  42. 1 1
      pages/app/index.js
  43. 5 5
      pages/app/keberatan/detail.js
  44. 1 1
      pages/app/pelaporan/search.js
  45. 7 4
      pages/app/pencabutan-sanksi/detail.js
  46. 1 1
      pages/app/pt/jawaban-pencabutan-sanksi/detail.js
  47. 1 2
      pages/app/sanksi/detail.js
  48. 22 6
      pages/app/sanksi/proses.js
  49. 179 0
      pages/app/verifikasi/index.js
  50. 5 5
      pages/pt/dokumen-perbaikan/detail.js
  51. 3 2
      pages/pt/jawaban-keberatan/detail.js
  52. 1 1
      pages/pt/jawaban-pencabutan-sanksi/detail.js
  53. 8 2
      styles/app/app/mycss.scss
  54. 13 8
      styles/bootstrap/_buttons.scss
  55. 0 8
      styles/bootstrap/_type.scss

+ 15 - 0
actions/auth.js

@@ -42,3 +42,18 @@ export const logout = async () => {
 		if (error.response) return error.response.data;
 	}
 };
+
+export const loginToPt = async (lembaga_id, password) => {
+	const data = {
+		lembaga_id,
+		password,
+	};
+
+	const response = await axiosAPI.post("/auth/login-to-pt", data, {
+		headers: {
+			"Content-Type": "application/json",
+		},
+	});
+
+	return response.data;
+};

+ 12 - 0
actions/cabutSanksi.js

@@ -24,3 +24,15 @@ export const addJawabanCabutSanksi = async (token, id, data) => {
 		return false;
 	}
 };
+
+export const bypassCabutSanksi = async (token, id) => {
+	try {
+		const res = await axios.put(`/sanksi/cabut-sanksi/bypass/${id}`);
+		await createLog(token, { aktivitas: `Berhasil melakukan bypass ke pencabutan sanksi, id: ${id}` });
+		return res.data;
+	} catch (error) {
+		console.log("error", error);
+		await createLog(token, { aktivitas: `Gagal  melakukan bypass ke pencabutan sanksi, id: ${id}` });
+		return false;
+	}
+};

+ 3 - 1
actions/sanksi.js

@@ -1,5 +1,6 @@
 import axiosAPI from "../config/axios";
 import axios from "../config/axios";
+import { bypassCabutSanksi } from "./cabutSanksi";
 import { createLog } from "./log";
 
 export const createSanksi = async (token, id, data) => {
@@ -12,7 +13,7 @@ export const getSanksi = async (token, query = {}) => {
 	try {
 		let url = "/sanksi";
 		if (query != {}) {
-			const { keberatan, jawaban, banding, cabutSanksi, perbaikan, aktif, delegasi, turunSanksi, naikSanksi, pengajuan_keberatan, is_pengajuan_keberatan, is_pengajuan_banding } = query;
+			const { keberatan, jawaban, bypassCabutSanksi, banding, cabutSanksi, perbaikan, aktif, delegasi, turunSanksi, naikSanksi, pengajuan_keberatan, is_pengajuan_keberatan, is_pengajuan_banding } = query;
 			url += "?";
 			const parseURL = [];
 			if (keberatan) parseURL.push(`keberatan=true`);
@@ -24,6 +25,7 @@ export const getSanksi = async (token, query = {}) => {
 			if (turunSanksi) parseURL.push(`turunSanksi=true`);
 			if (naikSanksi) parseURL.push(`naikSanksi=true`);
 			if (aktif === false) parseURL.push(`aktif=false`);
+			if (bypassCabutSanksi) parseURL.push(`bypassCabutSanksi=true`)
 			if (is_pengajuan_keberatan) parseURL.push(`pengajuan_keberatan=true`);
 			url += parseURL.join("&");
 		}

+ 1 - 1
components/Delegasi/DetailLaporan.js

@@ -139,7 +139,7 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
                                 <tbody>
                                     {data.dokumen.map((e, index) => (
                                         <tr key={`files-${index}`}>
-                                            <td>
+                                            <td style={{ width: "30px" }}>
                                                 <em className="fa-lg far fa-file-code"></em>
                                             </td>
                                             <td>

+ 4 - 5
components/Extras/calendar.view.js

@@ -127,7 +127,6 @@ class Calendar extends Component {
 		const { query, token } = this.props;
 		const { id } = query;
 		const { color, laporan } = this.state;
-		console.log(data.dari_tanggal)
 
 		await toast.promise(
 			updateJadwal(token, id, {
@@ -238,7 +237,7 @@ class Calendar extends Component {
 												validationSchema={selectedOption?.value === this.getStatus()[2].value || selectedOption?.value === this.getStatus()[1].value ? laporanSchema : null}
 												onSubmit={this.handleSimpan}
 											>
-												{() => (
+												{({ isSubmitting }) => (
 													<Form>
 														<FormGroup>
 															<label className="col-form-label">Status Laporan</label>
@@ -268,7 +267,7 @@ class Calendar extends Component {
 															</FormGroup>
 														)}
 														<div className="btn-simpanjadwal">
-															<Button className="text-btn-penjadwalan-1 btn-colorpenjadwalan color-3e3a8e" color block disabled={laporan.data?.sanksi}>
+															<Button className="text-btn-penjadwalan-1 btn-colorpenjadwalan color-3e3a8e" color block disabled={laporan.data?.sanksi || isSubmitting} >
 																<h4 className="text-btn-penjadwalan-1 font-color-white">Simpan</h4>
 															</Button>
 														</div>
@@ -296,7 +295,7 @@ class Calendar extends Component {
 														validationSchema={jadwalSchema}
 														onSubmit={this.handleEventCalendar}
 													>
-														{() => (
+														{({ isSubmitting }) => (
 															<Form>
 																<FormGroup>
 																	<label className="col-form-label">Warna</label>
@@ -358,7 +357,7 @@ class Calendar extends Component {
 
 																<FormGroup>
 																	<div className="btn-simpanpenjadwalan">
-																		<Button className="btn-colorpenjadwalan" color block type="submit" disabled={laporan.data?.sanksi}>
+																		<Button className="btn-colorpenjadwalan" color block type="submit" disabled={laporan.data?.sanksi || isSubmitting}>
 																			<h4 className="text-btn-penjadwalan-1 font-color-white">Simpan</h4>
 																		</Button>
 																	</div>

+ 1 - 1
components/Layout/Footer.js

@@ -7,7 +7,7 @@ class Footer extends Component {
         return (
             <footer className="footer-container">
                 <span>Sidali Dikti &copy; {year}</span>
-                <span className=' float-right'>Version 2.3 ~ 2.2</span>
+                <span className=' float-right'>Version 2.4 ~ 2.2</span>
             </footer>
         );
     }

+ 18 - 0
components/Layout/Menu.js

@@ -101,6 +101,24 @@ const Menu = [
 			},
 		],
 	},
+	///////--------Supporting Features-----\\\\\\\\\\
+	{
+		heading: "Supporting Features",
+		translate: "sidebar.heading.SUPPORTING_FEATURES",
+		
+	},
+	{
+		name: "Bypass",
+		path: "/app/bypass",
+		icon: "fas fa-feather",
+		translate: "sidebar.nav.Riwayat",
+	},
+	{
+		name: "Verifikasi",
+		path: "/app/verifikasi",
+		icon: "fas fa-building",
+		translate: "sidebar.nav.Riwayat",
+	},
 
 	///////------ANALYTICS REPORT------\\\\\\\\\\\
 

+ 1 - 1
components/Main/ChartdataHome.js

@@ -121,7 +121,7 @@ class ChartdataHome extends Component {
 						<FlotChart options={this.ChartSpline.options} data={this.state.dataChart.data} className="flot-chart" height="150px" width="300px" />
 					</CardBody>
 					<div align="center">
-						<h5 className="font-weight-bold font-10">Data Statistik Pengunjung Bulan {`${this.convertMonth(new Date().getMonth() + 1)} ${new Date().getFullYear()}`}</h5>
+						<h5 className="font-weight-bold" style={{ fontSize: "12px", marginTop: "3px" }}>Data Statistik Pengunjung Bulan {`${this.convertMonth(new Date().getMonth() + 1)} ${new Date().getFullYear()}`}</h5>
 					</div>
 				</Card>
 			</Col>

+ 1 - 1
components/Main/DetailLaporan.js

@@ -145,7 +145,7 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
 								<tbody>
 									{data.dokumen.map((e, index) => (
 										<tr key={`files-${index}`}>
-											<td>
+											<td style={{ width: "30px" }}>
 												<em className="fa-lg far fa-file-code"></em>
 											</td>
 											<td>

+ 1 - 1
components/Main/DetailSanksi.js

@@ -61,7 +61,7 @@ function DetailSanksi({ data, noTitle = false }) {
 								<tbody>
 									{data.dokumen.map((e) => (
 										<tr>
-											<td>
+											<td style={{ width: "30px" }}>
 												<em className="fa-lg far fa-file-code"></em>
 											</td>
 											<td>

+ 1 - 1
components/Main/PermohonanPT.js

@@ -14,7 +14,7 @@ function PermohonanPT({ data, title = null }) {
 								<tbody>
 									{data.dokumen.map((e) => (
 										<tr>
-											<td>
+											<td  style={{ width: "30px" }}>
 												<em className="fa-lg far fa-file-code"></em>
 											</td>
 											<td>

+ 2 - 1
components/Main/TableSanksi.js

@@ -9,7 +9,8 @@ function TableSanksi({ listData, to, linkName }) {
 			<div className="card-body card-over">
 				{listData && (
 					<Datatable options={{ responsive: false, ordering: true }}>
-						<table className="table w-100" >
+						{/* <table className="table w-100" data-order='[[2, "asc"], [3, "desc"]]'> */}
+						<table className="table w-100" data-order='[[2, "asc"]]'>
 							<thead>
 								<tr>
 									<th>Nomor Sanksi</th>

+ 1 - 1
components/NaikSanksi/DetailSanksi.js

@@ -108,7 +108,7 @@ function DetailSanksi({ data, noTitle = false }) {
 									<tbody>
 										{data.dokumen.map((e) => (
 											<tr>
-												<td>
+												<td  style={{ width: "30px" }}>
 													<em className="fa-lg far fa-file-code"></em>
 												</td>
 												<td>

+ 2 - 2
components/NaikSanksi/InputTanggal.js

@@ -205,7 +205,7 @@ class InputTanggal extends Component {
                         validationSchema={rekomendasiSchema}
                         onSubmit={this.handelSimpan}
                     >
-                        {() => (
+                        {({ isSubmitting }) => (
                             <Form className="form-horizontal">
                                 <FormGroup row>
                                     <label className="col-md-2 col-form-label">Nomor Surat</label>
@@ -393,7 +393,7 @@ class InputTanggal extends Component {
                                 </FormGroup>
                                 <FormGroup row>
                                     <div className="col-xl-10">
-                                        <Button color className="color-3e3a8e btn-login" type="submit">
+                                        <Button color className="color-3e3a8e btn-login" type="submit" disabled={isSubmitting}>
                                             <span className="font-color-white">Kirim</span>
                                         </Button>
                                     </div>

+ 1 - 1
components/PT/JawabanBanding/DetailJawaban.js

@@ -22,7 +22,7 @@ function DetailJawaban({ data, sanksiId }) {
 									<tbody>
 										{data.dokumen.map((e) => (
 											<tr>
-												<td>
+												<td  style={{ width: "30px" }}>
 													<em className="fa-lg far fa-file-code"></em>
 												</td>
 												<td>

+ 1 - 1
components/PT/JawabanKeberatan/DetailJawaban.js

@@ -26,7 +26,7 @@ function DetailJawaban({ data }) {
 								<tbody>
 									{data.dokumen.map((e) => (
 										<tr>
-											<td>
+											<td  style={{ width: "30px" }}>
 												<em className="fa-lg far fa-file-code"></em>
 											</td>
 											<td>

+ 6 - 6
components/PT/JawabanKeberatan/ModalPermohonan.js

@@ -97,6 +97,7 @@ export class ModalPermohonan extends Component {
 	};
 
 	onSubmit = async (data) => {
+		this.props.toggleModal()
 		const { query, token } = this.props;
 		const { id } = query;
 		const formdata = new FormData();
@@ -105,9 +106,6 @@ export class ModalPermohonan extends Component {
 				formdata.append("dokumen", e);
 			});
 		}
-		this.setState({
-			modal1: !this.state.modal1,
-		});
 
 		const toastid = toast.loading("Please wait...");
 		const added = await addBanding(token, id, formdata);
@@ -144,14 +142,14 @@ export class ModalPermohonan extends Component {
 		return (
 			<>
 				<Modal isOpen={this.props.modal} toggle={this.props.toggleModal}>
-					<ModalHeader toggle={this.toggleModal1}>Upload Dokumen Banding</ModalHeader>
+					<ModalHeader >Upload Dokumen Banding</ModalHeader>
 					<Formik
 						initialValues={{
 							dokumen: [],
 						}}
 						validationSchema={evaluasiSchema}
 						onSubmit={this.onSubmit}
-					>
+					>{({ isSubmitting }) => (
 						<Form className="form-horizontal">
 							<ModalBody>
 								<FormGroup>
@@ -214,11 +212,13 @@ export class ModalPermohonan extends Component {
 								</FormGroup>
 							</ModalBody>
 							<ModalFooter>
-								<Button color className="btn-login" type="submit">
+								<Button color className="btn-login" type="submit" disabled={isSubmitting}>
 									<span className="font-color-white">Kirim</span>
 								</Button>
 							</ModalFooter>
 						</Form>
+					)}
+
 					</Formik>
 				</Modal>
 			</>

+ 28 - 26
components/PT/JawabanPencabutanSanksi/TableSanksiJawaban.js

@@ -10,8 +10,6 @@ function TableSanksi({ listData, to, linkName }) {
 					<thead>
 						<tr>
 							<th>Nomor Sanksi</th>
-							<th>Keterangan Sanksi</th>
-							{/* <th>Created</th> */}
 							<th>Status</th>
 						</tr>
 					</thead>
@@ -19,7 +17,6 @@ function TableSanksi({ listData, to, linkName }) {
 						{listData.map((data) => {
 							return (
 								<tr key={data._id}>
-									{/* <td>{data.no_sanksi}</td> */}
 									<td>
 										<div className="media align-items-center">
 											<div className="media-body d-flex">
@@ -30,34 +27,39 @@ function TableSanksi({ listData, to, linkName }) {
 											</div>
 										</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}</h4> */}
-														<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.keterangan.length > 150 ? data.keterangan.substring(0, 150) + "..." : data.keterangan}</p> */}
-														<p className="w-105">{data.keterangan}</p>
-													</div>
-												</div>
-											</div>
-										</div>
-									</td>
-									{/* <td>{moment(data.createdAt).format("DD MMMM YYYY")}</td> */}
 									<td>
 										{data.jawaban?.cabut_sanksi ? (
-											<Link href={{ pathname: to, query: { id: data._id } }}>
-												<Button className="btn-login" color >
-													<span className="font-color-white">
-														{linkName}
-													</span>
-												</Button>
-											</Link>
+											<div>
+												<div className="badge-success badge">Sudah Dijawab</div>
+												<p className="w-105">Sudah terjawab terkait permohonan pencabutan sanksi</p>
+											</div>
+
+
 										) : (
-											<div className="badge-info badge">Menunggu Jawaban</div>
+											<div>
+												<div className="badge-info badge">Menunggu Jawaban</div>
+												<p className="w-105">Menunggu jawaban terkait permohonan pencabutan sanksi</p>
+											</div>
+
 										)}
 									</td>
+									<td>{data.jawaban?.cabut_sanksi ? (
+										<Link href={{ pathname: to, query: { id: data._id } }} >
+											<Button className="btn-login" color >
+												<span className="font-color-white">
+													{linkName}
+												</span>
+											</Button>
+										</Link>
+									) : (
+										<Button className="btn-login" color disabled={true} >
+											<span className="font-color-white">
+												{linkName}
+											</span>
+										</Button>
+									)}
+
+									</td>
 								</tr>
 							);
 						})}

+ 67 - 64
components/PT/Keberatan/ModalPermohonan.js

@@ -167,75 +167,78 @@ export class ModalPermohonan extends Component {
 						validationSchema={evaluasiSchema}
 						onSubmit={this.onSubmit}
 					>
-						<Form className="form-horizontal">
-							<ModalBody>
-								<FormGroup>
-									<label>Dalam hal mengajukan permohonan keberatan maka wajib mengunggah surat permohonan keberatan & dokumen pendukungnya</label>
-									<div>
-										<Field name="dokumen">
-											{({ field, form, meta }) => (
-												<DropzoneWrapper
-													className=""
-													onDrop={(e) => {
-														this.onDrop(e);
-														form.setFieldValue(field.name, e);
-													}}
-												>
-													{({ getRootProps, getInputProps, isDragActive }) => {
-														return (
-															<div {...getRootProps()} className={"dropzone card" + (isDragActive ? "dropzone-drag-active" : "")}>
-																<input {...getInputProps()} />
-																<div className="dropzone-previews flex">
-																	<div className="dropzone-style-1">
-																		<div className="center-ver-hor dropzone-previews flex">{this.state.files.length > 0 ?
-																			<div className="text-center fa-2x icon-cloud-upload mr-2 ">
-																				<h5 className="text-center dz-default dz-message">Klik untuk tambah file</h5>
-																			</div> :
-																			<div className="text-center fa-2x icon-cloud-upload mr-2 ">
-																				<h5 className="text-center dz-default dz-message">Klik untuk upload dokumen</h5>
+						{({ isSubmitting }) => (
+							<Form className="form-horizontal">
+								<ModalBody>
+									<FormGroup>
+										<label>Dalam hal mengajukan permohonan keberatan maka wajib mengunggah surat permohonan keberatan & dokumen pendukungnya</label>
+										<div>
+											<Field name="dokumen">
+												{({ field, form, meta }) => (
+													<DropzoneWrapper
+														className=""
+														onDrop={(e) => {
+															this.onDrop(e);
+															form.setFieldValue(field.name, e);
+														}}
+													>
+														{({ getRootProps, getInputProps, isDragActive }) => {
+															return (
+																<div {...getRootProps()} className={"dropzone card" + (isDragActive ? "dropzone-drag-active" : "")}>
+																	<input {...getInputProps()} />
+																	<div className="dropzone-previews flex">
+																		<div className="dropzone-style-1">
+																			<div className="center-ver-hor dropzone-previews flex">{this.state.files.length > 0 ?
+																				<div className="text-center fa-2x icon-cloud-upload mr-2 ">
+																					<h5 className="text-center dz-default dz-message">Klik untuk tambah file</h5>
+																				</div> :
+																				<div className="text-center fa-2x icon-cloud-upload mr-2 ">
+																					<h5 className="text-center dz-default dz-message">Klik untuk upload dokumen</h5>
+																				</div>
+																			}
 																			</div>
-																		}
 																		</div>
 																	</div>
+																	<div className="d-flex align-items-center">
+																		<small className="ml-auto">
+																			<button
+																				type="button"
+																				className="btn btn-link"
+																				onClick={(e) => {
+																					this.clearFiles(e);
+																					form.setFieldValue(field.name, []);
+																				}}
+																			>
+																				Reset dokumen
+																			</button>
+																		</small>
+																	</div>
 																</div>
-																<div className="d-flex align-items-center">
-																	<small className="ml-auto">
-																		<button
-																			type="button"
-																			className="btn btn-link"
-																			onClick={(e) => {
-																				this.clearFiles(e);
-																				form.setFieldValue(field.name, []);
-																			}}
-																		>
-																			Reset dokumen
-																		</button>
-																	</small>
-																</div>
-															</div>
-														);
-													}}
-												</DropzoneWrapper>
-											)}
-										</Field>
-										<div>
-											{thumbs}
+															);
+														}}
+													</DropzoneWrapper>
+												)}
+											</Field>
+											<div>
+												{thumbs}
+											</div>
+											<ErrorMessage name="dokumen" component="div" className="form-text text-danger" />
+											<p className="mrgn-top-5 font-color-black">
+												Ukuran setiap dokumen maksimal 15mb
+											</p>
 										</div>
-										<ErrorMessage name="dokumen" component="div" className="form-text text-danger" />
-										<p className="mrgn-top-5 font-color-black">
-											Ukuran setiap dokumen maksimal 15mb
-										</p>
-									</div>
-								</FormGroup>
-							</ModalBody>
-							<ModalFooter>
-
-								<Button color className="btn-login" type="submit">
-									<span className="font-color-white">Kirim</span>
-								</Button>
-
-							</ModalFooter>
-						</Form>
+									</FormGroup>
+								</ModalBody>
+								<ModalFooter>
+
+									<Button color className="btn-login" type="submit" disabled={isSubmitting}>
+										<span className="font-color-white">Kirim</span>
+									</Button>
+
+								</ModalFooter>
+							</Form>
+						)}
+
 					</Formik>
 				</Modal>
 			</>

+ 4 - 6
components/PT/Sanksi/TableSanksi.js

@@ -17,7 +17,6 @@ function TableSanksi({ listData, to, linkName, toKeberatan, toJwbBanding, toJwbK
 						{listData.map((data) => {
 							return (
 								<tr key={data._id}>
-									{/* <td>{data.no_sanksi}</td> */}
 									<td>
 										<div className="media align-items-center">
 											<div className="media-body d-flex">
@@ -28,8 +27,7 @@ function TableSanksi({ listData, to, linkName, toKeberatan, toJwbBanding, toJwbK
 											</div>
 										</div>
 									</td>
-									{/* <td>{moment(data.createdAt).format("DD MMMM YYYY")}</td> */}
-									<td>{data.is_pengajuan_keberatan === true || data.is_pengajuan_keberatan === false ?
+									<td>{data.is_pengajuan_keberatan === true || data.is_pengajuan_keberatan === false || data.last_step ?
 										<div>
 											<div className="badge badge-green">{data.last_step}</div>
 											{data.last_step === "Permohonan Keberatan" && (
@@ -38,12 +36,12 @@ function TableSanksi({ listData, to, linkName, toKeberatan, toJwbBanding, toJwbK
 											{data.last_step === "Jawaban Atas Permohonan Keberatan" && (
 												<p className="w-105">PDDIKTI sudah memberikan jawaban atas permohonan keberatan</p>
 											)}
+											{data.last_step === "Jawaban Atas Permohonan Banding" && (
+												<p className="w-105">PDDIKTI sudah memberikan jawaban atas permohonan banding</p>
+											)}
 											{data.last_step === "Permohonan Banding" && (
 												<p className="w-105">Sanksi dalam proses pengajuan permohonan banding</p>
 											)}
-											{data.last_step === "Jawaban Atas Permohonan Banding" && (
-												<p className="w-105">PDDIKTI sudah memberikan jawaban atas permohonan banding</p>
-											)}
 											{data.last_step === "Permohonan Pencabutan Sanksi" && (
 												<p className="w-105">Sanksi dalam proses permohonan pencabutan sanksi</p>
 											)}

+ 1 - 1
components/PT/TableSanksi.js

@@ -12,7 +12,7 @@ function TableSanksi({ listData, to, linkName }) {
 							<th>Nomor Surat Sanksi</th>
 							{/* <th>Keterangan Sanksi</th> */}
 							{/* <th>Created</th> */}
-							<th>dd</th>
+							<th>Aksi</th>
 						</tr>
 					</thead>
 					<tbody>

+ 0 - 5
components/Pelaporan/InputData.js

@@ -137,11 +137,6 @@ export class InputData extends Component {
 		formdata.append("pt_id", query.ptId);
 		formdata.append("keterangan", data.keterangan);
 		formdata.append("pelanggaran_id", data.pelanggaran.join());
-		// if (data.dokumen.length > 0) {
-		// 	data.dokumen.forEach((e) => {
-		// 		formdata.append("dokumen", e);
-		// 	});
-		// }
 		this.state.files.forEach((e) => {
 			formdata.append("dokumen", e);
 		});

+ 1 - 1
components/PelaporanTuntas/DetailLaporan.js

@@ -139,7 +139,7 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
 								<tbody>
 									{data.dokumen.map((e, index) => (
 										<tr key={`files-${index}`}>
-											<td>
+											<td style={{ width: "30px" }}>
 												<em className="fa-lg far fa-file-code"></em>
 											</td>
 											<td>

+ 1 - 1
components/Pemeriksaan/DetailLaporan.js

@@ -144,7 +144,7 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
 								<tbody>
 									{data.dokumen.map((e, index) => (
 										<tr key={`files-${index}`}>
-											<td>
+											<td style={{ width: "30px" }}>
 												<em className="fa-lg far fa-file-code"></em>
 											</td>
 											<td>

+ 100 - 96
components/Pemeriksaan/InputEvaluasi.js

@@ -189,108 +189,112 @@ class InputEvaluasi extends Component {
 					validationSchema={evaluasiSchema}
 					onSubmit={this.onSubmit}
 				>
-					<Form className="form-horizontal">
-						<FormGroup row>
-							<label className="col-md-2 col-form-label">Tanggal Dokumen</label>
-							<div className="col-md-10">
-								<Field name="tanggal">
-									{({ field, form }) => (
-										<Datetime
-											timeFormat={false}
-											inputProps={{ className: "form-control" }}
-											value={field.value}
-											onChange={(e) => {
-												form.setFieldValue(field.name, e);
-											}}
-										/>
-									)}
-								</Field>
-								<ErrorMessage name="tanggal" component="div" className="form-text text-danger" />
-							</div>
-						</FormGroup>
-						<FormGroup row>
-							<label className="col-md-2 col-form-label">Judul Dokumen</label>
-							<div className="col-md-10">
-								<Field name="judul">{({ field, form }) => <Input type="text" placeholder="judul" {...field} />}</Field>
-								<ErrorMessage name="judul" component="div" className="form-text text-danger" />
-							</div>
-						</FormGroup>
-						<FormGroup row>
-							<label className="col-md-2 col-form-label">Upload File Pendukung<span className="text-danger">*</span></label>
-							<div className="col-md-10">
-								<Field name="dokumen">
-									{({ field, form, meta }) => (
-										<DropzoneWrapper
-											className=""
-											onDrop={(e) => {
-												this.onDrop(e);
-												form.setFieldValue(field.name, e);
-											}}
-										>
-											{({ getRootProps, getInputProps, isDragActive }) => {
-												return (
-													<div {...getRootProps()} className={"dropzone card" + (isDragActive ? "dropzone-drag-active" : "")}>
-														<input name="dokumen" {...getInputProps()} />
-														<div className="dropzone-style-1">
-															<div className="center-ver-hor dropzone-previews flex">{this.state.files.length > 0 ?
-																<div className="text-center fa-2x icon-cloud-upload mr-2 ">
-																	<h5 className="text-center dz-default dz-message">Klik untuk tambah file</h5>
-																</div> :
-																<div className="text-center fa-2x icon-cloud-upload mr-2 ">
-																	<h5 className="text-center dz-default dz-message">Klik untuk upload dokumen</h5>
+					{({ isSubmitting }) => (
+						<Form className="form-horizontal">
+							<FormGroup row>
+								<label className="col-md-2 col-form-label">Tanggal Evaluasi</label>
+								<div className="col-md-10">
+									<Field name="tanggal">
+										{({ field, form }) => (
+											<Datetime
+												timeFormat={false}
+												inputProps={{ className: "form-control" }}
+												value={field.value}
+												onChange={(e) => {
+													form.setFieldValue(field.name, e);
+												}}
+											/>
+										)}
+									</Field>
+									<ErrorMessage name="tanggal" component="div" className="form-text text-danger" />
+								</div>
+							</FormGroup>
+							<FormGroup row>
+								<label className="col-md-2 col-form-label">Judul Dokumen</label>
+								<div className="col-md-10">
+									<Field name="judul">{({ field, form }) => <Input type="text" placeholder="judul" {...field} />}</Field>
+									<ErrorMessage name="judul" component="div" className="form-text text-danger" />
+								</div>
+							</FormGroup>
+							<FormGroup row>
+								<label className="col-md-2 col-form-label">Upload File Pendukung<span className="text-danger">*</span></label>
+								<div className="col-md-10">
+									<Field name="dokumen">
+										{({ field, form, meta }) => (
+											<DropzoneWrapper
+												className=""
+												onDrop={(e) => {
+													this.onDrop(e);
+													form.setFieldValue(field.name, e);
+												}}
+											>
+												{({ getRootProps, getInputProps, isDragActive }) => {
+													return (
+														<div {...getRootProps()} className={"dropzone card" + (isDragActive ? "dropzone-drag-active" : "")}>
+															<input name="dokumen" {...getInputProps()} />
+															<div className="dropzone-style-1">
+																<div className="center-ver-hor dropzone-previews flex">{this.state.files.length > 0 ?
+																	<div className="text-center fa-2x icon-cloud-upload mr-2 ">
+																		<h5 className="text-center dz-default dz-message">Klik untuk tambah file</h5>
+																	</div> :
+																	<div className="text-center fa-2x icon-cloud-upload mr-2 ">
+																		<h5 className="text-center dz-default dz-message">Klik untuk upload dokumen</h5>
+																	</div>
+																}
 																</div>
-															}
+															</div>
+															<div className="d-flex align-items-center">
+																<small className="ml-auto">
+																	<button
+																		type="button"
+																		className="btn btn-link"
+																		onClick={(e) => {
+																			this.clearFiles(e);
+																			form.setFieldValue(field.name, []);
+																		}}
+																	>
+																		Reset dokumen
+																	</button>
+																</small>
 															</div>
 														</div>
-														<div className="d-flex align-items-center">
-															<small className="ml-auto">
-																<button
-																	type="button"
-																	className="btn btn-link"
-																	onClick={(e) => {
-																		this.clearFiles(e);
-																		form.setFieldValue(field.name, []);
-																	}}
-																>
-																	Reset dokumen
-																</button>
-															</small>
-														</div>
-													</div>
-												);
-											}}
-										</DropzoneWrapper>
-									)}
-								</Field>
-								{thumbs}
-								<ErrorMessage name="dokumen" component="div" className="form-text text-danger" />
-								<p className="mrgn-top-5 font-color-black">
-									Ukuran setiap dokumen maksimal 15mb
-								</p>
-							</div>
-						</FormGroup>
-						{this.props.user?.role.id === 2021 ? (
-							<FormGroup row>
-								<label className="col-md-2 col-form-label">Delegasi ke dikti</label>
-								<div className="col-md-10 mt-2">
-									<div className="checkbox c-checkbox">
-										<label>
-											<Input type="checkbox" onChange={this.handlechecklist} defaultChecked={this.state.delegasichecklist} />
-											<span className="fa fa-check"></span></label>
+													);
+												}}
+											</DropzoneWrapper>
+										)}
+									</Field>
+									{thumbs}
+									<ErrorMessage name="dokumen" component="div" className="form-text text-danger" />
+									<p className="mrgn-top-5 font-color-black">
+										Ukuran setiap dokumen maksimal 15mb
+									</p>
+								</div>
+							</FormGroup>
+							{this.props.user?.role.id === 2021 ? (
+								<FormGroup row>
+									<label className="col-md-2 col-form-label">Delegasi ke dikti</label>
+									<div className="col-md-10 mt-2">
+										<div className="checkbox c-checkbox">
+											<label>
+												<Input type="checkbox" onChange={this.handlechecklist} defaultChecked={this.state.delegasichecklist} />
+												<span className="fa fa-check"></span></label>
+										</div>
 									</div>
+								</FormGroup>
+							) : ("")}
+							<FormGroup row>
+								<div className="col-xl-10">
+									<Button color className="btn-login" type="submit" disabled={isSubmitting}>
+										<span className="font-color-white">
+											Simpan Evaluasi
+										</span>
+									</Button>
 								</div>
 							</FormGroup>
-						) : ("")}
-						<FormGroup row>
-							<div className="col-xl-10">
-								<Button color className="btn-login" type="submit">
-									<span className="font-color-white">
-										Simpan Evaluasi
-									</span>
-								</Button>
-							</div>
-						</FormGroup>
-					</Form>
+						</Form>
+
+					)}
+
 				</Formik>
 			</>
 		);

+ 12 - 1
components/PencabutanSanksi/TableSanksi.js

@@ -49,7 +49,18 @@ function TableSanksi({ listData, to, linkName }) {
 												</div>
 											</td>
 											{/* <td>{moment(data.createdAt).fromNow()}</td> */}
-											<td>{data.jawaban?.cabut_sanksi ? <div className="badge badge-green">Sudah Dijawab</div> : <div className="badge badge-red">Belum Dijawab</div>}</td>
+											<td>{data.jawaban?.cabut_sanksi?.status === "Rekomendasi Perbaikan" ?
+												<div>
+													<div className="badge badge-green">
+														Sudah Dijawab
+													</div>
+													<p className="w-105">Rekomendasi Perbaikan</p>
+												</div>
+												:
+												<div className="badge badge-red">
+													Belum Dijawab
+												</div>}
+											</td>
 											<td>
 												<div className="ml-auto">
 													<Link

+ 1 - 1
components/Penjadwalan/DetailLaporan.js

@@ -144,7 +144,7 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
 								<tbody>
 									{data.dokumen.map((e, index) => (
 										<tr key={`files-${index}`}>
-											<td>
+											<td style={{ width: "30px" }}>
 												<em className="fa-lg far fa-file-code"></em>
 											</td>
 											<td>

+ 1 - 1
components/PerpanjanganSanksi/DetailSanksi.js

@@ -126,7 +126,7 @@ function DetailSanksi({ data, noTitle = false }) {
 									<tbody>
 										{data.dokumen.map((e) => (
 											<tr>
-												<td>
+												<td  style={{ width: "30px" }}>
 													<em className="fa-lg far fa-file-code"></em>
 												</td>
 												<td>

+ 2 - 2
components/PerpanjanganSanksi/InputTanggal.js

@@ -186,7 +186,7 @@ class InputTanggal extends Component {
                             await this.handelSimpan();
                         }}
                     >
-                        {() => (
+                        {({ isSubmitting }) => (
                             <Form className="form-horizontal">
                                 <FormGroup row className="mt-3">
                                     <label className="col-md-2 col-form-label">Tanggal Perpanjangan Sanksi :</label>
@@ -294,7 +294,7 @@ class InputTanggal extends Component {
                                 </FormGroup>
                                 <FormGroup row>
                                     <div className="col-xl-10">
-                                        <Button color className="color-3e3a8e btn-login" type="submit">
+                                        <Button color className="color-3e3a8e btn-login" type="submit" disable={isSubmitting}>
                                             <span className="font-color-white">Kirim</span>
                                         </Button>
                                     </div>

+ 1 - 1
components/Public/DetailLaporan.js

@@ -60,7 +60,7 @@ function DetailLaporan({ data }) {
 								<tbody>
 									{data.dokumen.map((e, index) => (
 										<tr key={index}>
-											<td>
+											<td  style={{ width: "30px" }}>
 												<em className="fa-lg far fa-file-code"></em>
 											</td>
 											<td>

+ 1 - 1
components/RekomendasiDelegasi/DetailLaporan.js

@@ -146,7 +146,7 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
 								<tbody>
 									{data.dokumen.map((e, index) => (
 										<tr key={`files-${index}`}>
-											<td>
+											<td  style={{ width: "30px" }}>
 												<em className="fa-lg far fa-file-code"></em>
 											</td>
 											<td>

+ 1 - 1
components/RekomendasiDelegasi/DetailSanksi.js

@@ -64,7 +64,7 @@ function DetailSanksi({ data, noTitle = false }) {
 									<tbody>
 										{data.dokumen.map((e) => (
 											<tr>
-												<td>
+												<td  style={{ width: "30px" }}>
 													<em className="fa-lg far fa-file-code"></em>
 												</td>
 												<td>

+ 321 - 0
components/Sanksi/DetailSanksi.js

@@ -0,0 +1,321 @@
+import Scrollable from "@/components/Common/Scrollable";
+import moment from "moment";
+import { Col, FormGroup, Table, Button } from "reactstrap";
+import { API_URL } from "@/env";
+import React, { Component } from "react";
+import { getOneSanksi } from "../../actions/sanksi";
+import ReactToPrint, { PrintContextConsumer } from 'react-to-print';
+import ComponentBA from "../Sanksi/SuratBA _detail";
+import Link from "next/dist/client/link";
+
+
+
+
+class DetailSanksi extends Component {
+	constructor(props) {
+		super(props);
+		this.state = {
+			sanksi: {},
+		};
+	}
+
+	static getInitialProps = async ({ query }) => {
+		return { query };
+	};
+
+	componentDidMount = async () => {
+		const { query, token } = this.props;
+		const sanksi = await getOneSanksi(token, query.id);
+		this.setState({ sanksi });
+	};
+
+	render() {
+		const { sanksi } = this.state
+		return (
+			<>
+				<p className="lead bb">Detail Sanksi</p>
+				{sanksi.data &&
+					<form className="form-horizontal">
+						<FormGroup row>
+							<Col md="4">Nomor Sanksi:</Col>
+							<Col md="8">
+								<strong>{sanksi.data.no_sanksi}</strong>
+							</Col>
+						</FormGroup>
+						<FormGroup row>
+							<Col md="4">Nama Perguruan Tinggi:</Col>
+							<Col md="8">
+								<strong>{sanksi.data.laporan.pt.nama}</strong>
+							</Col>
+						</FormGroup>
+						<FormGroup row>
+					<Col md="4">Keterangan:</Col>
+					<Col md="8">
+						<Scrollable height="100px" className="list-group">
+							<p>{sanksi.data.keterangan}</p>
+						</Scrollable>
+					</Col>
+				</FormGroup>
+				<FormGroup row>
+					<Col md="4">Tanggal Penetapan Sanksi:</Col>
+					<Col md="8">
+						<strong>{moment(sanksi.data.masa_berlaku?.from_date).locale("id").format("D MMMM YYYY")}</strong>
+					</Col>
+				</FormGroup>
+				{
+					sanksi.data.tanggal_akhir_keberatan &&
+					<FormGroup row>
+						<Col md="4">Tanggal Akhir Pengajuan Keberatan</Col>
+						<Col md="8">
+							<strong>{moment(sanksi.data.tanggal_akhir_keberatan).locale("id").format("D MMMM YYYY")}</strong>
+						</Col>
+					</FormGroup>
+				}
+				{
+					sanksi.data.jawaban?.keberatan?.tanggal_akhir_banding &&
+					<FormGroup row>
+						<Col md="4">Tanggal Akhir Pengajuan Banding:</Col>
+						<Col md="8">
+							<strong>{moment(sanksi.data.jawaban?.keberatan?.tanggal_akhir_banding).locale("id").format("D MMMM YYYY")}</strong>
+						</Col>
+					</FormGroup>
+				}
+				<FormGroup row>
+					<Col md="4">Dokumen Sanksi:</Col>
+					<Col md="8">
+						<Scrollable height="120px" className="list-group">
+							<table className="table table-bordered bg-transparent">
+								<tbody>
+									{sanksi.data.dokumen.map((e) => (
+										<tr>
+											<td style={{ width: "30px" }}>
+												<em className="fa-lg far fa-file-code"></em>
+											</td>
+											<td>
+												<a className="text-muted" href={e.path} target="_blank" download={e.judul}>
+													{e.judul}
+												</a>
+											</td>
+										</tr>
+									))}
+								</tbody>
+							</table>
+						</Scrollable>
+					</Col>
+				</FormGroup>
+
+						<FormGroup row>
+							<Col md="4">Dokumen Acara Pleno:</Col>
+							<Col md="8">
+								<div>
+									<ReactToPrint
+										trigger={() => {
+											return <span>
+												<Link
+													href={{
+														pathname: "/app/sanksi/detail",
+														query: { id: this.props.query.id },
+													}}>
+													<Button color className="btn-labeled-4 mt-0">
+														<h5 className="p-0 mt-2"><em className="fas fa-download mr-2" />Print dan Download</h5>
+													</Button>
+												</Link>
+											</span>
+										}}
+										content={() => this.componentRef}
+									/>
+									<div style={{ display: "none" }}>
+										<ComponentBA ref={el => (this.componentRef = el)} query={this.props.query} />
+									</div>
+								</div>{/* <BeritaAcara
+							query={this.props.query}
+						/> */}
+							</Col>
+						</FormGroup>
+						<FormGroup row>
+					<Col md={12}>
+						<div className="card b">
+							<div className="card-body bb">
+								<Table responsive>
+									<thead>
+										<tr>
+											<th>Jenis Pelanggaran</th>
+											<th>Sanksi</th>
+										</tr>
+									</thead>
+									<tbody>
+										{sanksi.data.pelanggaran.map((jp, index) => (
+											<tr key={jp._id}>
+												<td width={50}>
+													<div className="media align-items-center">
+														<div className="media-body d-flex">
+															<div>
+																<p>{jp.pelanggaran}</p>
+																<p>TMT : {jp.tmt_bulan} Bulan</p>
+																<p>Jenis Sanksi Administratif : {jp.label_sanksi}</p>
+															</div>
+														</div>
+													</div>
+												</td>
+												<td width={50}>
+													<div className="media align-items-center">
+														<div className="media-body d-flex">
+															<div>
+																<p>{jp.sanksi}</p>
+																<p>Keterangan : {jp.keterangan_sanksi}</p>
+															</div>
+														</div>
+													</div>
+												</td>
+											</tr>
+										))}
+									</tbody>
+								</Table>
+							</div>
+						</div>
+					</Col>
+				</FormGroup>
+
+					</form>
+				}
+
+			</>
+		)
+	}
+
+
+
+}
+
+
+
+// function DetailSanksi({ data, noTitle = false, query }) {
+
+// 	return (
+// 		<>
+// 			{noTitle ? "" : <p className="lead bb">Detail Sanksi</p>}
+// <form className="form-horizontal">
+// 	<FormGroup row>
+// 		<Col md="4">Nomor Sanksi:</Col>
+// 		<Col md="8">
+// 			<strong>{data.no_sanksi}</strong>
+// 		</Col>
+// 	</FormGroup>
+// 	<FormGroup row>
+// 		<Col md="4">Nama Perguruan Tinggi:</Col>
+// 		<Col md="8">
+// 			<strong>{data.laporan.pt.nama}</strong>
+// 		</Col>
+// 	</FormGroup>
+// 	<FormGroup row>
+// 		<Col md="4">Keterangan:</Col>
+// 		<Col md="8">
+// 			<Scrollable height="100px" className="list-group">
+// 				<p>{data.keterangan}</p>
+// 			</Scrollable>
+// 		</Col>
+// 	</FormGroup>
+// 	<FormGroup row>
+// 		<Col md="4">Tanggal Penetapan Sanksi:</Col>
+// 		<Col md="8">
+// 			<strong>{moment(data.masa_berlaku?.from_date).locale("id").format("D MMMM YYYY")}</strong>
+// 		</Col>
+// 	</FormGroup>
+// 	{
+// 		data.tanggal_akhir_keberatan &&
+// 		<FormGroup row>
+// 			<Col md="4">Tanggal Akhir Pengajuan Keberatan</Col>
+// 			<Col md="8">
+// 				<strong>{moment(data.tanggal_akhir_keberatan).locale("id").format("D MMMM YYYY")}</strong>
+// 			</Col>
+// 		</FormGroup>
+// 	}
+// 	{
+// 		data.jawaban?.keberatan?.tanggal_akhir_banding &&
+// 		<FormGroup row>
+// 			<Col md="4">Tanggal Akhir Pengajuan Banding:</Col>
+// 			<Col md="8">
+// 				<strong>{moment(data.jawaban?.keberatan?.tanggal_akhir_banding).locale("id").format("D MMMM YYYY")}</strong>
+// 			</Col>
+// 		</FormGroup>
+// 	}
+// 	<FormGroup row>
+// 		<Col md="4">Dokumen Sanksi:</Col>
+// 		<Col md="8">
+// 			<Scrollable height="120px" className="list-group">
+// 				<table className="table table-bordered bg-transparent">
+// 					<tbody>
+// 						{data.dokumen.map((e) => (
+// 							<tr>
+// 								<td style={{ width: "30px" }}>
+// 									<em className="fa-lg far fa-file-code"></em>
+// 								</td>
+// 								<td>
+// 									<a className="text-muted" href={e.path} target="_blank" download={e.judul}>
+// 										{e.judul}
+// 									</a>
+// 								</td>
+// 							</tr>
+// 						))}
+// 					</tbody>
+// 				</table>
+// 			</Scrollable>
+// 		</Col>
+// 	</FormGroup>
+// 	<FormGroup row>
+// 		<Col md="4">Dokumen Acara Pleno:</Col>
+// 		<Col md="8">
+// 			<BeritaAcara
+// 				query={query}
+// 			/>
+// 		</Col>
+// 	</FormGroup>
+// 	<FormGroup row>
+// 		<Col md={12}>
+// 			<div className="card b">
+// 				<div className="card-body bb">
+// 					<Table responsive>
+// 						<thead>
+// 							<tr>
+// 								<th>Jenis Pelanggaran</th>
+// 								<th>Sanksi</th>
+// 							</tr>
+// 						</thead>
+// 						<tbody>
+// 							{data.pelanggaran.map((jp, index) => (
+// 								<tr key={jp._id}>
+// 									<td width={50}>
+// 										<div className="media align-items-center">
+// 											<div className="media-body d-flex">
+// 												<div>
+// 													<p>{jp.pelanggaran}</p>
+// 													<p>TMT : {jp.tmt_bulan} Bulan</p>
+// 													<p>Jenis Sanksi Administratif : {jp.label_sanksi}</p>
+// 												</div>
+// 											</div>
+// 										</div>
+// 									</td>
+// 									<td width={50}>
+// 										<div className="media align-items-center">
+// 											<div className="media-body d-flex">
+// 												<div>
+// 													<p>{jp.sanksi}</p>
+// 													<p>Keterangan : {jp.keterangan_sanksi}</p>
+// 												</div>
+// 											</div>
+// 										</div>
+// 									</td>
+// 								</tr>
+// 							))}
+// 						</tbody>
+// 					</Table>
+// 				</div>
+// 			</div>
+// 		</Col>
+// 	</FormGroup>
+// </form>
+// 		</>
+// 	);
+// }
+
+export default DetailSanksi;

+ 2 - 2
components/Sanksi/Ringkasan.js

@@ -204,7 +204,7 @@ export class Ringkasan extends Component {
 												{dataUpload
 													? dataUpload.files.map((e) => (
 														<tr>
-															<td>
+															<td  style={{ width: "30px" }}>
 																<em className="fa-lg far fa-file-code"></em>
 															</td>
 															<td>
@@ -281,7 +281,7 @@ export class Ringkasan extends Component {
 												{dataUpload
 													? dataUpload.filesTandaTerimaSS.map((e) => (
 														<tr>
-															<td>
+															<td  style={{ width: "30px" }}>
 																<em className="fa-lg far fa-file-code"></em>
 															</td>
 															<td>

+ 202 - 0
components/Sanksi/SuratBA _detail.js

@@ -0,0 +1,202 @@
+import React, { Component } from 'react';
+import SignatureCanvas from 'react-signature-canvas'
+import { getOneLaporan, updateLaporan } from "@/actions/pelaporan";
+import { Row, Col, Input, FormGroup, Label, Progress } from "reactstrap";
+import { connect } from "react-redux";
+import moment from "moment";
+import 'moment/locale/id'
+moment.locale('id')
+import { getAutoSave } from "@/actions/autosave";
+import { getOneSanksi } from '../../actions/sanksi';
+
+
+
+
+class ComponentBA extends React.Component {
+    formData = {}
+    constructor(props) {
+        super(props);
+        this.state = {
+            dataSanksi: {},
+
+        };
+    }
+
+    static getInitialProps = async ({ query }) => {
+        return { query };
+    };
+
+    componentDidMount = async () => {
+        const { query, token } = this.props;
+
+        const dataSanksi = await getOneSanksi(token, query.id);
+
+        const id = dataSanksi.data.laporan._id;
+        const getDataSave = await getAutoSave({ id, laporan: true });
+        const getDataSuratBAFromAuto = getDataSave.data?.PenetapanSanksi?.dataSuratBA;
+        const getDataPelanggaranFromAuto = getDataSave.data?.PenetapanSanksi?.dataPelanggaran;
+        this.setState({ dataPelanggaran: getDataPelanggaranFromAuto })
+        this.setState(getDataSuratBAFromAuto)
+       
+        this.setState({ dataSanksi }); 
+        console.log(this.state.dataSanksi)
+    }
+
+    render() {
+        const { dataLaporan } = this.state
+        return (
+            <page>
+                <div className='BA-Header'>
+                    <img className='BA-logo' src="/static/img/logo-single-1-login.png" alt="logo" />
+                    <h3 >LAPORAN HASIL EVALUASI DAN PEMBAHASAN</h3>
+                    {this.state.dataSanksi.data && (<h3 className='text-uppercase' >{this.state.dataSanksi.data.laporan.pt.nama}</h3>)}
+                </div>
+                <div className='BA-body pt-3'>
+                    <p>
+                        Pada hari ini
+                        {this.state?.setTanggal === true ?
+                            <span > {moment(this.state?.tanggal).locale("id").format("dddd")}, tanggal&nbsp;{moment(this.state?.tanggal).format("D")}&nbsp; bulan &nbsp;{moment(this.state?.tanggal).format("MMMM")} tahun &nbsp;{moment(this.state?.tanggal).format("YYYY")},</span> :
+                            <span> &nbsp;- &nbsp;</span>
+                        }
+                        bertempat di
+                        {this.state?.tempat ?
+                            <span>
+                                &nbsp;{this.state?.tempat}
+                            </span>
+                            :
+                            <span>-</span>
+                        }
+                        ,
+                        telah dilakukan rapat evaluasi dan pembahasan dugaan pelanggaran penyelenggaraan oleh perguruan tinggi dan/atau badan penyelenggara {this.state.dataSanksi.data && (<span>{this.state.dataSanksi.data.laporan.pt.nama}</span>)}, yang dihadiri oleh:
+                          {this.state.dataSanksi?.data?<ol>
+                          
+                              {this.state.sanksi.data?.laporan?.peserta_penetapan_sanksi?.map((value) => <li>{value.nama}</li>)}
+                        
+                       
+                          
+                        </ol>
+                        :"Tidak ada peserta" }
+                    </p>
+                    <p>
+                        Berdasarkan rapat evaluasi dan pembahasan dugaan pelanggaran penyelenggaraan oleh perguruan tinggi dan/atau badan penyelenggara {this.state.dataSanksi.data && (<span>{this.state.dataSanksi.data.laporan.pt.nama}</span>)}, disampaikan sebagai berikut:
+
+                        <ol className='mt-3'>
+                            <li>Telah dibacakan Berita Acara Evaluasi Kinerja Perguruan Tinggi  {this.state.dataSanksi.data && (<span>{this.state.dataSanksi.data.laporan.pt.nama}</span>)}, tanggal
+                                {this.state?.setTanggal === true ?
+                                    <span> &nbsp;{moment(this.state?.tanggal).format("DD-MM-YYYY")}</span>
+                                    :
+                                    <span> &nbsp;....... &nbsp;</span>
+                                }
+                            </li>
+                            <li>Telah dilakukan pembahasan rekomendasi mengenai fakta-fakta yang ditemukan Tim EKPT Ditjen Diktiristek, dengan temuan sebagai berikut:</li>
+                        </ol>
+                    </p>
+                    <div className='table-a my-4' >
+                        <table >
+                            <thead>
+                                <tr>
+                                    <th rowspan="2">NO</th>
+                                    <th rowspan="2">NAMA DAN IZIN PRODI</th>
+                                    <th colspan="3">PELANGGARAN TERHADAP PERMENDIKBUD NO.7 TAHUN 2020</th>
+                                    <th rowspan="2">SIMPULAN</th>
+                                    <th rowspan="2">REKOMENDASI</th>
+                                </tr>
+                                <tr>
+                                    <th>PASAL</th>
+                                    <th>BUTIR PELANGGARAN</th>
+                                    <th>DESKRIPSI PELANGGARAN</th>
+                                </tr>
+                            </thead>
+                            <tbody>
+                                {this.state.dataPelanggaran?.data?.map((e, i) => (
+                                    <tr key={e._id}>
+                                        <td>{++i}</td>
+                                        {this.state.dataSanksi.data && (<td className='BA-header'>{this.state.dataSanksi.data.laporan.pt.nama}</td>)}
+                                        <td>{e.pasal}</td>
+                                        <td>{e.butir_pelanggaran}</td>
+                                        <td>{e.pelanggaran}</td>
+                                        {this.state.descPelanggaran &&
+                                            (
+                                                <td style={{ minWidth: "215px" }} >{"" || this.state.descPelanggaran[e?._id]?.simpulan
+                                                }</td>
+                                            )
+                                        }
+                                        {/* <td style={{ minWidth: "215px" }} >{"" || dataSuratBA?.descPelanggaran[e?._id]?.simpulan
+                                            || this.state.descPelanggaran[e?._id]?.simpulan
+                                        }</td> */}
+                                        <td style={{ minWidth: "215px" }}>{`Sanksi Administratif berupa ${this.state.sanksi}` || ""}</td>
+                                    </tr>
+
+                                ))}
+                            </tbody>
+                        </table>
+                    </div>
+                    <p>
+                        <ol start="3">
+                            <li>Temuan Lain:
+                                <ol type="a">
+                                    {this.state?.temuanLain ?
+                                        <span>{this.state?.temuanLain.map((value) => <li>{value}</li>)}</span>
+                                        : "Belum Diisi"}
+                                </ol>
+                            </li>
+                            <li>Hal-hal yang memberatkan, sebagai berikut:
+                                <ol type="a">
+                                    {this.state?.memberatkan ?
+                                        <span>{this.state?.memberatkan.map((value) => <li>{value}</li>)}</span>
+                                        : "Belum Diisi"}
+                                </ol>
+                            </li>
+                            <li>hal-hal yang meringankan, sebagai berikut:
+                                <ol type="a">
+                                    {this.state?.meringankan ?
+                                        <span>{this.state?.meringankan.map((value) => <li>{value}</li>)}</span>
+                                        : "Belum Diisi"}
+                                </ol>
+                            </li>
+                            <li>
+                                Berdasarkan pembahasan yang dilakukan, disepakati untuk merekomendasikan <strong contenteditable='true'>“Sanksi Administratif berupa
+                                    {this.state?.sanksi ?
+                                        <span>{this.state?.sanksi}</span>
+                                        : "Belum Diisi"}
+                                    ”.</strong>
+                            </li>
+                        </ol>
+                    </p>
+                    <p>
+                        Demikian Laporan Evaluasi dan Pembahasan ini dibuat dengan sesungguhnya dan telah dibaca dan dicermati oleh peserta rapat yang hadir.
+                    </p>
+                    <div className='mt-5'>
+                        <div className='header-ttd signature-border pt-1 pb-1'>
+                            <text className='header-ttd font-weight-bold '>PESERTA RAPAT PENYUSUNAN REKOMENDASI</text>
+                        </div>
+                        <div id="ttd">
+                            {this.state.dataSanksi.data
+                                ? this.state.dataSanksi.data?.laporan.peserta_penetapan_sanksi?.map((value) => (
+                                    <div className='ttd-div'>
+                                        <div className='sign-ttd'>
+                                            <img
+                                                className='sign-ttd'
+                                                src={value.ttd.path} />
+                                        </div>
+                                        <div className='sign-nama'>
+                                            <text>
+                                                {value.nama}
+                                            </text>
+                                        </div>
+                                    </div>
+                                )) : ""}
+                        </div>
+                    </div>
+
+                </div>
+                
+                <div id="footer">
+                    <span>*LAPORAN HASIL EVALUASI DAN PEMBAHASAN …………. – …bulan&tahun…</span>
+                </div>
+            </page>
+        )
+    }
+
+}
+export default ComponentBA

+ 20 - 10
components/Sanksi/TablePenetapanSanksi.js

@@ -22,6 +22,7 @@ export class TablePenetapanSanksi extends Component {
 			checkedData: [],
 			labelSanksi: [],
 			btnDelegasi: false,
+			trigger: false,
 		};
 		this.onHandleChange = this.onHandleChange.bind(this)
 	}
@@ -31,19 +32,29 @@ export class TablePenetapanSanksi extends Component {
 		const { id } = query;
 		const pelanggaran = await getPelanggaran(token);
 		const getDataSave = await getAutoSave({ id, laporan: true });
-		const autoSaveDataPelanggaran = getDataSave.data?.PenetapanSanksi?.dataPelanggaran;
-		this.setState({ pelanggaran, checkedData: autoSaveDataPelanggaran ? autoSaveDataPelanggaran.data.map(e => e._id) : [] });
-		this.checkedData = this.state.checkedData
-		this.setState({ labelSanksi: autoSaveDataPelanggaran ? autoSaveDataPelanggaran?.data?.map(e => ({ value: e._id, labelSanksi: e.label_sanksi })) : [] })
+		const getDataPelanggaranfromAutoSave = getDataSave.data?.PenetapanSanksi?.dataPelanggaran;
+		if (this.state.trigger === false || this.ttate.trigger === true) {
+			if (getDataPelanggaranfromAutoSave === "null")
+				this.setState({ checkedData: [] })
+			else{
+				this.setState({
+					checkedData: getDataPelanggaranfromAutoSave ? getDataPelanggaranfromAutoSave?.data?.map(e => e._id) : [],
+					labelSanksi: getDataPelanggaranfromAutoSave ? getDataPelanggaranfromAutoSave?.data?.map(e => ({ value: e._id, labelSanksi: e.label_sanksi })) : []
+				})
+			}}
+			this.setState({
+				pelanggaran
+			});
 	};
 
 	onHandleChange = (evt) => {
-		const checked = evt.target.checked;
+		const checked = evt.target.checked // item terceklis true/false
 		const item = evt.target.value;
-		if (checked) this.state.checkedData.push(evt.target.value);
-		// else this.setState((prevState) => ({ ...prevState, checkedData: prevState.checkedData.filter((e) => e != item) }));
-		// else this.setState({ checkedData: this.state.checkedData.filter((e) => e != item) });
+		if (checked)
+			this.state.checkedData.push(item)
 		else this.state.checkedData = this.state.checkedData.filter((e) => e != item)
+		this.setState({ trigger: !this.state.trigger })
+
 		this.props.setCheckedData(this.state.checkedData);
 	};
 
@@ -60,7 +71,6 @@ export class TablePenetapanSanksi extends Component {
 
 	render() {
 		const { pelanggaran, labelSanksi, checkedData } = this.state;
-
 		return (
 			<div className="card b ">
 				<div className="card-body card-over">
@@ -153,7 +163,7 @@ export class TablePenetapanSanksi extends Component {
 						}
 
 					</div>
-		
+
 
 				</div>
 			</div>

+ 1 - 1
components/TurunSanksi/DetailSanksi.js

@@ -108,7 +108,7 @@ function DetailSanksi({ data, noTitle = false }) {
 									<tbody>
 										{data.dokumen.map((e) => (
 											<tr>
-												<td>
+												<td  style={{ width: "30px" }}>
 													<em className="fa-lg far fa-file-code"></em>
 												</td>
 												<td>

+ 2 - 2
components/TurunSanksi/InputTanggal.js

@@ -206,7 +206,7 @@ class InputTanggal extends Component {
                         validationSchema={rekomendasiSchema}
                         onSubmit={this.handelSimpan}
                     >
-                        {() => (
+                        {({ isSubmitting }) => (
                             <Form className="form-horizontal">
                                 <FormGroup row>
                                     <label className="col-md-2 col-form-label">Nomor Surat</label>
@@ -394,7 +394,7 @@ class InputTanggal extends Component {
                                 </FormGroup>
                                 <FormGroup row>
                                     <div className="col-xl-10">
-                                        <Button color className="color-3e3a8e btn-login" type="submit">
+                                        <Button color className="color-3e3a8e btn-login" type="submit" disabled={isSubmitting}>
                                             <span className="font-color-white">Kirim</span>
                                         </Button>
                                     </div>

+ 2 - 2
pages/app/banding/detail.js

@@ -259,7 +259,7 @@ class JawabanBanding extends Component {
 														else await this.handelSimpan();
 													}}
 												>
-													{() => (
+													{({ isSubmitting }) => (
 														<Form className="form-horizontal">
 															<FormGroup>
 																<label className="row-form-label">Status:</label>
@@ -447,7 +447,7 @@ class JawabanBanding extends Component {
 															</FormGroup>
 															<FormGroup row>
 																<div className="col-xl-10">
-																	<Button color className="color-3e3a8e btn-login" type="submit">
+																	<Button color className="color-3e3a8e btn-login" type="submit" disabled={isSubmitting}>
 																		<span className="font-color-white">Simpan</span>
 																	</Button>
 																</div>

+ 75 - 0
pages/app/bypass/detail.js

@@ -0,0 +1,75 @@
+import React, { Component } from "react";
+import { Card, CardBody, TabContent, TabPane, Nav, NavItem, NavLink, Button, Row, Col } from "reactstrap";
+import Router from "next/router";
+import classnames from "classnames";
+import ContentWrapper from "@/components/Layout/ContentWrapper";
+import DetailSanksi from "@/components/Main/DetailSanksi";
+import Link from "next/link";
+import { getPelaporan } from "@/actions/pelaporan";
+import { getOneSanksi } from "@/actions/sanksi";
+import Loader from "@/components/Common/Loader";
+import { connect } from "react-redux";
+
+const stepNavitemStyle = {
+	backgroundColor: "#fcfcfc",
+};
+
+class Detail extends Component {
+	constructor(props) {
+		super(props);
+		this.state = {
+			sanksi: {},
+		};
+	}
+
+	static getInitialProps = async ({ query }) => {
+		return { query };
+	};
+
+	componentDidMount = async () => {
+		const { query, token } = this.props;
+		const sanksi = await getOneSanksi(token, query.id);
+		this.setState({ sanksi });
+	};
+
+	render() {
+		const { sanksi } = this.state;
+		return (
+			<ContentWrapper unwrap>
+				{/* <Header /> */}
+				<div className="p-3">
+					<div className="content-heading">
+						<span className="font-color-white">
+							Detail Sanksi
+						</span>
+						<div className="ml-auto">
+							<Link href="/app/sanksi">
+								<Button className="color-3e3a8e" color>
+									<span className="font-color-white">
+										&lt; Kembali
+									</span>
+								</Button>
+							</Link>
+						</div>
+					</div>
+					{sanksi.data ? (
+						<Card className="card-default">
+							<CardBody>
+								<Row>
+									<Col>
+										<DetailSanksi data={sanksi.data} />
+									</Col>
+								</Row>
+							</CardBody>
+						</Card>
+					) : (
+						<Loader />
+					)}
+				</div>
+			</ContentWrapper>
+		);
+	}
+}
+
+const mapStateToProps = (state) => ({ user: state.user, token: state.token });
+export default connect(mapStateToProps)(Detail);

+ 39 - 0
pages/app/bypass/index.js

@@ -0,0 +1,39 @@
+import React, { Component } from "react";
+import ContentWrapper from "@/components/Layout/ContentWrapper";
+import { Row, Col } from "reactstrap";
+import { getSanksi } from "@/actions/sanksi";
+import { connect } from "react-redux";
+import Loader from "@/components/Common/Loader";
+import TableBypass from "../../../components/Bypass/TableBypass";
+class Bypass extends Component {
+    constructor(props) {
+        super(props);
+        this.state = {
+            sanksi: {},
+        };
+    }
+
+    componentDidMount = async () => {
+        const { token } = this.props;
+        const sanksi = await getSanksi(token, { bypassCabutSanksi: true });
+        this.setState({ sanksi });
+    };
+
+    render() {
+        const { sanksi } = this.state;
+        return (
+            <ContentWrapper>
+                <div className="content-heading">
+                    <span className="font-color-white">
+                        Bypass
+                    </span></div>
+                <Row>
+                    <Col lg={12}>{sanksi.data?.length ? <TableBypass listData={sanksi.data} linkName="Detail" to="/app/bypass/detail" /> : sanksi.data ? "Tidak ada Sanksi" : <Loader />}</Col>
+                </Row>
+            </ContentWrapper>
+        );
+    }
+}
+
+const mapStateToProps = (state) => ({ user: state.user, token: state.token });
+export default connect(mapStateToProps)(Bypass);

+ 1 - 1
pages/app/index.js

@@ -120,7 +120,7 @@ class App extends Component {
               </Col>
             </Row>
           </Jumbotron>
-          <span>Version 2.3 ~ 2.2</span>
+          <span>Version 2.4 ~ 2.2</span>
         </ContentWrapper>
       </div>
     );

+ 5 - 5
pages/app/keberatan/detail.js

@@ -269,7 +269,7 @@ class DetailKeberatan extends Component {
 														else await this.handelSimpan();
 													}}
 												>
-													{() => (
+													{({ isSubmitting }) => (
 														<Form className="form-horizontal">
 															<FormGroup>
 																<label className="row-form-label">Status :<span className="text-danger">*</span></label>
@@ -383,7 +383,7 @@ class DetailKeberatan extends Component {
 															</FormGroup>
 
 															<FormGroup>
-																<label className="row-form-label">Tanda Terima Surat Jawaban Permohonan Keberatan :<span className="text-danger">*</span></label>
+																<label className="row-form-label">Tanggal Tanda Terima Surat Jawaban Atas Permohonan Keberatan :<span className="text-danger">*</span></label>
 																<div className="row-md-10">
 																	<Field name="tanggal_terima_keberatan">
 																		{({ field, form }) => (
@@ -407,7 +407,7 @@ class DetailKeberatan extends Component {
 															</FormGroup>
 
 															<FormGroup>
-																<label className="row-form-label">Dokumen Tanda Terima Surat Jawaban Permohonan Keberatan :<span className="text-danger">*</span></label>
+																<label className="row-form-label">Dokumen Tanda Terima Surat Jawaban Atas Permohonan Keberatan :<span className="text-danger">*</span></label>
 																<div className="row-md-10">
 																	<Field name="dokumen_terima_keberatan">
 																		{({ field, form }) => (
@@ -457,7 +457,7 @@ class DetailKeberatan extends Component {
 																</div>
 															</FormGroup>
 															<FormGroup>
-																<label className="row-form-label">Tanggal Akhir Pengajuan Keberatan :<span className="text-danger">*</span> </label>
+																<label className="row-form-label">Tanggal Akhir Pengajuan Banding :<span className="text-danger">*</span> </label>
 																<p>Note : 21 hari kerja</p>
 																<div className="row-md-10">
 																	<Field name="tanggal_akhir_banding">
@@ -480,7 +480,7 @@ class DetailKeberatan extends Component {
 															</FormGroup>
 															<FormGroup row>
 																<div className="col-xl-10">
-																	<Button color className="color-3e3a8e btn-login" type="submit">
+																	<Button color className="color-3e3a8e btn-login" type="submit" disabled={isSubmitting}>
 																		<span className="font-color-white">Simpan</span>
 																	</Button>
 																</div>

+ 1 - 1
pages/app/pelaporan/search.js

@@ -131,7 +131,7 @@ class Search extends Component {
 				<div className="content-heading">
 					<div className="font-color-white">
 						Pelaporan
-						<div className="font-color-white font-10">Pilih Perguruan Tinggi</div>
+						<div className="font-color-white" style={{ fontSize:"12px", marginTop:"3px" }}>Pilih Perguruan Tinggi</div>
 					</div>
 					<div className="ml-auto">
 						<Link href="/app/pelaporan">

+ 7 - 4
pages/app/pencabutan-sanksi/detail.js

@@ -186,7 +186,10 @@ class JawabanPencabutanSanksi extends Component {
 										<Row>
 											<Col lg={12}>
 												<DetailSanksi data={sanksi.data} />
-												<PermohonanPT data={sanksi.data.pengajuan.cabut_sanksi} />
+												{sanksi.data?.pengajuan?.cabut_sanksi &&
+													< PermohonanPT data={sanksi.data?.pengajuan?.cabut_sanksi} />
+												}
+
 												<p className="lead bb">Jawaban</p>
 												<Formik
 													initialValues={{
@@ -201,7 +204,7 @@ class JawabanPencabutanSanksi extends Component {
 														else await this.handleSimpan();
 													}}
 												>
-													{() => (
+													{({ isSubmitting }) => (
 														<Form className="form-horizontal">
 															<FormGroup>
 																<label className="row-form-label">Status:</label>
@@ -315,7 +318,7 @@ class JawabanPencabutanSanksi extends Component {
 																											</div>
 																										}
 																										</div>
-																									</div>																							</div>
+																									</div>		</div>
 																								<div className="d-flex align-items-center">
 																									<small className="ml-auto">
 																										<button
@@ -345,7 +348,7 @@ class JawabanPencabutanSanksi extends Component {
 															)}
 															<FormGroup>
 																<div className="row-xl-10">
-																	<Button color className="color-3e3a8e" type="submit">
+																	<Button color className="color-3e3a8e" type="submit" disabled={isSubmitting}>
 																		<span className="font-color-white">
 																			Simpan
 																		</span>

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

@@ -75,7 +75,7 @@ class DetailJawabanPencabutanSanksi extends Component {
 																		{jawaban &&
 																			jawaban.files.map((e) => (
 																				<tr>
-																					<td>
+																					<td  style={{ width: "30px" }}>
 																						<em className="fa-lg far fa-file-code"></em>
 																					</td>
 																					<td>

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

@@ -3,8 +3,7 @@ import { Card, CardBody, TabContent, TabPane, Nav, NavItem, NavLink, Button, Row
 import Router from "next/router";
 import classnames from "classnames";
 import ContentWrapper from "@/components/Layout/ContentWrapper";
-import DetailSanksi from "@/components/Main/DetailSanksi";
-import Header from "@/components/Main/Header";
+import DetailSanksi from "@/components/Sanksi/DetailSanksi";
 import Link from "next/link";
 import { getPelaporan } from "@/actions/pelaporan";
 import { getOneSanksi } from "@/actions/sanksi";

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

@@ -37,6 +37,7 @@ class ProsesSanksi extends Component {
 			dataPelanggaran: {},
 			pelaporan: {},
 			listSanksi: [],
+			loading: false,
 		};
 	}
 
@@ -67,6 +68,9 @@ class ProsesSanksi extends Component {
 	}
 	done = async (e) => {
 		const toastid = toast.loading("Please wait...");
+		this.setState({
+			loading: true
+		})
 		try {
 			e.preventDefault();
 			const { query, token } = this.props;
@@ -89,13 +93,19 @@ class ProsesSanksi extends Component {
 					formdata.append("dokumen_terima_sanksi", e);
 				});
 			}
+			// if (this.state.dataUpload.filesBeritaAcara && this.state.dataUpload.filesBeritaAcara.length > 0) {
+			// 	this.state.dataUpload.filesBeritaAcara.forEach((e) => {
+			// 		formdata.append("berita_acara", e);
+			// 	});
+			// }
 			await createSanksi(token, id, formdata);
+
 			toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
 			Router.push({
 				pathname: "/app/sanksi",
 			});
 		} catch (error) {
-			toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
+			toast.update(toastid, { render: (error.request.message), type: "error", isLoading: false, autoClose: true, closeButton: true });
 		}
 	};
 
@@ -129,10 +139,16 @@ class ProsesSanksi extends Component {
 	};
 
 	setCheckedData = async (data) => {
-		const { token } = this.props;
-		const result = await getPelanggaran(token, { id: data.join(",") });
-		this.setState({ dataPelanggaran: result });
-		this.handleAutoSave(result)
+		if (data.length === 0) {
+			this.handleAutoSave("null")
+			this.setState({ dataPelanggaran: "null" })
+		}
+		else {
+			const { token } = this.props;
+			const result = await getPelanggaran(token, { id: data.join(",") });
+			this.setState({ dataPelanggaran: result });
+			this.handleAutoSave(result)
+		}
 	};
 
 	setUploadSuratSanksi = (data) => {
@@ -350,7 +366,7 @@ class ProsesSanksi extends Component {
 												<Button color className="btn-login color-3e3a8e" onClick={this.toggleStep("5")}>
 													<span className="font-color-white">Previous</span>
 												</Button>
-												<Button className="ml-auto btn-login color-3e3a8e" color onClick={this.done}>
+												<Button className="ml-auto btn-login color-3e3a8e" color onClick={this.done} disabled={this.state.loading}>
 													<span className="font-color-white">Done</span>
 												</Button>
 											</div>

+ 179 - 0
pages/app/verifikasi/index.js

@@ -0,0 +1,179 @@
+import React from "react";
+import ContentWrapper from '@/components/Layout/ContentWrapper';
+import { Container, Row, Col, Card, CardBody, CardFooter, CardHeader, Input, Button } from 'reactstrap';
+import FormValidator from "@/components/Forms/Validator.js";
+import { ptPublic } from "@/actions/PT";
+import AsyncSelect from "react-select/async";
+import { loginToPt } from "../../../actions/auth";
+import { connect } from "react-redux";
+import { ToastContainer, toast } from "react-toastify";
+
+
+
+
+const loadOptions = (inputValue, callback) => {
+    setTimeout(async () => {
+        const pt = await ptPublic({ search: inputValue });
+        const data = pt.data.map((e) => ({
+            value: e.id,
+            label: e.nama,
+            className: "State-ACT",
+        }));
+        callback(data);
+    }, 1000);
+};
+class Verifikasi extends React.Component {
+    constructor(props) {
+        super(props);
+        this.state = {
+            formLogin: {
+                password: ""
+            },
+            loading: false,
+            inputValue: "",
+            pt_id: ""
+
+        };
+    }
+
+    validateOnChange = (event) => {
+        const input = event.target;
+        const form = input.form;
+        const value = input.type === "checkbox" ? input.checked : input.value;
+
+        const result = FormValidator.validate(input);
+        this.setState({
+            [form.name]: {
+                ...this.state[form.name],
+                [input.name]: value,
+                errors: {
+                    ...this.state[form.name].errors,
+                    [input.name]: result,
+                },
+            },
+        });
+    };
+    hasError = (formName, inputName, method) => {
+        return (
+            this.state[formName] &&
+            this.state[formName].errors &&
+            this.state[formName].errors[inputName] &&
+            this.state[formName].errors[inputName][method]
+        );
+    };
+
+
+
+
+    handleChangeSelectPerguruanTinggi = (selected_PT) => {
+        this.setState({ pt_id: selected_PT.value });
+    };
+    onSubmit = async () => {
+
+        this.setState({ loading: true });
+        const { password } = this.state.formLogin;
+        const { pt_id } = this.state
+        const auth = await toast.promise(loginToPt(pt_id, password), {
+            pending: "Loading",
+            success: "Success",
+            error: "Akun tidak ada",
+        });
+        // const auth = await loginToPt(pt_id, password);
+        this.props.setToken(auth.data.token);
+        this.props.setUser(auth.data.user);
+        if (auth.data.user.role.id === 2022) {
+            location.href = "/pt/pemantauan"
+            return;
+        } else if ([2020, 2021, 2023].includes(auth.data.user.role.id)) {
+            location.href = "/pt/pemantauan"
+            return;
+        }
+        this.setState({ loading: false });
+
+    }
+
+
+    render() {
+        return (
+            <ContentWrapper>
+                <div className="content-heading">
+                    <span className="font-color-white">
+                        Verifikasi
+                    </span>
+                </div>
+                <Container className="container-sm pt-5" >
+                    <Card
+                        style={{ margin: "20px", borderRadius: "15px" }}
+                    >
+                        <CardHeader className="text-center">
+                            <div className="card-title font-weight-bold mt-4  font-color-black"
+                                style={{ fontSize: "20px" }}
+                            >Login sebagai Perguruan Tinggi</div>
+                        </CardHeader>
+                        <CardBody>
+                            <form onSubmit={this.onSubmit} method="post" name="formLogin">
+                                <div className="form-group">
+                                    <label className="col-form-label font-color-black mb-0 font-weight-bold">Password akun PDDIKTI</label>
+                                    <Input
+                                        style={{ borderRadius: "7px" }}
+                                        type="password"
+                                        id="id-password"
+                                        name="password"
+                                        invalid={this.hasError("formLogin", "password", "required")}
+                                        onChange={this.validateOnChange}
+                                        data-validate='["required"]'
+                                        value={this.state.formLogin.password}
+
+                                    />
+                                    <span className="invalid-feedback">Wajib diisi</span>
+                                </div>
+                                <div className="form-group">
+                                    <label className="col-form-label font-color-black mb-0 font-weight-bold">Perguruan Tinggi</label>
+                                    <AsyncSelect
+                                        style={{ borderRadius: "7px" }}
+                                        cacheOptions
+                                        loadOptions={loadOptions}
+                                        defaultOptions
+                                        onChange={(e) => {
+                                            this.handleChangeSelectPerguruanTinggi(e);
+                                        }}
+                                    // onInputChange={this.handleInputChange}
+                                    />
+                                    <span className="invalid-feedback">Field is required</span>
+                                </div>
+                                <Button color className="btn-login float-right mt-3"
+                                    style={{ borderRadius: "7px" }}
+                                    onClick={this.onSubmit}
+                                >
+                                    <span className="font-color-white">
+                                        {this.state.loading ? (
+                                            <div class="d-flex justify-content-center">
+                                                <div
+                                                    class="spinner-border spinner-border-sm"
+                                                    role="status"
+                                                ></div>
+                                            </div>
+                                        ) : (
+                                            "Login"
+                                        )}
+                                    </span>
+                                </Button>
+                            </form>
+                        </CardBody>
+                    </Card>
+                </Container>
+            </ContentWrapper>)
+    }
+}
+
+
+
+
+
+const mapStateToProps = (state) => ({ user: state.user });
+const mapDispatchToProps = (dispatch) => ({
+    setUser: (payload) => dispatch({ type: "SET_USER", payload }),
+    setToken: (payload) => dispatch({ type: "SET_TOKEN", payload }),
+    setPT: (payload) => dispatch({ type: "SET_PT", payload }),
+});
+export default connect(mapStateToProps, mapDispatchToProps)(Verifikasi);

+ 5 - 5
pages/pt/dokumen-perbaikan/detail.js

@@ -128,9 +128,9 @@ class DetailPerbaikanDoc extends Component {
 			const sanksi = await getOneSanksi(token, id);
 			this.setState({ sanksi, files: [] });
 			resetForm();
-			// Router.push({
-			// 	pathname: "/app/pt/dokumen-perbaikan",
-			// });
+			Router.push({
+				pathname: "/pt/sanksi",
+			});
 		}
 	};
 
@@ -175,7 +175,7 @@ class DetailPerbaikanDoc extends Component {
 													validationSchema={perbaikanSchema}
 													onSubmit={this.handleKirim}
 												>
-													{() => (
+													{({ isSubmitting }) => (
 														<Form className="form-horizontal">
 															<FormGroup>
 																<label className="row-form-label">Keterangan Dokumen:</label>
@@ -235,7 +235,7 @@ class DetailPerbaikanDoc extends Component {
 															</FormGroup>
 															<FormGroup row>
 																<div className="col-xl-10">
-																	<Button color className="color-3e3a8e" type="submit">
+																	<Button color className="color-3e3a8e" type="submit" disabled={isSubmitting}>
 																		<span className="font-color-white">Kirim</span>
 																	</Button>
 																</div>

+ 3 - 2
pages/pt/jawaban-keberatan/detail.js

@@ -52,10 +52,11 @@ class JawabanKeberatan extends Component {
 
 	render() {
 		const { sanksi, pt } = this.state;
+		console.log(this.state.modal)
 		return (
 			<ContentWrapper unwrap>
 				<Modal isOpen={this.state.modalTidak} >
-					<ModalBody>Apakah anda ingin membatalkan permohonan banding atas pengenaan sanksi?</ModalBody>
+					<ModalBody>Apakah Anda yakin tidak akan mengajukan permohonan banding?</ModalBody>
 					<ModalFooter>
 
 						<Button color className="btn-login" onClick={async () => {
@@ -64,7 +65,7 @@ class JawabanKeberatan extends Component {
 								const { token, query } = this.props;
 								await updatePT(token, query.id, { is_pengajuan_banding: false, is_pengajuan_keberatan: false })
 								toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
-								Router.push("/pt/dokumen-perbaikan");
+								Router.push("/pt/sanksi");
 							} catch (error) {
 								toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
 							}

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

@@ -83,7 +83,7 @@ class DetailJawabanPencabutanSanksi extends Component {
 																		{jawaban &&
 																			jawaban.dokumen.map((e) => (
 																				<tr>
-																					<td>
+																					<td style={{ width: "30px" }}>
 																						<em className="fa-lg far fa-file-code"></em>
 																					</td>
 																					<td>

+ 8 - 2
styles/app/app/mycss.scss

@@ -58,7 +58,7 @@
 ///////////////////////////////////////////<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>
 
 
-  //////////////////////////////////Table Pelanggaran
+  //////////////////////////////////Table Pelanggaran in berita acara
   
   .table-a th {
     border: 1px solid #C0C0C0;
@@ -182,6 +182,7 @@ border-radius: 4px;
 }
 
 /////////////////////////////////////// style Component 
+
 .btn-v1-outline-purple {
   color: #3e3a8e;
   border-color: #3e3a8e; }
@@ -202,5 +203,10 @@ border-radius: 4px;
     .btn-v1-outline-purple:not(:disabled):not(.disabled):active:focus, .btn-v1-outline-purple:not(:disabled):not(.disabled).active:focus,
     .show > .btn-v1-outline-purple.dropdown-toggle:focus {
       box-shadow: 0 0 0 0.2rem rgba(114, 102, 186, 0.5); }
+    }
+    
+    .font-20{
+      font-size: 20px;
+    }
 
-    }
+    ///////////////////////// Menu Verifikasi

+ 13 - 8
styles/bootstrap/_buttons.scss

@@ -205,7 +205,7 @@ input[type="button"] {
   border-radius: 7px;
   transition: ease background-color 250ms;
 
-  &:hover {
+  &:hover:enabled {
     background-color: $colorbutton;
     opacity: 0.9;
   }
@@ -218,7 +218,7 @@ input[type="button"] {
   background: $colorbutton;
   transition: ease background-color 250ms;
 
-  &:hover {
+  &:hover:enabled {
     background-color: $colorbutton;
     opacity: 0.9;
   }
@@ -235,7 +235,7 @@ input[type="button"] {
   background: transparent;
   transition: ease background-color 250ms;
 
-  &:hover {
+  &:hover:enabled {
     background-color: #e9e8e8;
     opacity: 0.9;
     color: #3e3a8e;
@@ -250,7 +250,7 @@ input[type="button"] {
   background: white;
   transition: ease background-color 250ms;
 
-  &:hover {
+  &:hover:enabled {
     background-color: #e9e8e8;
     opacity: 0.9;
     color: #3e3a8e;
@@ -262,8 +262,12 @@ input[type="button"] {
   padding-bottom: 0;
   margin-top: 3%;
   color: #3e3a8e;
-  background: transparent;
-  transition: ease background-color 250ms;
+  // background: transparent;
+  // transition: ease background-color 250ms;
+  &[disabled] {
+    color: #3e3a8e;
+}
+
 }
 
 .btn-radius .btn-labeled-3-notHover {
@@ -296,10 +300,11 @@ input[type="button"] {
   border: $colorbutton solid 2px;
 
 
-  &:hover {
+  &:hover:enabled{
     background-color: $colorbutton;
     opacity: 0.8;
   }
+  
 }
 
 //jangan di ubah
@@ -376,7 +381,7 @@ input[type="button"] {
   border: 0;
   transition: ease background-color 250ms;
 
-  &:hover {
+  &:hover:enabled {
     background-color: $colorbutton;
     opacity: 0.9;
   }

+ 0 - 8
styles/bootstrap/_type.scss

@@ -142,14 +142,6 @@ mark,
   font-size: 15px;
   border-radius: 10px;
 }
-.font-20{
-  font-size: 20px;
-  margin-left: 10px;
-}
 .mrgn-top-5{
   margin-top: 5px;
-}
-.font-10{
-  margin-top: 3px;
-  font-size: 12px;
 }