yazid138 3 år sedan
förälder
incheckning
718f697c64

+ 16 - 0
actions/sanksi.js

@@ -0,0 +1,16 @@
+import { addLog } from "./log";
+
+export const createSanksi = async ({ number, ptId }, data) => {
+	try {
+		const res = await fetch(`http://localhost:5000/sanksi/create?ptId=${ptId}&number=${number}`, {
+			method: "POST",
+			body: data,
+		});
+		const result = await res.json();
+		// addLog({ status: "SUCCESS", action: "CREATE", from: { id: result.created._id, data: "sanksi" }, description: "membuat sanksi" });
+		return result;
+	} catch (error) {
+		addLog({ status: "FAIL", action: "CREATE", from: { data: "sanksi" }, description: error.message || "membuat sanksi" });
+		return false;
+	}
+};

+ 3 - 3
components/Pelaporan/InputData.js

@@ -41,7 +41,7 @@ export class InputData extends Component {
 	};
 	};
 
 
 	optionsJenisPelanggaran = (pelanggaran) => {
 	optionsJenisPelanggaran = (pelanggaran) => {
-		return pelanggaran.data.map((e) => ({ value: e._id, label: e.Pelanggaran, className: "State-ACT" }));
+		return pelanggaran.data.map((e) => ({ value: e._id, label: e.pelanggaran, className: "State-ACT" }));
 	};
 	};
 
 
 	setKeteranganPelaporan = (e) => {
 	setKeteranganPelaporan = (e) => {
@@ -100,7 +100,7 @@ export class InputData extends Component {
 		formdata.append("number", this.state.pelaporanNumber);
 		formdata.append("number", this.state.pelaporanNumber);
 		formdata.append("pt_id", this.props.query.ptId);
 		formdata.append("pt_id", this.props.query.ptId);
 		formdata.append("description", this.state.keteranganLaporan);
 		formdata.append("description", this.state.keteranganLaporan);
-		formdata.append("pelanggaran_id", this.state.selectedOptionMulti.map((e) => e.value).join());
+		formdata.append("pelanggaran", this.state.selectedOptionMulti.map((e) => e.value).join());
 		if (this.state.files.length > 0) {
 		if (this.state.files.length > 0) {
 			this.state.files.forEach((e) => {
 			this.state.files.forEach((e) => {
 				formdata.append("files", e);
 				formdata.append("files", e);
@@ -108,7 +108,7 @@ export class InputData extends Component {
 		}
 		}
 
 
 		const create = await createPelaporan(formdata);
 		const create = await createPelaporan(formdata);
-		console.log(create);
+		// console.log(create);
 		// await this.props.dispatch(createPelaporan(formdata));
 		// await this.props.dispatch(createPelaporan(formdata));
 		// this.props.dispatch(listPelaporan());
 		// this.props.dispatch(listPelaporan());
 		if (create) {
 		if (create) {

+ 48 - 41
components/Sanksi/Ringkasan.js

@@ -1,7 +1,8 @@
 import Scrollable from "@/components/Common/Scrollable";
 import Scrollable from "@/components/Common/Scrollable";
 import { Card, Row, Col, Table, FormGroup } from "reactstrap";
 import { Card, Row, Col, Table, FormGroup } from "reactstrap";
 
 
-function Ringkasan() {
+function Ringkasan({ dataLaporan, dataSanksi, dataUpload }) {
+	console.log(dataUpload);
 	return (
 	return (
 		<>
 		<>
 			<Row>
 			<Row>
@@ -11,7 +12,7 @@ function Ringkasan() {
 						<FormGroup row>
 						<FormGroup row>
 							<Col md="4">Nomor Laporan:</Col>
 							<Col md="4">Nomor Laporan:</Col>
 							<Col md="8">
 							<Col md="8">
-								<strong>987654</strong>
+								<strong>{dataLaporan._number}</strong>
 							</Col>
 							</Col>
 						</FormGroup>
 						</FormGroup>
 						<FormGroup row>
 						<FormGroup row>
@@ -36,20 +37,14 @@ function Ringkasan() {
 							<Col md="4">Keterangan Laporan:</Col>
 							<Col md="4">Keterangan Laporan:</Col>
 							<Col md="8">
 							<Col md="8">
 								<Scrollable height="100px" className="list-group">
 								<Scrollable height="100px" className="list-group">
-									<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Amet dicta placeat enim illo aspernatur adipisci neque repellendus itaque blanditiis fugit. Quam obcaecati sed perferendis facere.</p>
+									<p>{dataLaporan.description}</p>
 								</Scrollable>
 								</Scrollable>
 							</Col>
 							</Col>
 						</FormGroup>
 						</FormGroup>
 						<FormGroup row>
 						<FormGroup row>
 							<Col md="4">Dibuat Pada:</Col>
 							<Col md="4">Dibuat Pada:</Col>
 							<Col md="8">
 							<Col md="8">
-								<strong>23 Januari 2022</strong>
-							</Col>
-						</FormGroup>
-						<FormGroup row>
-							<Col md="4">Status</Col>
-							<Col md="8">
-								<div className="badge badge-info">Ditindaklanjuti</div>
+								<strong>{moment(dataLaporan.createAt).format("D MMMM YYYY")}</strong>
 							</Col>
 							</Col>
 						</FormGroup>
 						</FormGroup>
 					</form>
 					</form>
@@ -68,30 +63,32 @@ function Ringkasan() {
 								</tr>
 								</tr>
 							</thead>
 							</thead>
 							<tbody>
 							<tbody>
-								<tr>
-									<td>1</td>
-									<td>
-										<div className="media align-items-center">
-											<div className="media-body d-flex">
-												<div>
-													<p>Pengelolaan perguruan tinggi tidak berprinsip nirlaba</p>
-													<p>TMT : 6 Bulan</p>
-													<p>Level Pelanggaran : Berat</p>
+								{dataSanksi.map((e, i) => (
+									<tr>
+										<td>{++i}</td>
+										<td>
+											<div className="media align-items-center">
+												<div className="media-body d-flex">
+													<div>
+														<p>Pengelolaan perguruan tinggi tidak berprinsip nirlaba</p>
+														<p>TMT : 6 Bulan</p>
+														<p>Level Pelanggaran : Berat</p>
+													</div>
 												</div>
 												</div>
 											</div>
 											</div>
-										</div>
-									</td>
-									<td>
-										<div className="media align-items-center">
-											<div className="media-body d-flex">
-												<div>
-													<p>Penghentian pembinaan</p>
-													<p>Keterangan : Penarikan Dosen Pegawai Negeri Sipil yang dipekerjakan</p>
+										</td>
+										<td>
+											<div className="media align-items-center">
+												<div className="media-body d-flex">
+													<div>
+														<p>Penghentian pembinaan</p>
+														<p>Keterangan : Penarikan Dosen Pegawai Negeri Sipil yang dipekerjakan</p>
+													</div>
 												</div>
 												</div>
 											</div>
 											</div>
-										</div>
-									</td>
-								</tr>
+										</td>
+									</tr>
+								))}
 							</tbody>
 							</tbody>
 						</Table>
 						</Table>
 					</Card>
 					</Card>
@@ -104,7 +101,13 @@ function Ringkasan() {
 						<FormGroup row>
 						<FormGroup row>
 							<Col md="4">Nomor Surat:</Col>
 							<Col md="4">Nomor Surat:</Col>
 							<Col md="8">
 							<Col md="8">
-								<strong>987654</strong>
+								<strong>{dataUpload ? dataUpload.nomorSanksi : ""}</strong>
+							</Col>
+						</FormGroup>
+						<FormGroup row>
+							<Col md="4">Keterangan:</Col>
+							<Col md="8">
+								<strong>{dataUpload ? dataUpload.keterangan : ""}</strong>
 							</Col>
 							</Col>
 						</FormGroup>
 						</FormGroup>
 						<FormGroup row>
 						<FormGroup row>
@@ -113,16 +116,20 @@ function Ringkasan() {
 								<Scrollable height="120px" className="list-group">
 								<Scrollable height="120px" className="list-group">
 									<table className="table table-bordered bg-transparent">
 									<table className="table table-bordered bg-transparent">
 										<tbody>
 										<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>
+											{dataUpload
+												? dataUpload.files.map((e) => (
+														<tr>
+															<td>
+																<em className="fa-lg far fa-file-code"></em>
+															</td>
+															<td>
+																<a className="text-muted" href={e.preview} download={e.name}>
+																	{e.name}
+																</a>
+															</td>
+														</tr>
+												  ))
+												: ""}
 										</tbody>
 										</tbody>
 									</table>
 									</table>
 								</Scrollable>
 								</Scrollable>

+ 7 - 10
components/Sanksi/TablePenetapanSanksi.js

@@ -6,7 +6,6 @@ export class TablePenetapanSanksi extends Component {
 	constructor(props) {
 	constructor(props) {
 		super(props);
 		super(props);
 		this.state = {
 		this.state = {
-			checkedData: [],
 			tbljenisPelanggaran: [],
 			tbljenisPelanggaran: [],
 			pelanggaran: null,
 			pelanggaran: null,
 		};
 		};
@@ -18,16 +17,14 @@ export class TablePenetapanSanksi extends Component {
 	};
 	};
 
 
 	onHandleChange = (index) => {
 	onHandleChange = (index) => {
-		const { pelanggaran, checkedData } = this.state;
+		const { pelanggaran } = this.state;
 		this.setState((prevState) => ({
 		this.setState((prevState) => ({
 			...prevState,
 			...prevState,
 			pelanggaran: {
 			pelanggaran: {
 				data: prevState.pelanggaran.data.map((item, i) => (index !== i ? item : { ...item, checked: !pelanggaran.data[index].checked })),
 				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);
+		this.props.setCheckedData(pelanggaran.data.filter((e) => e.checked));
 	};
 	};
 
 
 	render() {
 	render() {
@@ -54,9 +51,9 @@ export class TablePenetapanSanksi extends Component {
 											<div className="media align-items-center">
 											<div className="media align-items-center">
 												<div className="media-body d-flex">
 												<div className="media-body d-flex">
 													<div>
 													<div>
-														<p>{jp.Pelanggaran}</p>
-														<p>TMT : {jp.TMTBulan} Bulan</p>
-														<p>Level Pelanggaran : {jp.LabelSangsi}</p>
+														<p>{jp.pelanggaran}</p>
+														<p>TMT : {jp.tmt_bulan} Bulan</p>
+														<p>Level Pelanggaran : {jp.label_sanksi}</p>
 													</div>
 													</div>
 												</div>
 												</div>
 											</div>
 											</div>
@@ -65,8 +62,8 @@ export class TablePenetapanSanksi extends Component {
 											<div className="media align-items-center">
 											<div className="media align-items-center">
 												<div className="media-body d-flex">
 												<div className="media-body d-flex">
 													<div>
 													<div>
-														<p>{jp.Sangsi}</p>
-														<p>Keterangan : {jp.KeteranganSangsi}</p>
+														<p>{jp.sanksi}</p>
+														<p>Keterangan : {jp.keterangan_sanksi}</p>
 													</div>
 													</div>
 												</div>
 												</div>
 											</div>
 											</div>

+ 8 - 2
components/Sanksi/UploadSurat.js

@@ -34,6 +34,7 @@ export class UploadSurat extends Component {
 			),
 			),
 			stat: "Added " + files.length + " file(s)",
 			stat: "Added " + files.length + " file(s)",
 		});
 		});
+		this.props.setUploadSuratSanksi(this.state);
 	};
 	};
 
 
 	uploadFiles = (e) => {
 	uploadFiles = (e) => {
@@ -42,6 +43,7 @@ export class UploadSurat extends Component {
 		this.setState({
 		this.setState({
 			stat: this.state.files.length ? "Dropzone ready to upload " + this.state.files.length + " file(s)" : "No files added.",
 			stat: this.state.files.length ? "Dropzone ready to upload " + this.state.files.length + " file(s)" : "No files added.",
 		});
 		});
+		this.props.setUploadSuratSanksi(this.state);
 	};
 	};
 
 
 	clearFiles = (e) => {
 	clearFiles = (e) => {
@@ -53,14 +55,17 @@ export class UploadSurat extends Component {
 		this.setState({
 		this.setState({
 			files: [],
 			files: [],
 		});
 		});
+		this.props.setUploadSuratSanksi(this.state);
 	};
 	};
 
 
 	setNomorSanksi = (e) => {
 	setNomorSanksi = (e) => {
 		this.setState({ nomorSanksi: e.target.value });
 		this.setState({ nomorSanksi: e.target.value });
+		this.props.setUploadSuratSanksi(this.state);
 	};
 	};
 
 
 	setKeterangan = (e) => {
 	setKeterangan = (e) => {
 		this.setState({ keterangan: e.target.value });
 		this.setState({ keterangan: e.target.value });
+		this.props.setUploadSuratSanksi(this.state);
 	};
 	};
 
 
 	render() {
 	render() {
@@ -79,10 +84,11 @@ export class UploadSurat extends Component {
 						<Input type="text" value={this.state.nomorSanksi} onChange={this.setNomorSanksi} />
 						<Input type="text" value={this.state.nomorSanksi} onChange={this.setNomorSanksi} />
 					</div>
 					</div>
 				</FormGroup>
 				</FormGroup>
-				<FormGroup row>
+				<FormGroup row className="mt-3">
 					<label className="col-md-2 col-form-label">Keterangan</label>
 					<label className="col-md-2 col-form-label">Keterangan</label>
 					<div className="col-md-10">
 					<div className="col-md-10">
-						<Input type="text" value={this.state.keterangan} onChange={this.setKeterangan} />
+						<Input type="textarea" value={this.state.keterangan} onChange={this.setKeterangan} required />
+						{/* <span className="form-text">Deskripsi pelaporan minimum karakter 50 maksimum 200 karakter</span> */}
 					</div>
 					</div>
 				</FormGroup>
 				</FormGroup>
 				<FormGroup row>
 				<FormGroup row>

+ 37 - 5
pages/app/sanksi/proses.js

@@ -1,5 +1,6 @@
 import React, { Component } from "react";
 import React, { Component } from "react";
 import { Card, CardBody, TabContent, TabPane, Nav, NavItem, NavLink, Button, Row, Col } from "reactstrap";
 import { Card, CardBody, TabContent, TabPane, Nav, NavItem, NavLink, Button, Row, Col } from "reactstrap";
+import Router from "next/router";
 import classnames from "classnames";
 import classnames from "classnames";
 import ContentWrapper from "@/components/Layout/ContentWrapper";
 import ContentWrapper from "@/components/Layout/ContentWrapper";
 import DetailLaporan from "@/components/Main/DetailLaporan";
 import DetailLaporan from "@/components/Main/DetailLaporan";
@@ -10,6 +11,7 @@ import Ringkasan from "@/components/Sanksi/Ringkasan";
 import TablePenetapanSanksi from "@/components/Sanksi/TablePenetapanSanksi";
 import TablePenetapanSanksi from "@/components/Sanksi/TablePenetapanSanksi";
 import Link from "next/link";
 import Link from "next/link";
 import { getPelaporan } from "@/actions/pelaporan";
 import { getPelaporan } from "@/actions/pelaporan";
+import { createSanksi } from "@/actions/sanksi";
 
 
 const stepNavitemStyle = {
 const stepNavitemStyle = {
 	backgroundColor: "#fcfcfc",
 	backgroundColor: "#fcfcfc",
@@ -20,7 +22,8 @@ class ProsesSanksi extends Component {
 		super(props);
 		super(props);
 		this.state = {
 		this.state = {
 			activeStep: "1",
 			activeStep: "1",
-			files: [],
+			checkedData: [],
+			dataUpload: null,
 		};
 		};
 	}
 	}
 
 
@@ -29,6 +32,27 @@ class ProsesSanksi extends Component {
 		return { query, pelaporan };
 		return { query, pelaporan };
 	};
 	};
 
 
+	done = async (e) => {
+		e.preventDefault();
+		const { ptId, number } = this.props.query;
+		const formdata = new FormData();
+		formdata.append("no_sanksi", this.state.dataUpload.nomorSanksi);
+		formdata.append("description", this.state.keteranganLaporan);
+		formdata.append("pelanggaran", this.state.checkedData.map((e) => e._id).join());
+		if (this.state.dataUpload.files.length > 0) {
+			this.state.dataUpload.files.forEach((e) => {
+				formdata.append("files", e);
+			});
+		}
+		const create = await createSanksi({ ptId, number }, formdata);
+		// console.log(create);
+		if (create) {
+			Router.push({
+				pathname: "/app/sanksi",
+			});
+		}
+	};
+
 	toggleStep = (activeStep) => () => {
 	toggleStep = (activeStep) => () => {
 		if (this.state.activeStep !== activeStep) {
 		if (this.state.activeStep !== activeStep) {
 			this.setState({
 			this.setState({
@@ -37,8 +61,17 @@ class ProsesSanksi extends Component {
 		}
 		}
 	};
 	};
 
 
+	setCheckedData = (data) => {
+		this.setState({ checkedData: data });
+	};
+
+	setUploadSuratSanksi = (data) => {
+		this.setState({ dataUpload: data });
+	};
+
 	render() {
 	render() {
 		const { pelaporan } = this.props;
 		const { pelaporan } = this.props;
+		const { checkedData } = this.state;
 		return (
 		return (
 			<ContentWrapper unwrap>
 			<ContentWrapper unwrap>
 				<Header />
 				<Header />
@@ -124,7 +157,6 @@ class ProsesSanksi extends Component {
 											</div>
 											</div>
 											<hr />
 											<hr />
 											<div className="d-flex">
 											<div className="d-flex">
-												{/*<Button color="secondary">Previous</Button>*/}
 												<Button className="ml-auto" color="primary" onClick={this.toggleStep("2")}>
 												<Button className="ml-auto" color="primary" onClick={this.toggleStep("2")}>
 													Next
 													Next
 												</Button>
 												</Button>
@@ -155,7 +187,7 @@ class ProsesSanksi extends Component {
 											<div className="pt-3 mb-3">
 											<div className="pt-3 mb-3">
 												<fieldset>
 												<fieldset>
 													<h2>Penetapan Sanksi</h2>
 													<h2>Penetapan Sanksi</h2>
-													<TablePenetapanSanksi />
+													<TablePenetapanSanksi setCheckedData={this.setCheckedData} />
 												</fieldset>
 												</fieldset>
 											</div>
 											</div>
 											<hr />
 											<hr />
@@ -172,7 +204,7 @@ class ProsesSanksi extends Component {
 											<div className="pt-3 mb-3">
 											<div className="pt-3 mb-3">
 												<fieldset>
 												<fieldset>
 													<h2>Nomor Surat Keputusan Sanksi</h2>
 													<h2>Nomor Surat Keputusan Sanksi</h2>
-													<UploadSurat />
+													<UploadSurat setUploadSuratSanksi={this.setUploadSuratSanksi} />
 												</fieldset>
 												</fieldset>
 											</div>
 											</div>
 											<hr />
 											<hr />
@@ -189,7 +221,7 @@ class ProsesSanksi extends Component {
 											<div className="pt-3 mb-3">
 											<div className="pt-3 mb-3">
 												<fieldset>
 												<fieldset>
 													<h2>Ringkasan</h2>
 													<h2>Ringkasan</h2>
-													<Ringkasan />
+													<Ringkasan dataLaporan={pelaporan.data[0]} dataSanksi={this.state.checkedData} dataUpload={this.state.dataUpload} />
 												</fieldset>
 												</fieldset>
 											</div>
 											</div>
 											<hr />
 											<hr />