Browse Source

commit dulu

yazid138 3 years ago
parent
commit
ab1e7ea323

+ 16 - 0
actions/pelaporan.js

@@ -28,3 +28,19 @@ export const createPelaporan = async (data) => {
 		return false;
 	}
 };
+
+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 fetch(`http://localhost:5000/pelaporan/status/add?number=${number}&ptId=${ptId}`, {
+			method: "POST",
+			body: raw,
+			headers: myHeaders,
+		});
+		return await res.json();
+	} catch (error) {
+		return false;
+	}
+};

+ 1 - 1
components/Extras/calendar.view.js

@@ -157,7 +157,7 @@ class Calendar extends Component {
 											</CardBody>
 										</Card>
 									)}
-									{laporan ? <DetailLaporan data={laporan} handleChangeSelect={this.handleChangeSelect} /> : ""}
+									{laporan ? <DetailLaporan query={this.props.query} data={laporan} handleChangeSelect={this.handleChangeSelect} /> : ""}
 								</div>
 							</div>
 						</div>

+ 4 - 4
components/Main/DetailLaporan.js

@@ -63,18 +63,18 @@ function DetailLaporan({ data, noTitle = false }) {
 						<Scrollable height="120px" className="list-group">
 							<table className="table table-bordered bg-transparent">
 								<tbody>
-									{/* {data.dokumen.map((e) => (
+									{data.files.map((e) => (
 										<tr>
 											<td>
 												<em className="fa-lg far fa-file-code"></em>
 											</td>
 											<td>
-												<a className="text-muted" href="">
-													{e.filename}
+												<a className="text-muted" href={`data:${e.type};base64, ${Buffer.from(e.data).toString("base64")}`} download={e.name}>
+													{e.name}
 												</a>
 											</td>
 										</tr>
-									))} */}
+									))}
 								</tbody>
 							</table>
 						</Scrollable>

+ 8 - 11
components/Pemeriksaan/InputEvaluasi.js

@@ -1,12 +1,9 @@
 import React, { Component } from "react";
+import { insertPemeriksaan } from "@/actions/pemeriksaan";
+import Router from "next/router";
 import Datetime from "react-datetime";
 import moment from "moment";
-import {
-	Row,
-	Col,
-	FormGroup,
-	Input,
-} from "reactstrap";
+import { Row, Col, FormGroup, Input } from "reactstrap";
 
 const selectInstanceId = 1;
 let Dropzone = null;
@@ -30,14 +27,14 @@ export default class InputEvaluasi extends Component {
 		this.state = {
 			dropdownOpen: false,
 			splitButtonOpen: false,
-			keteranganLaporan: "",
+			judulEvaluasi: "",
 			tanggal: moment().format("D MMMM YYYY"),
 			files: [],
 		};
 	}
 
