yazid138 3 vuotta sitten
vanhempi
commit
c82f1cfa66

+ 2 - 2
actions/pemeriksaan.js

@@ -9,10 +9,10 @@ export const insertPemeriksaan = async ({ number, ptId }, data) => {
 
 		const res = await fetch(`http://localhost:5000/pelaporan/pemeriksaan/create?number=${number}&ptId=${ptId}`, requestOptions);
 		const result = await res.json();
-		addLog({ status: "SUCCESS", action: "ADD", from: { id: result.added._id, data: "pelaporan.penjadwalan.pemeriksaan" }, description: "menambah evaluasi" });
+		addLog({ status: "SUCCESS", action: "ADD", from: { id: result.added._id, data: "pemeriksaan" }, description: "menambah evaluasi" });
 		return result;
 	} catch (error) {
-		addLog({ status: "FAIL", action: "ADD", from: { data: "pelaporan.penjadwalan.pemeriksaan" }, description: error.message || "menambah evaluasi" });
+		addLog({ status: "FAIL", action: "ADD", from: { data: "pemeriksaan" }, description: error.message || "menambah evaluasi" });
 		return false;
 	}
 };

+ 3 - 3
actions/penjadwalan.js

@@ -12,13 +12,13 @@ export const updateJadwal = async ({ number, ptId }, data) => {
 			body: raw,
 			headers: myHeaders,
 		};
-
+		
 		const updated = await fetch(`http://localhost:5000/pelaporan/jadwal/add?number=${number}&ptId=${ptId}`, requestOptions);
 		const result = await updated.json();
-		addLog({ status: "SUCCESS", action: "UPDATE", from: { id: result.added._id, data: "pelaporan.penjadwalan" }, description: "mengubah jadwal pemeriksaan" });
+		addLog({ status: "SUCCESS", action: "UPDATE", from: { id: result.added._id, data: "penjadwalan" }, description: "mengubah jadwal pemeriksaan" });
 		return result;
 	} catch (error) {
-		addLog({ status: "FAIL", action: "UPDATE", from: { data: "pelaporan.penjadwalan" }, description: error.message || "mengubah jadwal pemeriksaan" });
+		addLog({ status: "FAIL", action: "UPDATE", from: { data: "penjadwalan" }, description: error.message || "mengubah jadwal pemeriksaan" });
 		return false;
 	}
 };

+ 34 - 24
components/Extras/calendar.view.js

@@ -33,6 +33,8 @@ class Calendar extends Component {
 			externalEvents: [],
 			dataLaporan: [],
 			dataEvent: [],
+			laporan: {},
+			selectedOption: null,
 		};
 	}
 
