yazid138 vor 3 Jahren
Ursprung
Commit
1ce4a7de3d

+ 15 - 1
actions/pelaporan.js

@@ -5,7 +5,7 @@ export const getPelaporan = async (query = {}) => {
 	try {
 		let url = "/pelaporan";
 		if (query != null) {
-			const { number, ptId, penjadwalan, pemeriksaan, active } = query;
+			const { number, ptId, penjadwalan, pemeriksaan, active, role, orgId } = query;
 			url += "?";
 			const parseURL = [];
 			if (number) parseURL.push(`number=${number}`);
@@ -13,6 +13,10 @@ export const getPelaporan = async (query = {}) => {
 			if (penjadwalan) parseURL.push(`penjadwalan=true`);
 			if (pemeriksaan) parseURL.push(`pemeriksaan=true`);
 			if (active) parseURL.push(`active=${active}`);
+			if (role) {
+				parseURL.push(`role=${role}`);
+				if (role === "lldikti" && orgId) parseURL.push(`orgId=${orgId}`);
+			}
 			url += parseURL.join("&");
 		}
 
@@ -73,3 +77,13 @@ export const activeLaporan = async ({ number, ptId }) => {
 		return false;
 	}
 };
+
+export const changeRoleData = async ({ number, ptId }, data) => {
+	try {
+		const res = await post(`/pelaporan/change-role-data?number=${number}&ptId=${ptId}`, data);
+		return res.data;
+	} catch (error) {
+		console.log("error", error);
+		return false;
+	}
+};

+ 39 - 10
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, addStatus, removeLaporan, activeLaporan } from "@/actions/pelaporan";
+import { Card, CardBody, CardHeader, CardTitle, Button } from "reactstrap";
+import { getPelaporan, addStatus, removeLaporan, activeLaporan, changeRoleData } from "@/actions/pelaporan";
 import { updateJadwal } from "@/actions/penjadwalan";
 import DetailLaporan from "@/components/Main/DetailLaporan";
 import Link from "next/link";
@@ -14,12 +14,19 @@ import bootstrapPlugin from "@fullcalendar/bootstrap";
 import events from "./calendar.events";
 import Select from "react-select";
 import moment from "moment";
+import { connect } from "react-redux";
 
 const status = [
-	{ value: "Ditindaklanjuti Dikti Ristek", label: "Ditindaklanjuti Dikti Ristek", className: "State-ACT" },
+	{ value: "Ditindaklanjuti DIKTI", label: "Ditindaklanjuti DIKTI", className: "State-ACT" },
 	{ value: "Delegasi ke LLDIKTI", label: "Delegasi ke LLDIKTI", className: "State-ACT" },
 	{ value: "Ditutup", label: "Ditutup", className: "State-ACT" },
 ];
+
+const statusLLDIKTI = [
+	{ value: "Ditindaklanjuti LLDIKTI", label: "Ditindaklanjuti LLDIKTI", className: "State-ACT" },
+	{ value: "Delegasi ke DIKTI", label: "Delegasi ke DIKTI", className: "State-ACT" },
+	{ value: "Ditutup", label: "Ditutup", className: "State-ACT" },
+];
 class Calendar extends Component {
 	calendarEvents = events;
 
@@ -58,7 +65,12 @@ class Calendar extends Component {
 			},
 		});
 
-		const dataLaporan = await getPelaporan({ penjadwalan: true, active: true });
+		const { organisasi, peran } = this.props.user.peran[0];
+
+		const queryDataLaporan = { role: peran.id === 2021 ? "lldikti" : "dikti", penjadwalan: true, active: true };
+		if (peran.id === 2021) queryDataLaporan.orgId = organisasi.id;
+		const dataLaporan = await getPelaporan(queryDataLaporan);
+
 		const laporan = await getPelaporan({ number: this.props.query.number, ptId: this.props.query.ptId });
 
 		this.setState({ dataLaporan });
@@ -73,6 +85,8 @@ class Calendar extends Component {
 		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 }] });
 	}
 