-	setKeteranganPelaporan = (e) => {
-		this.setState({ keteranganLaporan: e.target.value });
+	setjudulEvaluasi = (e) => {
+		this.setState({ judulEvaluasi: e.target.value });
 	};
 
 	setTanggal = (moment) => {
@@ -90,7 +87,7 @@ export default class InputEvaluasi extends Component {
 		e.preventDefault();
 		const { number, ptId } = this.props.query;
 		const formdata = new FormData();
-		formdata.append("description", this.state.keteranganLaporan);
+		formdata.append("title", this.state.judulEvaluasi);
 		formdata.append("date", this.state.tanggal);
 		if (this.state.files.length > 0) {
 			this.state.files.forEach((e) => {
@@ -128,7 +125,7 @@ export default class InputEvaluasi extends Component {
 					<FormGroup>
 						<label>Judul Dokumen:</label>
 						<div>
-							<Input type="text" value={this.state.keteranganLaporan} onChange={this.setKeteranganPelaporan} />
+							<Input type="text" value={this.state.judulEvaluasi} onChange={this.setjudulEvaluasi} />
 							{/* <Input type="textarea" value={this.state.keteranganLaporan} onChange={this.setKeteranganPelaporan} /> */}
 							{/* <span className="form-text">Deskripsi pelaporan minimum karakter 50 maksimum 200 karakter</span> */}
 						</div>

+ 17 - 31
components/Pemeriksaan/TableRiwayat.js

@@ -1,6 +1,6 @@
 import Datatable from "@/components/Tables/Datatable";
 
-function TableRiwayat() {
+function TableRiwayat({ data }) {
 	return (
 		<Datatable options={{ responsive: true }}>
 			<table className="table table-striped my-4 w-100">
@@ -12,36 +12,22 @@ function TableRiwayat() {
 					</tr>
 				</thead>
 				<tbody>
-					<tr>
-						<td>23/01/2022</td>
-						<td>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quos, maxime.</td>
-						<td>
-							<em className="fa-lg far fa-file-code"></em>
-							<a className="text-muted" href="">
-								database.controller.js
-							</a>
-						</td>
-					</tr>
-					<tr>
-						<td>23/01/2022</td>
-						<td>Lorem ipsum dolor sit amet consectetur adipisicing.</td>
-						<td>
-							<em className="fa-lg far fa-file-code"></em>
-							<a className="text-muted" href="">
-								database.controller.js
-							</a>
-						</td>
-					</tr>
-					<tr>
-						<td>23/01/2022</td>
-						<td>Lorem ipsum dolor sit.</td>
-						<td>
-							<em className="fa-lg far fa-file-code"></em>
-							<a className="text-muted" href="">
-								database.controller.js
-							</a>
-						</td>
-					</tr>
+					{data.penjadwalan.pemeriksaan.map((e) => (
+						<tr>
+							<td>{moment(e.createdAt).format("D MMMM YYYY")}</td>
+							<td>{e.title}</td>
+							<td>
+								{e.files.map((e) => (
+									<>
+										<em className="fa-lg far fa-file-code"></em>
+										<a className="text-muted" href={`data:${e.type};base64, ${Buffer.from(e.data).toString("base64")}`} download={e.name}>
+											{e.name}
+										</a>
+									</>
+								))}
+							</td>
+						</tr>
+					))}
 				</tbody>
 			</table>
 		</Datatable>

+ 22 - 13
components/Penjadwalan/DetailLaporan.js

@@ -1,6 +1,7 @@
 import React, { Component } from "react";
 import Select from "react-select";
 import Scrollable from "@/components/Common/Scrollable";
+import { addStatus } from "@/actions/pelaporan";
 import { Card, CardBody, CardHeader, CardTitle } from "reactstrap";
 
 const selectInstanceId = 1;
@@ -12,17 +13,21 @@ export class DetailLaporan extends Component {
 		};
 	}
 
-	componentDidMount = () => {
+	componentDidMount = async () => {
 		this.setState({ selectedOption: { value: "ditindaklanjuti", label: "Ditindaklanjuti Dikti Ristek", className: "State-ACT" } });
+		// const tes = await addStatus({ number, ptId }, { status: data.status || "ditindaklanjuti" });
 	};
 
-	handleChangeSelect = (selectedOption) => {
+	handleChangeSelect = async (selectedOption) => {
+		const { ptId, number } = this.props.query;
 		this.props.handleChangeSelect(selectedOption);
 		this.setState({ selectedOption });
+		const tes = await addStatus({ number, ptId }, { status: selectedOption.value });
 	};
 
 	render() {
 		const { data } = this.props;
+		console.log(data);
 		return (
 			<Card className="card b">
 				<CardHeader>
@@ -42,7 +47,7 @@ export class DetailLaporan extends Component {
 										onChange={this.handleChangeSelect}
 										options={[
 											{ value: "ditindaklanjuti", label: "Ditindaklanjuti Dikti Ristek", className: "State-ACT" },
-											{ value: "delegasi", label: "Delegasi ke LLDIKTI", className: "State-ACT" },
+											{ value: "delegasi ke lldikti", label: "Delegasi ke LLDIKTI", className: "State-ACT" },
 											{ value: "ditutup", label: "Ditutup", className: "State-ACT" },
 										]}
 										required
@@ -93,16 +98,20 @@ export class DetailLaporan extends Component {
 									<Scrollable height="120px" className="list-group">
 										<table className="table table-bordered bg-transparent">
 											<tbody>
-												<tr>
-													<td>
-														<em className="fa-lg far fa-file-code"></em>
-													</td>
-													<td>
-														<a className="text-muted" href="">
-															database.controller.js
-														</a>
-													</td>
-												</tr>
+												{data.files
+													? data.files.map((e) => (
+															<tr>
+																<td>
+																	<em className="fa-lg far fa-file-code"></em>
+																</td>
+																<td>
+																	<a className="text-muted" href={`data:${e.type};base64, ${Buffer.from(e.data).toString("base64")}`} download={e.name}>
+																		{e.name}
+																	</a>
+																</td>
+															</tr>
+													  ))
+													: ""}
 											</tbody>
 										</table>
 									</Scrollable>

+ 58 - 71
components/Sanksi/TablePenetapanSanksi.js

@@ -1,89 +1,37 @@
 import React, { Component } from "react";
 import { Card, Table } from "reactstrap";
+import { getPelanggaran } from "@/actions/pelanggaran";
 
 export class TablePenetapanSanksi extends Component {
 	constructor(props) {
 		super(props);
 		this.state = {
-			hisJenisPelanggaran: [],
+			checkedData: [],
 			tbljenisPelanggaran: [],
+			pelanggaran: null,
 		};
 	}
-	handleApplyClick = () => {
-		const _noSangsi = document.getElementById("noSangsi").value;
 
-		const _hisJP = [];
-		//Get data for filter by checked
-		this.state.tbljenisPelanggaran.filter((_jp) => _jp.checked == true).map((selectedPelanggaran) => _hisJP.push(selectedPelanggaran));
-
-		this.state.hisJenisPelanggaran = [];
-		this.state.hisJenisPelanggaran.push({
-			noSangsi: _noSangsi,
-			pelanggaran: _hisJP,
-		});
-
-		console.log("Result hisJenisPelanggaran : ", this.state.hisJenisPelanggaran);
+	componentDidMount = async () => {
+		const pelanggaran = await getPelanggaran();
+		this.setState({ pelanggaran });
 	};
-	// handle particular changes on each checkbox
-	onHandleChange(listName, index) {
-		//set state to checkbox and data in promise mode
-		this.setState({
-			[listName]: this.state[listName].map((item, i) => (index !== i ? item : { ...item, checked: !this.state[listName][index].checked })),
-		});
-	}
 
-	renderTableData = () => {
-		return this.state.tbljenisPelanggaran.map((jp, index) => {
-			return (
-				<tr>
-					<td>
-						<label>{index + 1}</label>
-					</td>
-					<td>
-						<div className="media align-items-center">
-							<div className="media-body d-flex">
-								<div>
-									<p>{jp.Pelanggaran}</p>
-									<p>TMT : {jp.TMTBulan} Bulan</p>
-									<p>Level Pelanggaran : {jp.LabelSangsi}</p>
-								</div>
-							</div>
-						</div>
-					</td>
-					<td>
-						<div className="media align-items-center">
-							<div className="media-body d-flex">
-								<div>
-									<p>{jp.Sangsi}</p>
-									<p>Keterangan : {jp.KeteranganSangsi}</p>
-								</div>
-							</div>
-						</div>
-					</td>
-					<td>
-						<div className="checkbox c-checkbox">
-							<label>
-								{/* <input type="checkbox" checked={this.state.listA[index].checked} onChange={e => this.handleChange('listA', index)}/> */}
-								<input
-									//name="cb"{jp.idPelanggaran}
-									type="checkbox"
-									// checked={
-									//     jp.checked=true
-									// }
-									checked={this.state.tbljenisPelanggaran[jp.idPelanggaran].checked}
-									//{this.state.listA[0].checked}
-									onChange={(e) => this.onHandleChange("tbljenisPelanggaran", jp.idPelanggaran)}
-								/>
-								<span className="fa fa-check"></span>
-							</label>
-						</div>
-					</td>
-				</tr>
-			);
-		});
+	onHandleChange = (index) => {
+		const { pelanggaran, checkedData } = this.state;
+		this.setState((prevState) => ({
+			...prevState,
+			pelanggaran: {
+				data: prevState.pelanggaran.data.map((item, i) => (index !== i ? item : { ...item, checked: !pelanggaran.data[index].checked })),
+			},
+		}));
+		this.setState({ checkedData: pelanggaran.data.filter((e) => e.checked) });
+		// prevState.data.map((item, i) => (index !== i ? item : { ...item, checked: !pelanggaran.data[index].checked }));
+		console.log(checkedData);
 	};
 
 	render() {
+		const { pelanggaran } = this.state;
 		return (
 			<Card className="card-default">
 				<Table bordered hover responsive>
@@ -95,7 +43,46 @@ export class TablePenetapanSanksi extends Component {
 							<th></th>
 						</tr>
 					</thead>
-					<tbody>{this.renderTableData()}</tbody>
+					<tbody>
+						{pelanggaran
+							? pelanggaran.data.map((jp, index) => (
+									<tr key={jp._id}>
+										<td>
+											<label>{index + 1}</label>
+										</td>
+										<td>
+											<div className="media align-items-center">
+												<div className="media-body d-flex">
+													<div>
+														<p>{jp.Pelanggaran}</p>
+														<p>TMT : {jp.TMTBulan} Bulan</p>
+														<p>Level Pelanggaran : {jp.LabelSangsi}</p>
+													</div>
+												</div>
+											</div>
+										</td>
+										<td>
+											<div className="media align-items-center">
+												<div className="media-body d-flex">
+													<div>
+														<p>{jp.Sangsi}</p>
+														<p>Keterangan : {jp.KeteranganSangsi}</p>
+													</div>
+												</div>
+											</div>
+										</td>
+										<td>
+											<div className="checkbox c-checkbox">
+												<label>
+													<input type="checkbox" onChange={(e) => this.onHandleChange(index)} />
+													<span className="fa fa-check"></span>
+												</label>
+											</div>
+										</td>
+									</tr>
+							  ))
+							: ""}
+					</tbody>
 				</Table>
 			</Card>
 		);

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

@@ -16,7 +16,7 @@ class PemeriksaanNew extends Component {
 	};
 
 	render() {
-		const { pelaporan } = this.props;
+		const { pelaporan, query } = this.props;
 
 		return (
 			<ContentWrapper unwrap>
@@ -39,12 +39,11 @@ class PemeriksaanNew extends Component {
 											<DetailLaporan data={pelaporan.data[0]} />
 										</Col>
 										<Col lg={6}>
-											<InputEvaluasi />
+											<InputEvaluasi query={query} />
 										</Col>
 									</Row>
 								</CardBody>
 							</Card>
-							{/* END card */}
 						</Col>
 						<Col xl="3">
 							<DetailPT />
@@ -57,7 +56,7 @@ class PemeriksaanNew extends Component {
 									<CardTitle>Riwayat Evaluasi</CardTitle>
 								</CardHeader>
 								<CardBody>
-									<TableRiwayat />
+									<TableRiwayat data={pelaporan.data[0]} />
 								</CardBody>
 							</Card>
 						</Col>

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

@@ -136,7 +136,7 @@ class ProsesSanksi extends Component {
 													<h2>Hasil Evaluasi</h2>
 													<Card className="card-default">
 														<CardBody>
-															<TableRiwayat />
+															<TableRiwayat data={pelaporan.data[0]} />
 														</CardBody>
 													</Card>
 												</fieldset>