Browse Source

menu keberatan -api no surat keberatan belum
menu jawaban keberatan - butuh api ubah status pengajuan (is_pengajuan)
fixing tanggal indo detail sanksi

andi 2 years ago
parent
commit
de9a3582fa

+ 1 - 1
components/Main/DetailSanksi.js

@@ -32,7 +32,7 @@ function DetailSanksi({ data, noTitle = false }) {
 				<FormGroup row>
 					<Col md="4">Dibuat Pada:</Col>
 					<Col md="8">
-						<strong>{moment(data.createdAt).format("D MMMM YYYY")}</strong>
+						<strong>{moment(data.createdAt).locale("id").format("D MMMM YYYY")}</strong>
 					</Col>
 				</FormGroup>
 				<FormGroup row>

+ 0 - 11
components/PT/JawabanKeberatan/ModalPermohonan.js

@@ -139,17 +139,6 @@ export class ModalPermohonan extends Component {
 		return (
 			<>
 				<Modal isOpen={this.props.modal} toggle={this.props.toggleModal}>
-					<ModalBody>Apakah anda akan mengajukan banding?</ModalBody>
-					<ModalFooter>
-						<Button color className="btn-login" onClick={this.toggleModal1}>
-							<span className="font-color-white">Ya</span>
-						</Button>{" "}
-						<Button color className="btn-v2" onClick={this.props.toggleModal}>
-							Tidak
-						</Button>
-					</ModalFooter>
-				</Modal>
-				<Modal isOpen={this.state.modal1} toggle={this.toggleModal1}>
 					<ModalHeader toggle={this.toggleModal1}>Upload Dokumen Banding</ModalHeader>
 					<Formik
 						initialValues={{

+ 4 - 4
components/Sanksi/UploadSurat.js

@@ -86,7 +86,7 @@ export class UploadSurat extends Component {
 			saveData: [],
 			terimaSuratSanksi: "",
 			tglAkhirKeberatan: "",
-			filesTandaTerimaSS: []
+			filesTandaTerimaSS: [],
 
 		};
 	}
@@ -175,14 +175,14 @@ export class UploadSurat extends Component {
 		});
 		this.props.setUploadSuratSanksi(this.state);
 	};
-	clearFilesBA = (e) => {
+	clearFilesTerimaSanksi = (e) => {
 		e.preventDefault();
 		e.stopPropagation();
 		this.setState({
 			stat: this.state.filesTandaTerimaSS.length ? this.state.filesTandaTerimaSS.length + " file(s) cleared." : "No files to clear.",
 		});
 		this.setState({
-			filesBeritaAcara: [],
+			filesTandaTerimaSS: [],
 		});
 		this.props.setUploadSuratSanksi(this.state);
 	};
@@ -484,7 +484,7 @@ export class UploadSurat extends Component {
 										</div>
 										<div className="d-flex align-items-center">
 											<small className="ml-auto">
-												<button type="button" className="btn btn-link" onClick={this.clearFilesBA}>
+												<button type="button" className="btn btn-link" onClick={this.clearFilesTerimaSanksi}>
 													Reset dokumen
 												</button>
 											</small>

+ 155 - 10
pages/app/keberatan/detail.js

@@ -18,6 +18,12 @@ import { connect } from "react-redux";
 import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";
 import { createLog } from "@/actions/log";
+import DatePicker from "react-datepicker";
+import "react-datepicker/dist/react-datepicker.css";
+import id from 'date-fns/locale/id';
+import moment from "moment";
+import Datetime from "react-datetime";
+
 
 let Dropzone = null;
 class DropzoneWrapper extends Component {
@@ -63,6 +69,10 @@ const jawabanKeberatanSchema = Yup.object().shape({
 	status: Yup.string().required("Harap Diisi"),
 	keterangan: Yup.string().min(3).max(200).required("Harap Diisi"),
 	dokumen: Yup.array().notRequired().test("filesize", "Maksimal ukuran dokumen 15mb", checkIfFilesAreTooBig),
+	dokumen_terima_keberatan: Yup.array().notRequired().test("filesize", "Maksimal ukuran dokumen 15mb", checkIfFilesAreTooBig),
+	tanggal_terima_keberatan: Yup.string().notRequired("Wajib diisi"),
+	noSuratKeberatan: Yup.string().min(3).notRequired("Harap Diisi"),
+	tanggal_akhir_banding: Yup.string().notRequired("Wajib diisi"),
 });
 class DetailKeberatan extends Component {
 	constructor(props) {
@@ -71,6 +81,10 @@ class DetailKeberatan extends Component {
 			modal: false,
 			selectedOption: null,
 			files: [],
+			fileTTSKeberatan: [],
+			noSuratKeberatan: "",
+			tglJawabanKeberatan: "",
+			tglAkhirBanding: "",
 			keterangan: "",
 			sanksi: {},
 			pt: null,
@@ -110,6 +124,16 @@ class DetailKeberatan extends Component {
 			stat: "Added " + files.length + " file(s)",
 		});
 	};
+	onDropTTSKeberatan = (fileTTSKeberatan) => {
+		this.setState({
+			fileTTSKeberatan: fileTTSKeberatan.map((file) =>
+				Object.assign(file, {
+					preview: URL.createObjectURL(file),
+				})
+			),
+			stat: "Added " + fileTTSKeberatan.length + " file(s)",
+		});
+	};
 
 	uploadFiles = (e) => {
 		e.preventDefault();
@@ -129,6 +153,16 @@ class DetailKeberatan extends Component {
 			files: [],
 		});
 	};
+	clearFilesTTSKeberatan = (e) => {
+		e.preventDefault();
+		e.stopPropagation();
+		this.setState({
+			stat: this.state.fileTTSKeberatan.length ? this.state.fileTTSKeberatan.length + " file(s) cleared." : "No files to clear.",
+		});
+		this.setState({
+			fileTTSKeberatan: [],
+		});
+	};
 
 	handelSimpan = async () => {
 		if (this.state.modal === true) {
@@ -140,9 +174,14 @@ class DetailKeberatan extends Component {
 		const formdata = new FormData();
 		formdata.append("keterangan", data.keterangan);
 		formdata.append("status", data.status);
+		formdata.append("tanggal_terima_keberatan", data.tanggal_terima_keberatan);
+		formdata.append("tanggal_akhir_banding", data.tanggal_akhir_banding);
 		data.dokumen.forEach((e) => {
 			formdata.append("dokumen", e);
 		});
+		data.dokumen_terima_keberatan.forEach((e) => {
+			formdata.append("dokumen_terima_keberatan", e);
+		});
 		const toastid = toast.loading("Please wait...");
 		const added = await addJawabanKeberatan(token, id, formdata);
 		if (!added) {
@@ -154,17 +193,24 @@ class DetailKeberatan extends Component {
 			});
 		}
 	};
+	setTglJawabanKeberatan = (tglJawabanKeberatan) => {
+		this.setState({ tglJawabanKeberatan })
+	}
 
 	render() {
-		const { files, sanksi, pt } = this.state;
-
+		const { files, sanksi, pt, fileTTSKeberatan, tglJawabanKeberatan, tglAkhirBanding } = this.state;
 		const thumbs = files.map((file, index) => (
 			<div md={3} key={index}>
 				{/* <img className="img-fluid mb-2" src={file.preview} alt="Item" /> */}
 				<span className="text-left">{index + 1}.{file.name}</span>
 			</div>
 		));
-
+		const thumbsTTSKeberatan = fileTTSKeberatan.map((file, index) => (
+			<div md={3} key={index}>
+				{/* <img className="img-fluid mb-2" src={file.preview} alt="Item" /> */}
+				<span className="text-left">{index + 1}.{file.name}</span>
+			</div>
+		));
 		return (
 			<ContentWrapper unwrap>
 				{/* <Header /> */}
@@ -202,6 +248,11 @@ class DetailKeberatan extends Component {
 														status: "",
 														keterangan: "",
 														dokumen: [],
+														tanggal_terima_keberatan: "",
+														noSuratKeberatan: "",
+														dokumen_terima_keberatan: [],
+														tanggal_akhir_banding: "",
+
 													}}
 													validationSchema={jawabanKeberatanSchema}
 													onSubmit={async (data) => {
@@ -293,8 +344,106 @@ class DetailKeberatan extends Component {
 																	<p className="mrgn-top-5">Ukuran setiap dokumen maksimal 15mb</p>
 																</div>
 															</FormGroup>
-															{/* <FormGroup>
-													<div className="row-xl-10"> */}
+															<FormGroup>
+																<label className="row-form-label">Nomor Surat Permohonan Keberatan:</label>
+																<div className="row-md-10">
+																	<Field name="noSuratKeberatan">{({ field }) => <Input type="text" {...field} />}</Field>
+																	<ErrorMessage name="noSuratKeberatan" component="div" className="form-text text-danger" />
+																</div>
+															</FormGroup>
+															<FormGroup>
+																<label className="row-form-label">Tanda Terima Surat Jawaban Permohonan Keberatan :</label>
+																<div className="row-md-10">
+																	<Field name="tanggal_terima_keberatan">
+																		{({ field, form }) => (
+
+																			<DatePicker
+																				selected={this.state.tglJawabanKeberatan || field.value}
+																				onChange={(e) => {
+																					form.setFieldValue(field.name, e);
+																					this.setTglJawabanKeberatan(e)
+																				}}
+																				dateFormat="dd/MM/yyyy"
+																				placeholderText="Isi Tanggal"
+																				locale={id}
+																				className="form-control bg-white"
+																			/>
+																		)}
+																	</Field>
+																	<ErrorMessage name="tanggal_terima_keberatan" component="div" className="form-text text-danger" />
+																</div>
+															</FormGroup>
+															<FormGroup>
+																<label className="row-form-label">Dokumen Tanda Terima Surat Jawaban Permohonan Keberatan:</label>
+																<div className="row-md-10">
+																	<Field name="dokumen_terima_keberatan">
+																		{({ field, form }) => (
+																			<DropzoneWrapper
+																				className=""
+																				onDrop={(e) => {
+																					this.onDropTTSKeberatan(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.fileTTSKeberatan.length > 0 ? <Row><span className="text-left">{thumbsTTSKeberatan}</span></Row> :
+																										<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.clearFilesTTSKeberatan(e);
+																											form.setFieldValue(field.name, []);
+																										}}
+																									>
+																										Reset dokumen
+																									</button>
+																								</small>
+																							</div>
+																						</div>
+																					);
+																				}}
+																			</DropzoneWrapper>
+																		)}
+																	</Field>
+																	<ErrorMessage name="dokumen_terima_keberatan" component="div" className="form-text text-danger" />
+																	<p className="mrgn-top-5">Ukuran setiap dokumen maksimal 15mb</p>
+																</div>
+															</FormGroup>
+															<FormGroup>
+																<label className="row-form-label">Akhir Permohonan Banding :</label>
+																<div className="row-md-10">
+																	<Field name="tanggal_akhir_banding">
+																		{({ field, form }) => (
+																			<DatePicker
+																				selected={this.state.tglAkhirBanding || field.value}
+																				onChange={(e) => {
+																					form.setFieldValue(field.name, e);
+																				}}
+																				minDate={tglJawabanKeberatan}
+																				dateFormat="dd/MM/yyyy"
+																				placeholderText="Isi Tanggal"
+																				locale={id}
+																				className="form-control bg-white"
+																			/>
+																		)}
+																	</Field>
+																	<ErrorMessage name="tanggal_akhir_banding" component="div" className="form-text text-danger" />
+																</div>
+															</FormGroup>
 															<FormGroup row>
 																<div className="col-xl-10">
 																	<Button color className="color-3e3a8e btn-login" type="submit">
@@ -302,11 +451,7 @@ class DetailKeberatan extends Component {
 																	</Button>
 																</div>
 															</FormGroup>
-															{/* <Button color="primary" onClick={sanksi.data.jawaban?.keberatan ? this.toggleModal : this.handelSimpan}>
-															Simpan
-														</Button> */}
-															{/* </div>
-												</FormGroup> */}
+
 														</Form>
 													)}
 												</Formik>

+ 1 - 0
pages/app/keberatan/index.js

@@ -25,6 +25,7 @@ class Keberatan extends Component {
 
 	render() {
 		const { sanksi } = this.state;
+		console.log(sanksi)
 		return (
 			<ContentWrapper>
 				<div className="content-heading">

+ 37 - 7
pages/pt/jawaban-keberatan/detail.js

@@ -12,6 +12,8 @@ import { Row, Col, Card, CardBody, Button } from "reactstrap";
 import { connect } from "react-redux";
 import { withRouter } from "next/router";
 import Loader from "@/components/Common/Loader";
+import Router from "next/router";
+import { ToastContainer, toast } from "react-toastify";
 
 class JawabanKeberatan extends Component {
 	constructor(props) {
@@ -38,6 +40,9 @@ class JawabanKeberatan extends Component {
 			this.setState({ modal: !this.state.modal });
 		}
 	};
+	toPerbaikan = () => {
+		Router.push("/pt/keberatan");
+	}
 
 	render() {
 		const { sanksi, pt } = this.state;
@@ -72,15 +77,40 @@ class JawabanKeberatan extends Component {
 												{sanksi.data.jawaban.keberatan.status !== "Membatalkan Keputusan" &&
 													(new Date(sanksi.data.batas_waktu.banding).getTime() > Date.now() ? (
 														<>
-															<p>
-																Setelah membaca jawaban permohonan keberatan atas pengenaan sanksi, jika Perguruan Tinggi bermaksud mengajukan permohonan banding kepada atasan pemberi sanksi maka dapat
-																menekan tombol di bawah ini paling lambat {moment(sanksi.data.batas_waktu.banding).format("DD MMMM YYYY")}
+															<p style={{ fontSize: '1vw' }}>
+																<strong>
+																	Setelah membaca surat keputusan sanksi tersebut, Apakah Perguruan Tinggi bermaksud mengajukan permohonan banding?
+																</strong>
+															</p>
+															<p style={{ fontSize: '0.8vw' }}>
+																Pengajuan dilakukan paling lambat tanggal {moment(sanksi.data.batas_waktu.banding).locale("id").format("DD MMMM YYYY")}
 															</p>
-															<Button color className="btn-login" onClick={this.toggleModal} disabled={sanksi.data.pengajuan.banding || false}>
-																<span className="font-color-white">
-																	Ajukan Banding
+															<p className="lead">
+																<span className="btn-radius">
+																	<Button color="" disabled={sanksi.data.pengajuan.banding || false} className="btn-labeled" onClick={this.toggleModal}>
+																		<h4 className="mt-2 mb-md-2 text-center font-color-white pl-3 pr-3">Ya</h4>
+																	</Button>
 																</span>
-															</Button>
+																<span className="btn-radius">
+																	<Button disabled={sanksi.data.pengajuan.banding || false} color className="btn-labeled-3" onClick={async () => {
+
+																		const toastid = toast.loading("Please wait...");
+																		try {
+																			const { token, query } = this.props;
+																			await updatePT(token, query.id, { is_pengajuan: false })
+
+																			toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
+																			Router.push("/pt/dokumen-perbaikan");
+
+																		} catch (error) {
+																			toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
+																		}
+																	}
+																	}>
+																		<h4 className=" mt-1 mb-md-2 text-center">Tidak</h4>
+																	</Button>
+																</span>
+															</p>
 														</>
 													) : (
 														<p>Pengajuan ditutup</p>

+ 6 - 5
pages/pt/sanksi/detail.js

@@ -10,7 +10,7 @@ import Link from "next/link";
 import moment from "moment";
 import { Row, Col, Card, CardBody, Button } from "reactstrap";
 import { connect } from "react-redux";
-import Router from "next/router";;
+import Router from "next/router";
 import Loader from "@/components/Common/Loader";
 import { ToastContainer, toast } from "react-toastify";
 
@@ -32,6 +32,7 @@ class Sanksi extends Component {
 
 	render() {
 		const { sanksi, pt } = this.state;
+		console.log(sanksi)
 		return (
 			<ContentWrapper unwrap>
 				{pt && <Header data={pt} />}
@@ -65,7 +66,7 @@ class Sanksi extends Component {
 																Setelah membaca surat keputusan sanksi tersebut, Apakah Perguruan Tinggi bermaksud mengajukan keberatan?
 															</strong>
 														</p>
-														<p>
+														<p style={{ fontSize: '0.8vw' }}>
 															Pengajuan dilakukan paling lambat tanggal {moment(sanksi.data.batas_waktu.keberatan).locale("id").format("DD MMMM YYYY")}
 														</p>
 														<p className="lead">
@@ -83,11 +84,11 @@ class Sanksi extends Component {
 																}
 
 																}>
-																	<h4 className="p-0 mt-2 font-color-white pl-3 pr-3">Ya</h4>
+																	<h4 className="mt-2 mb-md-2 text-center font-color-white pl-3 pr-3">Ya</h4>
 																</Button>
 															</span>
 															<span className="btn-radius">
-																<Button disabled={sanksi.data.is_pengajuan} color className="btn-labeled-3" onClick={async () => {
+																<Button disabled={sanksi.data.is_pengajuan === true || sanksi.data.is_pengajuan === false} color className="btn-labeled-3" onClick={async () => {
 																	const toastid = toast.loading("Please wait...");
 																	try {
 																		const { token, query } = this.props;
@@ -99,7 +100,7 @@ class Sanksi extends Component {
 																	}
 																}
 																}>
-																	<h4 className="p-0 mt-2">Tidak</h4>
+																	<h4 className=" mt-1 mb-md-2 text-center">Tidak</h4>
 																</Button>
 															</span>
 														</p>