import React, { Component } from "react";
import ContentWrapper from "@/components/Layout/ContentWrapper";
import { Card, CardBody, CardHeader, CardTitle, Button, Row, Col, FormGroup, Input } from "reactstrap";
import { getPelaporan, getOneLaporan, updateLaporan } from "@/actions/pelaporan";
import { updateJadwal } from "@/actions/penjadwalan";
import DetailLaporan from "@/components/Penjadwalan/DetailLaporan";
import Link from "next/link";
import FullCalendar from "@fullcalendar/react";
import dayGridPlugin from "@fullcalendar/daygrid";
import timeGridPlugin from "@fullcalendar/timegrid";
import interactionPlugin, { Draggable } from "@fullcalendar/interaction";
import listPlugin from "@fullcalendar/list";
import bootstrapPlugin from "@fullcalendar/bootstrap";
import Select from "react-select";
import moment from "moment-timezone";
import { connect } from "react-redux";
import Loader from "@/components/Common/Loader";
import Router from "next/router";
import { ToastContainer, toast } from "react-toastify";
import { Formik, Form, Field, ErrorMessage } from "formik";
import * as Yup from "yup";
import Datetime from "react-datetime";
import 'moment/locale/id';
import { getCsrf } from "../../actions/security";
import { createLog } from "../../actions/log";
moment.locale('id')
import Swal from "sweetalert2";
const checkIfFilesAreTooBig = (files) => {
let valid = true;
if (files) {
files.map((file) => {
if (file.size > 15 * 1024 * 1024) {
valid = false;
}
});
}
return valid;
};
const status = [
{ 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" },
];
const jadwalSchema = Yup.object().shape({
judul: Yup.string().required("Wajib diisi"),
dari_tanggal: Yup.date().required("Wajib diisi"),
sampai_tanggal: Yup.date().required("Wajib diisi"),
});
const laporanSchema = Yup.object().shape({
keterangan: Yup.string().required("Harus diisi"),
dokumen: Yup.array().min(1).test("filesize", "Maksimal ukuran dokumen 15mb", checkIfFilesAreTooBig),
});
const ditutupSchema = Yup.object().shape({
keterangan: Yup.string().required("Harus diisi"),
dokumen: Yup.array().min(1).required("Wajib diisi").test("filesize", "Maksimal ukuran dokumen 15mb", checkIfFilesAreTooBig),
});
let Dropzone = null;
class DropzoneWrapper extends Component {
state = {
isClient: false,
};
componentDidMount = () => {
Dropzone = require("react-dropzone").default;
this.setState({ isClient: true });
};
render() {
return Dropzone ?
proses ini.
', confirmButtonColor: "#3e3a8e", confirmButtonText: 'Oke' }) } else { const { query, token } = this.props; const { id } = query; const { color, laporan } = this.state; const getToken = await getCsrf(); const _csrf = getToken.token; await toast.promise( updateJadwal(token, id, { judul: "No.Laporan " + laporan.data.no_laporan + " - " + data.judul, dari_tanggal: data.dari_tanggal, sampai_tanggal: data.sampai_tanggal, warna: color, }, _csrf), { pending: "Loading", success: "Success", error: "Error", } ); Router.push("/app/penjadwalan"); const dataLaporan = await getPelaporan(token, { jadwal: true }); this.setState({ dataLaporan }); this.getDataEvent(); } }; defaultStatus = async () => { const status = this.getStatus(); return this.setState({ selectedOption: status[0] }); }; handleChangeSelect = (selectedOption) => this.setState({ selectedOption }); logUpdateLaporanError = async () => { const getToken = await getCsrf(); const _csrf = getToken.token; const { token, query } = this.props; const { id } = query; await createLog(token, { aktivitas: `Berhasil mengubah data laporan, id: ${id}`, _csrf: _csrf, menu: "Penjadwalan" }); } logdelegasi = async () => { const getToken = await getCsrf(); const _csrf = getToken.token; const { token, query } = this.props; const { id } = query; await createLog(token, { aktivitas: `Berhasil Delegasi Laporan, id: ${id}`, _csrf: _csrf , menu :"Penjadwalan"}); } logDitutup = async () => { const getToken = await getCsrf(); const _csrf = getToken.token; const { token, query } = this.props; const { id } = query; await createLog(token, { aktivitas: `Berhasil menutup laporan, id: ${id}`, _csrf: _csrf, menu: "Penjadwalan" }); } handleSimpan = async (value) => { if (this.props.user.role.id === 2024) { Swal.fire({ icon: 'error', title: 'Oops...', html: 'Maaf anda tidak memiliki akses untuk menyelesaikanproses ini.
', confirmButtonColor: "#3e3a8e", confirmButtonText: 'Oke' }) } else { const getToken = await getCsrf(); const _csrf = getToken.token; const { token, query } = this.props; const { id } = query; let update = null; if (value.status.value === this.getStatus()[1].value || value.status.value === this.getStatus()[2].value) { const toastid = toast.loading("Please wait..."); const data = { keterangan: value.keterangan }; const formdata = new FormData(); formdata.append("keterangan", value.keterangan); this.state.files.forEach((e) => { formdata.append("dokumen", e); }); formdata.append("aktif", "false"); if (value.status.value === this.getStatus()[1].value) { data.change_role = "true"; update = await updateLaporan(token, id, data, _csrf); await this.logdelegasi() Router.push("/app/penjadwalan"); } else if (value.status.value === this.getStatus()[2].value) { update = await updateLaporan(token, id, formdata, _csrf + `&redudansi=true`); await this.logDitutup() Router.push("/app/penjadwalan"); } if (!update) { toast.update(toastid, { render: "Error", type: "error", isLoading: false, autoClose: true, closeButton: true }); this.logUpdateLaporanError() } else { toast.update(toastid, { render: "Success", type: "success", isLoading: false, autoClose: true, closeButton: true }); this.logUpdateLaporanSuccess() Router.push("/app/penjadwalan"); } Router.push("/app/penjadwalan"); } Router.push("/app/penjadwalan"); } }; render() { const { files, externalEvents, laporan, selectedOption, selectedEvent } = this.state; const removeFile = file => () => { const newFiles = [...files] newFiles.splice(newFiles.indexOf(file), 1) this.setState({ files: newFiles, }); } const thumbs = files.map((file, index) => ({file.name}
)); return (Selected:
Click calendar to show information