Эх сурвалжийг харах

perubahan di buat laporan public dan penambahan data level laporan

yazid138 3 жил өмнө
parent
commit
25f9d572c8

+ 36 - 24
components/Main/DetailLaporan.js

@@ -16,39 +16,47 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
 							<h2 className="card-title-1">Identitas Pelapor - {data.user.isPublic ? "Umum" : "Internal"}</h2>
 						</div>
 					)}
-					<FormGroup row>
-						<Col md="4">Nama Pelapor:</Col>
-						<Col md="8">
-							<strong>{data.user.nama}</strong>
-						</Col>
-					</FormGroup>
+					{data.user.nama && (
+						<FormGroup row>
+							<Col md="4">Nama Pelapor:</Col>
+							<Col md="8">
+								<strong>{data.user.nama}</strong>
+							</Col>
+						</FormGroup>
+					)}
 					<FormGroup row>
 						<Col md="4">Nomor yang dapat dihubungi:</Col>
 						<Col md="8">
 							<strong>{data.user.no_hp}</strong>
 						</Col>
 					</FormGroup>
-					<FormGroup row>
-						<Col md="4">Email:</Col>
-						<Col md="8">
-							<strong>{data.user.email}</strong>
-						</Col>
-					</FormGroup>
+					{data.user.email && (
+						<FormGroup row>
+							<Col md="4">Email:</Col>
+							<Col md="8">
+								<strong>{data.user.email}</strong>
+							</Col>
+						</FormGroup>
+					)}
 
 					{data.user.isPublic && (
 						<>
-							<FormGroup row>
-								<Col md="4">Alamat:</Col>
-								<Col md="8">
-									<strong>{data.user.alamat}</strong>
-								</Col>
-							</FormGroup>
-							<FormGroup row>
-								<Col md="4">Foto Kartu Identitas:</Col>
-								<Col md="8">
-									<img src={data.user.foto.path} height={200} alt="Foto Identitas" />
-								</Col>
-							</FormGroup>
+							{data.user.alamat && (
+								<FormGroup row>
+									<Col md="4">Alamat:</Col>
+									<Col md="8">
+										<strong>{data.user.alamat}</strong>
+									</Col>
+								</FormGroup>
+							)}
+							{data.user.foto && (
+								<FormGroup row>
+									<Col md="4">Foto Kartu Identitas:</Col>
+									<Col md="8">
+										<img src={data.user.foto.path} height={200} alt="Foto Identitas" />
+									</Col>
+								</FormGroup>
+							)}
 						</>
 					)}
 					{data.user.isPrivate && (
@@ -117,6 +125,10 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
 				) : (
 					""
 				)}
+				<FormGroup row>
+					<Col md="4">Prioritas:</Col>
+					<Col md="8">{data.level == 3 ? <div className="badge badge-success">Tinggi</div> : data.level == 2 ? <div className="badge badge-info">Sedang</div> : <div className="badge badge-warning">Rendah</div>}</Col>
+				</FormGroup>
 				<FormGroup row>
 					<Col md="4">Dokumen Pendukung:</Col>
 					<Col md="8">

+ 0 - 1
components/PT/Keberatan/ModalPermohonan.js

@@ -3,7 +3,6 @@ import Router from "next/router";
 import { Row, Col, FormGroup, Button, Modal, ModalHeader, ModalBody, ModalFooter } from "reactstrap";
 import { addKeberatan } from "@/actions/keberatan";
 import { connect } from "react-redux";
-import { notifKeberatan } from "@/actions/notifikasi";
 import { toast } from "react-toastify";
 import { Formik, Form, Field, ErrorMessage } from "formik";
 import * as Yup from "yup";

+ 4 - 1
components/Pemeriksaan/TableLaporan.js

