andi 1 year ago
parent
commit
85341bc013

+ 4 - 0
actions/docPerbaikan.js

@@ -24,3 +24,7 @@ const logErrorAddDocPerbaikan = async (token, id) => {
 	const _csrf = getToken.token;
 	await createLog(token, { aktivitas: `Gagal melakukan perbaikan dokumen, id: ${id}`, menu: "Dokuemen Perbaikan", _csrf: _csrf });
 }
+export const FinalisasiPerbaikan = async (token, id, data, _csrf) => {
+	const res = await axios.put(`/sanksi/perbaikan/finalisasi/${id}?_csrf=${_csrf}`, data, { headers: { Authorization: token } });
+	return res.data;
+};

+ 2 - 2
components/Layout/SidebarUserBlock.js

@@ -198,7 +198,7 @@ class SidebarUserBlock extends Component {
 										<div className=" d-inline-flex justify-content-center">
 											<span className="font-color-black font-weight-bold text-center">{user.nama}</span>
 										</div>
-										<div className=" d-inline-flex ml-1">
+										{/* <div className=" d-inline-flex ml-1">
 											<Dropdown isOpen={this.state.ddOpen} toggle={this.toggleDropDown}>
 												<DropdownToggle data-toggle="dropdown" tag="span">
 													<span style={{ width: "20px" }} >
@@ -213,7 +213,7 @@ class SidebarUserBlock extends Component {
 													</DropdownItem>
 												</DropdownMenu>
 											</Dropdown>
-										</div>
+										</div> */}
 
 
 									</div>

+ 261 - 27
components/Main/DetailPT.js

@@ -1,31 +1,265 @@
-function DetailPT({ data }) {
-	return (
-		<div className="card card-default">
-			<div className="card-body">
-				<div className="text-center">
-					<h3 className="mt-0">{data.nama}</h3>
-					<p>{data.sk_pendirian}</p>
-					<p>Pembina: {data.pembina.nama}</p>
-					<p>{`${data.alamat.jalan} ${data.alamat.rt ? `rt ${data.alamat.rt}` : ""} ${data.alamat.rw ? `rt ${data.alamat.rw}` : ""}, ${data.alamat.kab_kota.nama}, ${data.propinsi.nama}`}</p>
+import React, { Component } from "react";
+import ContentWrapper from "@/components/Layout/ContentWrapper";
+import Header from "@/components/Main/Header";
+import { getLogPT } from "@/actions/log";
+import { getPT } from "@/actions/PT";
+import { Row, Col, ModalHeader, ModalBody, ModalFooter, Modal, FormFeedback, Button, Alert } from "reactstrap";
+import Timeline from "@/components/Main/Timeline";
+import { connect } from "react-redux";
+import Loader from "@/components/Common/Loader";
+import { createotp, getkontakpt, createkontak } from "../../actions/auth";
+import PhoneInput from 'react-phone-input-2'
+import 'react-phone-input-2/lib/style.css'
+import OtpInput from 'react-otp-input';
+import { ToastContainer, toast } from "react-toastify";
+import swal from "sweetalert2";
+
+
+class DetailPT extends Component {
+	state = {
+		phone: "",
+		ddselected: false,
+		modalOTP: false,
+		loadingProses: false,
+		otp: "",
+		sendingOTP: false,
+		newphone: "",
+
+	}
+
+
+
+	componentDidMount = async () => {
+		const { token } = this.props;
+
+		const kontakPT = await getkontakpt(token);
+		const oldPhone = kontakPT?.data.map((data) => (data.no_hp)).toString()
+		if (oldPhone) {
+			this.setState({ phone: oldPhone })
+		}
+	}
+	OpenEditNoTelp = () => this.setState({
+		ddselected: !this.state.ddselected
+	})
+	handleSubmitTelepon = async () => {
+		this.setState({ loadingProses: true })
+		const { token } = this.props
+
+		if (this.state.newphone.length) {
+			await createotp({ no_hp: this.state.newphone }, token)
+		} else {
+			await createotp({ no_hp: this.state.phone }, token)
+		}
+
+
+
+		this.setState({ modalPhone: false, modalOTP: true })
+	}
+	handleOTPagain = async () => {
+		this.setState({ sendingOTP: true })
+		const { token } = this.props
+		await createotp({ no_hp: this.state.newphone }, token)
+		this.setState({ modalPhone: false, modalOTP: true })
+		setTimeout(() => {
+			this.setState({
+				sendingOTP: !this.state.sendingOTP
+			});
+		}, 5000);
+	}
+	otpClose = () => {
+		this.setState({ modalOTP: false, ddselected: false, loadingProses: false, otp: "" })
+	}
+	handleSubmitOtp = async () => {
+		const { token } = this.props
+		const create = await createkontak({ otp: this.state.otp, no_hp: this.state.newphone }, token)
+		if (create.error) {
+			swal.fire({
+				title: create.error.message,
+				icon: "error",
+				content: create.error.message,
+				confirmButtonColor: "#3e3a8e",
+			});
+		} else {
+			swal.fire({
+				title: "Data berhasil dikirim",
+				icon: "success",
+				confirmButtonColor: "#3e3a8e",
+			});
+
+			this.setState({ ddselected: false, modalOTP: false, loadingProses: false, otp: "" })
+			window.location.reload(false);
+		}
+
+	}
+	render() {
+		const { data } = this.props;
+		return (
+			<div className="card card-default">
+				<Modal isOpen={this.state.ddselected} style={{ width: '400px' }}>
+					<ModalBody>
+						<div className="modalLoginPT-a">
+							<img
+								className="icon-triangle-onModalPT mt-0"
+								src="/static/img/Frame_10.png"
+							></img>
+
+							<h4 className=" font-color-black mt-1">Edit Nomor Telepon Perguruan Tinggi</h4>
+						</div>
+
+						<div className="modalLoginPT-b">
+							<label className=" font-weight-bold h6">
+								Nomor Telepon :
+							</label>
+							<div className="border-2">
+								<PhoneInput
+									country={'id'}
+									value={this.state.phone || this.state.newphone}
+									onChange={newphone => this.setState({ newphone })} />
+							</div>
+						</div>
+						<div className="">
+							<Button className="btn-v2 float-left mr-2 ml-4" style={{ width: "40%" }} color onClick={this.otpClose}>
+								<span className=" font-color-black">
+									Batal
+								</span>
+							</Button>
+							<Button className="btn-login float-right mr-4" style={{ width: "40%" }} color onClick={this.handleSubmitTelepon}>
+								{this.state.loadingProses ?
+									(
+										<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">
+											Simpan
+										</span>
+									)}
+							</Button>
+						</div>
+					</ModalBody>
+				</Modal>
+				<Modal isOpen={this.state.modalOTP} style={{ width: '400px' }} >
+					<ModalBody>
+
+						<div className="modalLoginPT-a">
+							<img
+								className="icon-triangle-onModalPT mt-auto mb-auto"
+								src="/static/img/Frame_10.png"
+							></img>
+
+							<h3 className=" font-color-black">Masukan Kode OTP</h3>
+						</div>
+						{this.state.sendingOTP === true &&
+							<div>
+								<Alert color="warning">
+									Berhasil Kirim Kode OTP
+								</Alert>
+							</div>
+						}
+
+						{/* <div className="modalLoginPT-b"> */}
+
+						<div className=" mt-5 mb-5">
+							<OtpInput
+								invalid={this.state.error}
+								value={this.state.otp}
+								onChange={(otp) => { this.setState({ otp }) }}
+								numInputs={4}
+								renderSeparator={<span className=" font-color-black font-weight-bold mr-2 ml-2">-</span>}
+								renderInput={(props) => <input {...props} style={{ width: "50px", height: "50px", textAlign: "center", marginLeft: "auto", marginRight: "auto", borderRadius: "7px", fontSize: "30px" }} />}
+
+							/>
+							<p className="  mt-3">
+								*Kode OTP terkirim ke nomor WA {this.state.newphone || this.state.phone}
+							</p>
+							<p className="  mt-3 ">
+								Jika Anda belum menerima kode OTP, <span className=" btn-link" onClick={this.handleOTPagain}>kirimkan ulang kode OTP</span>
+							</p>
+							<FormFeedback invalid={this.state.error}>
+								Kode verifikasi harus diisi
+							</FormFeedback>
+						</div>
+
+						<div>
+							<Button className="btn-v2 float-left mr-2 ml-4" style={{ width: "40%" }} color onClick={this.otpClose}>
+								<span className=" font-color-black">
+									Batal
+								</span>
+							</Button>
+							<Button className="btn-login float-right mr-4" style={{ width: "40%" }} color onClick={this.handleSubmitOtp}
+							>
+								<span className=" font-color-white">
+									Simpan
+								</span>
+							</Button>
+						</div>
+					</ModalBody>
+
+				</Modal>
+				<div className="card-body">
+					<div className="text-center">
+						<h3 className="mt-0">{data.nama}</h3>
+						<p>{data.sk_pendirian}</p>
+						<p>Pembina: {data.pembina.nama}</p>
+						<p>{`${data.alamat.jalan} ${data.alamat.rt ? `rt ${data.alamat.rt}` : ""} ${data.alamat.rw ? `rt ${data.alamat.rw}` : ""}, ${data.alamat.kab_kota.nama}, ${data.propinsi.nama}`}</p>
+					</div>
+					<hr />
+					<ul className="list-unstyled px-4">
+						<li>
+							<em className="fa fa-globe fa-fw mr-3"></em>
+							<a href={`https://${data.website}`}>{data.website}</a>
+						</li>
+						<li>
+							<em className="fa fa-phone fa-fw mr-3"></em>
+							{data.telepon}
+						</li>
+						<li>
+							<em className="fa fa-at fa-fw mr-3"></em>
+							<a href={`mailto:${data.email}`}>{data.email}</a>
+						</li>
+					</ul>
+					{this.props.user.role.id === 2022 ?
+						<div>
+							<hr />
+							<label >
+								Nomor Telepon :
+							</label>
+							<button onClick={this.OpenEditNoTelp} className=" float-right bg-transparent border-0 color-3e3a8e">
+								Edit
+							</button>
+							<div >
+								<div className=" no-hpPT mt-2">
+									<div className=" inline">
+										<span style={{ fontSize: "16px" }} className="  font-color-black font-weight-bold">
+											+62
+										</span>
+										<span style={{ width: "10px", position: "" }} >
+											<img style={{ width: "15px" }} src="/static/img/Down.png"></img>
+										</span>
+										<div style={{ fontSize: "14px" }} className=" inline ml-2 font-weight-normal font-color-black font-weight-bold">
+											{this.state.phone.substring(2, 20)}
+										</div>
+									</div>
+								</div>
+							</div>
+						</div>
+						: ""
+					}
+
+
+
 				</div>
-				<hr />
-				<ul className="list-unstyled px-4">
-					<li>
-						<em className="fa fa-globe fa-fw mr-3"></em>
-						<a href={`https://${data.website}`}>{data.website}</a>
-					</li>
-					<li>
-						<em className="fa fa-phone fa-fw mr-3"></em>
-						{data.telepon}
-					</li>
-					<li>
-						<em className="fa fa-at fa-fw mr-3"></em>
-						<a href={`mailto:${data.email}`}>{data.email}</a>
-					</li>
-				</ul>
 			</div>
-		</div>
-	);
+		);
+	}
 }
 
-export default DetailPT;
+const mapStateToProps = (state) => ({ user: state.user, token: state.token });
+export default connect(mapStateToProps)(DetailPT);
+

+ 1 - 1
components/Main/Timeline.js

@@ -30,7 +30,7 @@ function Timeline({ data, noFile = false, noJadwal = false }) {
 													/>
 													<p className="m-0">
 														<strong>
-															{!data.user?.isPrivate && data.user?.nama ? data.user?.nama : "Rahasia"}  {data.user?.isPublic ? "Umum" : data.user?.role?.nama}
+															{!data.user?.isPrivate && data.user?.nama ? data.user?.nama : "Sistem"}  {data.user?.isPublic ? "Umum" : data.user?.role?.nama}
 														</strong>
 														<br />
 														{data.keterangan}

+ 13 - 4
components/PT/CabutSanksi/Riwayat.js

@@ -13,6 +13,7 @@ function Riwayat({ data, role }) {
 			confirmButtonText: 'Oke'
 		})
 	};
+	console.log(data)
 	return (
 		<Card className="card-default">
 			<CardHeader>
@@ -25,14 +26,19 @@ function Riwayat({ data, role }) {
 							<tr>
 								<th>Tanggal</th>
 								<th>Dokumen</th>
+								<th>index</th>
 							</tr>
 						</thead>
+						
 						<tbody>
-							{data ? (
+							{data?.length
+								? data.map((data, i) => (
 								<tr>
-									<td>{moment(data?.createdAt).format("DD MMMM YYYY")}</td>
+									<td>{moment(data.createdAt).format("DD MMMM YYYY")}</td>
+									{/* <td>{data.status}</td>
+									<td>{data.keterangan}</td> */}
 									<td>
-										{data?.dokumen?.map((e) => (
+										{data.dokumen?.map((e) => (
 											<>
 												<em className="fa-lg far fa-file-code"></em>
 												{role === 2024 ?
@@ -40,16 +46,19 @@ function Riwayat({ data, role }) {
 														{e.judul}
 													</a>
 													:
+													<>
 													<a className="text-muted" href={e.path} target="_blank" download={e.judul}>
 														{e.judul}
 													</a>
+												</>
 
 												}
 											</>
 										))}
 									</td>
+									<td>{data.index +1}</td>
 								</tr>
-							) : (
+							)) : (
 								""
 							)}
 						</tbody>

+ 3 - 2
components/PT/DocPerbaikan/Riwayat.js

@@ -3,7 +3,6 @@ import moment from "moment";
 import { Card, CardHeader, CardBody, CardTitle } from "reactstrap";
 
 function Riwayat({ data }) {
-	console.log(data)
 	return (
 		<Card className="card-default">
 			<CardHeader>
@@ -11,12 +10,13 @@ function Riwayat({ data }) {
 			</CardHeader>
 			<CardBody>
 				<Datatable options={{ responsive: true }}>
-					<table className="table table-striped my-4 w-100">
+					<table className="table table-striped my-4 w-100" data-order='[[0, "desc"]]'>
 						<thead>
 							<tr>
 								<th>Tanggal</th>
 								<th>Ketarangan</th>
 								<th>Dokumen</th>
+								<th>Index</th>
 							</tr>
 						</thead>
 						<tbody>
@@ -35,6 +35,7 @@ function Riwayat({ data }) {
 												</>
 											))}
 										</td>
+										<td>{value.index+ 1}</td>
 									</tr>
 								))
 								: ""}

+ 2 - 1
components/PT/JawabanPencabutanSanksi/TableSanksiJawaban.js

@@ -3,6 +3,7 @@ import { Button, Table } from "reactstrap";
 import Link from "next/link";
 
 function TableSanksi({ listData, to, linkName }) {
+	console.log(listData)
 	return (
 		<div className="card b">
 			<div className="card-body card-over">
@@ -35,7 +36,7 @@ function TableSanksi({ listData, to, linkName }) {
 											</div>
 
 
-										) : (
+										) :  (
 											<div>
 												<div className="badge-info badge">Menunggu Jawaban</div>
 												<p className="w-105">Menunggu jawaban terkait permohonan pencabutan sanksi</p>

+ 9 - 2
components/PencabutanSanksi/Riwayat.js

@@ -14,6 +14,7 @@ function Riwayat({ data, role }) {
 			confirmButtonText: 'Oke'
 		})
 	};
+	// console.log(data.map((e)=> e.dokumen))
 	return (
 		<Card className="card-default">
 			<CardHeader>
@@ -28,10 +29,13 @@ function Riwayat({ data, role }) {
 								<th>Status</th>
 								<th>Keterangan</th>
 								<th>Dokumen</th>
+								<th>index</th>
+
 							</tr>
 						</thead>
 						<tbody>
-							{data ? (
+							{data?.length
+								? data.map((data, i) => (
 								<tr>
 									<td>{moment(data.createdAt).format("DD MMMM YYYY")}</td>
 									<td>{data.status}</td>
@@ -45,16 +49,19 @@ function Riwayat({ data, role }) {
 														{e.judul}
 													</a>
 													:
+													<>
 													<a className="text-muted" href={e.path} target="_blank" download={e.judul}>
 														{e.judul}
 													</a>
+												</>
 
 												}
 											</>
 										))}
 									</td>
+									<td>{data.index}</td>
 								</tr>
-							) : (
+							)) : (
 								""
 							)}
 						</tbody>

+ 3 - 1
components/PencabutanSanksi/RiwayatPerbaikan.js

@@ -13,6 +13,8 @@ function RiwayatPerbaikan({ data, role }) {
 			confirmButtonText: 'Oke'
 		})
 	};
+	console.log(data.map((e)=> e.dokumen))
+
 	return (
 		<Card className="card-default">
 			<CardHeader>
@@ -52,7 +54,7 @@ function RiwayatPerbaikan({ data, role }) {
 												</>
 											))}
 										</td>
-										<td>{++i}</td>
+										<td>{value.index+1}</td>
 									</tr>
 								))
 								: ""}

+ 25 - 14
components/Riwayat/TableRiwayat.js

@@ -13,8 +13,8 @@ class TableRiwayat extends Component {
     constructor(props) {
         super(props);
         this.state = {
-            dataRiwayat: "",
-            dataRiwayatsort:"",
+            dataRiwayat: [],
+            dataRiwayatsort: "",
             fromDate: "",
             toDate: "",
             updateTable: false
@@ -23,29 +23,39 @@ class TableRiwayat extends Component {
     componentDidMount = async () => {
         const { token } = this.props;
 
-        const dataRiwayat = await getLog2(this.props.token)
-        this.setState({ dataRiwayat });
+        // const dataRiwayat = await getLog2(this.props.token)
+        // this.setState({ dataRiwayat });
     }
     onFilter = async () => {
-        const date1 = moment(this.state.fromDate).format("YYYY-MM-DD")
-        const date2 = moment(this.state.toDate).format("YYYY-MM-DD")
-        const dataRiwayat = await getLog2(this.props.token, { fromDate: date1, toDate: date2 })
-        this.setState({ dataRiwayat });
+        // const date1 = moment(this.state.fromDate).format("YYYY-MM-DD")
+        // const date2 = moment(this.state.toDate).format("YYYY-MM-DD")
+        // const dataRiwayat = await getLog2(this.props.token, { fromDate: date1, toDate: date2 })
+        // this.setState({ dataRiwayat });
         this.setState({ updateTable: true });
         setTimeout(() => {
             this.setState({ updateTable: false });
         }, 1);
 
     }
-    componentDidUpdate = async () => {
-        const dataRiwayatsort = this.state
-        if (this.state.updateTable === true) {
+    componentDidUpdate = async (prevProps, prevState) => {
+        const { dataRiwayat } = this.state
+        if (prevState.toDate != this.state.toDate) {
+            console.log(dataRiwayat)
             const date1 = moment(this.state.fromDate).format("YYYY-MM-DD")
             const date2 = moment(this.state.toDate).format("YYYY-MM-DD")
             const dataRiwayat = await getLog2(this.props.token, { fromDate: date1, toDate: date2 })
-            this.setState({ dataRiwayatsort });
-            // this.setState({ dataRiwayat });
+            this.setState({ dataRiwayat });
         }
+        // const dataRiwayatsort = this.state
+        // if (this.state.updateTable === true) {
+        //     const date1 = moment(this.state.fromDate).format("YYYY-MM-DD")
+        //     const date2 = moment(this.state.toDate).format("YYYY-MM-DD")
+        //     const dataRiwayat = await getLog2(this.props.token, { fromDate: date1, toDate: date2 })
+        //     this.setState({ dataRiwayatsort });
+        //     // this.setState({ dataRiwayat });
+        // }
+
+
     }
 
 
@@ -82,9 +92,10 @@ class TableRiwayat extends Component {
                         <Button color="info" className=" mt-4" onClick={this.onFilter}>Filter</Button>
 
                     </span>
+                    
                     {this.state.dataRiwayat && (
                         <Datatable options={{
-                            searching: true, 
+                            searching: true,
                             aLengthMenu: [500],
                             paging: false,
                             scrollX: true, scrollY: "370px",

+ 2 - 2
components/Sanksi/Ringkasan.js

@@ -219,7 +219,7 @@ export class Ringkasan extends Component {
 															</td>
 															<td>
 																<a className="text-muted" href={e.preview} download={e.name}>
-																	{e.name}
+																	{e.path}
 																</a>
 															</td>
 														</tr>
@@ -277,7 +277,7 @@ export class Ringkasan extends Component {
 															</td>
 															<td>
 																<a className="text-muted" href={e.preview} download={e.name}>
-																	{e.name}
+																	{e.path}
 																</a>
 															</td>
 														</tr>

+ 5 - 1
components/Sanksi/UploadSurat.js

@@ -337,7 +337,8 @@ export class UploadSurat extends Component {
 						<p className="mrgn-top-5 font-color-black">Ukuran setiap dokumen maksimal 15mb</p>
 					</div>
 				</FormGroup>
-				<FormGroup row className="mt-3">
+				{!this.state.tidakPerluTMTCheck&&(
+<FormGroup row className="mt-3">
 					<label className="col-md-4 col-form-label">Tanggal Terima Surat Sanksi<span className="text-danger">*</span></label>
 					<span className="col-sm-8 float-left">
 						<Datetime
@@ -357,6 +358,9 @@ export class UploadSurat extends Component {
 						/>
 					</span>
 				</FormGroup>
+
+				)}
+				
 				<FormGroup row>
 					<label className="col-md-4 col-form-label">
 						Dokumen Tanda Terima Surat Sanksi<span className="text-danger">*</span>

+ 1 - 1
pages/app/pemeriksaan/index.js

@@ -116,7 +116,7 @@ class Pemeriksaan extends Component {
 			<ContentWrapper>
 				<div className="content-heading">
 					<span className="font-color-white">
-						Evaluasi
+						Pemeriksaan
 					</span>
 					<div className="ml-auto">
 						<Link href="/app/penjadwalan">

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

@@ -87,7 +87,6 @@ class JawabanPencabutanSanksi extends Component {
 		const sanksi = await getOneSanksi(token, query.id);
 		const pt = sanksi.data?.laporan?.pt;
 		this.setState({ sanksi, pt });
-		console.log(sanksi)
 	};
 
 	toggleModal = () => {
@@ -188,7 +187,8 @@ class JawabanPencabutanSanksi extends Component {
 				<button className="bg-transparent button-transparent border-0 fas fa-trash text-danger float-right" onClick={removeFile(file)} />
 			</p>
 		));
-
+		const data = sanksi.data?.riwayat_pengajuan_cabut_sanksi
+		const lastPengajuan = data?.slice(-1)[0]
 		return (
 			<ContentWrapper unwrap>
 				{/* <Header /> */}
@@ -383,7 +383,7 @@ class JawabanPencabutanSanksi extends Component {
 															)}
 															<FormGroup>
 																<div className="row-xl-10">
-																	<Button color className="color-3e3a8e" type="submit" disabled={isSubmitting}>
+																	<Button color className="color-3e3a8e" type="submit" disabled={isSubmitting||lastPengajuan?.index + 1 === sanksi?.data?.index_perbaikan}>
 																		<span className="font-color-white">
 																			Simpan
 																		</span>
@@ -406,7 +406,7 @@ class JawabanPencabutanSanksi extends Component {
 					{sanksi.data && (
 						<Row>
 							<Col>
-								<Riwayat data={sanksi.data.jawaban?.cabut_sanksi} role={this.props.user.role.id} />
+								<Riwayat data={sanksi.data.riwayat_jawaban_cabut_sanksi} role={this.props.user.role.id} />
 							</Col>
 						</Row>
 					)}

+ 24 - 0
pages/app/riwayat/index.js

@@ -4,6 +4,8 @@ import { Row, Col, Button, Card, CardBody, Table } from "reactstrap";
 import { connect } from "react-redux";
 import TableRiwayat from "@/components/Riwayat/TableRiwayat";
 import ChartData from "@/components/Riwayat/ChartData";
+import { getLog2 } from "@/actions/log";
+
 
 
 
@@ -12,8 +14,30 @@ class Riwayat extends Component {
     constructor(props) {
         super(props);
         this.state = {
+            dataRiwayat: []
         };
     }
+    componentDidMount = async () => {
+        const { token } = this.props;
+
+        const data = await getLog2(this.props.token)
+        const dataRiwayat = data.data
+        this.setState({ dataRiwayat })  
+    }
+    setDateFilter = (data) => {
+        this.setState({ dataFilter: data })
+    }
+    componentDidUpdate = async () => {
+        if (this.state.dataFilter?.updateTable === true) {
+            const dataRiwayat = {}
+            const date1 = moment(this.state.dataFilter.fromDate).format("YYYY-MM-DD")
+            const date2 = moment(this.state.dataFilter.toDate).format("YYYY-MM-DD")
+            const data = await getLog2(this.props.token, { fromDate: date1, toDate: date2 })
+            // const dataRiwayat = data.data
+
+            this.setState({ dataRiwayat });
+        }
+    }
 
 
     render() {

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

@@ -61,9 +61,11 @@ class ProsesSanksi extends Component {
 		const { data: listSanksi } = await getPelanggaranSanksi(token)
 		const getDataSave = await getAutoSave({ id, laporan: true });
 		const autoSaveDataPelanggaran = getDataSave.data?.PenetapanSanksi?.dataPelanggaran;
+		const dataform = getDataSave.data?.PenetapanSanksi?.dataUpload
 		const activeStep = getDataSave.data?.PenetapanSanksi?.activeStep
 		this.setState({ pelaporan, listSanksi, activeStep: activeStep || "1" });
-		this.setState({ dataPelanggaran: autoSaveDataPelanggaran })
+		this.setState({ dataPelanggaran: autoSaveDataPelanggaran, dataUpload:dataform })
+	
 	};
 
 
@@ -452,6 +454,7 @@ class ProsesSanksi extends Component {
 
 	render() {
 		const { dataUpload, dataPelanggaran, pelaporan, dataSuratBA, thisclose } = this.state
+		console.log(dataPelanggaran, this.state.dataPelanggaran)
 		return (
 			<ContentWrapper unwrap>
 				{/* <Header /> */}

+ 24 - 14
pages/pt/pemantauan.js

@@ -58,25 +58,30 @@ class Pemantauan extends Component {
 
 		this.setState({ modalPhone: false, modalOTP: true })
 	}
+	handleOTPagain = async () => {
+		const { token } = this.props
+		await createotp({ no_hp: this.state.phone }, token)
+		this.setState({ modalPhone: false, modalOTP: true })
+	}
 	handleSubmitOtp = async () => {
 		const { token } = this.props
 		const create = await createkontak({ otp: this.state.otp, no_hp: this.state.phone }, token)
 		if (create.error) {
 			swal.fire({
-			  title: create.error.message,
-			  icon: "error",
-			  content: create.error.message,
-			  confirmButtonColor: "#3e3a8e",
+				title: create.error.message,
+				icon: "error",
+				content: create.error.message,
+				confirmButtonColor: "#3e3a8e",
 			});
-		  } else {
+		} else {
 			swal.fire({
-			  title: "Data berhasil dikirim",
-			  icon: "success",
-			  confirmButtonColor: "#3e3a8e",
+				title: "Data berhasil dikirim",
+				icon: "success",
+				confirmButtonColor: "#3e3a8e",
 			});
-				this.setState({ modalPhone: false, modalOTP: false })
-		  }
-	
+			this.setState({ modalPhone: false, modalOTP: false })
+		}
+
 	}
 	render() {
 		const { log, pt } = this.state;
@@ -127,7 +132,7 @@ class Pemantauan extends Component {
 											</div>
 										) : (
 											<span className="font-color-white">
-												Kirim
+												Simpan
 											</span>
 										)}
 								</Button>
@@ -158,9 +163,14 @@ class Pemantauan extends Component {
 								renderSeparator={<span className=" font-color-black font-weight-bold mr-2 ml-2">-</span>}
 								renderInput={(props) => <input {...props} style={{ width: "50px", height: "50px", textAlign: "center", marginLeft: "auto", marginRight: "auto", borderRadius: "7px", fontSize: "30px" }} />}
 
-							/>   <p className="  mt-3">
+							/>
+							<p className="  mt-3">
 								*Kode OTP terkirim ke nomor WA {this.state.phone}
 							</p>
+							<p className="  mt-3 ">
+								Jika Anda belum menerima kode OTP, <span className=" btn-link" onClick={this.handleOTPagain}>kirimkan ulang kode OTP</span>
+							</p>
+
 							<FormFeedback invalid={this.state.error}>
 								Kode verifikasi harus diisi
 							</FormFeedback>
@@ -175,7 +185,7 @@ class Pemantauan extends Component {
 							<Button className="btn-login float-right mr-4" style={{ width: "40%" }} color onClick={this.handleSubmitOtp}
 							>
 								<span className=" font-color-white">
-									Kirim
+									Simpan
 								</span>
 							</Button>
 						</div>

+ 9 - 3
pages/pt/pencabutan-sanksi/detail.js

@@ -15,6 +15,7 @@ import { toast } from "react-toastify";
 import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
 import { getCsrf } from "../../../actions/security";
+import { FinalisasiPerbaikan } from "../../../actions/docPerbaikan";
 
 const checkIfFilesAreTooBig = (files) => {
 	let valid = true;
@@ -65,7 +66,7 @@ class DetailPencabutanSanksi extends Component {
 			sanksi: {},
 			pt: null,
 			error: null,
-			selectedFile:{},
+			selectedFile: {},
 		};
 	}
 
@@ -122,6 +123,7 @@ class DetailPencabutanSanksi extends Component {
 			formdata.append("dokumen", e);
 		});
 		const id = toast.loading("Please wait...");
+		// await FinalisasiPerbaikan(token, query.id, { is_finalisasi: "true" }, _csrf)
 		const added = await addCabutSanksi(token, query.id, formdata, _csrf);
 		if (!added) {
 			toast.update(id, { render: "Error", type: "error", isLoading: false, autoClose: true, closeButton: true });
@@ -132,6 +134,7 @@ class DetailPencabutanSanksi extends Component {
 			});
 		}
 	};
+	
 
 	render() {
 		const { files, sanksi, pt } = this.state;
@@ -142,6 +145,8 @@ class DetailPencabutanSanksi extends Component {
 				<span className="text-left">{index + 1}.{file.name}</span>
 			</div>
 		));
+		const data = sanksi.data?.riwayat_pengajuan_cabut_sanksi
+		const lastPengajuan = data?.slice(-1)[0]
 		return (
 			<ContentWrapper unwrap>
 				{pt && <Header data={pt} />}
@@ -180,6 +185,7 @@ class DetailPencabutanSanksi extends Component {
 														<Form className="form-horizontal">
 															<FormGroup>
 																<label className="row-form-label">Upload Dokumen:</label>
+																<div className=" font-color-black block">Note : Dokumen perbaikan akan diperiksa setelah surat permohonan pencabutan sanksi diunggah</div>
 																<div className="row-md-10">
 																	<Field name="dokumen">
 																		{({ field, form }) => (
@@ -221,7 +227,7 @@ class DetailPencabutanSanksi extends Component {
 															</FormGroup>
 															<FormGroup>
 																<div className="row-xl-10">
-																	<Button color className="color-3e3a8e" disabled={sanksi.data?.pengajuan?.cabut_sanksi || false} type="submit">
+																	<Button color className="color-3e3a8e" disabled={ sanksi.data.is_finalisasi === false || false||lastPengajuan?.index + 1 === sanksi?.data?.index_perbaikan} type="submit">
 																		<span className="font-color-white">
 																			Kirim
 																		</span>
@@ -244,7 +250,7 @@ class DetailPencabutanSanksi extends Component {
 					{sanksi.data && (
 						<Row>
 							<Col>
-								<Riwayat data={sanksi.data?.pengajuan?.cabut_sanksi || null} />
+								<Riwayat data={sanksi.data?.riwayat_pengajuan_cabut_sanksi } />
 							</Col>
 						</Row>
 					)}

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

@@ -8,7 +8,7 @@ import DetailPT from "@/components/Main/DetailPT";
 import DetailSanksi from "@/components/Main/DetailSanksi";
 import Riwayat from "@/components/PT/DocPerbaikan/Riwayat";
 import ContentWrapper from "@/components/Layout/ContentWrapper";
-import { Row, Col, Card, CardBody, FormGroup, Button, Input } from "reactstrap";
+import { Row, Col, Card, CardBody, FormGroup, Button, Input, Modal, ModalBody, ModalFooter } from "reactstrap";
 import { connect } from "react-redux";
 import { notifDocPerbaikan } from "@/actions/notifikasi";
 import Loader from "@/components/Common/Loader";
@@ -16,6 +16,7 @@ import { toast } from "react-toastify";
 import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
 import { getCsrf } from "../../../../actions/security";
+import { FinalisasiPerbaikan } from "../../../../actions/docPerbaikan";
 const checkIfFilesAreTooBig = (files) => {
 	let valid = true;
 	if (files) {
@@ -67,6 +68,7 @@ class DetailPerbaikanDoc extends Component {
 			keterangan: "",
 			pt: null,
 			selectedFile: {},
+			modalTidak: false,
 		};
 	}
 
@@ -140,6 +142,11 @@ class DetailPerbaikanDoc extends Component {
 			});
 		}
 	};
+	setModal = () => {
+		this.setState({
+			modal: !this.state.modal
+		})
+	}
 
 	render() {
 		const { files, sanksi, pt } = this.state;
@@ -150,9 +157,36 @@ class DetailPerbaikanDoc extends Component {
 				<span className="text-left">{index + 1}.{file.name}</span>
 			</div>
 		));
-
+		// console.log(sanksi.data.perbaikan.find((e)=>(e.length)))\
+		const data = sanksi.data?.perbaikan
+		const lastDatePerbaikan = data?.slice(-1)[0]
 		return (
 			<ContentWrapper unwrap>
+				<Modal isOpen={this.state.modal} >
+					<ModalBody>jika klik Ya maka tidak bisa upload dokumen perbaikan lagi dan segera dilakukan permohonan pencabutan sanksi</ModalBody>
+					<ModalFooter>
+
+						<Button color className="btn-login" onClick={async () => {
+							const getToken = await getCsrf();
+							const _csrf = getToken.token;
+							const toastid = toast.loading("Please wait...");
+							try {
+								const { token, query } = this.props;
+								await FinalisasiPerbaikan(token, query.id, { is_finalisasi: "true" }, _csrf)
+								toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
+								Router.push(`/pt/pencabutan-sanksi/detail?id=${sanksi.data._id}`);
+							} catch (error) {
+								toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
+							}
+						}
+						} >
+							<span className="font-color-white">Ya</span>
+						</Button>
+						<Button color className="btn-v2" onClick={this.setModal}>
+							Tidak
+						</Button>
+					</ModalFooter>
+				</Modal>
 				{pt && <Header data={pt} />}
 				<div className="p-3">
 					<div className="content-heading">
@@ -241,11 +275,17 @@ class DetailPerbaikanDoc extends Component {
 																</div>
 															</FormGroup>
 															<FormGroup row>
-																<div className="col-xl-10">
-																	<Button color className="color-3e3a8e" type="submit" disabled={isSubmitting}>
-																		<span className="font-color-white">Kirim</span>
+																<div className="ml-3 mr-3">
+																	<Button color className="color-3e3a8e" type="submit" disabled={isSubmitting || sanksi.data.is_finalisasi === true}>
+																		<span className="font-color-white">Upload</span>
 																	</Button>
 																</div>
+																<div className=" inline float-right ml-auto mr-3">
+																	<Button color="success" className=" float-right" onClick={this.setModal} disabled={!sanksi.data?.perbaikan.length || sanksi.data.is_finalisasi === true||lastDatePerbaikan?.index + 1 === sanksi?.data?.index_perbaikan}>
+																		<span className="font-color-white">Finalisasi upload dokumen perbaikan</span>
+																	</Button>
+																</div>
+
 															</FormGroup>
 														</Form>
 													)}

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

@@ -61,7 +61,7 @@ class Keberatan extends Component {
 							const toastid = toast.loading("Please wait...");
 							try {
 								const { token, query } = this.props;
-								await updatePT(token, query.id, { is_pengajuan_keberatan: "false" }, _csrf)
+								await updatePT(token, query.id, { is_pengajuan_keberatan: "false",is_pengajuan_banding:"false" }, _csrf)
 								toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
 								Router.push(`/pt/sanksi/dokumen-perbaikan/detail?id=${sanksi.data._id}`);
 							} catch (error) {

+ 9 - 4
styles/app/app/mycss.scss

@@ -212,9 +212,7 @@ border-radius: 4px;
 
     .icon-triangle-onModalPT {
       margin-top: 10px;
-      float: left;
-
-// margin-right: 30px;    
+      float: left; 
     }
    
     .modalLoginPT-a{
@@ -232,4 +230,11 @@ border-radius: 4px;
     //   color: rgb(104, 7, 60);
     //   height: 50px !important;
     //   width: 200px !important;
-    // }
+    // }
+    .no-hpPT{
+      padding: 7px;
+      border-style: solid;
+      border-width: 1px;
+      border-color: #b7b7bc;
+      border-radius: 8px;
+    }