yazid138 3 年之前
父節點
當前提交
4a9a05d0d8

+ 22 - 4
actions/pelaporan.js

@@ -1,5 +1,6 @@
-import { get, post } from "../config/request";
+import { get, post, del, put } from "../config/request";
 import axiosAPI from "../config/axios";
+import { remove } from "jszip";
 
 export const getPelaporan = async (query = {}) => {
 	try {
@@ -36,9 +37,6 @@ export const createPelaporan = async (data) => {
 
 export const addStatus = async ({ number, ptId }, data) => {
 	try {
-		// const myHeaders = new Headers();
-		// myHeaders.append("Content-Type", "application/json");
-		// const raw = JSON.stringify(data);
 		const res = await post(`/pelaporan/status/add?number=${number}&ptId=${ptId}`, data);
 		return res.data;
 	} catch (error) {
@@ -46,3 +44,23 @@ export const addStatus = async ({ number, ptId }, data) => {
 		return false;
 	}
 };
+
+export const removeLaporan = async ({ number, ptId }) => {
+	try {
+		const res = await del(`/pelaporan/remove?number=${number}&ptId=${ptId}`);
+		return res.data;
+	} catch (error) {
+		console.log("error", error);
+		return false;
+	}
+};
+
+export const activeLaporan = async ({ number, ptId }) => {
+	try {
+		const res = await put(`/pelaporan/active?number=${number}&ptId=${ptId}`);
+		return res.data;
+	} catch (error) {
+		console.log("error", error);
+		return false;
+	}
+};

+ 57 - 52
components/Extras/calendar.view.js

@@ -1,7 +1,7 @@
 import React, { Component } from "react";
 import ContentWrapper from "@/components/Layout/ContentWrapper";
 import { Card, CardBody, CardHeader, CardTitle } from "reactstrap";
-import { getPelaporan } from "@/actions/pelaporan";
+import { getPelaporan, addStatus, removeLaporan, activeLaporan } from "@/actions/pelaporan";
 import { updateJadwal } from "@/actions/penjadwalan";
 import DetailLaporan from "@/components/Main/DetailLaporan";
 import Link from "next/link";
@@ -13,8 +13,6 @@ import listPlugin from "@fullcalendar/list";
 import bootstrapPlugin from "@fullcalendar/bootstrap";
 import events from "./calendar.events";
 import Select from "react-select";
-import { addStatus } from "@/actions/pelaporan";
-import { getPT } from "@/actions/PT";
 import moment from "moment";
 
 const status = [
@@ -60,8 +58,9 @@ class Calendar extends Component {
 			},
 		});
 
-		const dataLaporan = await getPelaporan({ penjadwalan: true });
+		const dataLaporan = await getPelaporan({ penjadwalan: true, active: true });
 		const laporan = await getPelaporan({ number: this.props.query.number, ptId: this.props.query.ptId });
+
 		this.setState({ dataLaporan });
 		this.getDataEvent();
 		await this.defaultStatus(laporan.data[0]);
@@ -71,8 +70,7 @@ class Calendar extends Component {
 		if (laporan.data[0].penjadwalan) {
 			color = laporan.data[0].penjadwalan.background_color;
 		}
-		const pt = await getPT({ id: laporan.data[0].pt_id });
-		this.setState({ externalEvents: [{ id: this.props.query.number, color, name: `Jadwal Pemeriksaan - No.Laporan : ${this.props.query.number} - ${pt.data[0].nama}`, allDay: true }] });
+		this.setState({ externalEvents: [{ id: this.props.query.number, color, name: `Jadwal Pemeriksaan - No.Laporan : ${this.props.query.number} - ${laporan.data[0].pt.nama}`, allDay: true }] });
 	}
 
 	getDataEvent = () => {
@@ -135,6 +133,11 @@ class Calendar extends Component {
 		const { ptId, number } = this.props.query;
 		this.setState({ selectedOption });
 		await addStatus({ number, ptId }, { status: selectedOption.value });
+		if (selectedOption.value === "Ditutup") {
+			await removeLaporan({ number, ptId });
+		} else if (!this.state.laporan.data[0].active) {
+			await activeLaporan({ number, ptId });
+		}
 	};
 
 	render() {
@@ -172,52 +175,54 @@ class Calendar extends Component {
 									{selectedOption?.value === "Ditutup" ? (
 										""
 									) : (
-										<Card className="card-default" title="">
-											<CardHeader>
-												<CardTitle tag="h4">Daftar Pemeriksaan</CardTitle>
-											</CardHeader>
-											<CardBody>
-												<div className="external-events" ref="externalEventsList">
-													{externalEvents.map((ev) => (
-														<div
-															className="fce-event"
-															style={{
-																backgroundColor: ev.color,
-															}}
-															key={ev.name + ev.color}
-															data-id={ev.id}
-														>
-															{ev.name}
-														</div>
-													))}
-												</div>
-											</CardBody>
-										</Card>
-									)}
-									{laporan.data && laporan.data[0].penjadwalan && (
-										<Card className="card-default">
-											<CardHeader>
-												<CardTitle tag="h4">Jadwal Pemeriksaan</CardTitle>
-											</CardHeader>
-											<CardBody>
-												<table className="table">
-													<tbody>
-														<tr>
-															<td>Judul</td>
-															<td>{laporan.data[0].penjadwalan.title}</td>
-														</tr>
-														<tr>
-															<td>Waktu</td>
-															<td>{`${moment(laporan.data[0].penjadwalan.from_date).format("DD MMMM YYYY")} ${
-																moment(laporan.data[0].penjadwalan.from_date).format("DD MMMM YYYY") === moment(laporan.data[0].penjadwalan.to_date).format("DD MMMM YYYY")
-																	? ""
-																	: `- ${moment(laporan.data[0].penjadwalan.to_date).add(-1, "d").format("DD MMMM YYYY")}`
-															}`}</td>
-														</tr>
-													</tbody>
-												</table>
-											</CardBody>
-										</Card>
+										<>
+											<Card className="card-default" title="">
+												<CardHeader>
+													<CardTitle tag="h4">Daftar Pemeriksaan</CardTitle>
+												</CardHeader>
+												<CardBody>
+													<div className="external-events" ref="externalEventsList">
+														{externalEvents.map((ev) => (
+															<div
+																className="fce-event"
+																style={{
+																	backgroundColor: ev.color,
+																}}
+																key={ev.name + ev.color}
+																data-id={ev.id}
+															>
+																{ev.name}
+															</div>
+														))}
+													</div>
+												</CardBody>
+											</Card>
+											{laporan.data && laporan.data[0].penjadwalan && (
+												<Card className="card-default">
+													<CardHeader>
+														<CardTitle tag="h4">Jadwal Pemeriksaan</CardTitle>
+													</CardHeader>
+													<CardBody>
+														<table className="table">
+															<tbody>
+																<tr>
+																	<td>Judul</td>
+																	<td>{laporan.data[0].penjadwalan.title}</td>
+																</tr>
+																<tr>
+																	<td>Waktu</td>
+																	<td>{`${moment(laporan.data[0].penjadwalan.from_date).format("DD MMMM YYYY")} ${
+																		moment(laporan.data[0].penjadwalan.from_date).format("DD MMMM YYYY") === moment(laporan.data[0].penjadwalan.to_date).format("DD MMMM YYYY")
+																			? ""
+																			: `- ${moment(laporan.data[0].penjadwalan.to_date).add(-1, "d").format("DD MMMM YYYY")}`
+																	}`}</td>
+																</tr>
+															</tbody>
+														</table>
+													</CardBody>
+												</Card>
+											)}
+										</>
 									)}
 									<div className="mb-3">
 										{selectedEvent && (

+ 49 - 49
components/Main/DetailLaporan.js

@@ -7,59 +7,59 @@ import { getPT } from "@/actions/PT";
 
 function DetailLaporan({ data, noTitle = false, noStatus = false }) {
 	const user = useSelector((state) => state.user);
-	const [pt, setPT] = useState({});
+	console.log(user.peran[0].peran.id);
+	// const [pt, setPT] = useState({});
 
-	useEffect(() => {
-		const fetchPT = async () => {
-			const pt = await getPT({ id: data.pt_id });
-			setPT(pt.data[0]);
-		};
-		fetchPT();
-	}, []);
+	// useEffect(() => {
+	// 	const fetchPT = async () => {
+	// 		const pt = await getPT({ id: data.pt_id });
+	// 		setPT(pt.data[0]);
+	// 	};
+	// 	fetchPT();
+	// }, []);
 
 	return (
 		<>
-			{!data.user_id.isPrivate ||
-				(user.peran[0].peran.id === 2020 && (
-					<>
-						{noTitle ? "" : <p className="lead bb">Identitas Pelapor - {data.user_id.isPublic ? "Umum" : "Internal"}</p>}
-						<FormGroup row>
-							<Col md="4">Nama Pelapor:</Col>
-							<Col md="8">
-								<strong>{data.user_id.nama}</strong>
-							</Col>
-						</FormGroup>
-						<FormGroup row>
-							<Col md="4">Nomor yang dapat dihubungi:</Col>
-							<Col md="8">
-								<strong>{data.user_id.no_hp}</strong>
-							</Col>
-						</FormGroup>
-						<FormGroup row>
-							<Col md="4">Email:</Col>
-							<Col md="8">
-								<strong>{data.user_id.email}</strong>
-							</Col>
-						</FormGroup>
+			{(!data.user_id.isPrivate || user.peran[0].peran.id === 2020) && (
+				<>
+					{noTitle ? "" : <p className="lead bb">Identitas Pelapor - {data.user_id.isPublic ? "Umum" : "Internal"}</p>}
+					<FormGroup row>
+						<Col md="4">Nama Pelapor:</Col>
+						<Col md="8">
+							<strong>{data.user_id.nama}</strong>
+						</Col>
+					</FormGroup>
+					<FormGroup row>
+						<Col md="4">Nomor yang dapat dihubungi:</Col>
+						<Col md="8">
+							<strong>{data.user_id.no_hp}</strong>
+						</Col>
+					</FormGroup>
+					<FormGroup row>
+						<Col md="4">Email:</Col>
+						<Col md="8">
+							<strong>{data.user_id.email}</strong>
+						</Col>
+					</FormGroup>
 
-						{data.user_id.isPublic && (
-							<>
-								<FormGroup row>
-									<Col md="4">Alamat:</Col>
-									<Col md="8">
-										<strong>{data.user_id.alamat}</strong>
-									</Col>
-								</FormGroup>
-								<FormGroup row>
-									<Col md="4">Foto Identitas:</Col>
-									<Col md="8">
-										<img src={`data:${data.user_id.files[0].type};base64, ${Buffer.from(data.user_id.files[0].data).toString("base64")}`} height={200} alt="Foto Identitas" />
-									</Col>
-								</FormGroup>
-							</>
-						)}
-					</>
-				))}
+					{data.user_id.isPublic && (
+						<>
+							<FormGroup row>
+								<Col md="4">Alamat:</Col>
+								<Col md="8">
+									<strong>{data.user_id.alamat}</strong>
+								</Col>
+							</FormGroup>
+							<FormGroup row>
+								<Col md="4">Foto Identitas:</Col>
+								<Col md="8">
+									<img src={`data:${data.user_id.files[0].type};base64, ${Buffer.from(data.user_id.files[0].data).toString("base64")}`} height={200} alt="Foto Identitas" />
+								</Col>
+							</FormGroup>
+						</>
+					)}
+				</>
+			)}
 			{noTitle ? "" : <p className="lead bb">Detail Laporan</p>}
 			<form className="form-horizontal">
 				<FormGroup row>
@@ -71,7 +71,7 @@ function DetailLaporan({ data, noTitle = false, noStatus = false }) {
 				<FormGroup row>
 					<Col md="4">Nama Perguruan Tinggi:</Col>
 					<Col md="8">
-						<strong>{pt?.nama}</strong>
+						<strong>{data.pt.nama}</strong>
 					</Col>
 				</FormGroup>
 				<FormGroup row>

+ 0 - 2
components/Main/DetailPT.js

@@ -1,5 +1,3 @@
-import React, { useState, useEffect } from "react";
-
 function DetailPT({ data }) {
 	return (
 		<div className="card card-default">

+ 1 - 1
components/Main/DetailSanksi.js

@@ -16,7 +16,7 @@ function DetailSanksi({ data, noTitle = false }) {
 				<FormGroup row>
 					<Col md="4">Nama Perguruan Tinggi:</Col>
 					<Col md="8">
-						<strong>Universitas Satyagama</strong>
+						<strong>{data.pt.nama}</strong>
 					</Col>
 				</FormGroup>
 

+ 2 - 2
components/Main/TableLaporan.js

@@ -8,7 +8,7 @@ function TableLaporan({ listData, to, linkName, status = false }) {
 		<div className="card b">
 			<div className="card-body">
 				{listData && (
-					<Datatable options={{ responsive: true }}>
+					<Datatable options={{ responsive: false }}>
 						<table className="table w-100">
 							<thead>
 								<tr>
@@ -29,7 +29,7 @@ function TableLaporan({ listData, to, linkName, status = false }) {
 												<div className="media align-items-center">
 													<div className="media-body d-flex">
 														<div>
-															<h4 className="m-0">Universitas Satyagama</h4>
+															<h4 className="m-0">{data.pt.nama}</h4>
 															<p>{data.description}</p>
 														</div>
 													</div>

+ 3 - 1
components/Main/TableSanksi.js

@@ -8,12 +8,13 @@ function TableSanksi({ listData, to, linkName }) {
 		<div className="card b">
 			<div className="card-body">
 				{listData && (
-					<Datatable options={{ responsive: true }}>
+					<Datatable options={{ responsive: false }}>
 						<table className="table w-100">
 							<thead>
 								<tr>
 									<th>Nomor Sanksi</th>
 									<th>Keterangan Sanksi</th>
+									<th>Dibuat Oleh</th>
 									<th>Created</th>
 									<th></th>
 								</tr>
@@ -34,6 +35,7 @@ function TableSanksi({ listData, to, linkName }) {
 															</div>
 														</div>
 													</td>
+													<td>{data.sanksi.user_id.nama}</td>
 													<td>{moment(data.sanksi.createdAt).fromNow()}</td>
 													<td>
 														<div className="ml-auto">

+ 1 - 1
components/Sanksi/TableLaporan.js

@@ -28,7 +28,7 @@ function TableLaporan({ listData }) {
 												<div className="media align-items-center">
 													<div className="media-body d-flex">
 														<div>
-															<h4 className="m-0">Universitas Satyagama</h4>
+															<h4 className="m-0">{data.pt.nama}</h4>
 															<p>{data.description}</p>
 														</div>
 													</div>

+ 22 - 0
config/request.js

@@ -44,3 +44,25 @@ export const post = async (url, data, config = null) => {
 		return false;
 	}
 };
+
+export const put = async (url, data, config = null) => {
+	try {
+		const request = () => axiosAPI.put(url, data, config);
+		const res = await handleRequest(request);
+		return res;
+	} catch (error) {
+		console.log(error);
+		return false;
+	}
+};
+
+export const del = async (url, config = null) => {
+	try {
+		const request = () => axiosAPI.delete(url, config);
+		const res = await handleRequest(request);
+		return res;
+	} catch (error) {
+		console.log(error);
+		return false;
+	}
+};

+ 3 - 7
pages/app/pelaporan/detail.js

@@ -6,13 +6,11 @@ import DetailLaporan from "@/components/Main/DetailLaporan";
 import Link from "next/link";
 import ContentWrapper from "@/components/Layout/ContentWrapper";
 import { Row, Col, Card, CardBody } from "reactstrap";
-import { getPT } from "@/actions/PT";
 
 class DetailPelaporan extends Component {
 	constructor(props) {
 		super(props);
 		this.state = {
-			pt: {},
 			pelaporan: {},
 		};
 	}
@@ -23,14 +21,12 @@ class DetailPelaporan extends Component {
 
 	componentDidMount = async () => {
 		const { query } = this.props;
-		const pt = await getPT({ id: query.ptId });
 		const pelaporan = await getPelaporan({ ptId: query.ptId, number: query.number });
-		this.setState({ pt, pelaporan });
+		this.setState({ pelaporan });
 	};
 
 	render() {
-		const { pt, pelaporan } = this.state;
-		console.log(pelaporan);
+		const { pelaporan } = this.state;
 		return (
 			<ContentWrapper unwrap>
 				{/* <Header /> */}
@@ -53,7 +49,7 @@ class DetailPelaporan extends Component {
 								</CardBody>
 							</Card>
 						</Col>
-						<Col xl="3">{pt?.data && <DetailPT data={pt.data[0]} />}</Col>
+						<Col xl="3">{pelaporan.data && <DetailPT data={pelaporan.data[0].pt} />}</Col>
 					</Row>
 				</div>
 			</ContentWrapper>

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

@@ -28,7 +28,7 @@ class Pemeriksaan extends Component {
 						<CaseProgress />
 					</Col>
 					<Col lg="8">
-						<TableLaporan listData={pelaporan?.data} to="/app/pemeriksaan/new" linkName="Detail" status />
+						<TableLaporan listData={pelaporan?.data} to="/app/pemeriksaan/new" linkName="Evaluasi" status />
 					</Col>
 				</Row>
 			</ContentWrapper>

+ 3 - 6
pages/app/pemeriksaan/new.js

@@ -7,14 +7,12 @@ import InputEvaluasi from "@/components/Pemeriksaan/InputEvaluasi";
 import TableRiwayat from "@/components/Pemeriksaan/TableRiwayat";
 import { getPelaporan } from "@/actions/pelaporan";
 import Link from "next/link";
-import { getPT } from "@/actions/PT";
 import { Row, Col, Card, CardBody, CardHeader, CardTitle } from "reactstrap";
 
 class PemeriksaanNew extends Component {
 	constructor(props) {
 		super(props);
 		this.state = {
-			pt: {},
 			pelaporan: {},
 		};
 	}
@@ -25,13 +23,12 @@ class PemeriksaanNew extends Component {
 	componentDidMount = async () => {
 		const { query } = this.props;
 		const pelaporan = await getPelaporan({ ptId: query.ptId, number: query.number });
-		const pt = await getPT({ id: query.ptId });
-		this.setState({ pt, pelaporan });
+		this.setState({ pelaporan });
 	};
 
 	render() {
 		const { query } = this.props;
-		const { pelaporan, pt } = this.state;
+		const { pelaporan } = this.state;
 		return (
 			<ContentWrapper unwrap>
 				{/* <Header /> */}
@@ -57,7 +54,7 @@ class PemeriksaanNew extends Component {
 								</CardBody>
 							</Card>
 						</Col>
-						<Col xl="3">{pt?.data && <DetailPT data={pt.data[0]} />}</Col>
+						<Col xl="3">{pelaporan.data && pelaporan.data.length && <DetailPT data={pelaporan.data[0].pt} />}</Col>
 					</Row>
 					<Row>
 						<Col>

+ 11 - 8
pages/app/sanksi/proses.js

@@ -26,12 +26,18 @@ class ProsesSanksi extends Component {
 			activeStep: "1",
 			dataUpload: null,
 			dataPelanggaran: {},
+			pelaporan: null,
 		};
 	}
 
 	static getInitialProps = async ({ query }) => {
+		return { query };
+	};
+
+	componentDidMount = async () => {
+		const { query } = this.props;
 		const pelaporan = await getPelaporan({ ptId: query.ptId, number: query.number });
-		return { query, pelaporan };
+		this.setState({ pelaporan });
 	};
 
 	done = async (e) => {
@@ -73,8 +79,7 @@ class ProsesSanksi extends Component {
 	};
 
 	render() {
-		const { pelaporan } = this.props;
-		const { dataUpload, dataPelanggaran } = this.state;
+		const { dataUpload, dataPelanggaran, pelaporan } = this.state;
 		return (
 			<ContentWrapper unwrap>
 				{/* <Header /> */}
@@ -154,7 +159,7 @@ class ProsesSanksi extends Component {
 										<TabPane tabId="1">
 											<div className="pt-3 mb-3">
 												<h2>Detail Laporan</h2>
-												<DetailLaporan noTitle data={pelaporan.data[0]} />
+												{pelaporan?.data && <DetailLaporan noTitle data={pelaporan.data[0]} />}
 											</div>
 											<hr />
 											<div className="d-flex">
@@ -167,9 +172,7 @@ class ProsesSanksi extends Component {
 											<div className="pt-3 mb-3">
 												<h2>Hasil Evaluasi</h2>
 												<Card className="card-default">
-													<CardBody>
-														<TableRiwayat data={pelaporan.data[0]} />
-													</CardBody>
+													<CardBody>{pelaporan?.data && <TableRiwayat data={pelaporan.data[0]} />}</CardBody>
 												</Card>
 											</div>
 											<hr />
@@ -215,7 +218,7 @@ class ProsesSanksi extends Component {
 										<TabPane tabId="5">
 											<div className="pt-3 mb-3">
 												<h2>Ringkasan</h2>
-												<Ringkasan dataLaporan={pelaporan.data[0]} dataPelanggaran={dataPelanggaran.data} dataUpload={dataUpload} />
+												{pelaporan?.data && <Ringkasan dataLaporan={pelaporan.data[0]} dataPelanggaran={dataPelanggaran.data} dataUpload={dataUpload} />}
 											</div>
 											<hr />
 											<div className="d-flex">