Преглед на файлове

add new fitur
1. bypass v1.2
2. verifikasi v1.2

andi преди 2 години
родител
ревизия
48c6683a92
променени са 7 файла, в които са добавени 192 реда и са изтрити 37 реда
  1. 15 0
      actions/auth.js
  2. 12 0
      actions/cabutSanksi.js
  3. 39 21
      components/Bypass/TableBypass.js
  4. 1 1
      components/PT/TableSanksi.js
  5. 75 0
      pages/app/bypass/detail.js
  6. 1 1
      pages/app/bypass/index.js
  7. 49 14
      pages/app/verifikasi/index.js

+ 15 - 0
actions/auth.js

@@ -42,3 +42,18 @@ export const logout = async () => {
 		if (error.response) return error.response.data;
 	}
 };
+
+export const loginToPt = async (lembaga_id, password) => {
+	const data = {
+		lembaga_id,
+		password,
+	};
+
+	const response = await axiosAPI.post("/auth/login-to-pt", data, {
+		headers: {
+			"Content-Type": "application/json",
+		},
+	});
+
+	return response.data;
+};

+ 12 - 0
actions/cabutSanksi.js

@@ -24,3 +24,15 @@ export const addJawabanCabutSanksi = async (token, id, data) => {
 		return false;
 	}
 };
+
+export const bypassCabutSanksi = async (token, id) => {
+	try {
+		const res = await axios.put(`/sanksi/cabut-sanksi/bypass/${id}`);
+		await createLog(token, { aktivitas: `Berhasil melakukan bypass ke pencabutan sanksi, id: ${id}` });
+		return res.data;
+	} catch (error) {
+		console.log("error", error);
+		await createLog(token, { aktivitas: `Gagal  melakukan bypass ke pencabutan sanksi, id: ${id}` });
+		return false;
+	}
+};

+ 39 - 21
components/Bypass/TableBypass.js

@@ -2,8 +2,25 @@ import Datatable from "@/components/Tables/Datatable";
 import { Button } from "reactstrap";
 import Link from "next/link";
 import moment from "moment";