@@ -53,7 +55,7 @@ class Calendar extends Component {
 		this.getDataEvent();
 
 		// const cek = this.state.dataLaporan.data.filter((e) => e._number === this.props.query.number && e.pt_id == this.props.query.ptId)[0];
-		// this.setState({ laporan: data[0] });
+		this.setState({ laporan: data[0] });
 		let color = "#" + Math.floor(Math.random() * 16777215).toString(16);
 		if (data[0].penjadwalan) {
 			color = data[0].penjadwalan.background_color;
@@ -106,8 +108,12 @@ class Calendar extends Component {
 		const update = await updateJadwal({ number, ptId }, data);
 	};
 
+	handleChangeSelect = (selectedOption) => {
+		this.setState({ selectedOption });
+	};
+
 	render() {
-		const { externalEvents, dataLaporan } = this.state;
+		const { externalEvents, laporan, selectedOption } = this.state;
 		return (
 			<ContentWrapper>
 				<div className="content-heading">
@@ -126,28 +132,32 @@ class Calendar extends Component {
 						<div className="col-xl-4 col-lg-5">
 							<div className="row">
 								<div className="col-lg-12 col-md-6 col-12">
-									<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>
-									{dataLaporan.data ? <DetailLaporan data={dataLaporan.data[0]} /> : ""}
+									{selectedOption && 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 ? <DetailLaporan data={laporan} handleChangeSelect={this.handleChangeSelect} /> : ""}
 								</div>
 							</div>
 						</div>

+ 1 - 4
components/Main/TableLaporan.js

@@ -22,12 +22,9 @@ function TableLaporan({ listData, to, linkName, status = false }) {
 							{listData.map((data) => {
 								return (
 									<tr key={data._id}>
-										<td>BI:{data._number}</td>
+										<td>{data._number}</td>
 										<td className="text-nowrap">
 											<div className="media align-items-center">
-												{/* <a className="mr-3" href="">
-											<img className="img-fluid rounded thumb64" src="/static/img/dummy-search.png" alt="Dummy" />
-										</a> */}
 												<div className="media-body d-flex">
 													<div>
 														<h4 className="m-0">Universitas Satyagama</h4>

+ 50 - 31
components/Main/TableSanksi.js

@@ -1,41 +1,60 @@
 import Datatable from "@/components/Tables/Datatable";
+import { Button } from "reactstrap";
 import Link from "next/link";
 import moment from "moment";
 
 function TableSanksi({ listData, to, linkName }) {
 	return (
-		<Datatable options={{ responsive: true }}>
-			<table className="table w-100">
-				<thead>
-					<tr>
-						<th>Nomor Sanksi</th>
-						<th>Deskrispsi</th>
-						<th>Created</th>
-						<th></th>
-					</tr>
-				</thead>
-				<tbody>
-					{listData.data.map((data) => {
-						return (
-							<tr key={data._id}>
-								<td>{data._number}</td>
-								<td>{data.deskripsi}</td>
-								<td>{moment(data.created_at).fromNow()}</td>
-								<td>
-									<div className="ml-auto">
-										<Link href={`${to}/ptId=${data.ptId}&number=${data.number}`}>
-											<button class="btn-oval btn btn-primary" size="sm">
-												{linkName}
-											</button>
-										</Link>
-									</div>
-								</td>
+		<div className="card b">
+			<div className="card-body">
+				<Datatable options={{ responsive: true }}>
+					<table className="table w-100">
+						<thead>
+							<tr>
+								<th>Nomor Sanksi</th>
+								<th>Deskrispsi</th>
+								<th>Created</th>
+								<th></th>
 							</tr>
-						);
-					})}
-				</tbody>
-			</table>
-		</Datatable>
+						</thead>
+						<tbody>
+							{listData.map((data) => {
+								return (
+									<tr key={data._id}>
+										<td>{data._noSanksi}</td>
+										<td>
+											<div className="media align-items-center">
+												<div className="media-body d-flex">
+													<div>
+														<h4 className="m-0">Universitas Satyagama</h4>
+														<p>{data.description}</p>
+													</div>
+												</div>
+											</div>
+										</td>
+										<td>{moment(data.createdAt).fromNow()}</td>
+										<td>
+											<div className="ml-auto">
+												<Link
+													href={{
+														pathname: to,
+														query: { noSanksi: data._noSanksi },
+													}}
+												>
+													<Button color="primary" size="sm">
+														{linkName}
+													</Button>
+												</Link>
+											</div>
+										</td>
+									</tr>
+								);
+							})}
+						</tbody>
+					</table>
+				</Datatable>
+			</div>
+		</div>
 	);
 }
 

+ 51 - 53
components/Pelaporan/InputData.js

@@ -127,60 +127,58 @@ export class InputData extends Component {
 			</Col>
 		));
 		return (
-
-				
-				<form className="form-horizontal" method="get" action="/" onSubmit={this.onSubmit}>
-					<FormGroup row>
-						<label className="col-md-2 col-form-label">Nomor Pelaporan</label>
-						<div className="col-md-10">
-							<Input type="text" disabled value={this.state.pelaporanNumber} />
-							<span className="form-text">Nomor pelaporan akan digenerate otomatis dari sistem</span>
-						</div>
-					</FormGroup>
-					<FormGroup row>
-						<label className="col-md-2 col-form-label">Jenis Pelanggaran</label>
-						<div className="col-md-10">
-							<Select instanceId={selectInstanceId + 1} isMulti value={selectedOptionMulti} onChange={this.handleChangeSelectMulti} options={pelanggaran.data ? this.optionsJenisPelanggaran(pelanggaran) : []} required />
-							<span className="form-text">Pilih Jenis Pelanggaran</span>
-						</div>
-					</FormGroup>
-					<FormGroup row>
-						<label className="col-md-2 col-form-label">Keterangan Laporan</label>
-						<div className="col-md-10">
-							<Input type="textarea" value={this.state.keteranganLaporan} onChange={this.setKeteranganPelaporan} required />
-							<span className="form-text">Deskripsi pelaporan minimum karakter 50 maksimum 200 karakter</span>
-						</div>
-					</FormGroup>
-					<FormGroup row>
-						<label className="col-md-2 col-form-label">Upload File Pendukung</label>
-						<div className="col-md-10">
-							<DropzoneWrapper className="" onDrop={this.onDrop}>
-								{({ getRootProps, getInputProps, isDragActive }) => {
-									return (
-										<div {...getRootProps()} className={"dropzone card p-3 " + (isDragActive ? "dropzone-drag-active" : "")}>
-											<input {...getInputProps()} />
-											<div className="dropzone-previews flex">{this.state.files.length > 0 ? <Row>{thumbs}</Row> : <div className="text-center dz-default dz-message">Drop files here to upload</div>}</div>
-											<div className="d-flex align-items-center">
-												<small className="ml-auto">
-													<button type="button" className="btn btn-link" onClick={this.clearFiles}>
-														Clear files
-													</button>
-												</small>
-											</div>
+			<form className="form-horizontal" method="get" action="/" onSubmit={this.onSubmit}>
+				<FormGroup row>
+					<label className="col-md-2 col-form-label">Nomor Pelaporan</label>
+					<div className="col-md-10">
+						<Input type="text" disabled value={this.state.pelaporanNumber} />
+						<span className="form-text">Nomor pelaporan akan digenerate otomatis dari sistem</span>
+					</div>
+				</FormGroup>
+				<FormGroup row>
+					<label className="col-md-2 col-form-label">Jenis Pelanggaran</label>
+					<div className="col-md-10">
+						<Select instanceId={selectInstanceId + 1} isMulti value={selectedOptionMulti} onChange={this.handleChangeSelectMulti} options={pelanggaran.data ? this.optionsJenisPelanggaran(pelanggaran) : []} required />
+						<span className="form-text">Pilih Jenis Pelanggaran</span>
+					</div>
+				</FormGroup>
+				<FormGroup row>
+					<label className="col-md-2 col-form-label">Keterangan Laporan</label>
+					<div className="col-md-10">
+						<Input type="textarea" value={this.state.keteranganLaporan} onChange={this.setKeteranganPelaporan} required />
+						<span className="form-text">Deskripsi pelaporan minimum karakter 50 maksimum 200 karakter</span>
+					</div>
+				</FormGroup>
+				<FormGroup row>
+					<label className="col-md-2 col-form-label">Upload File Pendukung</label>
+					<div className="col-md-10">
+						<DropzoneWrapper className="" onDrop={this.onDrop}>
+							{({ getRootProps, getInputProps, isDragActive }) => {
+								return (
+									<div {...getRootProps()} className={"dropzone card p-3 " + (isDragActive ? "dropzone-drag-active" : "")}>
+										<input {...getInputProps()} />
+										<div className="dropzone-previews flex">{this.state.files.length > 0 ? <Row>{thumbs}</Row> : <div className="text-center dz-default dz-message">Drop files here to upload</div>}</div>
+										<div className="d-flex align-items-center">
+											<small className="ml-auto">
+												<button type="button" className="btn btn-link" onClick={this.clearFiles}>
+													Clear files
+												</button>
+											</small>
 										</div>
-									);
-								}}
-							</DropzoneWrapper>
-						</div>
-					</FormGroup>
-					<FormGroup row>
-						<div className="col-xl-10">
-							<button className="btn btn-sm btn-primary" type="submit">
-								Submit Laporan
-							</button>
-						</div>
-					</FormGroup>
-				</form>
+									</div>
+								);
+							}}
+						</DropzoneWrapper>
+					</div>
+				</FormGroup>
+				<FormGroup row>
+					<div className="col-xl-10">
+						<button className="btn btn-sm btn-primary" type="submit">
+							Submit Laporan
+						</button>
+					</div>
+				</FormGroup>
+			</form>
 		);
 	}
 }

+ 4 - 3
components/Penjadwalan/DetailLaporan.js

@@ -13,6 +13,7 @@ export class DetailLaporan extends Component {
 	}
 
 	handleChangeSelect = (selectedOption) => {
+		this.props.handleChangeSelect(selectedOption);
 		this.setState({ selectedOption });
 	};
 
@@ -36,9 +37,9 @@ export class DetailLaporan extends Component {
 										value={this.state.selectedOption}
 										onChange={this.handleChangeSelect}
 										options={[
-											{ value: "ditolak", label: "Ditindaklanjuti Dikti Ristek", className: "State-ACT" },
-											{ value: "mengubah sanksi", label: "Delegasi ke lldikti", className: "State-ACT" },
-											{ value: "mencabut sanksi", label: "Ditutup", className: "State-ACT" },
+											{ value: "ditindaklanjuti", label: "Ditindaklanjuti Dikti Ristek", className: "State-ACT" },
+											{ value: "delegasi", label: "Delegasi ke LLDIKTI", className: "State-ACT" },
+											{ value: "ditutup", label: "Ditutup", className: "State-ACT" },
 										]}
 										required
 									/>

+ 19 - 2
components/Sanksi/UploadSurat.js

@@ -20,6 +20,8 @@ export class UploadSurat extends Component {
 		super(props);
 		this.state = {
 			files: [],
+			nomorSanksi: "",
+			keterangan: "",
 		};
 	}
 
@@ -52,6 +54,15 @@ export class UploadSurat extends Component {
 			files: [],
 		});
 	};
+
+	setNomorSanksi = (e) => {
+		this.setState({ nomorSanksi: e.target.value });
+	};
+
+	setKeterangan = (e) => {
+		this.setState({ keterangan: e.target.value });
+	};
+
 	render() {
 		const { files } = this.state;
 
@@ -63,13 +74,19 @@ export class UploadSurat extends Component {
 		return (
 			<form className="form-horizontal" method="get" action="/" onSubmit={this.onSubmit}>
 				<FormGroup row>
-					<label className="col-md-2 col-form-label">Nomor Surat</label>
+					<label className="col-md-2 col-form-label">Nomor Surat:</label>
 					<div className="col-md-10">
 						<Input type="text" value={this.state.nomorSanksi} onChange={this.setNomorSanksi} />
 					</div>
 				</FormGroup>
 				<FormGroup row>
-					<label className="col-md-2 col-form-label">Dokumen Surat Sanksi</label>
+					<label className="col-md-2 col-form-label">Keterangan</label>
+					<div className="col-md-10">
+						<Input type="text" value={this.state.keterangan} onChange={this.setKeterangan} />
+					</div>
+				</FormGroup>
+				<FormGroup row>
+					<label className="col-md-2 col-form-label">Dokumen Surat Sanksi:</label>
 					<div className="col-md-10">
 						<DropzoneWrapper className="" onDrop={this.onDrop}>
 							{({ getRootProps, getInputProps, isDragActive }) => {

+ 7 - 146
pages/app/keberatan/index.js

@@ -1,12 +1,8 @@
 import React, { Component } from "react";
-import Router from "next/router";
 import ContentWrapper from "@/components/Layout/ContentWrapper";
-import { Row, Col, Progress, Button } from "reactstrap";
-import { getPelaporan } from "../../../actions/pelaporan";
-
-import Sparkline from "@/components/Common/Sparklines";
-import Datatable from "@/components/Tables/Datatable";
-import moment from "moment";
+import { Row, Col } from "reactstrap";
+import CaseProgress from "@/components/Main/CaseProgress";
+import TableSanksi from "@/components/Main/TableSanksi";
 
 class Keberatan extends Component {
 	constructor(props) {
@@ -14,154 +10,19 @@ class Keberatan extends Component {
 	}
 
 	static getInitialProps = async () => {
-		const pelaporan = await getPelaporan();
-		return { pelaporan };
-	};
-
-	newReportClick = (e) => {
-		e.preventDefault();
-		Router.push({
-			pathname: "/app/pelaporan/search",
-		});
-	};
-
-	detailKeberatanClick = (e, ptId, number) => {
-		e.preventDefault();
-		Router.push({
-			pathname: "/app/keberatan/detail",
-		});
+		return {};
 	};
 
 	render() {
-		const { pelaporan } = this.props;
+		const { sanksi } = this.props;
 		return (
 			<ContentWrapper>
 				<div className="content-heading">Keberatan</div>
 				<Row>
 					<Col lg="4">
-						<div className="card b">
-							<div className="card-body bb">
-								<p>Overvall progress</p>
-								<div className="d-flex align-items-center mb-2">
-									<div className="w-100">
-										<Progress className="progress-xs m0" color="info" value={20} />
-									</div>
-									<div className="ml-auto">
-										<div className="col wd-xxs text-right">
-											<div className="text-bold text-muted">20%</div>
-										</div>
-									</div>
-								</div>
-							</div>
-							<div className="card-body">
-								<p>Metrics</p>
-								<div className="row text-center">
-									<div className="col-6 col-lg-6 col-xl-6">
-										<Sparkline
-											values={[20, 80]}
-											options={{
-												type: "pie",
-												height: "50",
-												sliceColors: ["#edf1f2", "#23b7e5"],
-											}}
-											className="sparkline"
-										/>
-										<p className="mt-3">Open Case</p>
-									</div>
-									<div className="col-6 col-lg-6 col-xl-6">
-										<Sparkline
-											values={[80, 20]}
-											options={{
-												type: "pie",
-												height: "50",
-												sliceColors: ["#edf1f2", "#27c24c"],
-											}}
-											className="sparkline"
-										/>
-										<p className="mt-3">Close Case</p>
-									</div>
-								</div>
-							</div>
-							<table className="table bb">
-								<tbody>
-									<tr>
-										<td>
-											<strong>Open Case</strong>
-										</td>
-										<td>80</td>
-									</tr>
-									<tr>
-										<td>
-											<strong>Close Case</strong>
-										</td>
-										<td>20</td>
-									</tr>
-									<tr>
-										<td>
-											<strong>Performance</strong>
-										</td>
-										<td>
-											<em className="far fa-smile fa-lg text-warning"></em>
-										</td>
-									</tr>
-									<tr>
-										<td>
-											<strong>Last Case Closed</strong>
-										</td>
-										<td>BI:1107 - 12/01/2016</td>
-									</tr>
-								</tbody>
-							</table>
-						</div>
-					</Col>
-					<Col lg="8">
-						<div className="card b">
-							<div className="card-body">
-								<Datatable options={{ responsive: true }}>
-									<table className="table w-100">
-										<thead>
-											<tr>
-												<th>#ID</th>
-												<th>Description</th>
-												<th>Created</th>
-												<th>Status</th>
-											</tr>
-										</thead>
-										<tbody>
-											{pelaporan.data.map((value) => {
-												return (
-													<tr key={value._id}>
-														<td>BI:{value._number}</td>
-														<td className="text-nowrap">
-															<div className="media align-items-center">
-																<img className="img-fluid rounded thumb64" src="/static/img/dummy-search.png" alt="Dummy" />
-																<div className="media-body d-flex">
-																	<div>
-																		<h4 className="m-0">Universitas Satyagama</h4>
-																		<small className="text-muted">0742/O/1990 - www.satyagama.ac.id - info@satyagama.ac.id</small>
-																		<p>{value.description}</p>
-																	</div>
-																</div>
-															</div>
-														</td>
-														<td>{moment(value.createdAt).fromNow()}</td>
-														{/* <td>
-															<div className="inline wd-xxs badge badge-success">open</div>
-														</td> */}
-														<td>
-															<Button color="primary" onClick={(e) => this.detailKeberatanClick(e, value.pt_id, value.number)}>
-																Detail
-															</Button>
-														</td>
-													</tr>
-												);
-											})}
-										</tbody>
-									</table>
-								</Datatable>
-							</div>
-						</div>
+						<CaseProgress />
 					</Col>
+					<Col lg="8">{/* <TableSanksi listData={sanksi.data} to="/app/keberatan/detail" linkName="Detail" /> */}</Col>
 				</Row>
 			</ContentWrapper>
 		);

+ 0 - 1
pages/app/pemantauan/timeline.js

@@ -40,7 +40,6 @@ const containerStyle = {
 	height: "155px",
 };
 
-import FormWizardVertical from "../pt.wizard.vertical.js";
 
 var jenisPelanggaran = [];
 

+ 0 - 2
pages/app/pt/pemantauan.js

@@ -40,8 +40,6 @@ const containerStyle = {
 	height: "155px",
 };
 
-import FormWizardVertical from "../pt.wizard.vertical.js";
-
 var jenisPelanggaran = [];
 
 //const qpt_id = {};