Dashboard sipadu mbip
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ConfiscatedCompoundDatatable.js 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. import React, { Component } from 'react';
  2. import ReactDOM from 'react-dom';
  3. import ClipLoader from 'react-spinners/ClipLoader';
  4. import {ExportCSV} from '../ExportCSV';
  5. import DatatableParkir from './../DatatableParkir';
  6. import DatatablePelbagai from './../DatatablePelbagai';
  7. export default class ConfiscatedCompoundDatatable extends Component {
  8. constructor(props) {
  9. super(props);
  10. this.state = {
  11. current_id: this.props.current_id,
  12. dataCompound: [],
  13. loading: 'null',
  14. current_url: 'null',
  15. total:{
  16. baru: this.props.baru,
  17. invest: this.props.invest,
  18. notice: this.props.notice,
  19. inven: this.props.inven,
  20. collap: this.props.collap,
  21. comp: this.props.comp
  22. },
  23. check: {
  24. kpd: true,
  25. date: true,
  26. faulty: true,
  27. enforcer: true,
  28. platno: false,
  29. companyno: false,
  30. nric: false,
  31. },
  32. form: {
  33. modul: this.props.modul,
  34. status: this.props.status,
  35. type: 'Parkir',
  36. kpd: '',
  37. start_date: new Date().getFullYear() + '-' + (new Date().getMonth()+1) + '-' + new Date().getDate(),
  38. end_date: new Date().getFullYear() + '-' + (new Date().getMonth()+1) + '-' + new Date().getDate(),
  39. faulty: 'All',
  40. enforcer: 'All',
  41. plate_no: '',
  42. company_no: '',
  43. nric: '',
  44. },
  45. list_enforcer: JSON.parse(this.props.enforcer),
  46. list_faulty: JSON.parse(this.props.faulty),
  47. };
  48. this.onCheckKpd = this.onCheckKpd.bind(this);
  49. this.onCheckDate = this.onCheckDate.bind(this);
  50. this.onCheckPlateNo = this.onCheckPlateNo.bind(this);
  51. this.onCheckCompanyNo = this.onCheckCompanyNo.bind(this);
  52. this.onCheckNric = this.onCheckNric.bind(this);
  53. this.onChangeKpd = this.onChangeKpd.bind(this);
  54. this.onChangeType = this.onChangeType.bind(this);
  55. this.onChangeStart = this.onChangeStart.bind(this);
  56. this.onChangeEnd = this.onChangeEnd.bind(this);
  57. this.onChangeFaulty = this.onChangeFaulty.bind(this);
  58. this.onChangeEnforcer = this.onChangeEnforcer.bind(this);
  59. this.onChangePlateNo = this.onChangePlateNo.bind(this);
  60. this.onChangeCompanyNo = this.onChangeCompanyNo.bind(this);
  61. this.onChangeNric = this.onChangeNric.bind(this);
  62. this.onSubmit = this.onSubmit.bind(this);
  63. }
  64. onCheckKpd(e){
  65. this.setState(prevState => ({
  66. check: {
  67. ...prevState.check,
  68. kpd: !this.state.check.kpd
  69. },
  70. }))
  71. }
  72. onCheckDate(e){
  73. this.setState(prevState => ({
  74. check: {
  75. ...prevState.check,
  76. date: !this.state.check.date
  77. }
  78. }))
  79. }
  80. onCheckPlateNo(e){
  81. this.setState(prevState => ({
  82. check: {
  83. ...prevState.check,
  84. platno: !this.state.check.platno
  85. }
  86. }))
  87. }
  88. onCheckCompanyNo(e){
  89. this.setState(prevState => ({
  90. check: {
  91. ...prevState.check,
  92. companyno: !this.state.check.companyno
  93. }
  94. }))
  95. }
  96. onCheckNric(e){
  97. this.setState(prevState => ({
  98. check: {
  99. ...prevState.check,
  100. nric: !this.state.check.nric
  101. }
  102. }))
  103. }
  104. onChangeKpd(e){
  105. let value = e.target.value;
  106. this.setState(prevState => ({
  107. form: {
  108. ...prevState.form,
  109. kpd: value
  110. }
  111. }));
  112. }
  113. onChangeType(e){
  114. let value = e.target.value;
  115. this.setState(prevState => ({
  116. form: {
  117. ...prevState.form,
  118. type: value
  119. },
  120. loading: 'null',
  121. dataCompound: []
  122. }));
  123. }
  124. onChangeStart(e){
  125. let value = e.target.value;
  126. this.setState(prevState => ({
  127. form: {
  128. ...prevState.form,
  129. start_date: value
  130. }
  131. }));
  132. }
  133. onChangeEnd(e){
  134. let value = e.target.value;
  135. this.setState(prevState => ({
  136. form: {
  137. ...prevState.form,
  138. end_date: value
  139. }
  140. }));
  141. }
  142. onChangeFaulty(e){
  143. let value = e.target.value;
  144. this.setState(prevState => ({
  145. form: {
  146. ...prevState.form,
  147. faulty: value
  148. }
  149. }));
  150. }
  151. onChangeEnforcer(e){
  152. let value = e.target.value;
  153. this.setState(prevState => ({
  154. form: {
  155. ...prevState.form,
  156. enforcer: value
  157. }
  158. }));
  159. }
  160. onChangePlateNo(e){
  161. let value = e.target.value;
  162. this.setState(prevState => ({
  163. form: {
  164. ...prevState.form,
  165. plate_no: value
  166. }
  167. }));
  168. }
  169. onChangeCompanyNo(e){
  170. let value = e.target.value;
  171. this.setState(prevState => ({
  172. form: {
  173. ...prevState.form,
  174. company_no: value
  175. }
  176. }));
  177. }
  178. onChangeNric(e){
  179. let value = e.target.value;
  180. this.setState(prevState => ({
  181. form: {
  182. ...prevState.form,
  183. nric: value
  184. }
  185. }));
  186. }
  187. onSubmit(e){
  188. e.preventDefault();
  189. this.setState({ loading: true });
  190. let formData = {
  191. type: this.state.form.type,
  192. enforcer: this.state.form.enforcer,
  193. faulty: this.state.form.faulty,
  194. modul: this.state.form.modul,
  195. status: this.state.form.status,
  196. };
  197. if(this.state.check.date){
  198. formData = {
  199. ...formData,
  200. start_date: this.state.form.start_date,
  201. end_date: this.state.form.end_date,
  202. }
  203. }else{
  204. formData = {
  205. ...formData,
  206. start_date: '',
  207. end_date: '',
  208. }
  209. }
  210. if(this.state.check.kpd){
  211. formData = {
  212. ...formData,
  213. kpd: this.state.form.kpd,
  214. }
  215. }else if(this.state.check.platno){
  216. formData = {
  217. ...formData,
  218. plate_no: this.state.form.plate_no,
  219. }
  220. }else if(this.state.check.companyno){
  221. formData = {
  222. ...formData,
  223. company_no: this.state.form.company_no,
  224. }
  225. }else if(this.state.check.nric){
  226. formData = {
  227. ...formData,
  228. nric: this.state.form.nric,
  229. }
  230. }
  231. let queryString = Object.keys(formData).map(key => key + '=' + formData[key]).join('&');
  232. fetch('/api/list/compound?'+queryString).then(response => {
  233. response.json().then(res => {
  234. this.setState({ dataCompound: res.data, loading: false, current_url: '/api/list/compound?'+queryString });
  235. })
  236. })
  237. }
  238. render() {
  239. return (
  240. <div className="row">
  241. <div className="col-xl-2 col-md-12">
  242. <div className="panel panel-default">
  243. <div className="panel-heading">
  244. <h4 className="panel-title"> Modul Kategori </h4>
  245. </div>
  246. <div className="panel-body">
  247. <div><a href="/main/compound">Baru</a>&nbsp;<label className="badge badge-inverse-danger">{this.state.total.baru}</label></div>
  248. <div><a href="/main/compound/investigation">Pengesahan Kompaun</a>&nbsp;<label className="badge badge-success">{this.state.total.invest}</label></div>
  249. <div><a href="/main/compound/notice">Notis Amaran</a>&nbsp;<label className="badge badge-success">{this.state.total.notice}</label> </div>
  250. <div><a href="/main/compound/confiscated" className="active">Sitaan</a>&nbsp;<label className="badge badge-success">{this.state.total.inven}</label> </div>
  251. <div><a href="/main/compound/completed">Kompaun Dijelaskan</a>&nbsp;<label className="badge badge-success">{this.state.total.comp}</label></div>
  252. </div>
  253. </div>
  254. </div>
  255. <div className="col-xl-10 col-md-12">
  256. <div className="row">
  257. <div className="col-md-12">
  258. <div className="card">
  259. <div className="card-block">
  260. <form className="main cussPayment" onSubmit={this.onSubmit}>
  261. <div className="row clearfix">
  262. <div className="col-lg-3">
  263. <label><input type="checkbox" onClick={this.onCheckKpd} defaultChecked={true} />&nbsp;<b>No</b></label>
  264. <div className="input-group input-group-sm">
  265. <span className="input-group-prepend">
  266. <label className="input-group-text">KPD</label>
  267. </span>
  268. <input type="text" className="form-control form-control-sm" placeholder="SCM4744" value={this.state.form.kpd} onChange={this.onChangeKpd} required={this.state.check.kpd}/>
  269. </div>
  270. </div>
  271. <div className="col-lg-3">
  272. <label><b>Jenis Kompaun <code>*</code></b></label>
  273. <select className="form-control form-control-sm" value={this.state.form.type} onChange={this.onChangeType} required>
  274. <option>Parkir</option>
  275. <option>Pelbagai</option>
  276. </select>
  277. </div>
  278. </div>
  279. <div className="row clearfix" style={{marginBottom: "1.25em"}}>
  280. <div className="col-lg-12 col-md-12 col-sm-12 col-xs-12">
  281. <label><input type="checkbox" onClick={this.onCheckDate} defaultChecked={true} />&nbsp;<b>Tarikh</b></label>
  282. </div>
  283. <div className="col-lg-3">
  284. <input type="date" className=" form-control form-control-sm" value={this.state.form.start_date} onChange={this.onChangeStart} required={this.state.check.date}/>
  285. </div>
  286. <span><b>-</b></span>
  287. <div className="col-lg-3">
  288. <input type="date" className="form-control form-control-sm" value={this.state.form.end_date} onChange={this.onChangeEnd} />
  289. </div>
  290. </div>
  291. <div className="row clearfix" style={{marginBottom: "1.25em"}}>
  292. <div className="col-lg-12 col-md-12 col-sm-12 col-xs-12">
  293. <label><b>Seksyen Kesalahan</b></label>
  294. </div>
  295. <div className="col-lg-9 .offset-xl-3">
  296. <select className="form-control form-control-sm" defaultValue="All" onChange={this.onChangeFaulty} required={this.state.check.faulty}>
  297. <option value="All">All</option>
  298. {this.state.list_faulty.map((act,i) =>
  299. <optgroup label={act.nama} key={i}>
  300. {act.faulty.map((faulty,j) =>
  301. <option key={j} value={faulty._id}>Seksyen {faulty.sketr}</option>
  302. )}
  303. </optgroup>
  304. )}
  305. </select>
  306. </div>
  307. </div>
  308. <div className="row clearfix" style={{marginBottom: "1.25em"}}>
  309. <div className="col-lg-12 col-md-12 col-sm-12 col-xs-12">
  310. <label><b>PenguatKuasa</b></label>
  311. </div>
  312. <div className="col-lg-6 .offset-xl-6">
  313. <select className="form-control form-control-sm" defaultValue="All" onChange={this.onChangeEnforcer} required={this.state.check.enforcer}>
  314. <option value="All">All</option>
  315. {this.state.list_enforcer.map((staff, i) =>
  316. <option key={i} value={staff._id}>{staff.no_badan}, {staff.full_name}</option>
  317. )}
  318. </select>
  319. </div>
  320. </div>
  321. <div className="row clearfix" style={{marginBottom: "1.25em"}}>
  322. <div className="col-lg-3">
  323. <label><input type="checkbox" onClick={this.onCheckPlateNo} defaultChecked={false} />&nbsp;<b>No.Plat</b></label>
  324. <input type="text" className="form-control form-control-sm" placeholder="no plat" value={this.state.form.plate_no} onChange={this.onChangePlateNo} required={this.state.check.platno}/>
  325. </div>
  326. <div className="col-lg-3">
  327. <label><input type="checkbox" onClick={this.onCheckCompanyNo} defaultChecked={false} />&nbsp;<b> No.Syarikat</b></label>
  328. <input type="text" className="form-control form-control-sm" placeholder="no syarikat" value={this.state.form.company_no} onChange={this.onChangeCompanyNo} required={this.state.check.companyno}/>
  329. </div>
  330. <div className="col-lg-3">
  331. <label><input type="checkbox" onClick={this.onCheckNric} defaultChecked={false} />&nbsp;<b>NRIC</b></label>
  332. <input type="text" className="form-control form-control-sm" placeholder="nric" value={this.state.form.nric} onChange={this.onChangeNric} required={this.state.check.nric} />
  333. </div>
  334. </div>
  335. <div className="form-group">
  336. <button type="submit" id="tapis" className="btn btn-info btn-sm waves-effect waves-light">Carian</button>
  337. </div>
  338. </form>
  339. </div>
  340. </div>
  341. </div>
  342. </div>
  343. </div>
  344. <div className="col-md-12">
  345. <div className="card">
  346. <div className="card-header">
  347. <h5>Senarai Kompaun</h5>
  348. { this.state.dataCompound.length > 0 ?
  349. <ExportCSV csvData={this.state.dataCompound} fileName="Report_saman_1" type={this.state.form.type} />
  350. : ''
  351. }
  352. </div>
  353. <div className="card-block contact-details">
  354. { this.state.loading !== 'null' ?
  355. !this.state.loading ?
  356. this.state.form.type === 'Parkir' ?
  357. <DatatableParkir data={this.state.dataCompound} url={this.state.current_url} current_id={this.state.current_id} />
  358. :
  359. <DatatablePelbagai data={this.state.dataCompound} url={this.state.current_url} current_id={this.state.current_id}/>
  360. :
  361. <div className='sweet-loading' style={{'textAlign':'center'}}>
  362. <ClipLoader
  363. style={{'border-color': 'red'}}
  364. sizeUnit={"px"}
  365. size={50}
  366. color={'#123abc'}
  367. loading={this.state.loading}
  368. />
  369. </div>
  370. : ''
  371. }
  372. </div>
  373. </div>
  374. </div>
  375. </div>
  376. );
  377. }
  378. }
  379. if (document.getElementById('confiscatedcompound')) {
  380. const component = document.getElementById('confiscatedcompound');
  381. const props = Object.assign({}, component.dataset)
  382. ReactDOM.render(<ConfiscatedCompoundDatatable {...props} />, component);
  383. }