Bladeren bron

Meeting DIKTI 31/05/2023
1. Hasil update status ke PDDikti : ✅
Done - 10 Mei 2023. tidak ada perubahan di UI, proses dilakukan pada saat sanksi disimpan. pending release

2. Mesti simulasi di dev untuk penetapan sanksi dan hasil nya di lihat di pddikti (UAT) hasil baru release production

3.* Follow up issue universitas Tanggerang ✅

4.* Bug and issue finding by Ismi (on progress)

5. Issue 19 May 2023 : Dev Disk space 100% usage, Pengajuan penambahan disk space & ram
Action Taken :
5.1. Cleaning up from repository by Rizky, current usage 60%, rollback version in 1 month period (approximate 10 version)
5.2. Checking on production 38%
5.3. Capacity Planning Disk : 1 version build = 1 GB for front end, total size needed for 6 month rollback version (approximate 50 version) 50 GB needed

6. BA Diluar Modul Sanksi : masih menunggu data dari bang ipul...untuk sanksi2 lama

7. WA reminder, masa berlaku sanksi akan habis di production. Pengajuan baru untuk kebutuhan ini

8. edit isian di BA pleno no. 3,4,5, urgent pake tombol hapus ✅

9. Terhitung Mulai Tanggal = TMT, masa berlaku sanksi, 7 hari sebelum masa habis

10. Tanggal Terima Surat Sanksi <=> pengaruh ke keberatan

11. Untuk issue Univ Tangerang via database, langsung ke dokumen perbaikan (sudah di tambahin field Dan sudah di fixing ke semua laporan dengan manggil API nya pakai nodered #yazid)

12. Menghapus menu dokumen perbaikan dan menggabungkan proses itu kepada menu sanksi, bisa dihilangkan dengan action tambahan sbb :
1. Kolom Keterangan Sanksi dihilangkan✅
2. diksi Nomor Sanksi menjadi Nomor Surat Sanksi✅
3. Ditambahkan keterangan di bawah status, yang menerangkan arti dari status✅

---------------------------- Terlampir ------------------------------------

3. Follow up issue universitas Tanggerang
Case: nomor sanksi 0052/E/DT.03.09/2023 Universitas Tanggerang
Laporan: data terkunci di permohonan keberatan

Perbaikan:
1. Dokumentasi setiap tanggal yang ada pada penetapan sanksi
• "Tanggal Dibuat Laporan" : tanggal saat dibuatnya laporan✅
• "Tanggal Penetapan Sanksi" : tanggal saat sanksi ditetapkan / dikirim kepada PT✅
• "Tanggal Akhir Pengajuan Keberatan" : tanggal hari terakhir PT dapat mengajukan permohonan keberatan✅
• "Tanggal Akhir Pengajuan Banding" : tanggal hari terakhir PT dapat mengajukan permohonan banding✅
2. Akhir permohonan keberatan wajib diisi (ada notifikasi jika tidak diisi) ✅
3. Mencantumkan tanggal akhir permohonan keberatan pada detail sanksi✅
4. Tanggal penetapan sanksi tetep ada walaupun TMT diisi✅
5. Tambahkan keterangan per tanggal berapa ia berakhir ✅
6. Jika sudah hangus masa permohonan (keberatan / banding) maka statusnya 'dokumen perbaikan'✅
7. Diksi menu 'Sanksi' diganti jadi 'Proses Sanksi' (khusus LOGIN PT) ✅
---- Saran & Waiting Approval DIKTI----
1. Menghapus menu dokumen perbaikan dan menggabungkan proses itu kepada menu sanksi APPROVED

4. Bug and issue finding by Ismi
1. Posisi "Tanggal Laporan" ada diatas "Nomor Laporan" biar informasinya berurutan ✅
2. Keterangan di notifikasinya gagal, tapi laporan masuk ✅
3. Jika gagal kirim laporan dan publik tidak mengisi no telp, maka keterangan pada notifikasinya "laporan tidak terkirim" ✅
4. Indikator loading saat proses mengirim laporan✅
5. Button 'Delegasi ke LLDIKTI' tidak ada, padahal sanksi berat tidak ada yg di ceklis ✅
6. Jika mengisi TMT maka 'tanggal dari - tanggal sampai' wajib diisi keduanya, kondisi sekarang salah satu bisa diisi dan bisa melanjutkan ke tahap selanjutnya✅

Revisi 08/06/2023
1. Diksi form "Akhir Permohonan Keberatan Sanksi" menjadi "Tanggal Akhir Pengajuan Keberatan"✅
2. Diksi form "Akhir Permohonan Banding" menjadi "Tanggal Akhir Pengajuan Banding"✅

andi 2 jaren geleden
bovenliggende
commit
31d0ada5de

+ 6 - 6
components/Delegasi/DetailLaporan.js

@@ -79,6 +79,12 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
                 </div>
             )}
             <form className="form-horizontal">
+                <FormGroup row>
+                    <Col md="4">Tanggal Dibuat Laporan:</Col>
+                    <Col md="8">
+                        <strong>{moment(data.createdAt).format("D MMMM YYYY")}</strong>
+                    </Col>
+                </FormGroup>
                 <FormGroup row>
                     <Col md="4">Nomor Laporan:</Col>
                     <Col md="8">
@@ -111,12 +117,6 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
                         </Scrollable>
                     </Col>
                 </FormGroup>
-                <FormGroup row>
-                    <Col md="4">Dibuat Pada:</Col>
-                    <Col md="8">
-                        <strong>{moment(data.createdAt).format("D MMMM YYYY")}</strong>
-                    </Col>
-                </FormGroup>
                 {!noStatus && data.aktif ? (
                     <FormGroup row>
                         <Col md="4">Status:</Col>

+ 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.20 ~ 2.21</span>
+                <span className=' float-right'>Version 2.24 ~ 2.21</span>
             </footer>
         );
     }

