yazid138 3 éve
szülő
commit
b6340d09ce

+ 45 - 0
actions/notifikasi.js

@@ -0,0 +1,45 @@
+import { get, post } from "@/config/request";
+
+export const notifLaporanBaru = async (data) => {
+	try {
+		const response = await post("/notifikasi/laporan-baru", data);
+		return response.data;
+	} catch (error) {
+		if (error.response.data) return error.response.data;
+		console.log(error);
+		return false;
+	}
+};
+
+export const notifKeberatan = async (data) => {
+	try {
+		const response = await post("/notifikasi/keberatan", data);
+		return response.data;
+	} catch (error) {
+		if (error.response.data) return error.response.data;
+		console.log(error);
+		return false;
+	}
+};
+
+export const notifBanding = async (data) => {
+	try {
+		const response = await post("/notifikasi/banding", data);
+		return response.data;
+	} catch (error) {
+		if (error.response.data) return error.response.data;
+		console.log(error);
+		return false;
+	}
+};
+
+export const notifDocPerbaikan = async (data) => {
+	try {
+		const response = await post("/notifikasi/doc-perbaikan", data);
+		return response.data;
+	} catch (error) {
+		if (error.response.data) return error.response.data;
+		console.log(error);
+		return false;
+	}
+};

+ 3 - 2
components/PT/JawabanKeberatan/ModalPermohonan.js

@@ -2,8 +2,8 @@ import React, { Component } from "react";
 import Router from "next/router";
 import { Row, Col, FormGroup, Button, Modal, ModalHeader, ModalBody, ModalFooter } from "reactstrap";
 import { addBanding } from "@/actions/banding";
-import { addDocPerbaikan } from "@/actions/docPerbaikan";
 import { connect } from "react-redux";
