SuratBA.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. import React, { Component } from 'react';
  2. import SignatureCanvas from 'react-signature-canvas'
  3. import { getOneLaporan, updateLaporan } from "@/actions/pelaporan";
  4. import { Row, Col, Input, FormGroup, Label, Progress } from "reactstrap";
  5. import { connect } from "react-redux";
  6. import moment from "moment";
  7. import 'moment/locale/id'
  8. moment.locale('id')
  9. class ComponentToPrint extends React.Component {
  10. formData = {}
  11. constructor(props) {
  12. super(props);
  13. this.state = {
  14. dataLaporan: {},
  15. tempat: "[Mohon Diisi]",
  16. isEditMode: false,
  17. temuanLain: [],
  18. memberatkan: [],
  19. formData: null,
  20. meringankan: [],
  21. namaPeserta: [{ nama: "", ttd: [] }]
  22. };
  23. }
  24. static getInitialProps = async ({ query }) => {
  25. return { query };
  26. };
  27. componentDidMount = async () => {
  28. const { query, token } = this.props;
  29. const { id } = query;
  30. const dataLaporan = await getOneLaporan(token, id);
  31. this.setState({ dataLaporan });
  32. };
  33. changeEditMode = () => {
  34. this.setState({
  35. isEditMode: !this.state.isEditMode,
  36. })
  37. }
  38. updateValueTempat = () => {
  39. this.setState({
  40. isEditMode: false,
  41. tempat: this.refs.inputTempat.value
  42. })
  43. }
  44. handleTemuanLain = (e) => {
  45. const addTemuanLain = this.refs.inputTemuan.value
  46. this.setState({
  47. temuanLain: [...this.state.temuanLain, addTemuanLain]
  48. }, this.setformData)
  49. }
  50. handleMemberatkan = (e) => {
  51. const addMemberatkan = this.refs.inputMemberatkan.value
  52. this.setState({
  53. memberatkan: [...this.state.memberatkan, addMemberatkan]
  54. }, this.setformData)
  55. }
  56. handleMeringankan = (e) => {
  57. const addMeringankan = this.refs.inputMeringankan.value
  58. this.setState({
  59. meringankan: [...this.state.meringankan, addMeringankan]
  60. }, this.setformData)
  61. }
  62. setNamaPeserta = () => {
  63. const addNamaPeserta = this.refs.inputNama.value
  64. this.setState({
  65. namaPeserta: [...this.state.namaPeserta, addNamaPeserta]
  66. })
  67. }
  68. setformData = (data) => {
  69. this.setState({
  70. formData: this.state
  71. })
  72. }
  73. render() {
  74. const { dataLaporan, tempat, isEditMode, temuanLain, formData, memberatkan, meringankan, namaPeserta } = this.state
  75. const { dataPelanggaran } = this.props
  76. return (
  77. <div className='BA-div' >
  78. <div className='BA-logo'>
  79. <img className='BA-logo' src="/static/img/logo-single-1-login.png" alt="logo" />
  80. </div>
  81. <div>
  82. <h3 className='BA-header'>LAPORAN HASIL EVALUASI DAN PEMBAHASAN</h3>
  83. {dataLaporan.data && (<h3 className='BA-header'>{dataLaporan.data.pt.nama}</h3>)}
  84. <div className='BA-body'>
  85. <p className='BA-body'>
  86. Pada hari ini <span>{moment(dataLaporan.createAt).locale("id").format("dddd")}</span>, tanggal&nbsp;{moment(dataLaporan.createAt).format("D")}&nbsp; bulan &nbsp;{moment(dataLaporan.createAt).format("MMMM")} tahun &nbsp;{moment(dataLaporan.createAt).format("YYYY")},
  87. bertempat di
  88. {isEditMode ?
  89. <span>
  90. <input type='text'
  91. defaultValue=""
  92. ref="inputTempat" />
  93. <button className='bg-transparent button-transparent border-0 fas fa-times-circle text-danger' onClick={this.changeEditMode} />
  94. <button className='bg-transparent button-transparent border-0 fas fa-check-circle text-success' onClick={this.updateValueTempat} />
  95. </span>
  96. :
  97. <span color='danger' onClick={this.changeEditMode}>&nbsp;{tempat}</span>
  98. }
  99. ,
  100. telah dilakukan rapat evaluasi dan pembahasan dugaan pelanggaran penyelenggaraan oleh perguruan tinggi dan/atau badan penyelenggara {dataLaporan.data && (<span>{dataLaporan.data.pt.nama}</span>)}, yang dihadiri oleh:
  101. </p>
  102. <div className='BA-body'>
  103. <ol>
  104. <li contenteditable='true'>Isi name</li>
  105. <li contenteditable='true'>Isi nama</li>
  106. <li contenteditable='true'>Isi nama</li>
  107. </ol>
  108. </div>
  109. </div>
  110. </div>
  111. <div className='BA-body'>
  112. <p className='BA-body'>
  113. Berdasarkan rapat evaluasi dan pembahasan dugaan pelanggaran penyelenggaraan oleh perguruan tinggi dan/atau badan penyelenggara {dataLaporan.data && (<span>{dataLaporan.data.pt.nama}</span>)}, disampaikan sebagai berikut:
  114. </p>
  115. <div className='BA-body'>
  116. <ol>
  117. <li>Telah dibacakan Berita Acara Evaluasi Kinerja Perguruan Tinggi …….., tanggal ……..;</li>
  118. <li>Telah dilakukan pembahasan rekomendasi mengenai fakta-fakta yang ditemukan Tim EKPT Ditjen Diktiristek, dengan temuan sebagai berikut:</li>
  119. {/* <div style={{ overflow: "auto" }}> */}
  120. <table className='table-a'>
  121. <thead>
  122. <tr>
  123. <th rowspan="2">NO</th>
  124. <th rowspan="2">NAMA DAN IZIN PRODI</th>
  125. <th colspan="3">PELANGGARAN TERHADAP PERMENDIKBUD NO.7 TAHUN 2020</th>
  126. <th rowspan="2">SIMPULAN</th>
  127. <th rowspan="2">REKOMENDASI</th>
  128. </tr>
  129. <tr>
  130. <th>PASAL</th>
  131. <th>BUTIR PELANGGARAN</th>
  132. <th>DESKRIPSI PELANGGARAN</th>
  133. </tr>
  134. </thead>
  135. <tbody>
  136. {dataPelanggaran
  137. ? dataPelanggaran.map((e, i) => (
  138. <tr key={e._id}>
  139. <td>{++i}</td>
  140. {dataLaporan.data && (<td className='BA-header'>{dataLaporan.data.pt.nama}</td>)}
  141. <td>{e.pasal}</td>
  142. <td>{e.butir_pelanggaran}</td>
  143. <td>{e.pelanggaran}</td>
  144. <td contenteditable='true'>[Mohon Diisi]</td>
  145. <td contenteditable='true'>[Mohon Diisi]</td>
  146. </tr>
  147. ))
  148. : ""}
  149. </tbody>
  150. </table>
  151. {/* </div> */}
  152. <li>Temuan Lain:
  153. {isEditMode ?
  154. <span>
  155. <input type='text' defaultValue={""} ref="inputTemuan" />
  156. <button className='bg-transparent button-transparent border-0 fas fa-check-circle text-success' onClick={this.handleTemuanLain} />
  157. <button className='bg-transparent button-transparent border-0 fas fa-times-circle text-danger' onClick={this.changeEditMode} />
  158. </span>
  159. : <span onClick={this.changeEditMode}>klik untuk isi</span>}
  160. <ol type="a">
  161. {temuanLain.map((value) => <li>{value}</li>)}
  162. </ol>
  163. </li>
  164. <li>Hal-hal yang memberatkan, sebagai berikut:
  165. {isEditMode ?
  166. <span>
  167. <input type='text' defaultValue={""} ref="inputMemberatkan" />
  168. <button className='bg-transparent button-transparent border-0 fas fa-check-circle text-success' onClick={this.handleMemberatkan} />
  169. <button className='bg-transparent button-transparent border-0 fas fa-times-circle text-danger' onClick={this.changeEditMode} />
  170. </span>
  171. : <span onClick={this.changeEditMode}>klik untuk isi</span>}
  172. <ol type="a">
  173. {memberatkan.map((value) => <li>{value}</li>)}
  174. </ol>
  175. </li>
  176. <li>hal-hal yang meringankan, sebagai berikut:
  177. {isEditMode ?
  178. <span>
  179. <input type='text' defaultValue={""} ref="inputMeringankan" />
  180. <button className='bg-transparent button-transparent border-0 fas fa-check-circle text-success' onClick={this.handleMeringankan} />
  181. <button className='bg-transparent button-transparent border-0 fas fa-times-circle text-danger' onClick={this.changeEditMode} />
  182. </span>
  183. : <span onClick={this.changeEditMode}>klik untuk isi</span>}
  184. <ol type="a">
  185. {meringankan.map((value) => <li>{value}</li>)}
  186. </ol>
  187. </li>
  188. <li>
  189. Berdasarkan pembahasan yang dilakukan, disepakati untuk merekomendasikan <strong contenteditable='true'>“Sanksi Administratif berupa …………………………..”.</strong>
  190. </li>
  191. </ol>
  192. </div>
  193. <p className='BA-body'>
  194. Demikian Laporan Evaluasi dan Pembahasan ini dibuat dengan sesungguhnya dan telah dibaca dan dicermati oleh peserta rapat yang hadir.
  195. </p>
  196. <table className='demo'>
  197. <tbody>
  198. <tr>
  199. <th colspan="4">PESERTA RAPAT PENYUSUNAN REKOMENDASI</th>
  200. </tr>
  201. <tr>
  202. <td contenteditable='true' onChange={this.setNamaPeserta} ref="inputNama">Isi Nama</td>
  203. <td>
  204. <SignatureCanvas penColor='black' canvasProps={{ width: 200, height: 100, className: 'sigCanvas' }} />
  205. </td>
  206. <td contenteditable='true'>Isi Nama</td>
  207. <td>
  208. <SignatureCanvas penColor='black' canvasProps={{ width: 200, height: 100, className: 'sigCanvas' }} />
  209. </td>
  210. </tr>
  211. <tr>
  212. <td contenteditable='true'>Isi Nama</td>
  213. <td>
  214. <SignatureCanvas penColor='black' canvasProps={{ width: 200, height: 100, className: 'sigCanvas' }} />
  215. </td>
  216. <td contenteditable='true'>Isi Nama</td>
  217. <td>
  218. <SignatureCanvas penColor='black' canvasProps={{ width: 200, height: 100, className: 'sigCanvas' }} />
  219. </td>
  220. </tr>
  221. <tr>
  222. <td contenteditable='true'>Isi Nama</td>
  223. <td>
  224. <SignatureCanvas penColor='black' canvasProps={{ width: 200, height: 100, className: 'sigCanvas' }} />
  225. </td>
  226. <td contenteditable='true'>Isi Nama</td>
  227. <td>
  228. <SignatureCanvas penColor='black' canvasProps={{ width: 200, height: 100, className: 'sigCanvas' }} />
  229. </td>
  230. </tr>
  231. <tr>
  232. <td contenteditable='true'>Isi Nama</td>
  233. <td>
  234. <SignatureCanvas penColor='black' canvasProps={{ width: 200, height: 100, className: 'sigCanvas' }} />
  235. </td>
  236. <td contenteditable='true'>Isi Nama</td>
  237. <td>
  238. <SignatureCanvas penColor='black' canvasProps={{ width: 200, height: 100, className: 'sigCanvas' }} />
  239. </td>
  240. </tr>
  241. <tr>
  242. <td contenteditable='true'>Isi Nama</td>
  243. <td>
  244. <SignatureCanvas penColor='black' canvasProps={{ width: 200, height: 100, className: 'sigCanvas' }} />
  245. </td>
  246. <td contenteditable='true'>Isi Nama</td>
  247. <td>
  248. <SignatureCanvas penColor='black' canvasProps={{ width: 200, height: 100, className: 'sigCanvas' }} />
  249. </td>
  250. </tr>
  251. <tr>
  252. <td contenteditable='true'>Isi Nama</td>
  253. <td>
  254. <SignatureCanvas penColor='black' canvasProps={{ width: 200, height: 100, className: 'sigCanvas' }} />
  255. </td>
  256. <td contenteditable='true'>Isi Nama</td>
  257. <td>
  258. <SignatureCanvas penColor='black' canvasProps={{ width: 200, height: 100, className: 'sigCanvas' }} />
  259. </td>
  260. </tr>
  261. <tr>
  262. <td contenteditable='true'>Isi Nama</td>
  263. <td>
  264. <SignatureCanvas penColor='black' canvasProps={{ width: 200, height: 100, className: 'sigCanvas' }} />
  265. </td>
  266. <td contenteditable='true'>Isi Nama</td>
  267. <td>
  268. <SignatureCanvas penColor='black' canvasProps={{ width: 200, height: 100, className: 'sigCanvas' }} />
  269. </td>
  270. </tr>
  271. </tbody>
  272. </table>
  273. </div>
  274. <div id="footer">
  275. <span>*LAPORAN HASIL EVALUASI DAN PEMBAHASAN …………. – …bulan&tahun…</span>
  276. {/* <span class="custom-footer-page-number">Number: </span> */}
  277. </div>
  278. </div>
  279. );
  280. }
  281. }
  282. export default ComponentToPrint