proses.js 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. import React, { Component } from "react";
  2. import { Card, CardBody, TabContent, TabPane, Nav, NavItem, NavLink, Button, Row, Col } from "reactstrap";
  3. import Router from "next/router";
  4. import classnames from "classnames";
  5. import ContentWrapper from "@/components/Layout/ContentWrapper";
  6. import DetailLaporan from "@/components/Main/DetailLaporan";
  7. import Header from "@/components/Main/Header";
  8. import TableRiwayat from "@/components/Pemeriksaan/TableRiwayat";
  9. import UploadSurat from "@/components/Sanksi/UploadSurat";
  10. import Ringkasan from "@/components/Sanksi/Ringkasan";
  11. import TablePenetapanSanksi from "@/components/Sanksi/TablePenetapanSanksi";
  12. import Link from "next/link";
  13. import { getPelaporan } from "@/actions/pelaporan";
  14. import { createSanksi } from "@/actions/sanksi";
  15. import { getPelanggaranId } from "@/actions/pelanggaran";
  16. import { connect } from "react-redux";
  17. import Loader from "@/components/Common/Loader";
  18. import { ToastContainer, toast } from "react-toastify";
  19. const stepNavitemStyle = {
  20. backgroundColor: "#fcfcfc",
  21. };
  22. class ProsesSanksi extends Component {
  23. dataUpload = {};
  24. constructor(props) {
  25. super(props);
  26. this.state = {
  27. activeStep: "1",
  28. dataUpload: null,
  29. dataPelanggaran: {},
  30. pelaporan: null,
  31. };
  32. }
  33. static getInitialProps = async ({ query }) => {
  34. return { query };
  35. };
  36. componentDidMount = async () => {
  37. const { query } = this.props;
  38. const pelaporan = await getPelaporan({ ptId: query.ptId, number: query.number });
  39. this.setState({ pelaporan });
  40. };
  41. done = async (e) => {
  42. e.preventDefault();
  43. const { ptId, number } = this.props.query;
  44. const formdata = new FormData();
  45. formdata.append("no_sanksi", this.state.dataUpload.nomorSanksi);
  46. formdata.append("user", this.props.user._id);
  47. formdata.append("description", this.state.dataUpload.keterangan);
  48. formdata.append("pelanggaran", this.state.dataPelanggaran.data.map((e) => e._id).join());
  49. if (this.state.dataUpload.files.length > 0) {
  50. this.state.dataUpload.files.forEach((e) => {
  51. formdata.append("files", e);
  52. });
  53. }
  54. const id = toast.loading("Please wait...");
  55. const create = await createSanksi({ ptId, number }, formdata);
  56. if (create) {
  57. toast.update(id, { render: "All is good", type: "success", isLoading: false, autoClose: true, closeButton: true });
  58. Router.push({
  59. pathname: "/app/sanksi",
  60. });
  61. }
  62. };
  63. toggleStep = (activeStep) => () => {
  64. if (this.state.activeStep !== activeStep) {
  65. this.setState({
  66. activeStep,
  67. });
  68. }
  69. };
  70. setCheckedData = async (data) => {
  71. const result = await getPelanggaranId(data);
  72. this.setState({ dataPelanggaran: result });
  73. };
  74. setUploadSuratSanksi = (data) => {
  75. // this.dataUpload = data;
  76. this.setState({ dataUpload: data });
  77. };
  78. render() {
  79. const { dataUpload, dataPelanggaran, pelaporan } = this.state;
  80. return (
  81. <ContentWrapper unwrap>
  82. {/* <Header /> */}
  83. <div className="p-3">
  84. <div className="content-heading">
  85. <div>Penetapan Sanksi</div>
  86. <div className="ml-auto">
  87. <Link href="/app/sanksi">
  88. <button className="btn btn-sm btn-secondary text-sm">&lt; back</button>
  89. </Link>
  90. </div>
  91. </div>
  92. <Card className="card-default">
  93. <CardBody>
  94. <Row>
  95. <Col xs="4">
  96. <Nav pills vertical={true}>
  97. <NavItem style={stepNavitemStyle}>
  98. <NavLink
  99. tag="div"
  100. className={classnames({
  101. active: this.state.activeStep === "1",
  102. })}
  103. onClick={this.toggleStep("1")}
  104. >
  105. <h4 className="text-left my-3">1. Detail Laporan</h4>
  106. </NavLink>
  107. </NavItem>
  108. <NavItem style={stepNavitemStyle}>
  109. <NavLink
  110. tag="div"
  111. className={classnames({
  112. active: this.state.activeStep === "2",
  113. })}
  114. onClick={this.toggleStep("2")}
  115. >
  116. <h4 className="text-left my-3">2. Hasil Evaluasi</h4>
  117. </NavLink>
  118. </NavItem>
  119. <NavItem style={stepNavitemStyle}>
  120. <NavLink
  121. tag="div"
  122. className={classnames({
  123. active: this.state.activeStep === "3",
  124. })}
  125. onClick={this.toggleStep("3")}
  126. >
  127. <h4 className="text-left my-3">3. Penetapan Sanksi</h4>
  128. </NavLink>
  129. </NavItem>
  130. <NavItem style={stepNavitemStyle}>
  131. <NavLink
  132. tag="div"
  133. className={classnames({
  134. active: this.state.activeStep === "4",
  135. })}
  136. onClick={this.toggleStep("4")}
  137. >
  138. <h4 className="text-left my-3">4. Nomor Surat Keputusan Sanksi</h4>
  139. </NavLink>
  140. </NavItem>
  141. <NavItem style={stepNavitemStyle}>
  142. <NavLink
  143. tag="div"
  144. className={classnames({
  145. active: this.state.activeStep === "5",
  146. })}
  147. onClick={this.toggleStep("5")}
  148. >
  149. <h4 className="text-left my-3">5. Ringkasan</h4>
  150. </NavLink>
  151. </NavItem>
  152. </Nav>
  153. </Col>
  154. <Col xs="8">
  155. <TabContent activeTab={this.state.activeStep} className="border-0">
  156. <TabPane tabId="1">
  157. <div className="pt-3 mb-3">
  158. <h2>Detail Laporan</h2>
  159. {pelaporan?.data ? <DetailLaporan noTitle data={pelaporan.data[0]} /> : <Loader />}
  160. </div>
  161. <hr />
  162. <div className="d-flex">
  163. <Button className="ml-auto" color="primary" onClick={this.toggleStep("2")}>
  164. Next
  165. </Button>
  166. </div>
  167. </TabPane>
  168. <TabPane tabId="2">
  169. <div className="pt-3 mb-3">
  170. <h2>Hasil Evaluasi</h2>
  171. <Card className="card-default">
  172. {pelaporan?.data ? (
  173. <CardBody>
  174. <TableRiwayat data={pelaporan.data[0]} />
  175. </CardBody>
  176. ) : (
  177. <Loader />
  178. )}
  179. </Card>
  180. </div>
  181. <hr />
  182. <div className="d-flex">
  183. <Button color="secondary" onClick={this.toggleStep("1")}>
  184. Previous
  185. </Button>
  186. <Button className="ml-auto" color="primary" onClick={this.toggleStep("3")}>
  187. Next
  188. </Button>
  189. </div>
  190. </TabPane>
  191. <TabPane tabId="3">
  192. <div className="pt-3 mb-3">
  193. <h2>Penetapan Sanksi</h2>
  194. <TablePenetapanSanksi setCheckedData={this.setCheckedData} />
  195. </div>
  196. <hr />
  197. <div className="d-flex">
  198. <Button color="secondary" onClick={this.toggleStep("2")}>
  199. Previous
  200. </Button>
  201. <Button className="ml-auto" color="primary" onClick={this.toggleStep("4")}>
  202. Next
  203. </Button>
  204. </div>
  205. </TabPane>
  206. <TabPane tabId="4">
  207. <div className="pt-3 mb-3">
  208. <h2>Nomor Surat Keputusan Sanksi</h2>
  209. <UploadSurat setUploadSuratSanksi={this.setUploadSuratSanksi} />
  210. </div>
  211. <hr />
  212. <div className="d-flex">
  213. <Button color="secondary" onClick={this.toggleStep("3")}>
  214. Previous
  215. </Button>
  216. <Button className="ml-auto" color="primary" onClick={this.toggleStep("5")}>
  217. Next
  218. </Button>
  219. </div>
  220. </TabPane>
  221. <TabPane tabId="5">
  222. <div className="pt-3 mb-3">
  223. <h2>Ringkasan</h2>
  224. {pelaporan?.data ? <Ringkasan dataLaporan={pelaporan.data[0]} dataPelanggaran={dataPelanggaran.data} dataUpload={dataUpload} /> : <Loader />}
  225. </div>
  226. <hr />
  227. <div className="d-flex">
  228. <Button color="secondary" onClick={this.toggleStep("4")}>
  229. Previous
  230. </Button>
  231. <Button className="ml-auto" color="primary" onClick={this.done}>
  232. Done
  233. </Button>
  234. </div>
  235. </TabPane>
  236. </TabContent>
  237. </Col>
  238. </Row>
  239. </CardBody>
  240. </Card>
  241. </div>
  242. </ContentWrapper>
  243. );
  244. }
  245. }
  246. const mapStateToProps = (state) => ({ user: state.user });
  247. export default connect(mapStateToProps)(ProsesSanksi);