+import { notifBanding } from "@/actions/notifikasi";
 
 let Dropzone = null;
 class DropzoneWrapper extends Component {
@@ -67,7 +67,7 @@ export class ModalPermohonan extends Component {
 
 	onSubmit = async (e) => {
 		e.preventDefault();
-		const { user, query } = this.props;
+		const { user, query, data } = this.props;
 		const { noSanksi } = query;
 		const formdata = new FormData();
 		if (this.state.files.length > 0) {
@@ -78,6 +78,7 @@ export class ModalPermohonan extends Component {
 			const added = await addBanding({ noSanksi, ptId: user.peran[0].organisasi.id }, formdata);
 
 			if (added) {
+				const notif = await notifBanding({ lembaga: data.sanksi.user.lembaga, pt_name: user.peran[0].organisasi.nama, no_sanksi: data.sanksi.no_sanksi });
 				Router.push({
 					pathname: "/app/pt/jawaban-keberatan",
 				});

+ 6 - 1
components/PT/Keberatan/ModalPermohonan.js

@@ -3,6 +3,7 @@ import Router from "next/router";
 import { Row, Col, FormGroup, Button, Modal, ModalHeader, ModalBody, ModalFooter } from "reactstrap";
 import { addKeberatan } from "@/actions/keberatan";
 import { connect } from "react-redux";
+import { notifKeberatan } from "@/actions/notifikasi";
 
 let Dropzone = null;
 class DropzoneWrapper extends Component {
@@ -66,7 +67,7 @@ export class ModalPermohonan extends Component {
 
 	onSubmit = async (e) => {
 		e.preventDefault();
-		const { user, query } = this.props;
+		const { user, query, data } = this.props;
 		const { noSanksi } = query;
 		const formdata = new FormData();
 		if (this.state.files.length > 0) {
@@ -81,6 +82,9 @@ export class ModalPermohonan extends Component {
 			// await addDocPerbaikan({ noSanksi, ptId: "0BCE4DB7-B207-445D-8D03-0C54B7688252" }, formdata);
 			// console.log(added);
 			if (added) {
+				// console.log({ lembaga: data.sanksi.user.lembaga, pt_name: user.peran[0].organisasi.nama, no_laporan: data.sanksi.no_sanksi });
+				await notifKeberatan({ lembaga: data.sanksi.user.lembaga, pt_name: user.peran[0].organisasi.nama, no_sanksi: data.sanksi.no_sanksi });
+				// console.log(notif);
 				Router.push({
 					pathname: "/app/pt/keberatan",
 				});
@@ -97,6 +101,7 @@ export class ModalPermohonan extends Component {
 
 	render() {
 		const { files } = this.state;
+		// console.log(this.props.data.sanksi);
 
 		const thumbs = files.map((file, index) => (
 			<Col md={3} key={index}>

+ 2 - 2
pages/app/pemantauan/index.js

@@ -28,7 +28,7 @@ class Search extends Component {
 
 	componentDidMount = async () => {
 		const dataPembina = await getPembina();
-		this.setState({ pembina: dataPembina.data });
+		if (dataPembina) this.setState({ pembina: dataPembina.data });
 	};
 
 	optionsPembina = (pembina) => {
@@ -62,7 +62,7 @@ class Search extends Component {
 		const pembina = this.state.selectedOptionMulti.join(",");
 		const searchValue = document.getElementById("searchInput").value;
 		const jsonData = await getPT({ search: searchValue, pembina });
-		this.setState({ data: jsonData.data });
+		this.setState({ data: jsonData.data ? jsonData.data : [] });
 	};
 
 	handleApplyClick = () => {

+ 3 - 1
pages/app/pt/dokumen-perbaikan/detail.js

@@ -10,6 +10,7 @@ import Riwayat from "@/components/PT/DocPerbaikan/Riwayat";
 import ContentWrapper from "@/components/Layout/ContentWrapper";
 import { Row, Col, Card, CardBody, FormGroup, Button, Input } from "reactstrap";
 import { connect } from "react-redux";
+import { notifDocPerbaikan } from "@/actions/notifikasi";
 
 let Dropzone = null;
 class DropzoneWrapper extends Component {
@@ -76,7 +77,7 @@ class DetailPerbaikanDoc extends Component {
 
 	handleKirim = async (e) => {
 		e.preventDefault();
-		const { keterangan } = this.state;
+		const { keterangan, sanksi } = this.state;
 		const { noSanksi } = this.props.query;
 		const { user } = this.props;
 		const org_id = user.peran[0].organisasi.id;
@@ -88,6 +89,7 @@ class DetailPerbaikanDoc extends Component {
 			});
 			const added = await addDocPerbaikan({ noSanksi, ptId: org_id }, formdata);
 			if (added) {
+				await notifDocPerbaikan({ lembaga: sanksi.data[0].sanksi.user.lembaga, pt_name: user.peran[0].organisasi.nama, no_sanksi: sanksi.data[0].sanksi.no_sanksi });
 				Router.push({
 					pathname: "/app/pt/dokumen-perbaikan",
 				});

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

@@ -40,7 +40,7 @@ class JawabanKeberatan extends Component {
 		const { sanksi } = this.state;
 		return (
 			<ContentWrapper unwrap>
-				<ModalPermohonan toggleModal={this.toggleModal} modal={this.state.modal} query={this.props.router.query} />
+				{sanksi?.data && <ModalPermohonan toggleModal={this.toggleModal} modal={this.state.modal} query={this.props.router.query} data={sanksi.data[0]} />}
 				<Header data={this.props.pt[0]} />
 				<div className="p-3">
 					<div className="content-heading">

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

@@ -36,7 +36,7 @@ class Keberatan extends Component {
 		const { sanksi } = this.state;
 		return (
 			<ContentWrapper unwrap>
-				<ModalPermohonan toggleModal={this.toggleModal} modal={this.state.modal} query={this.props.router.query} />
+				{sanksi?.data && <ModalPermohonan toggleModal={this.toggleModal} modal={this.state.modal} query={this.props.router.query} data={sanksi.data[0]} />}
 				<Header data={this.props.pt[0]} />
 				<div className="p-3">
 					<div className="content-heading">

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

@@ -13,6 +13,7 @@ import Link from "next/link";
 import { getPelaporan } from "@/actions/pelaporan";
 import { createSanksi } from "@/actions/sanksi";
 import { getPelanggaranId } from "@/actions/pelanggaran";
+import { connect } from "react-redux";
 
 const stepNavitemStyle = {
 	backgroundColor: "#fcfcfc",
@@ -45,6 +46,7 @@ class ProsesSanksi extends Component {
 		const { ptId, number } = this.props.query;
 		const formdata = new FormData();
 		formdata.append("no_sanksi", this.state.dataUpload.nomorSanksi);
+		formdata.append("user", this.props.user._id);
 		formdata.append("description", this.state.dataUpload.keterangan);
 		formdata.append("pelanggaran", this.state.dataPelanggaran.data.map((e) => e._id).join());
 		if (this.state.dataUpload.files.length > 0) {
@@ -241,4 +243,5 @@ class ProsesSanksi extends Component {
 	}
 }
 
-export default ProsesSanksi;
+const mapStateToProps = (state) => ({ user: state.user });
+export default connect(mapStateToProps)(ProsesSanksi);

+ 10 - 0
pages/laporan/new/index.js

@@ -4,6 +4,7 @@ import BasePage from "@/components/Layout/BasePage";
 import { getPT } from "@/actions/PT";
 import { getPelanggaran } from "@/actions/pelanggaran";
 import { createPelaporan } from "@/actions/pelaporan";
+import { notifLaporanBaru } from "@/actions/notifikasi";
 import Select from "react-select";
 import AsyncSelect from "react-select/async";
 import { Row, Col, FormGroup, Input, Card, CardBody, Button, CustomInput, Navbar, NavItem, NavLink, NavbarBrand, NavbarToggler, Nav, Collapse } from "reactstrap";
@@ -101,11 +102,19 @@ class App extends Component {
 		const { nama } = this.state;
 		const user_id = await this.createUser();
 		await this.createLaporan(user_id, nama);
+		await this.sendNotif();
 		Router.push("/laporan/new");
 		// validasi
 		// if (nama === '')  msgError.push({nama: 'Wajib diisi'})
 	};
 
+	sendNotif = async () => {
+		const { nama, no_hp, selectedPerguruanTinggi, keteranganLaporan, pelaporanNumber, selectedJenis } = this.state;
+		const description = `${selectedJenis.map((e) => e.label).join(", ")} dengan keterangan ${keteranganLaporan}`;
+		// const description = keteranganLaporan;
+		return await notifLaporanBaru({ nama, pt_name: selectedPerguruanTinggi.label, description, no_laporan: pelaporanNumber.toString() });
+	};
+
 	createUser = async () => {
 		const { nama, alamat, no_hp, email, fileIdentitas, isPrivate } = this.state;
 		const dataUser = new FormData();
@@ -126,6 +135,7 @@ class App extends Component {
 		formdata.append("number", pelaporanNumber);
 		formdata.append("user_id", user_id);
 		formdata.append("pt_id", selectedPerguruanTinggi.value);
+		formdata.append("pt_name", selectedPerguruanTinggi.label);
 		formdata.append("description", keteranganLaporan);
 		formdata.append("is_public", true);
 		formdata.append("nama", nama);