+	getStatus = () => (this.props.user.peran[0].peran.id === 2021 ? statusLLDIKTI : status);
+
 	getDataEvent = () => {
 		const dataEvent = this.state.dataLaporan.data
 			.filter((e) => e.penjadwalan)
@@ -122,6 +136,7 @@ class Calendar extends Component {
 
 	defaultStatus = async (data) => {
 		const { ptId, number } = this.props.query;
+		const status = this.getStatus();
 		if (!data.status) {
 			await addStatus({ number, ptId }, { status: status[0].value });
 			return this.setState({ selectedOption: status[0] });
@@ -129,15 +144,25 @@ class Calendar extends Component {
 		return this.setState({ selectedOption: status.filter((e) => e.value === data.status)[0] });
 	};
 
-	handleChangeSelect = async (selectedOption) => {
+	handleChangeSelect = (selectedOption) => this.setState({ selectedOption });
+
+	handleSimpan = async (e) => {
+		const { selectedOption } = this.state;
 		const { ptId, number } = this.props.query;
 		this.setState({ selectedOption });
-		await addStatus({ number, ptId }, { status: selectedOption.value });
-		if (selectedOption.value === "Ditutup") {
+		if (selectedOption.value === this.getStatus()[1].value) {
+			const roleId = this.props.user.peran[0].peran.id;
+			await changeRoleData({ number, ptId }, { role_data: roleId === 2021 ? "dikti" : "lldikti" });
+			const statusData = roleId === 2021 ? status : statusLLDIKTI;
+			await addStatus({ number, ptId }, { status: statusData[0].value });
+			return;
+		}
+		if (selectedOption.value === this.getStatus()[2].value) {
 			await removeLaporan({ number, ptId });
 		} else if (!this.state.laporan.data[0].active) {
 			await activeLaporan({ number, ptId });
 		}
+		await addStatus({ number, ptId }, { status: selectedOption.value });
 	};
 
 	render() {
@@ -169,10 +194,13 @@ class Calendar extends Component {
 											<CardTitle tag="h4">Status Pelaporan</CardTitle>
 										</CardHeader>
 										<CardBody>
-											<Select value={selectedOption} onChange={this.handleChangeSelect} options={status} required />
+											<Select value={selectedOption} onChange={this.handleChangeSelect} options={this.getStatus()} required />
+											<Button onClick={this.handleSimpan} className="mt-2" color="primary" block>
+												Simpan
+											</Button>
 										</CardBody>
 									</Card>
-									{selectedOption?.value === "Ditutup" ? (
+									{selectedOption?.value === this.getStatus()[2].value || selectedOption?.value === this.getStatus()[1].value ? (
 										""
 									) : (
 										<>
@@ -268,4 +296,5 @@ class Calendar extends Component {
 	}
 }
 
-export default Calendar;
+const mapStateToProps = (state) => ({ user: state.user });
+export default connect(mapStateToProps)(Calendar);

+ 60 - 0
components/Layout/MenuLLDIKTI.js

@@ -0,0 +1,60 @@
+const Menu = [
+	{
+		heading: "Main Navigation",
+		translate: "sidebar.heading.HEADER",
+	},
+	{
+		name: "Pemantauan",
+		path: "/app/pemantauan",
+		icon: "icon-notebook",
+		translate: "sidebar.nav.PEMANTAUAN",
+	},
+	{
+		name: "Pelaporan",
+		path: "/app/pelaporan",
+		icon: "icon-notebook",
+		translate: "sidebar.nav.PELAPORAN",
+	},
+	{
+		name: "Penjadwalan Evaluasi",
+		path: "/app/penjadwalan",
+		icon: "icon-notebook",
+		translate: "sidebar.nav.PENJADWALAN",
+	},
+	{
+		name: "Pemeriksaan",
+		path: "/app/pemeriksaan",
+		icon: "icon-notebook",
+		translate: "sidebar.nav.PEMERIKSAAN",
+	},
+	{
+		name: "Sanksi",
+		path: "/app/sanksi",
+		icon: "icon-notebook",
+		translate: "sidebar.nav.SANKSI",
+	},
+	{
+		heading: "Dikti Ristek/LLDIKTI",
+		translate: "sidebar.heading.DIKTI_RISTEK",
+	},
+	{
+		name: "Keberatan",
+		path: "/app/keberatan",
+		icon: "icon-notebook",
+		translate: "sidebar.nav.KEBERATAN",
+	},
+	{
+		name: "Pencabutan Sanksi",
+		path: "/app/pencabutan-sanksi",
+		icon: "icon-notebook",
+		translate: "sidebar.nav.PENCABUTAN_SANKSI",
+	},
+	{
+		name: "Pemantauan Perbaikan",
+		path: "/app/pemantauan-perbaikan",
+		icon: "icon-notebook",
+		translate: "sidebar.nav.PEMANTAUAN_PERBAIKAN",
+	},
+];
+
+export default Menu;

+ 2 - 1
components/Layout/Sidebar.js

@@ -13,6 +13,7 @@ import SidebarUserBlock from "./SidebarUserBlock";
 // import { getUser } from "@/actions/auth";
 
 import Menu from "./Menu.js";
+import MenuLLDIKTI from "./MenuLLDIKTI.js";
 import MenuPT from "./MenuPT.js";
 // localStorage.getItem("user");
 // import Menu from './MenuPT.js';
@@ -147,7 +148,7 @@ class Sidebar extends Component {
 	async componentDidMount() {
 		// const user = await getUser();
 		const user = this.props.user;
-		this.menu = user.peran[0].peran.id === 2022 ? MenuPT : Menu;
+		this.menu = user.peran[0].peran.id === 2022 ? MenuPT : user.peran[0].peran.id === 2021 ? MenuLLDIKTI : Menu;
 		// prepare the flags to handle menu collapsed states
 		this.buildCollapseList();
 

+ 2 - 0
components/Pelaporan/InputData.js

@@ -104,6 +104,8 @@ export class InputData extends Component {
 		formdata.append("pt_id", this.props.query.ptId);
 		formdata.append("description", this.state.keteranganLaporan);
 		formdata.append("is_public", false);
+		if (user.peran[0].peran.id === 2021) 
+			formdata.append("role_data", "lldikti");
 		formdata.append("pelanggaran", this.state.selectedOptionMulti.map((e) => e.value).join());
 		if (this.state.files.length > 0) {
 			this.state.files.forEach((e) => {

+ 1 - 0
components/Pemeriksaan/TableRiwayat.js

@@ -25,6 +25,7 @@ function TableRiwayat({ data }) {
 										<a className="text-muted" href={`data:${e.type};base64, ${Buffer.from(e.data).toString("base64")}`} download={e.name}>
 											{e.name}
 										</a>
+										<br />
 									</>
 								))}
 							</td>

+ 5 - 1
components/Sanksi/TablePenetapanSanksi.js

@@ -1,6 +1,7 @@
 import React, { Component } from "react";
 import { Card, Table } from "reactstrap";
 import { getPelanggaran } from "@/actions/pelanggaran";
+import { connect } from "react-redux";
 
 export class TablePenetapanSanksi extends Component {
 	checkedData = [];
@@ -14,7 +15,9 @@ export class TablePenetapanSanksi extends Component {
 	}
 
 	componentDidMount = async () => {
+		const { user } = this.props;
 		const pelanggaran = await getPelanggaran();
+		if (user.peran[0].peran.id === 2021) pelanggaran.data = pelanggaran.data.filter((e) => e.level_sanksi === 1);
 		this.setState({ pelanggaran });
 	};
 
@@ -85,4 +88,5 @@ export class TablePenetapanSanksi extends Component {
 	}
 }
 
-export default TablePenetapanSanksi;
+const mapStateToProps = (state) => ({ user: state.user });
+export default connect(mapStateToProps)(TablePenetapanSanksi);

+ 0 - 4
pages/app/index.js

@@ -18,10 +18,6 @@ const menu = [
 		title: "Pemantauan",
 		path: "/pemantauan",
 	},
-	{
-		title: "Login",
-		path: "/login",
-	},
 ];
 class App extends Component {
 	constructor(props) {

+ 7 - 2
pages/app/pelaporan/index.js

@@ -5,6 +5,7 @@ import { Row, Col, Button } from "reactstrap";
 import { getPelaporan } from "@/actions/pelaporan";
 import CaseProgress from "@/components/Main/CaseProgress";
 import TableLaporan from "@/components/Main/TableLaporan";
+import { connect } from "react-redux";
 
 class Pelaporan extends Component {
 	constructor(props) {
@@ -17,7 +18,10 @@ class Pelaporan extends Component {
 	}
 
 	componentDidMount = async () => {
-		const pelaporan = await getPelaporan();
+		const { organisasi, peran } = this.props.user.peran[0];
+		const query = { role: peran.id === 2021 ? "lldikti" : "dikti" };
+		if (peran.id === 2021) query.orgId = organisasi.id;
+		const pelaporan = await getPelaporan(query);
 		this.setState({ pelaporan });
 	};
 
@@ -46,4 +50,5 @@ class Pelaporan extends Component {
 	}
 }
 
-export default Pelaporan;
+const mapStateToProps = (state) => ({ user: state.user });
+export default connect(mapStateToProps)(Pelaporan);

+ 7 - 2
pages/app/pemeriksaan/index.js

@@ -4,6 +4,7 @@ import { Row, Col } from "reactstrap";
 import { getPelaporan } from "@/actions/pelaporan";
 import CaseProgress from "@/components/Main/CaseProgress";
 import TableLaporan from "@/components/Main/TableLaporan";
+import { connect } from "react-redux";
 
 class Pemeriksaan extends Component {
 	constructor(props) {
@@ -14,7 +15,10 @@ class Pemeriksaan extends Component {
 	}
 
 	componentDidMount = async () => {
-		const pelaporan = await getPelaporan({ penjadwalan: true, active: true });
+		const { organisasi, peran } = this.props.user.peran[0];
+		const query = { role: peran.id === 2021 ? "lldikti" : "dikti", penjadwalan: true, active: true };
+		if (peran.id === 2021) query.orgId = organisasi.id;
+		const pelaporan = await getPelaporan(query);
 		this.setState({ pelaporan });
 	};
 
@@ -36,4 +40,5 @@ class Pemeriksaan extends Component {
 	}
 }
 
-export default Pemeriksaan;
+const mapStateToProps = (state) => ({ user: state.user });
+export default connect(mapStateToProps)(Pemeriksaan);

+ 7 - 2
pages/app/penjadwalan/index.js

@@ -4,6 +4,7 @@ import { Row, Col } from "reactstrap";
 import { getPelaporan } from "@/actions/pelaporan";
 import CaseProgress from "@/components/Main/CaseProgress";
 import TableLaporan from "@/components/Main/TableLaporan";
+import { connect } from "react-redux";
 
 class Penjadwalan extends Component {
 	constructor(props) {
@@ -14,7 +15,10 @@ class Penjadwalan extends Component {
 	}
 
 	componentDidMount = async () => {
-		const pelaporan = await getPelaporan();
+		const { organisasi, peran } = this.props.user.peran[0];
+		const query = { role: peran.id === 2021 ? "lldikti" : "dikti" };
+		if (peran.id === 2021) query.orgId = organisasi.id;
+		const pelaporan = await getPelaporan(query);
 		this.setState({ pelaporan });
 	};
 
@@ -36,4 +40,5 @@ class Penjadwalan extends Component {
 	}
 }
 
-export default Penjadwalan;
+const mapStateToProps = (state) => ({ user: state.user });
+export default connect(mapStateToProps)(Penjadwalan);

+ 2 - 1
pages/app/pt/jawaban-keberatan/detail.js

@@ -60,6 +60,7 @@ class JawabanKeberatan extends Component {
 											{sanksi?.data && <DetailSanksi data={sanksi.data[0]} />}
 											{sanksi?.data && <DetailJawaban data={sanksi.data[0]} />}
 											{sanksi?.data &&
+												sanksi.data[0].sanksi.keberatan.jawaban.status !== "Membatalkan Keputusan" &&
 												(new Date(sanksi.data[0].sanksi.close_banding).getTime() > Date.now() ? (
 													<>
 														<p>
@@ -81,7 +82,7 @@ class JawabanKeberatan extends Component {
 						<Col xl="3">{this.props.pt && <DetailPT data={this.props.pt[0]} />}</Col>
 					</Row>
 					<Row>
-						<Col>{sanksi?.data && <Riwayat data={sanksi.data[0]} />}</Col>
+						<Col>{sanksi?.data && sanksi.data[0].sanksi.keberatan.jawaban.status !== "Membatalkan Keputusan" && <Riwayat data={sanksi.data[0]} />}</Col>
 					</Row>
 				</div>
 			</ContentWrapper>

+ 7 - 2
pages/app/sanksi/index.js

@@ -4,6 +4,7 @@ import { Row, Col } from "reactstrap";
 import { getPelaporan } from "@/actions/pelaporan";
 import CaseProgress from "@/components/Main/CaseProgress";
 import TableLaporan from "@/components/Sanksi/TableLaporan";
+import { connect } from "react-redux";
 
 class Sanksi extends Component {
 	constructor(props) {
@@ -14,7 +15,10 @@ class Sanksi extends Component {
 	}
 
 	componentDidMount = async () => {
-		const pelaporan = await getPelaporan({ pemeriksaan: true, active: true });
+		const { organisasi, peran } = this.props.user.peran[0];
+		const query = { role: peran.id === 2021 ? "lldikti" : "dikti", pemeriksaan: true, active: true };
+		if (peran.id === 2021) query.orgId = organisasi.id;
+		const pelaporan = await getPelaporan(query);
 		this.setState({ pelaporan });
 	};
 
@@ -36,4 +40,5 @@ class Sanksi extends Component {
 	}
 }
 
-export default Sanksi;
+const mapStateToProps = (state) => ({ user: state.user });
+export default connect(mapStateToProps)(Sanksi);

+ 9 - 9
pages/laporan/new/index.js

@@ -33,10 +33,6 @@ const menu = [
 		title: "Pemantauan",
 		path: "/pemantauan",
 	},
-	{
-		title: "Login",
-		path: "/login",
-	},
 ];
 const selectInstanceId = 1;
 class App extends Component {
@@ -101,9 +97,14 @@ class App extends Component {
 		e.preventDefault();
 		const { nama } = this.state;
 		const user_id = await this.createUser();
-		await this.createLaporan(user_id, nama);
-		await this.sendNotif();
-		Router.push("/laporan/new");
+		if (user_id) {
+			const laporan = await this.createLaporan(user_id, nama);
+			if (laporan) {
+				await this.sendNotif();
+				Router.push("/laporan/new");
+			}
+		}
+
 		// validasi
 		// if (nama === '')  msgError.push({nama: 'Wajib diisi'})
 	};
@@ -133,9 +134,8 @@ class App extends Component {
 		const { pelaporanNumber, selectedPerguruanTinggi, keteranganLaporan, selectedJenis, files } = this.state;
 		const formdata = new FormData();
 		formdata.append("number", pelaporanNumber);
-		formdata.append("user_id", user_id);
 		formdata.append("pt_id", selectedPerguruanTinggi.value);
-		formdata.append("pt_name", selectedPerguruanTinggi.label);
+		formdata.append("user_id", user_id);
 		formdata.append("description", keteranganLaporan);
 		formdata.append("is_public", true);
 		formdata.append("nama", nama);

+ 0 - 16
pages/login.js

@@ -1,16 +0,0 @@
-import React, { Component } from "react";
-import Login from "@/components/Main/Login";
-import BasePage from "@/components/Layout/BasePage";
-
-class LoginPage extends Component {
-	render() {
-		return (
-			<div className="block-center mt-4 wd-xl">
-				<Login />
-			</div>
-		);
-	}
-}
-
-LoginPage.Layout = BasePage;
-export default LoginPage;

+ 0 - 4
pages/pemantauan.js

@@ -21,10 +21,6 @@ const menu = [
 		title: "Pemantauan",
 		path: "/pemantauan",
 	},
-	{
-		title: "Login",
-		path: "/login",
-	},
 ];
 class App extends Component {
 	constructor(props) {