@@ -35,7 +35,10 @@ function TableLaporan({ listData, to, linkName }) {
 												</div>
 											</td>
 
-											<td>{data.evaluasi?.length ? <div className="badge badge-info">Sudah diperiksa</div> : <div className="badge badge-danger">Belum diperiksa</div>}</td>
+											<td>
+												{data.level == 3 ? <div className="badge badge-success">Tinggi</div> : data.level == 2 ? <div className="badge badge-info">Sedang</div> : <div className="badge badge-warning">Rendah</div>}
+												{data.evaluasi?.length ? <div className="badge badge-info">Sudah diperiksa</div> : <div className="badge badge-danger">Belum diperiksa</div>}
+											</td>
 
 											<td>{moment(data.createdAt).fromNow()}</td>
 											<td>

+ 4 - 1
components/Penjadwalan/TableLaporan.js

@@ -35,7 +35,10 @@ function TableLaporan({ listData, to, linkName }) {
 												</div>
 											</td>
 
-											<td>{data.jadwal ? <div className="badge badge-info">Ada Jadwal</div> : <div className="badge badge-danger">Tidak ada jadwal</div>}</td>
+											<td>
+												{data.level == 3 ? <div className="badge badge-success">Tinggi</div> : data.level == 2 ? <div className="badge badge-info">Sedang</div> : <div className="badge badge-warning">Rendah</div>}
+												{data.jadwal ? <div className="badge badge-info">Ada Jadwal</div> : <div className="badge badge-danger">Tidak ada jadwal</div>}
+											</td>
 
 											<td>{moment(data.createdAt).fromNow()}</td>
 											<td>

+ 68 - 42
pages/laporan/new/index.js

@@ -7,7 +7,7 @@ import { createLaporanPublic } from "@/actions/pelaporan";
 import { notifLaporanBaru } from "@/actions/notifikasi";
 import Select from "react-select";
 import AsyncSelect from "react-select/async";
-import { Row, Col, FormGroup, Input, Card, CardBody, Button, CustomInput, Navbar, NavItem, NavLink, NavbarBrand, NavbarToggler, Nav, Collapse } from "reactstrap";
+import { Row, Col, FormGroup, Input, Card, CardBody, Button, CustomInput, Navbar, NavItem, NavLink, NavbarBrand, NavbarToggler, Nav, Collapse, Modal, ModalHeader, ModalBody, ModalFooter } from "reactstrap";
 import Link from "next/link";
 import ContentWrapper from "@/components/Layout/ContentWrapper";
 import { createPublicUser } from "@/actions/user";
@@ -45,14 +45,14 @@ const checkIfFilesAreCorrectType = (files) => {
 const laporanSchema = Yup.object().shape({
 	no_laporan: Yup.string().required("Harap Diisi"),
 	no_hp: Yup.number().required("Harap Diisi"),
-	nama: Yup.string().required("Harap Diisi"),
+	nama: Yup.string().notRequired(),
 	setuju: Yup.boolean().isTrue(),
-	alamat: Yup.string().min(3).max(200).required("Harap Diisi"),
+	alamat: Yup.string().min(3).max(200).notRequired(),
 	keterangan: Yup.string().min(3).max(200).required("Harap Diisi"),
-	email: Yup.string().email().required("Harap Diisi"),
+	email: Yup.string().email().notRequired(),
 	pelanggaran_id: Yup.array().min(1).required("Harap Diisi"),
 	pt_id: Yup.string().required("Harap Diisi"),
-	foto: Yup.array().min(1, "Harus ada").required("Harus ada").test("filesize", "Maksimal ukuran foto 15mb", checkIfFilesAreTooBig).test("type", "harus jpeg/png", checkIfFilesAreCorrectType),
+	foto: Yup.array().notRequired().test("filesize", "Maksimal ukuran foto 15mb", checkIfFilesAreTooBig).test("type", "harus jpeg/png", checkIfFilesAreCorrectType),
 	dokumen: Yup.array().nullable().notRequired().test("filesize", "Maksimal ukuran dokumen 15mb", checkIfFilesAreTooBig),
 	is_private: Yup.boolean().notRequired(),
 });
@@ -100,6 +100,12 @@ class App extends Component {
 			isPrivate: false,
 			confirm: false,
 			msgError: [],
+			modal: false,
+			user: {},
+			kode: "",
+			error: null,
+			data: {},
+			token: "",
 		};
 	}
 
@@ -110,10 +116,8 @@ class App extends Component {
 		this.setState({ pelanggaran });
 	};
 
-	toggleCollapse = () => {
-		this.setState({
-			isOpen: !this.state.isOpen,
-		});
+	toggleModal = () => {
+		this.setState({ modal: !this.state.modal });
 	};
 
 	optionsJenisPelanggaran = (pelanggaran) => {
@@ -166,31 +170,29 @@ class App extends Component {
 		}
 	};
 
-	createLaporan = async (data, token) => {
+	createLaporan = async (token, kode = "") => {
+		const data = this.state.data;
 		const formdata = new FormData();
 		formdata.append("pt_id", data.pt_id);
 		formdata.append("keterangan", data.keterangan);
-		formdata.append("no_verifikasi", data.noVerifikasi);
 		formdata.append("pelanggaran_id", data.pelanggaran_id.join(","));
+		if (kode) {
+			formdata.append("no_verifikasi", kode);
+		}
 		if (data.dokumen.length > 0) {
 			Array.from(data.dokumen).forEach((e) => {
 				formdata.append("dokumen", e);
 			});
 		}
 
+		const toastid = toast.loading("Please wait...");
 		const success = await createLaporanPublic(token, formdata);
 		if (!success) {
-			swal({
-				text: "Kode Verifikasi tidak sesuai",
-				icon: "error",
-			});
+			toast.update(toastid, { render: "All is not good", type: "error", isLoading: false, autoClose: true, closeButton: true });
+			this.setState({ error: "Kode verifikasi tidak valid" });
 		} else {
-			swal({
-				icon: "success",
-				title: "Berhasil!",
-				text: "Laporan berhasil terkirim",
-			});
-
+			toast.update(toastid, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
+			this.toggleModal();
 			Router.push("/laporan/new");
 		}
 	};
@@ -199,12 +201,12 @@ class App extends Component {
 		const formdata = new FormData();
 		formdata.append("no_laporan", data.no_laporan);
 		formdata.append("pt_id", data.pt_id);
-		formdata.append("nama", data.nama);
-		formdata.append("email", data.email);
+		if (data.nama) formdata.append("nama", data.nama);
+		if (data.email) formdata.append("email", data.email);
 		formdata.append("no_hp", data.no_hp);
-		formdata.append("alamat", data.alamat);
+		if (data.alamat) formdata.append("alamat", data.alamat);
 		formdata.append("is_private", data.is_private);
-		formdata.append("foto", data.foto[0]);
+		if (data.foto.length > 0) formdata.append("foto", data.foto[0]);
 		return await createPublicUser(formdata);
 	};
 
@@ -253,23 +255,11 @@ class App extends Component {
 										}}
 										validationSchema={laporanSchema}
 										onSubmit={async (data) => {
-											swal({
-												title: "",
-												text: "Loading...",
-												icon: "https://www.boasnotas.com/img/loading2.gif",
-												buttons: false,
-												closeOnClickOutside: false,
-											});
+											this.toggleModal();
+											this.setState({ data, no_hp: data.no_hp });
 											const user = await this.createUser(data);
-											data.noVerifikasi = await swal({
-												text: "Masukkan kode verifikasi",
-												content: "input",
-												button: {
-													text: "Kirim",
-													closeModal: false,
-												},
-											});
-											await this.createLaporan(data, user.data.token);
+											const token = user.data.token;
+											this.setState({ user, token });
 										}}
 									>
 										<Form className="form-horizontal">
@@ -287,7 +277,7 @@ class App extends Component {
 											<FormGroup row>
 												<label className="col-md-2 col-form-label">Nomor Aktif</label>
 												<div className="col-md-10">
-													<Field name="no_hp">{({ field }) => <Input type="tel" {...field} />}</Field>
+													<Field name="no_hp">{({ field, form }) => <Input type="tel" {...field} />}</Field>
 													<ErrorMessage name="no_hp" component="div" className="form-text text-danger" />
 												</div>
 											</FormGroup>
@@ -415,6 +405,42 @@ class App extends Component {
 							</Card>
 						</Col>
 					</Row>
+					<Modal isOpen={this.state.modal}>
+						<form className="form-horizontal">
+							<ModalBody>
+								<FormGroup>
+									<label>Masukkan Kode Verifikasi</label>
+									<div>
+										<Input onChange={(e) => this.setState({ kode: e.target.value })} type="text" />
+									</div>
+									<p>*Kode verifikasi terkirim ke nomor WA {this.state.no_hp}</p>
+									{this.state.error && <div className="form-text text-danger">{this.state.error}</div>}
+								</FormGroup>
+							</ModalBody>
+							<ModalFooter>
+								<Button
+									color="info"
+									onClick={async () => {
+										await this.createLaporan(this.state.token);
+									}}
+								>
+									Tidak memiliki Kode Verifikasi
+								</Button>
+								<Button
+									color="primary"
+									onClick={async () => {
+										if (this.state.kode) {
+											await this.createLaporan(this.state.token, this.state.kode);
+										} else {
+											this.setState({ error: "Kode verifikasi harus diisi" });
+										}
+									}}
+								>
+									Kirim
+								</Button>
+							</ModalFooter>
+						</form>
+					</Modal>
 				</ContentWrapper>
 			</div>
 		);