+import { bypassCabutSanksi } from "../../actions/cabutSanksi";
+import { useSelector } from "react-redux";
+import { ToastContainer, toast } from "react-toastify";
+import Router from "next/router";
+
 
 function TableBypass({ listData, to, linkName }) {
+
+    const token = useSelector((state) => state.token)
+
+    const handleCabutSanksi = async (id) => {
+        await toast.promise(bypassCabutSanksi(token, id), {
+            pending: "Loading",
+            success: "Success",
+            error: "Error",
+        });
+        Router.push("/app/bypass");
+        // await bypassCabutSanksi(token, id)
+    }
     return (
         <div className="card b">
             <div className="card-body card-over">
@@ -50,7 +67,7 @@ function TableBypass({ listData, to, linkName }) {
                                             </td>
                                             {/* <td>{moment(data.createdAt).fromNow()}</td> */}
                                             {/* <td>{moment(data.createdAt).format("DD MMMM YYYY")}</td> */}
-                                            <td>{data.is_pengajuan_keberatan === true || data.is_pengajuan_keberatan === false ?
+                                            <td>{data.last_step ?
                                                 <div>
                                                     <div className="badge badge-green">{data.last_step}</div>
                                                     {data.last_step === "Permohonan Keberatan" && (
@@ -82,30 +99,31 @@ function TableBypass({ listData, to, linkName }) {
                                                     <p className="w-105">Sanksi belum diperiksa</p>
                                                 </div>}
                                             </td>
-                                            <td 
-                                            style={{width:"25%"}}
+                                            <td
+                                                style={{ width: "25%" }}
                                             >
-                                                    {/* <Link
-                                                        href={{
-                                                            pathname: to,
-                                                            query: { id: data._id },
-                                                        }}
-                                                    > */}
-                                                        <Button className="btn-login float-right" color
-                                                         style={{ borderRadius: "7px" }}
-                                                        >
-                                                            <span className="font-color-white">
-                                                                {linkName}
-                                                            </span>
-                                                        </Button>
-                                                    {/* </Link> */}
-                                                    <Button className="btn-v2 float-right mr-2" color 
-                                                     style={{ borderRadius: "7px" }}
+                                                <Link
+                                                    href={{
+                                                        pathname: to,
+                                                        query: { id: data._id },
+                                                    }}
+                                                >
+                                                    <Button className="btn-login float-right" color
+                                                        style={{ borderRadius: "7px" }}
                                                     >
-                                                        <span className="font-color-black">
-                                                            Pencabutan Sanksi
+                                                        <span className="font-color-white">
+                                                            {linkName}
                                                         </span>
                                                     </Button>
+                                                </Link>
+                                                <Button className="btn-v2 float-right mr-2" color
+                                                    style={{ borderRadius: "7px" }}
+                                                    onClick={() => { handleCabutSanksi(data._id) }}
+                                                >
+                                                    <span className="font-color-black">
+                                                        Cabut Sanksi
+                                                    </span>
+                                                </Button>
                                             </td>
                                         </tr>
                                     );

+ 1 - 1
components/PT/TableSanksi.js

@@ -12,7 +12,7 @@ function TableSanksi({ listData, to, linkName }) {
 							<th>Nomor Surat Sanksi</th>
 							{/* <th>Keterangan Sanksi</th> */}
 							{/* <th>Created</th> */}
-							<th>dd</th>
+							<th>Aksi</th>
 						</tr>
 					</thead>
 					<tbody>

+ 75 - 0
pages/app/bypass/detail.js

@@ -0,0 +1,75 @@
+import React, { Component } from "react";
+import { Card, CardBody, TabContent, TabPane, Nav, NavItem, NavLink, Button, Row, Col } from "reactstrap";
+import Router from "next/router";
+import classnames from "classnames";
+import ContentWrapper from "@/components/Layout/ContentWrapper";
+import DetailSanksi from "@/components/Main/DetailSanksi";
+import Link from "next/link";
+import { getPelaporan } from "@/actions/pelaporan";
+import { getOneSanksi } from "@/actions/sanksi";
+import Loader from "@/components/Common/Loader";
+import { connect } from "react-redux";
+
+const stepNavitemStyle = {
+	backgroundColor: "#fcfcfc",
+};
+
+class Detail extends Component {
+	constructor(props) {
+		super(props);
+		this.state = {
+			sanksi: {},
+		};
+	}
+
+	static getInitialProps = async ({ query }) => {
+		return { query };
+	};
+
+	componentDidMount = async () => {
+		const { query, token } = this.props;
+		const sanksi = await getOneSanksi(token, query.id);
+		this.setState({ sanksi });
+	};
+
+	render() {
+		const { sanksi } = this.state;
+		return (
+			<ContentWrapper unwrap>
+				{/* <Header /> */}
+				<div className="p-3">
+					<div className="content-heading">
+						<span className="font-color-white">
+							Detail Sanksi
+						</span>
+						<div className="ml-auto">
+							<Link href="/app/sanksi">
+								<Button className="color-3e3a8e" color>
+									<span className="font-color-white">
+										&lt; Kembali
+									</span>
+								</Button>
+							</Link>
+						</div>
+					</div>
+					{sanksi.data ? (
+						<Card className="card-default">
+							<CardBody>
+								<Row>
+									<Col>
+										<DetailSanksi data={sanksi.data} />
+									</Col>
+								</Row>
+							</CardBody>
+						</Card>
+					) : (
+						<Loader />
+					)}
+				</div>
+			</ContentWrapper>
+		);
+	}
+}
+
+const mapStateToProps = (state) => ({ user: state.user, token: state.token });
+export default connect(mapStateToProps)(Detail);

+ 1 - 1
pages/app/bypass/index.js

@@ -28,7 +28,7 @@ class Bypass extends Component {
                         Bypass
                     </span></div>
                 <Row>
-                    <Col lg={12}>{sanksi.data?.length ? <TableBypass listData={sanksi.data} linkName="Detail" /> : sanksi.data ? "Tidak ada Sanksi" : <Loader />}</Col>
+                    <Col lg={12}>{sanksi.data?.length ? <TableBypass listData={sanksi.data} linkName="Detail" to="/app/bypass/detail" handleCabutSanksi={this.handlecabutsanksi} /> : sanksi.data ? "Tidak ada Sanksi" : <Loader />}</Col>
                 </Row>
             </ContentWrapper>
         );

+ 49 - 14
pages/app/verifikasi/index.js

@@ -4,6 +4,11 @@ import { Container, Row, Col, Card, CardBody, CardFooter, CardHeader, Input, But
 import FormValidator from "@/components/Forms/Validator.js";
 import { ptPublic } from "@/actions/PT";
 import AsyncSelect from "react-select/async";
+import { loginToPt } from "../../../actions/auth";
+import { connect } from "react-redux";
+import { ToastContainer, toast } from "react-toastify";
+
+
 
 
 const loadOptions = (inputValue, callback) => {
@@ -22,11 +27,9 @@ class Verifikasi extends React.Component {
         super(props);
         this.state = {
             formLogin: {
-
-                password: "",
-                // pt_id: ""
+                password: ""
             },
-
+            loading: false,
             inputValue: "",
             pt_id: ""
 
@@ -61,16 +64,32 @@ class Verifikasi extends React.Component {
 
 
 
-    // handleInputChange = (newValue) => {
-    //     const inputValue = newValue.replace();
-    //     this.setState({ inputValue });
-    //     return inputValue;
-    //   };
+
     handleChangeSelectPerguruanTinggi = (selected_PT) => {
         this.setState({ pt_id: selected_PT.value });
     };
-    onSubmit = async (e) => {
-        console.log("di submitt")
+    onSubmit = async () => {
+
+        this.setState({ loading: true });
+        const { password } = this.state.formLogin;
+        const { pt_id } = this.state
+        const auth = await toast.promise(loginToPt(pt_id, password), {
+            pending: "Loading",
+            success: "Success",
+            error: "Akun tidak ada",
+        });
+        // const auth = await loginToPt(pt_id, password);
+        this.props.setToken(auth.data.token);
+        this.props.setUser(auth.data.user);
+        if (auth.data.user.role.id === 2022) {
+            location.href = "/pt/pemantauan"
+            return;
+        } else if ([2020, 2021, 2023].includes(auth.data.user.role.id)) {
+            location.href = "/pt/pemantauan"
+            return;
+        }
+        this.setState({ loading: false });
+
     }
 
 
@@ -126,7 +145,18 @@ class Verifikasi extends React.Component {
                                     style={{ borderRadius: "7px" }}
                                     onClick={this.onSubmit}
                                 >
-                                    <span className="font-color-white">Login</span>
+                                    <span className="font-color-white">
+                                        {this.state.loading ? (
+                                            <div class="d-flex justify-content-center">
+                                                <div
+                                                    class="spinner-border spinner-border-sm"
+                                                    role="status"
+                                                ></div>
+                                            </div>
+                                        ) : (
+                                            "Login"
+                                        )}
+                                    </span>
                                 </Button>
                             </form>
                         </CardBody>
@@ -140,5 +170,10 @@ class Verifikasi extends React.Component {
 
 
 
-
-export default Verifikasi
+const mapStateToProps = (state) => ({ user: state.user });
+const mapDispatchToProps = (dispatch) => ({
+    setUser: (payload) => dispatch({ type: "SET_USER", payload }),
+    setToken: (payload) => dispatch({ type: "SET_TOKEN", payload }),
+    setPT: (payload) => dispatch({ type: "SET_PT", payload }),
+});
+export default connect(mapStateToProps, mapDispatchToProps)(Verifikasi);