+ 7 - 6
components/Main/DetailLaporan.js

@@ -79,6 +79,12 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
 				</div>
 			)}
 			<form className="form-horizontal">
+				<FormGroup row>
+					<Col md="4">Tanggal Dibuat Laporan:</Col>
+					<Col md="8">
+						<strong>{moment(data.createdAt).format("D MMMM YYYY")}</strong>
+					</Col>
+				</FormGroup>
 				<FormGroup row>
 					<Col md="4">Nomor Laporan:</Col>
 					<Col md="8">
@@ -111,12 +117,7 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
 						</Scrollable>
 					</Col>
 				</FormGroup>
-				<FormGroup row>
-					<Col md="4">Tanggal Laporan:</Col>
-					<Col md="8">
-						<strong>{moment(data.createdAt).format("D MMMM YYYY")}</strong>
-					</Col>
-				</FormGroup>
+
 				{!noStatus && data.aktif ? (
 					<FormGroup row>
 						<Col md="4">Status:</Col>

+ 2 - 2
components/Main/DetailSanksi.js

@@ -38,7 +38,7 @@ function DetailSanksi({ data, noTitle = false }) {
 				{
 					data.tanggal_akhir_keberatan &&
 					<FormGroup row>
-						<Col md="4">Tanggal Akhir keberatan:</Col>
+						<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>
@@ -47,7 +47,7 @@ function DetailSanksi({ data, noTitle = false }) {
 				{
 					data.jawaban?.keberatan?.tanggal_akhir_banding &&
 					<FormGroup row>
-						<Col md="4">Tanggal Akhir Banding:</Col>
+						<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>

+ 5 - 22
components/PT/Sanksi/TableSanksi.js

@@ -9,8 +9,8 @@ function TableSanksi({ listData, to, linkName, toKeberatan, toJwbBanding, toJwbK
 				<Table className="table w-100">
 					<thead>
 						<tr>
-							<th>Nomor Sanksi</th>
-							<th>Keterangan Sanksi</th>
+							<th>Nomor Surat Sanksi</th>
+							{/* <th>Keterangan Sanksi</th> */}
 							{/* <th>Created</th> */}
 							<th>Status</th>
 						</tr>
@@ -30,7 +30,7 @@ function TableSanksi({ listData, to, linkName, toKeberatan, toJwbBanding, toJwbK
 											</div>
 										</div>
 									</td>
-									<td>
+									{/* <td>
 										<div className="table-desc">
 											<div className="media align-items-center">
 												<div className="media-body d-flex">
@@ -41,26 +41,9 @@ function TableSanksi({ listData, to, linkName, toKeberatan, toJwbBanding, toJwbK
 												</div>
 											</div>
 										</div>
-									</td>
-									{/* <td>{moment(data.createdAt).format("DD MMMM YYYY")}</td> */}
-									<td>{data.is_pengajuan_keberatan === true || data.is_pengajuan_keberatan === false ? <div className="badge badge-green">{data.last_step}</div> : <div className="badge badge-red">Belum Diperiksa</div>}</td>
-									{/* <td>{data.pengajuan?.keberatan ?
-										<Link href={{ pathname: toKeberatan, query: { id: data._id } }}>
-											<Button className="btn-login" color >
-												<span className="font-color-white">
-													{linkName}
-												</span>
-											</Button>
-										</Link> :
-										<Link href={{ pathname: to, query: { id: data._id } }}>
-											<Button className="btn-login" color >
-												<span className="font-color-white">
-													{linkName}
-												</span>
-											</Button>
-										</Link>
-									}
 									</td> */}
+									<td>{data.is_pengajuan_keberatan === true || data.is_pengajuan_keberatan === false ? <div className="badge badge-green">{data.last_step}</div> : <div className="badge badge-red">Belum Diperiksa</div>}</td>
+
 									{new Date(data.tanggal_akhir_keberatan).getTime() + 86400000 > Date.now() ? (
 										<td>
 											{data.last_step === "Permohonan Keberatan" && (

+ 2 - 16
components/PT/TableSanksi.js

@@ -9,8 +9,8 @@ function TableSanksi({ listData, to, linkName }) {
 				<Table className="table w-100">
 					<thead>
 						<tr>
-							<th>Nomor Sanksi</th>
-							<th>Keterangan Sanksi</th>
+							<th>Nomor Surat Sanksi</th>
+							{/* <th>Keterangan Sanksi</th> */}
 							{/* <th>Created</th> */}
 							<th>Status</th>
 						</tr>
@@ -30,20 +30,6 @@ 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 > 100 ? data.keterangan.substring(0, 100) + "..." : 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>
 										<Link href={{ pathname: to, query: { id: data._id } }}>

+ 6 - 6
components/PelaporanTuntas/DetailLaporan.js

@@ -79,6 +79,12 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
 				</div>
 			)}
 			<form className="form-horizontal">
+				<FormGroup row>
+					<Col md="4">Tanggal Dibuat Laporan:</Col>
+					<Col md="8">
+						<strong>{moment(data.createdAt).format("D MMMM YYYY")}</strong>
+					</Col>
+				</FormGroup>
 				<FormGroup row>
 					<Col md="4">Nomor Laporan:</Col>
 					<Col md="8">
@@ -111,12 +117,6 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
 						</Scrollable>
 					</Col>
 				</FormGroup>
-				<FormGroup row>
-					<Col md="4">Dibuat Pada:</Col>
-					<Col md="8">
-						<strong>{moment(data.createdAt).format("D MMMM YYYY")}</strong>
-					</Col>
-				</FormGroup>
 				{!noStatus && data.aktif ? (
 					<FormGroup row>
 						<Col md="4">Status:</Col>

+ 6 - 6
components/Pemeriksaan/DetailLaporan.js

@@ -79,6 +79,12 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
 				</div>
 			)}
 			<form className="form-horizontal">
+				<FormGroup row>
+					<Col md="4">Tanggal Dibuat Laporan:</Col>
+					<Col md="8">
+						<strong>{moment(data.createdAt).format("D MMMM YYYY")}</strong>
+					</Col>
+				</FormGroup>
 				<FormGroup row>
 					<Col md="4">Nomor Laporan:</Col>
 					<Col md="8">
@@ -111,12 +117,6 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
 						</Scrollable>
 					</Col>
 				</FormGroup>
-				<FormGroup row>
-					<Col md="4">Dibuat Pada:</Col>
-					<Col md="8">
-						<strong>{moment(data.createdAt).format("D MMMM YYYY")}</strong>
-					</Col>
-				</FormGroup>
 				{!noStatus && data.aktif ? (
 					<FormGroup row>
 						<Col md="4">Status:</Col>

+ 6 - 6
components/Penjadwalan/DetailLaporan.js

@@ -79,6 +79,12 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
 				</div>
 			)}
 			<form className="form-horizontal">
+				<FormGroup row>
+					<Col md="4">Tanggal Dibuat Laporan:</Col>
+					<Col md="8">
+						<strong>{moment(data.createdAt).format("D MMMM YYYY")}</strong>
+					</Col>
+				</FormGroup>
 				<FormGroup row>
 					<Col md="4">Nomor Laporan:</Col>
 					<Col md="8">
@@ -111,12 +117,6 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
 						</Scrollable>
 					</Col>
 				</FormGroup>
-				<FormGroup row>
-					<Col md="4">Dibuat Pada:</Col>
-					<Col md="8">
-						<strong>{moment(data.createdAt).format("D MMMM YYYY")}</strong>
-					</Col>
-				</FormGroup>
 				{noStatus && data.aktif ? (
 					<FormGroup row>
 						<Col md="4">Status:</Col>

+ 20 - 2
components/PerpanjanganSanksi/DetailSanksi.js

@@ -32,11 +32,29 @@ function DetailSanksi({ data, noTitle = false }) {
 						</Col>
 					</FormGroup>
 					<FormGroup row>
-						<Col md="4">Dibuat Pada:</Col>
+						<Col md="4">Tanggal Penetapan Sanksi:</Col>
 						<Col md="8">
-							<strong>{moment(data.createdAt).format("D MMMM YYYY")}</strong>
+							<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 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 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={12}>
 							<div className="card b">

+ 20 - 2
components/RekomendasiDelegasi/DetailSanksi.js

@@ -33,11 +33,29 @@ function DetailSanksi({ data, noTitle = false }) {
 						</Col>
 					</FormGroup>
 					<FormGroup row>
-						<Col md="4">Dibuat Pada:</Col>
+						<Col md="4">Tanggal Penetapan Sanksi:</Col>
 						<Col md="8">
-							<strong>{moment(data.createdAt).format("D MMMM YYYY")}</strong>
+							<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 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 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">

+ 80 - 5
components/Sanksi/BeritaAcara.js

@@ -197,10 +197,43 @@ class BeritaAcara extends Component {
             modalRemovePeserta: !this.state.modalRemovePeserta
         })
     }
+    removeTemuanLain = index => () => {
+        const temuanLain = this.state.temuanLain
+        const data = [...temuanLain]
+        data.splice(index, 1);
 
+        this.setState({
+            temuanLain: data,
+        }, this.setDataSuratBA()
+        );
+
+
+    }
+    removeMemberatkan = index => () => {
+        const memberatkan = this.state.memberatkan
+        const data = [...memberatkan]
+        data.splice(index, 1);
+
+        this.setState({
+            memberatkan: data,
+        }, this.setDataSuratBA()
+        );
+
+    }
+    removeMeringankan = index => () => {
+        const meringankan = this.state.meringankan
+        const data = [...meringankan]
+        data.splice(index, 1);
+
+        this.setState({
+            meringankan: data,
+        }, this.setDataSuratBA()
+        );
+
+    }
     render() {
         const { dataLaporan, dataSuratBA, dataPelanggaran } = this.props
-        const { descPelanggaran, tanggal, setTanggal } = this.state
+        const { descPelanggaran, tanggal, setTanggal, temuanLain } = this.state
         return (
             <div>
                 <Modal isOpen={this.state.modalRemovePeserta} >
@@ -259,7 +292,7 @@ class BeritaAcara extends Component {
                         <p>
                             Pada hari ini
                             {dataSuratBA?.isEditTanggal &&
-                                <span style={{ textIndent:"0rem"}}>
+                                <span style={{ textIndent: "0rem" }}>
                                     <DatePicker
                                         selected={tanggal ? new Date(tanggal) : tanggal}
                                         onChange={(tanggal) => {
@@ -399,7 +432,21 @@ class BeritaAcara extends Component {
 
                                         : <Button onClick={this.isEditTemuanLain} className=" p-0 m-0" color="success">Input Data</Button>}
                                     <ol type="a">
-                                        {dataSuratBA?.temuanLain?.map((value) => <li>{value}</li>) || this.state?.temuanLain?.map((value) => <li>{value}</li>)}
+                                        {
+                                            // dataSuratBA?.temuanLain?.map((value, index) =>
+                                            //     <li>
+                                            //         {value}
+                                            //         <button onClick={removeTemuanLain(index)} className="bg-transparent button-transparent border-0 fas fa-trash text-danger float-right"
+                                            //         />
+                                            //     </li>) ||
+                                            this.state?.temuanLain?.map((value, index) =>
+                                                <li>
+                                                    {value}
+                                                    <button onClick={
+                                                        this.removeTemuanLain(index)
+                                                    } className="bg-transparent button-transparent border-0 fas fa-trash text-danger float-right"
+                                                    />
+                                                </li>)}
                                     </ol>
                                 </li>
                                 <li>Hal-hal yang memberatkan, sebagai berikut:
@@ -412,7 +459,21 @@ class BeritaAcara extends Component {
 
                                         : <Button onClick={this.isEditKeberatan} className=" p-0 m-0" color="success">Input Data</Button>}
                                     <ol type="a">
-                                        {dataSuratBA?.memberatkan?.map((value) => <li>{value}</li>) || this.state?.memberatkan?.map((value) => <li>{value}</li>)}
+                                        {
+                                            // dataSuratBA?.memberatkan?.map((value) =>
+                                            //     <li>
+                                            //         {value}
+                                            //     </li>)
+                                            //     ||
+                                            this.state?.memberatkan?.map((value, index) =>
+                                                <li>
+                                                    {value}
+                                                    <button onClick={
+                                                        this.removeMemberatkan(index)
+                                                    } className="bg-transparent button-transparent border-0 fas fa-trash text-danger float-right"
+                                                    />
+                                                </li>
+                                            )}
                                     </ol>
                                 </li>
                                 <li>hal-hal yang meringankan, sebagai berikut:
@@ -425,7 +486,21 @@ class BeritaAcara extends Component {
 
                                         : <Button onClick={this.isEditMeringankan} className=" p-0 m-0" color="success">Input Data</Button>}
                                     <ol type="a">
-                                        {dataSuratBA?.meringankan?.map((value) => <li>{value}</li>) || this.state?.meringankan?.map((value) => <li>{value}</li>)}
+                                        {
+                                            // dataSuratBA?.meringankan?.map((value) =>
+                                            //     <li>
+                                            //         {value}
+                                            //     </li>)
+                                            //     ||
+                                            this.state?.meringankan?.map((value, index) =>
+                                                <li>
+                                                    {value}
+                                                    <button onClick={
+                                                        this.removeMeringankan(index)
+                                                    } className="bg-transparent button-transparent border-0 fas fa-trash text-danger float-right"
+                                                    />
+                                                </li>
+                                            )}
                                     </ol>
                                 </li>
                                 <li>

+ 0 - 1
components/Sanksi/Ringkasan.js

@@ -30,7 +30,6 @@ export class Ringkasan extends Component {
 
 	render() {
 		const { dataLaporan, dataPelanggaran, dataUpload } = this.props
-		console.log(this.props)
 		return (
 			<>
 				<Row>

+ 13 - 0
components/Sanksi/TablePenetapanSanksi.js

@@ -123,10 +123,23 @@ export class TablePenetapanSanksi extends Component {
 								)
 								}
 							</tbody>
+
 						</table>
 
+
 					</Datatable>
+
 					}
+						{this.props.user?.role.id === 2020 ? (
+							labelSanksi.length && labelSanksi.filter((e) => e.labelSanksi === "Ringan" || e.labelSanksi === "Sedang").length === labelSanksi.length ? (
+								<Button className="btn-login float-right" color onClick={this.ondelegasi} >
+									<span className="font-color-white">
+										Delegasi ke LLDIKTI
+									</span>
+								</Button>
+							) : ("")
+						) : ("")
+						}
 
 				</div>
 			</div>

+ 63 - 89
components/Sanksi/UploadSurat.js

@@ -25,50 +25,13 @@ class DropzoneWrapper extends Component {
 		return Dropzone ? <Dropzone {...this.props}>{this.props.children}</Dropzone> : null;
 	}
 }
-
-const data = [
-	{
-		value: "Sanksi Administratif Sedang",
-		// label_sanksi: "- Sanksi Administratif ringan"
-	},
-	{
-		sanksi: "Penghentian Pembinaan PT",
-		value: "Penghentian Pembinaan PT",
-		label_sanksi: "- Sanksi Administratif Berat",
-	},
-	{
-		sanksi: "Pencabutan Izin Perguruan Tinggi Swasta",
-		value: "Pencabutan Izin Perguruan Tinggi Swasta",
-		label_sanksi: "- Sanksi Administratif Berat",
-	},
-	{
-		sanksi: "Penghentian Pembinaan Program Studi",
-		value: "Penghentian Pembinaan Program Studi",
-		label_sanksi: "- Sanksi Administratif Berat",
-	},
-	{
-		sanksi: "Pencabutan Izin Program Studi",
-		value: "Pencabutan Izin Program Studi",
-		label_sanksi: "- Sanksi Administratif Berat",
-	},
-	{
-		sanksi: "Pembubaran Perguruan Tinggi Negeri",
-		value: "Pembubaran Perguruan Tinggi Negeri",
-		label_sanksi: "- Sanksi Administratif Berat",
-	},
-];
-
-// const listSanksi = data.map((d) => ({
-// 	value: d.value,
-// 	label: d.sanksi,
-// 	label_sanksi: d.label_sanksi,
-// }));
 const formatOptionLabel = ({ value, sanksi, label_sanksi }) => (
 	<div style={{ display: "flex" }}>
 		<span className="">{value}</span>
 		<div style={{ marginLeft: "10px", color: "#adaca8" }}>{label_sanksi}</div>
 	</div>
 );
+
 export class UploadSurat extends Component {
 	constructor(props) {
 		super(props);
@@ -84,7 +47,6 @@ export class UploadSurat extends Component {
 			awalsanksi: "",
 			akhirsanksi: "",
 			tmtCheck: false,
-			saveData: [],
 			terimaSuratSanksi: "",
 			tglAkhirKeberatan: "",
 			filesTandaTerimaSS: [],
@@ -110,7 +72,7 @@ export class UploadSurat extends Component {
 					preview: URL.createObjectURL(file),
 				})
 			),
-			stat: "Added " + filesTandaTerimaSS.length + " file(s)",
+			stat: "file tanda terima sanksi " + filesTandaTerimaSS.length + " file",
 		});
 		this.props.setUploadSuratSanksi(this.state);
 	};
@@ -118,19 +80,11 @@ export class UploadSurat extends Component {
 	componentDidMount = async () => {
 		const { query, token } = this.props;
 		const { id } = query;
-		const getDataSave = await getAutoSave({ token, id, laporan: true });
-		const saveData = getDataSave.data?.penetapanSanksi;
-		this.setState(saveData)
+		// const getDataSave = await getAutoSave({ id, laporan: true });
+		// const autosaveDataUpload = getDataSave.data?.PenetapanSanksi?.dataUpload;
+		// this.setState(autosaveDataUpload)
 	}
 
-	// handleAutoSave = async () => {
-	// 	const { query, token } = this.props;
-	// 	const { id } = query;
-	// 	const { nomorSanksi, keterangan } = this.state
-	// 	const saveData = await inputAutoSave({ data: { penetapanSanksi: { nomorSanksi, keterangan } }, token, id, laporan: true })
-
-	// }
-
 	uploadFiles = (e) => {
 		e.preventDefault();
 		e.stopPropagation();
@@ -145,11 +99,9 @@ export class UploadSurat extends Component {
 		e.stopPropagation();
 		this.setState({
 			stat: this.state.files.length ? this.state.files.length + " file(s) cleared." : "No files to clear.",
-			stat: this.state.filesBeritaAcara.length ? this.state.filesBeritaAcara.length + " file(s) cleared." : "No files to clear.",
 		});
 		this.setState({
 			files: [],
-			filesBeritaAcara: [],
 		});
 		this.props.setUploadSuratSanksi(this.state);
 	};
@@ -165,29 +117,49 @@ export class UploadSurat extends Component {
 		this.props.setUploadSuratSanksi(this.state);
 	};
 
-	toRingkasan = () => {
+	// handleAutoSave = () => {
+	// 	this.props.handleAutoSave()
+	// }
+
+	setUploadSuratSanksi = () => {
 		this.props.setUploadSuratSanksi(this.state);
 	};
 
 	setNomorSanksi = (e) => {
-		this.setState({ nomorSanksi: e.target.value }, this.toRingkasan);
+		// this.setState({ nomorSanksi: e.target.value }, this.setUploadSuratSanksi);
+		this.state.nomorSanksi = e.target.value
+		this.setUploadSuratSanksi()
+		// this.handleAutoSave()
+
 	};
 
 	setKeterangan = (e) => {
-		this.setState({ keterangan: e.target.value }, this.toRingkasan);
+		// this.setState({ keterangan: e.target.value }, this.setUploadSuratSanksi);
+		this.state.keterangan = e.target.value
+		this.setUploadSuratSanksi()
+		// this.handleAutoSave()
+	};
+	setAkhirSanksi = (akhirsanksi) => {
+		// this.setState({ keterangan: e.target.value }, this.setUploadSuratSanksi);
+		this.state.akhirsanksi = akhirsanksi
+		this.setUploadSuratSanksi()
+		// this.handleAutoSave()
 	};
 
 	setListSanksi = (ls) => {
-		this.setState({ listSanksi: ls.target.value }, this.toRingkasan);
+		this.setState({ listSanksi: ls.target.value }, this.setUploadSuratSanksi);
 	};
 	handleChangeListSanksi = (listSanksi) => {
-		this.setState({ listSanksi }, this.toRingkasan);
+		this.setState({ listSanksi }, this.setUploadSuratSanksi);
 	};
 	handleTmtCheck = () => {
-		this.setState({ tmtCheck: !this.state.tmtCheck }, this.toRingkasan);
+		// this.setState({ tmtCheck: !this.state.tmtCheck }, this.setUploadSuratSanksi);
+		this.state.tmtCheck = !this.state.tmtCheck
+		this.setUploadSuratSanksi()
+		// this.handleAutoSave()
 	}
 	render() {
-		const { files, filesBeritaAcara, terimaSuratSanksi, tglAkhirKeberatan, filesTandaTerimaSS, tmtCheck } = this.state;
+		const { files, terimaSuratSanksi, tglAkhirKeberatan, filesTandaTerimaSS, tmtCheck } = this.state;
 		const removeFile = file => () => {
 			const newFiles = [...files]
 			newFiles.splice(newFiles.indexOf(file), 1)
@@ -217,15 +189,15 @@ export class UploadSurat extends Component {
 		return (
 			<form className="form-horizontal" method="get" action="/" onSubmit={this.onSubmit}>
 				<FormGroup row>
-					<label className="col-md-2 col-form-label">Nomor Surat:</label>
+					<label className="col-md-2 col-form-label">Nomor Surat<span className="text-danger">*</span></label>
 					<div className="col-md-10">
-						<Input type="text" value={this.state.nomorSanksi} onChange={(e) => { this.setNomorSanksi(e); this.props.handleAutoSave() }} />
+						<Input type="text" value={this.state.nomorSanksi} onChange={(e) => { this.setNomorSanksi(e) }} />
 					</div>
 				</FormGroup>
 				<FormGroup row className="mt-3">
-					<label className="col-md-2 col-form-label">Keterangan</label>
+					<label className="col-md-2 col-form-label">Keterangan<span className="text-danger">*</span></label>
 					<div className="col-md-10">
-						<Input type="textarea" value={this.state.keterangan} onChange={(e) => { this.setKeterangan(e); this.props.handleAutoSave() }} required />
+						<Input type="textarea" value={this.state.keterangan} onChange={(e) => { this.setKeterangan(e) }} required />
 					</div>
 				</FormGroup>
 				<FormGroup row>
@@ -233,7 +205,7 @@ export class UploadSurat extends Component {
 					<div className="col-md-10 mt-2">
 						<div className="checkbox c-checkbox">
 							<label>
-								<Input type="checkbox" onChange={this.handleTmtCheck} defaultChecked={this.state.tmtCheck} />
+								<Input type="checkbox" onChange={() => this.handleTmtCheck()} defaultChecked={this.state.tmtCheck} />
 								<span className="fa fa-check"></span></label>
 						</div>
 					</div>
@@ -243,12 +215,12 @@ export class UploadSurat extends Component {
 						<label className="col-md-2 col-form-label">Tanggal Penetapan Sanksi</label>
 						<span className="col-sm-3 float-left">
 							<DatePicker
-								selected={this.state.awalsanksi}
+								selected={this.state.awalsanksi ? new Date(this.state.awalsanksi) : this.state.awalsanksi}
 								onChange={(awalsanksi) => {
-									this.setState({ awalsanksi }, this.toRingkasan)
+									this.setState({ awalsanksi }, this.setUploadSuratSanksi)
 								}}
 								dateFormat="dd/MM/yyyy"
-								maxDate={this.state.startDay}
+								maxDate={new Date(this.state.startDay)}
 								placeholderText="Isi Tanggal"
 								locale={id}
 								className="form-control bg-white"
@@ -264,12 +236,12 @@ export class UploadSurat extends Component {
 								<FormGroup>
 									<span className="ml-3">
 										<DatePicker
-											selected={this.state.awalsanksi}
+											selected={this.state.awalsanksi ? new Date(this.state.awalsanksi) : this.state.awalsanksi}
 											onChange={(awalsanksi) => {
-												this.setState({ awalsanksi }, this.toRingkasan)
+												this.setState({ awalsanksi }, this.setUploadSuratSanksi)
 											}}
 											dateFormat="dd/MM/yyyy"
-											maxDate={this.state.startDay}
+											maxDate={new Date(this.state.startDay)}
 											placeholderText="Dari Tanggal"
 											locale={id}
 											className="form-control bg-white"
@@ -282,12 +254,13 @@ export class UploadSurat extends Component {
 								<FormGroup>
 									<span className="ml-3">
 										<DatePicker
-											selected={this.state.akhirsanksi}
-											onChange={(akhirsanksi) => {
-												this.setState({ akhirsanksi }, this.toRingkasan)
-											}}
+											selected={this.state.akhirsanksi ? new Date(this.state.akhirsanksi) : this.state.akhirsanksi}
+											// onChange={(akhirsanksi, e) => {
+											// 	this.setState({ akhirsanksi }, this.setUploadSuratSanksi(e), this.props.handleAutoSave(e))
+											// }}
+											onChange={(akhirsanksi) => { this.setAkhirSanksi(akhirsanksi) }}
 											dateFormat="dd/MM/yyyy"
-											minDate={this.state.awalsanksi}
+											minDate={new Date(this.state.awalsanksi)}
 											maxDate={addMonths(new Date(this.state.awalsanksi), 6)}
 											placeholderText="Sampai tanggal"
 											locale={id}
@@ -320,8 +293,8 @@ export class UploadSurat extends Component {
 					<div className="col-md-10">
 						<Select
 							options={this.props.listSanksi.map(e => ({ value: `Sanksi Administratif ${e.split(";")[0]} - ${e.split(";")[1]}` }))}
-							formatOptionLabel={formatOptionLabel}
 							isMulti
+							formatOptionLabel={formatOptionLabel}
 							onChange={(e) => {
 								this.handleChangeListSanksi(e);
 							}}
@@ -330,7 +303,7 @@ export class UploadSurat extends Component {
 				</FormGroup>
 				<FormGroup row>
 					<label className="col-md-2 col-form-label">
-						Dokumen Surat Sanksi<span>: &nbsp;</span><span className="text-danger">*</span>
+						Dokumen Surat Sanksi<span className="text-danger">*</span>
 					</label>
 					<div className="col-md-10">
 						<DropzoneWrapper className="" onDrop={this.onDrop}>
@@ -370,7 +343,7 @@ export class UploadSurat extends Component {
 				</FormGroup>
 				<FormGroup row>
 					<label className="col-md-2 col-form-label">
-						Dokumen Laporan Evaluasi dan Pembahasan<span>: &nbsp;</span>
+						Dokumen Laporan Evaluasi dan Pembahasan
 					</label>
 					<div className="col-md-10">
 
@@ -390,15 +363,15 @@ export class UploadSurat extends Component {
 					</div>
 				</FormGroup>
 				<FormGroup row className="mt-3">
-					<label className="col-md-2 col-form-label">Tanggal Terima Surat Sanksi</label>
+					<label className="col-md-2 col-form-label">Tanggal Terima Surat Sanksi<span className="text-danger">*</span></label>
 					<span className="col-sm-3 float-left">
 						<DatePicker
-							selected={terimaSuratSanksi}
+							selected={this.state.terimaSuratSanksi ? new Date(this.state.terimaSuratSanksi) : this.state.terimaSuratSanksi}
 							onChange={(terimaSuratSanksi) => {
-								this.setState({ terimaSuratSanksi }, this.toRingkasan)
+								this.setState({ terimaSuratSanksi }, this.setUploadSuratSanksi)
 							}}
 							dateFormat="dd/MM/yyyy"
-							minDate={this.state.awalsanksi}
+							minDate={new Date(this.state.awalsanksi)}
 							placeholderText="Isi Tanggal"
 							locale={id}
 							className="form-control bg-white"
@@ -407,7 +380,7 @@ export class UploadSurat extends Component {
 				</FormGroup>
 				<FormGroup row>
 					<label className="col-md-2 col-form-label">
-						Dokumen Tanda Terima Surat Sanksi<span>: &nbsp;</span><span className="text-danger">*</span>
+						Dokumen Tanda Terima Surat Sanksi<span className="text-danger">*</span>
 					</label>
 					<div className="col-md-10">
 						<DropzoneWrapper className="" onDrop={this.onDropTandaTerimaSS}>
@@ -446,18 +419,19 @@ export class UploadSurat extends Component {
 					</div>
 				</FormGroup>
 				<FormGroup row className="mt-3">
-					<label className="col-md-2 col-form-label">Akhir Permohonan Keberatan Sanksi
+					<label className="col-md-2 col-form-label">Tanggal Akhir Pengajuan Keberatan<span className="text-danger">*</span>
 						<p>
-							Note : 21 hari kerja						</p>
+							Note : 21 hari kerja
+						</p>
 					</label>
 					<span className="col-sm-3 float-left">
 						<DatePicker
-							selected={tglAkhirKeberatan}
+							selected={this.state.tglAkhirKeberatan ? new Date(this.state.tglAkhirKeberatan) : this.state.tglAkhirKeberatan}
 							onChange={(tglAkhirKeberatan) => {
-								this.setState({ tglAkhirKeberatan }, this.toRingkasan)
+								this.setState({ tglAkhirKeberatan }, this.setUploadSuratSanksi)
 							}}
 							dateFormat="dd/MM/yyyy"
-							minDate={terimaSuratSanksi}
+							minDate={new Date(terimaSuratSanksi)}
 							placeholderText="Isi Tanggal"
 							locale={id}
 							className="form-control bg-white"

+ 1 - 1
pages/app/index.js

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

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

@@ -272,7 +272,7 @@ class DetailKeberatan extends Component {
 													{() => (
 														<Form className="form-horizontal">
 															<FormGroup>
-																<label className="row-form-label">Status:</label>
+																<label className="row-form-label">Status :<span className="text-danger">*</span></label>
 																<div className="row-md-10">
 																	<Field name="status">
 																		{({ field, form, meta }) => (
@@ -295,7 +295,7 @@ class DetailKeberatan extends Component {
 																</div>
 															</FormGroup>
 															<FormGroup>
-																<label className="row-form-label">Keterangan:</label>
+																<label className="row-form-label">Keterangan :<span className="text-danger">*</span></label>
 																<div className="row-md-10">
 																	<Field name="keterangan">{({ field }) => <Input type="textarea" {...field} />}</Field>
 																	<ErrorMessage name="keterangan" component="div" className="form-text text-danger" />
@@ -303,14 +303,14 @@ class DetailKeberatan extends Component {
 																</div>
 															</FormGroup>
 															<FormGroup>
-																<label className="row-form-label">Nomor Surat Jawaban Atas Permohonan Keberatan:</label>
+																<label className="row-form-label">Nomor Surat Jawaban Atas Permohonan Keberatan :<span className="text-danger">*</span></label>
 																<div className="row-md-10">
 																	<Field name="no_keberatan">{({ field }) => <Input type="text" {...field} />}</Field>
 																	<ErrorMessage name="no_keberatan" component="div" className="form-text text-danger" />
 																</div>
 															</FormGroup>
 															<FormGroup>
-																<label className="row-form-label">Tanggal Surat Jawaban Atas Permohonan Keberatan :</label>
+																<label className="row-form-label">Tanggal Surat Jawaban Atas Permohonan Keberatan :<span className="text-danger">*</span></label>
 																<div className="row-md-10">
 																	<Field name="tanggal_surat_keberatan">
 																		{({ field, form }) => (
@@ -332,7 +332,7 @@ class DetailKeberatan extends Component {
 																</div>
 															</FormGroup>
 															<FormGroup>
-																<label className="row-form-label">Dokumen Jawaban Atas Permohonan Keberatan:</label>
+																<label className="row-form-label">Dokumen Jawaban Atas Permohonan Keberatan :<span className="text-danger">*</span></label>
 																<div className="row-md-10">
 																	<Field name="dokumen">
 																		{({ field, form }) => (
@@ -383,7 +383,7 @@ class DetailKeberatan extends Component {
 															</FormGroup>
 
 															<FormGroup>
-																<label className="row-form-label">Tanda Terima Surat Jawaban Permohonan Keberatan :</label>
+																<label className="row-form-label">Tanda Terima Surat Jawaban 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:</label>
+																<label className="row-form-label">Dokumen Tanda Terima Surat Jawaban 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">Akhir Permohonan Banding : </label>
+																<label className="row-form-label">Tanggal Akhir Pengajuan Keberatan :<span className="text-danger">*</span> </label>
 																<p>Note : 21 hari kerja</p>
 																<div className="row-md-10">
 																	<Field name="tanggal_akhir_banding">

+ 33 - 4
pages/app/sanksi/proses.js

@@ -18,6 +18,7 @@ import Loader from "@/components/Common/Loader";
 import { ToastContainer, toast } from "react-toastify";
 import BeritaAcara from "@/components/Sanksi/BeritaAcara";
 import { getAutoSave, inputAutoSave } from "@/actions/autosave";
+import swal from "sweetalert2";
 
 
 
@@ -83,8 +84,8 @@ class ProsesSanksi extends Component {
 					formdata.append("dokumen", e);
 				});
 			}
-			if (this.state.dataUpload.fileTandaTerimaSS && this.state.dataUpload.fileTandaTerimaSS.length > 0) {
-				this.state.dataUpload.fileTandaTerimaSS.forEach((e) => {
+			if (this.state.dataUpload.filesTandaTerimaSS && this.state.dataUpload.filesTandaTerimaSS.length > 0) {
+				this.state.dataUpload.filesTandaTerimaSS.forEach((e) => {
 					formdata.append("dokumen_terima_sanksi", e);
 				});
 			}
@@ -137,14 +138,41 @@ class ProsesSanksi extends Component {
 	setUploadSuratSanksi = (data) => {
 		this.setState({ dataUpload: data });
 
+
 	};
 	setDataSuratBA = (data) => {
 		this.setState({ dataSuratBA: data });
 
 	};
+	validation = (activeStep) => {
+		const dataUpload = this.state.dataUpload
+		if (
+			dataUpload?.nomorSanksi === undefined || dataUpload?.nomorSanksi === "" ||
+			dataUpload?.keterangan === undefined || dataUpload?.keterangan === "" ||
+			dataUpload?.awalsanksi === undefined || dataUpload?.awalsanksi === "" ||
+			dataUpload?.listSanksi === undefined || dataUpload?.listSanksi === null ||
+			dataUpload?.files === undefined || dataUpload?.files.length === 0 || dataUpload?.files === null ||
+			dataUpload?.terimaSuratSanksi === undefined || dataUpload?.terimaSuratSanksi === "" ||
+			dataUpload?.tglAkhirKeberatan === undefined || dataUpload?.tglAkhirKeberatan === "" ||
+			dataUpload?.filesTandaTerimaSS === undefined || dataUpload?.filesTandaTerimaSS.length === 0 || dataUpload?.filesTandaTerimaSS === null
+		) {
+			swal.fire({
+				title: "Form Wajib Diisi",
+				icon: "error",
+				confirmButtonColor: "#3e3a8e",
+			});
+		} else {
+			this.setState({
+				activeStep: "6"
+			});
+		}
+
+
+	}
 
 	render() {
 		const { dataUpload, dataPelanggaran, pelaporan, dataSuratBA } = this.state
+		console.log(dataUpload)
 		return (
 			<ContentWrapper unwrap>
 				{/* <Header /> */}
@@ -225,7 +253,8 @@ class ProsesSanksi extends Component {
 												className={classnames({
 													active: this.state.activeStep === "6",
 												})}
-												onClick={this.toggleStep("6")}
+												onClick={this.validation}
+											// onClick={this.toggleStep("6")}
 											>
 												<h4 className="text-left my-3">6. Ringkasan</h4>
 											</NavLink>
@@ -307,7 +336,7 @@ class ProsesSanksi extends Component {
 												<Button color className="btn-login color-3e3a8e" onClick={this.toggleStep("4")}>
 													<span className="font-color-white">Previous</span>
 												</Button>
-												<Button className="ml-auto btn-login color-3e3a8e" color onClick={this.toggleStep("6")}>
+												<Button className="ml-auto btn-login color-3e3a8e" color onClick={() => { this.validation() }}>
 													<span className="font-color-white">Next</span>
 												</Button>
 											</div>

+ 34 - 6
pages/laporan/new/index.js

@@ -755,7 +755,21 @@ class App extends Component {
                     this.setState({ disablekirim3: false, disablecancel: false })
                   }}
                 >
-                  <span className="font-color-white">Kirim</span>
+                  {this.state.loading ?
+                    (
+                      <div class="d-flex justify-content-center">
+                        <span
+                          class="spinner-border spinner-border-sm text-white"
+                          role="status"
+                        ></span>
+                        <span className="font-color-white">
+                          &nbsp; Diproses...
+                        </span>
+                      </div>
+                    ) : (
+                      <span className="font-color-white">Kirim</span>
+                    )}
+
                 </Button>
               </ModalFooter>
             </form>
@@ -805,19 +819,33 @@ class App extends Component {
                   <span className="font-color-white">Cancel</span>
                 </Button>
                 <Button
-                  className="btn-login bg-success"
+                  className="bg-success float-lg-right"
                   color
                   disabled={this.state.disablekirim}
                   onClick={async () => {
-                    this.setState({ disablecancel: true })
+                    this.setState({ disablecancel: true, loading2: true })
                     await this.createLaporan(this.state.token);
                     this.setState({ disablecancel: false })
 
                   }}
                 >
-                  <span className="font-color-white">
-                    Kirim
-                  </span>
+                  {this.state.loading2 ?
+                    (
+                      <div class="d-flex justify-content-center">
+                        <span
+                          class="spinner-border spinner-border-sm text-white"
+                          role="status"
+                        ></span>
+                        <span className="font-color-white">
+                          &nbsp; Diproses...
+                        </span>
+                      </div>
+                    ) : (
+                      <span className="font-color-white">
+                        Kirim
+                      </span>
+                    )}
+
                 </Button>
               </ModalFooter>
             </form>

+ 0 - 1
pages/pt/sanksi/detail.js

@@ -37,7 +37,6 @@ class Sanksi extends Component {
 
 	render() {
 		const { sanksi, pt } = this.state;
-		console.log(sanksi)
 		return (
 			<ContentWrapper unwrap>
 				<Modal isOpen={this.state.modal} toggle={this.props.toggleModal}>