浏览代码

pop up jika data excel kosong, dropzone fix bug

andi 2 年之前
父节点
当前提交
bfeebc8b33

+ 10 - 1
components/Delegasi/CaseProgress.js

@@ -9,7 +9,7 @@ import Datatable from "@/components/Tables/Datatable";
 import MorrisChart from "@/components/Charts//Morris";
 import Dropdown from 'react-bootstrap/Dropdown';
 
-function CaseProgress({ data, nextButton, prevButton, tahun, excel }) {
+function CaseProgress({ data, nextButton, prevButton, tahun, excel, excelSemua, excelMenu }) {
 	const ChartPie = {
 		data: [
 			{
@@ -117,6 +117,15 @@ function CaseProgress({ data, nextButton, prevButton, tahun, excel }) {
 						<img src="/static/img/next.png"></img>
 					</Button>
 					<b className="text-tahun">Tahun {tahun} </b>
+					<Dropdown className="float-right">
+						<Dropdown.Toggle variant="success" id="dropdown-basic">
+							Unduh
+						</Dropdown.Toggle>
+						<Dropdown.Menu>
+							<Dropdown.Item onClick={excelMenu}>Unduh dokumen pelaporan</Dropdown.Item>
+							<Dropdown.Item onClick={excelSemua}>Unduh dokumen semua menu</Dropdown.Item>
+						</Dropdown.Menu>
+					</Dropdown>
 					{/* <Button className="float-right button-hidden icon-eksport" type="submit" onClick={excel}>
 						<img src="/static/img/eksport.png"></img>
 					</Button> */}

+ 1 - 11
components/Pemeriksaan/InputEvaluasi.js

@@ -126,7 +126,7 @@ class InputEvaluasi extends Component {
 		const formdata = new FormData();
 		formdata.append("judul", data.judul);
 		formdata.append("tanggal", data.tanggal);
-		data.dokumen.forEach((e) => {
+		this.state.files.forEach((e) => {
 			formdata.append("dokumen", e);
 		});
 		if (this.state.delegasichecklist == true) {
@@ -171,16 +171,6 @@ class InputEvaluasi extends Component {
 			});
 		}
 		const thumbs = files.map((file, index) => (
-			// <div md={3} key={index}>
-			// 	<div className="text-left">{file.name}</div>
-			// 	<div><button className="bg-transparent button-transparent border-0 float-right" onClick={removeFile(file)}>
-			// 		<em className="fas fa-trash"></em>
-			// 	</button>
-			// 		{/* <Progress color="info" value={100}>Success</Progress> */}
-			// 	</div>
-			// 	<span className="float-right">
-			// 	</span>
-			// </div>
 			<p>
 				<em className="far fa-file" />&nbsp;&nbsp;{file.name}
 				<button className="bg-transparent button-transparent border-0 fas fa-trash text-danger float-right" onClick={removeFile(file)} />

+ 38 - 1
pages/app/laporan-delegasi/index.js

@@ -9,6 +9,8 @@ import { connect } from "react-redux";
 import Loader from "@/components/Common/Loader";
 import Router from "next/router";
 import { createLog } from "@/actions/log";
+import swal from "sweetalert2";
+
 
 class Pelaporan extends Component {
 	constructor(props) {
@@ -49,6 +51,41 @@ class Pelaporan extends Component {
 		Router.push(url);
 	};
 
+	excelMenu = () => {
+		const url = getExcel(this.props.token, "Laporan", {
+			tahun: this.state.tahun,
+			pelaporan: true,
+		});
+		if (this.state.graph.data.jumlah_laporan.dikti && this.state.graph.data.jumlah_laporan.ditutup && this.state.graph.data.jumlah_laporan.lldikti) {
+			Router.push(url);
+		} else {
+			swal.fire({
+				title: "Data Kosong",
+				icon: "error",
+				confirmButtonColor: "#3e3a8e",
+			});
+		}
+	};
+	excelSemua = () => {
+		const url = getExcel(this.props.token, "Laporan", {
+			tahun: this.state.tahun,
+			pelaporan: true,
+			penjadwalan: true,
+			pemeriksaan: true,
+			sanksi: true,
+
+		});
+		if (this.state.graph.data.jumlah_laporan.dikti && this.state.graph.data.jumlah_laporan.ditutup && this.state.graph.data.jumlah_laporan.lldikti) {
+			Router.push(url);
+		} else {
+			swal.fire({
+				title: "Data Kosong",
+				icon: "error",
+				confirmButtonColor: "#3e3a8e",
+			});
+		}
+	};
+
 	render() {
 		const { pelaporan, graph } = this.state;
 		return (
@@ -57,7 +94,7 @@ class Pelaporan extends Component {
 					<div className="font-color-white">Laporan Delegasi</div>
 				</div>
 				<Row>
-					<Col lg="4">{graph?.data ? <CaseProgress data={graph.data} nextButton={this.nextButton} prevButton={this.prevButton} tahun={this.state.tahun} excel={this.excel} /> : <Loader />}</Col>
+					<Col lg="4">{graph?.data ? <CaseProgress data={graph.data} nextButton={this.nextButton} prevButton={this.prevButton} tahun={this.state.tahun} excel={this.excel} excelMenu={this.excelMenu} excelSemua={this.excelSemua} /> : <Loader />}</Col>
 					<Col lg="8">{pelaporan?.data ? <TableLaporan listData={pelaporan.data} to="/app/laporan-delegasi/detail" linkName="Detail" /> : <Loader />}</Col>
 				</Row>
 			</ContentWrapper>

+ 19 - 11
pages/app/pelaporan/index.js

@@ -10,6 +10,7 @@ import { connect } from "react-redux";
 import Loader from "@/components/Common/Loader";
 import Router from "next/router";
 import { createLog } from "@/actions/log";
+import swal from "sweetalert2";
 
 class Pelaporan extends Component {
 	constructor(props) {
@@ -63,7 +64,15 @@ class Pelaporan extends Component {
 			tahun: this.state.tahun,
 			pelaporan: true,
 		});
-		Router.push(url);
+		if (this.state.graph.data.jumlah_laporan.dikti && this.state.graph.data.jumlah_laporan.ditutup && this.state.graph.data.jumlah_laporan.lldikti) {
+			Router.push(url);
+		} else {
+			swal.fire({
+				title: "Data Kosong",
+				icon: "error",
+				confirmButtonColor: "#3e3a8e",
+			});
+		}
 	};
 	excelSemua = () => {
 		const url = getExcel(this.props.token, "Laporan", {
@@ -74,17 +83,16 @@ class Pelaporan extends Component {
 			sanksi: true,
 
 		});
-		Router.push(url);
+		if (this.state.graph.data.jumlah_laporan.dikti && this.state.graph.data.jumlah_laporan.ditutup && this.state.graph.data.jumlah_laporan.lldikti) {
+			Router.push(url);
+		} else {
+			swal.fire({
+				title: "Data Kosong",
+				icon: "error",
+				confirmButtonColor: "#3e3a8e",
+			});
+		}
 	};
-
-	// excel = () => {
-	// 	const url = getExcel(this.props.token, "Laporan", {
-	// 		tahun: this.state.tahun,
-	// 		pelaporan: true,
-	// 	});
-	// 	Router.push(url);
-	// };
-
 	render() {
 		const { pelaporan, graph, newLaporan } = this.state;
 

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

@@ -10,6 +10,8 @@ import Loader from "@/components/Common/Loader";
 import Link from "next/link";
 import Button from "reactstrap/lib/Button";
 import Router from "next/router";
+import swal from "sweetalert2";
+
 
 class Pemeriksaan extends Component {
 	constructor(props) {
@@ -43,13 +45,24 @@ class Pemeriksaan extends Component {
 	shouldComponentUpdate = (prevProps, prevState) => {
 		if (prevState.graph !== this.state.graph) return true;
 	};
+
+
 	excelMenu = () => {
 		const url = getExcel(this.props.token, "Laporan", {
 			tahun: this.state.tahun,
 			pemeriksaan: true,
 		});
-		Router.push(url);
+		if (this.state.graph.data.evaluasi.hasEvaluasi) {
+			Router.push(url);
+		} else {
+			swal.fire({
+				title: "Data Kosong",
+				icon: "error",
+				confirmButtonColor: "#3e3a8e",
+			});
+		}
 	};
+
 	excelSemua = () => {
 		const url = getExcel(this.props.token, "Laporan", {
 			tahun: this.state.tahun,
@@ -59,11 +72,20 @@ class Pemeriksaan extends Component {
 			sanksi: true,
 
 		});
-		Router.push(url);
+		if (this.state.graph.data.evaluasi.hasEvaluasi) {
+			Router.push(url);
+		} else {
+			swal.fire({
+				title: "Data Kosong",
+				icon: "error",
+				confirmButtonColor: "#3e3a8e",
+			});
+		}
 	};
 	excel = () => {
 		const url = getExcel(this.props.token, "Laporan", { tahun: this.state.tahun });
 		Router.push(url);
+
 	};
 
 	render() {

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

@@ -10,6 +10,8 @@ import Loader from "@/components/Common/Loader";
 import Link from "next/link";
 import Button from "reactstrap/lib/Button";
 import Router from "next/router";
+import swal from "sweetalert2";
+
 
 class Penjadwalan extends Component {
 	constructor(props) {
@@ -48,7 +50,15 @@ class Penjadwalan extends Component {
 			tahun: this.state.tahun,
 			penjadwalan: true,
 		});
-		Router.push(url);
+		if (this.state.graph.data.jadwal.hasJadwal && this.state.graph.data.jadwal.notHasJadwal) {
+			Router.push(url);
+		} else {
+			swal.fire({
+				title: "Data Kosong",
+				icon: "error",
+				confirmButtonColor: "#3e3a8e",
+			});
+		}
 	};
 	excelSemua = () => {
 		const url = getExcel(this.props.token, "Laporan", {
@@ -59,7 +69,15 @@ class Penjadwalan extends Component {
 			sanksi: true,
 
 		});
-		Router.push(url);
+		if (this.state.graph.data.jadwal.hasJadwal && this.state.graph.data.jadwal.notHasJadwal) {
+			Router.push(url);
+		} else {
+			swal.fire({
+				title: "Data Kosong",
+				icon: "error",
+				confirmButtonColor: "#3e3a8e",
+			});
+		}
 	};
 
 	excel = () => {

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

@@ -10,6 +10,8 @@ import Loader from "@/components/Common/Loader";
 import Link from "next/link";
 import Button from "reactstrap/lib/Button";
 import Router from "next/router";
+import swal from "sweetalert2";
+
 
 class Sanksi extends Component {
 	constructor(props) {
@@ -48,7 +50,15 @@ class Sanksi extends Component {
 			tahun: this.state.tahun,
 			sanksi: true,
 		});
-		Router.push(url);
+		if (this.state.graph.data.sanksi.hasSanksi && this.state.graph.data.sanksi.notHasSanksi) {
+			Router.push(url);
+		} else {
+			swal.fire({
+				title: "Data Kosong",
+				icon: "error",
+				confirmButtonColor: "#3e3a8e",
+			});
+		}
 	};
 	excelSemua = () => {
 		const url = getExcel(this.props.token, "Laporan", {
@@ -59,7 +69,15 @@ class Sanksi extends Component {
 			sanksi: true,
 
 		});
-		Router.push(url);
+		if (this.state.graph.data.sanksi.hasSanksi && this.state.graph.data.sanksi.notHasSanksi) {
+			Router.push(url);
+		} else {
+			swal.fire({
+				title: "Data Kosong",
+				icon: "error",
+				confirmButtonColor: "#3e3a8e",
+			});
+		}
 	};
 
 	excel = () => {

+ 2 - 2
pages/app/sanksi/proses.js

@@ -42,7 +42,7 @@ class ProsesSanksi extends Component {
 		const { query, token } = this.props;
 		const { id } = query;
 		const pelaporan = await getOneLaporan(token, id);
-		const {data:listSanksi} = await getPelanggaranSanksi(token)
+		const { data: listSanksi } = await getPelanggaranSanksi(token)
 		this.setState({ pelaporan, listSanksi });
 	};
 
@@ -111,7 +111,7 @@ class ProsesSanksi extends Component {
 						<CardBody>
 							<Row>
 								<Col xs="4">
-									<Nav pills vertical={true}>
+									<Nav pills vertical={true} className="cursor-pointer">
 										<NavItem style={stepNavitemStyle}>
 											<NavLink
 												tag="div"

+ 36 - 6
pages/app/tuntas/index.js

@@ -10,6 +10,8 @@ import Loader from "@/components/Common/Loader";
 import Link from "next/link";
 import Button from "reactstrap/lib/Button";
 import Router from "next/router";
+import swal from "sweetalert2";
+
 
 class PelaporanTuntas extends Component {
     constructor(props) {
@@ -37,14 +39,26 @@ class PelaporanTuntas extends Component {
 
     nextButton = async () => {
         const tahun = this.state.tahun + 1;
-        const graph = await getGraph(this.props.token, { evaluasi: true, listJadwal: true, tahun });
-        this.setState({ graph, tahun });
+        const { token } = this.props;
+        let laporanSelesai = await getlaporanselesai(token);
+        laporanSelesai = {
+            ...laporanSelesai, data: {
+                ...laporanSelesai.data, laporan: [...laporanSelesai.data.laporan, ...laporanSelesai.data.sanksi], sanksi: null
+            }
+        }
+        this.setState({ laporanSelesai, tahun });
     };
 
     prevButton = async () => {
         const tahun = this.state.tahun - 1;
-        const graph = await getGraph(this.props.token, { evaluasi: true, listJadwal: true, tahun });
-        this.setState({ graph, tahun });
+        const { token } = this.props;
+        let laporanSelesai = await getlaporanselesai(token);
+        laporanSelesai = {
+            ...laporanSelesai, data: {
+                ...laporanSelesai.data, laporan: [...laporanSelesai.data.laporan, ...laporanSelesai.data.sanksi], sanksi: null
+            }
+        }
+        this.setState({ laporanSelesai, tahun });
     };
 
     shouldComponentUpdate = (prevProps, prevState) => {
@@ -60,7 +74,15 @@ class PelaporanTuntas extends Component {
             tahun: this.state.tahun,
             pelaporan: true,
         });
-        Router.push(url);
+        if (this.state.graph.data.jumlah_ditutup && this.state.graph.data.jumlah_selesai) {
+            Router.push(url);
+        } else {
+            swal.fire({
+                title: "Data Kosong",
+                icon: "error",
+                confirmButtonColor: "#3e3a8e",
+            });
+        }
     };
     excelSemua = () => {
         const url = getExcel(this.props.token, "Laporan", {
@@ -71,7 +93,15 @@ class PelaporanTuntas extends Component {
             sanksi: true,
 
         });
-        Router.push(url);
+        if (this.state.graph.data.jumlah_ditutup && this.state.graph.data.jumlah_selesai) {
+            Router.push(url);
+        } else {
+            swal.fire({
+                title: "Data Kosong",
+                icon: "error",
+                confirmButtonColor: "#3e3a8e",
+            });
+        }
     };
 
     render() {

+ 94 - 25
styles/app/common/bootstrap-reset.scss

@@ -13,7 +13,9 @@
 
 a {
     outline: none !important;
+
     &.text-muted {
+
         &:hover,
         &:focus {
             color: darken($text-muted, 10%);
@@ -34,9 +36,11 @@ hr {
     padding: 0.1875rem 0.4375rem;
     font-size: 0.75rem;
     border-radius: 0.625rem;
+
     &.badge-warning {
         color: #fff !important;
     }
+
     &.badge-secondary {
         background-color: $gray-dark;
         color: #fff;
@@ -45,16 +49,20 @@ hr {
 
 .list-group {
     line-height: 1.3;
+
     .list-group-item {
         padding: 10px;
         color: #555;
+
         &.active {
             color: #fff;
+
             .badge {
                 background-color: #fff;
                 color: $primary;
             }
         }
+
         .card>& {
             border: 0;
         }
@@ -74,22 +82,27 @@ hr {
 .card {
     border-color: transparent;
     box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+
     .card-header {
         border-bottom: 0;
         padding: 0.625rem 0.9375rem;
         background-color: transparent;
+
         .card-title {
             margin-bottom: 0;
             font-size: 1rem;
         }
+
         a {
             text-decoration: none !important;
         }
     }
 }
+
 .card-body {
     padding: 20px; //15px
 }
+
 .card-footer {
     padding: 0.625rem 0.9375rem;
 }
@@ -111,9 +124,12 @@ hr {
 .jumbotron {
     border: 1px solid $gray;
     background-color: #fff;
+
     @include media-breakpoint-up(md) {
-        padding: $jumbotron-padding ($jumbotron-padding/2);
-    }
+        padding: $jumbotron-padding (
+            $jumbotron-padding/2
+        );
+}
 }
 
 .nav-tabs>.nav-item>.nav-link {
@@ -124,8 +140,10 @@ hr {
     border: 1px solid $gray;
     border-radius: 0;
     padding: 10px 20px;
+
     &.active {
         background-color: $nav-tabs-link-active-bg;
+
         &,
         &:hover,
         &:focus {
@@ -140,10 +158,12 @@ hr {
     border-style: solid;
     border-width: 0 1px 1px 1px;
     border-color: $gray;
+
     .nav-pills+& {
         border: 0;
         padding: 0;
     }
+
     .p-0 & {
         padding: 0 !important
     }
@@ -156,14 +176,17 @@ hr {
     -webkit-appearance: none;
     outline: none !important; // padding: 0.375rem 1rem;
     @include transition(all .1s);
+
     &.btn-link {
         box-shadow: none;
         border: 0;
     }
+
     .input-group & {
         font-size: 14px;
         border-color: $input-border-color;
     }
+
     .input-group .form-control-sm+.input-group-btn & {
         font-size: 0.8125rem;
         padding: 0.3125rem 0.625rem;
@@ -178,8 +201,11 @@ hr {
     &.btn-warning {
         color: #fff;
     }
+
     &.btn-outline-warning:not(:disabled) {
-        &:hover, &:active {
+
+        &:hover,
+        &:active {
             color: #fff;
         }
     }
@@ -189,9 +215,12 @@ hr {
     background-color: $btn-secondary-bg;
     border-color: $btn-secondary-border;
     color: $btn-secondary-color;
+
     &:hover {
         background-color: #f5f5f5;
-    } // active state override
+    }
+
+    // active state override
     &:not(:disabled):not(.disabled):active,
     &:not(:disabled):not(.disabled).active,
     .show>&.dropdown-toggle {
@@ -201,23 +230,28 @@ hr {
 }
 
 .btn-outline-secondary {
-    border-color: $btn-secondary-border !important;
+    border-color: $btn-secondary-border  !important;
     color: $btn-secondary-color;
+
     &:hover {
         color: $btn-secondary-color;
         background-color: #f5f5f5 !important;
     }
+
     &:focus {
         box-shadow: 0 0 0 0.2rem rgba($btn-secondary-border, 0.5);
     }
 }
 
-span.btn { -webkit-appearance: none !important; }
+span.btn {
+    -webkit-appearance: none !important;
+}
 
 // FORMS
 .form-control {
     box-shadow: 0 0 0 #000 !important;
     font-size: 0.875rem; //14px
+
     &:focus {
         border-color: $input-focus-border-color;
     }
@@ -237,6 +271,7 @@ select.form-control-sm {
 .custom-control-label::after {
     top: 0.19rem;
 }
+
 .custom-control-label::before {
     border: 1px solid $gray;
 }
@@ -245,10 +280,12 @@ fieldset {
     padding-bottom: 20px;
     border-bottom: 1px dashed #eee;
     margin-bottom: 20px;
+
     &.last-child,
     &:last-child {
         border-bottom: 0;
     }
+
     .form-group {
         margin-bottom: 0;
     }
@@ -259,6 +296,7 @@ fieldset {
 }
 
 @include media-breakpoint-down(sm) {
+
     // Remove Input Shadows on iPad
     input[type="text"],
     input[type="email"],
@@ -278,7 +316,9 @@ fieldset {
     // Bottom align for column headings
     >thead>tr>th {
         border-bottom-width: 0;
-    } // Account for multiple tbody instances
+    }
+
+    // Account for multiple tbody instances
     >tbody+tbody {
         border-bottom-width: 1px;
     }
@@ -290,6 +330,7 @@ fieldset {
 
 .table-bordered {
     >thead>tr {
+
         >th,
         >td {
             border-bottom-width: 1px;
@@ -303,6 +344,7 @@ fieldset {
     border-radius: $border-radius-sm;
     border: 1px solid $progress-bg;
     background-color: #fff;
+
     .progress-bar {
         @include box-shadow(0 0 0 #000);
     }
@@ -315,6 +357,7 @@ fieldset {
     border-color: #eee;
     border-bottom: 2px solid $gray-light;
     border-radius: $border-radius-sm;
+
     .popover-title {
         border: 0;
     }
@@ -337,6 +380,7 @@ fieldset {
     padding: 0.3125rem 0;
     box-shadow: rgba(0, 0, 0, 0.176) 0px 6px 12px;
     border-color: $dropdown-border-color;
+
     .dropdown-item {
         line-height: 1.52857143;
         padding: 0.1875rem 1.25rem;
@@ -349,6 +393,7 @@ fieldset {
 
 .navbar-top .navbar-nav>.active>a {
     color: #999;
+
     &:hover,
     &:focus {
         color: #d1d2d3;
@@ -358,6 +403,7 @@ fieldset {
 
 .navbar-default .navbar-nav .open .dropdown-menu>li>a {
     color: #666;
+
     &:hover,
     &:focus {
         color: #222;
@@ -369,11 +415,15 @@ fieldset {
     .carousel-indicators {
         bottom: 0;
     }
+
     .carousel-control {
+
         &.left,
         &.right {
             background-image: none;
-        } // Add support for font awesome
+        }
+
+        // Add support for font awesome
         em {
             position: absolute;
             top: 50%;
@@ -410,20 +460,39 @@ $value in $theme-colors {
 
 .badge-red {
     color: #fff;
-    background-color: #FD4233; }
-    a.badge-info:hover, a.badge-info:focus {
-      color: #fff;
-      background-color: #FD4233; }
-    a.badge-info:focus, a.badge-info.focus {
-      outline: 0;
-      box-shadow: 0 0 0 0.2rem #FD4233; }
-
-      .badge-green {
-        color: #fff;
-        background-color: #1EA457; }
-        a.badge-info:hover, a.badge-info:focus {
-          color: #fff;
-          background-color: #1EA457; }
-        a.badge-info:focus, a.badge-info.focus {
-          outline: 0;
-          box-shadow: 0 0 0 0.2rem #1EA457; }
+    background-color: #FD4233;
+}
+
+a.badge-info:hover,
+a.badge-info:focus {
+    color: #fff;
+    background-color: #FD4233;
+}
+
+a.badge-info:focus,
+a.badge-info.focus {
+    outline: 0;
+    box-shadow: 0 0 0 0.2rem #FD4233;
+}
+
+.badge-green {
+    color: #fff;
+    background-color: #1EA457;
+}
+
+a.badge-info:hover,
+a.badge-info:focus {
+    color: #fff;
+    background-color: #1EA457;
+}
+
+a.badge-info:focus,
+a.badge-info.focus {
+    outline: 0;
+    box-shadow: 0 0 0 0.2rem #1EA457;
+}
+
+
+.cursor-pointer {
+    cursor: pointer;
+}