laporan.controller.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746
  1. const axios = require('../../utils/axios')
  2. const handleError = require('../../utils/v1/handleError')
  3. const response = require('../../utils/responseHandler')
  4. const laporanModel = require('../../model/laporan.model')
  5. const pelanggaranModel = require('../../model/pelanggaran.model')
  6. const pemantauanModel = require('../../model/pemantauan.model')
  7. const { validate } = require('../../utils/v1/validation')
  8. const { notifWA } = require('../../utils/v1/notifFunction')
  9. const { addManyDokumen } = require('../../utils/dokumenFunction')
  10. const userModel = require('../../model/user.model')
  11. const {
  12. cekSatuDataLaporan,
  13. cekBanyakDataLaporan,
  14. cekBanyakDataSanksi,
  15. } = require('../../utils/v1/cekData')
  16. const { TEMPLATE_LAPORAN, PELAPORAN, CREATE_LAPORAN, DIKTI, LLDIKTI, DITUTUP, DELEGASI, TRUE, FALSE } = require('../../utils/constanta')
  17. const logModel = require('../../model/log.model')
  18. const kontakModel = require('../../model/kontak.model')
  19. const sanksiModel = require('../../model/sanksi.model')
  20. const { isValidObjectId } = require('mongoose')
  21. exports.create = handleError(async (req, res) => {
  22. const user = req.user
  23. const files = req.files
  24. const isValid = validate(res, req.body, {
  25. no_laporan: 'string',
  26. pt_id: 'string',
  27. pelanggaran_id: 'string',
  28. keterangan: 'string',
  29. })
  30. if (!isValid) return
  31. const { no_laporan, pt_id, keterangan } = req.body
  32. let { pelanggaran_id } = req.body
  33. const pt = await axios.get(
  34. `https://api.kemdikbud.go.id:8243/pddikti/1.2/pt/${pt_id}`
  35. )
  36. if (pt.length === 0)
  37. return response.error(res, {
  38. message: 'pt_id tidak ditemukan',
  39. })
  40. let dokumen_id = []
  41. if (files.length) {
  42. const dokumen = await addManyDokumen(files)
  43. dokumen_id = dokumen.map((e) => e._id)
  44. }
  45. pelanggaran_id = pelanggaran_id.split(',')
  46. const pelanggaran = await pelanggaranModel.find({
  47. _id: {
  48. $in: pelanggaran_id,
  49. },
  50. })
  51. if (!pelanggaran.length)
  52. return response.error(res, { message: 'pelanggaran_id tidak ada' })
  53. let data = {
  54. no_laporan,
  55. user: user._id,
  56. dokumen: dokumen_id,
  57. pt: pt[0],
  58. pelanggaran: pelanggaran_id,
  59. keterangan,
  60. role_data: user.role.id === 2021 ? LLDIKTI : DIKTI,
  61. role_asal: user.role.id === 2021 ? LLDIKTI : DIKTI,
  62. level: 2,
  63. step: [PELAPORAN],
  64. flag: PELAPORAN,
  65. }
  66. data = await laporanModel.create(data)
  67. let contacts = await kontakModel.find()
  68. contacts = contacts.map((e) => e.nama).join(', ')
  69. try {
  70. const notif = await notifWA(TEMPLATE_LAPORAN, [
  71. {
  72. key: '1',
  73. value: 'nama',
  74. value_text: user.nama,
  75. },
  76. { key: '2', value: 'pt', value_text: pt[0].nama },
  77. { key: '3', value: 'keterangan', value_text: keterangan },
  78. { key: '4', value: 'no_laporan', value_text: no_laporan },
  79. ])
  80. if (notif[0].status == 'success') {
  81. await logModel.create({
  82. aktivitas: `Server berhasil mengirim notif wa kepada ${contacts} untuk Pembuatan Laporan`,
  83. })
  84. } else {
  85. await logModel.create({
  86. aktivitas: `Server gagal mengirim notif wa kepada ${contacts} untuk Pembuatan Laporan, Error: ${JSON.stringify(notif)}`,
  87. })
  88. }
  89. } catch (error) {
  90. await logModel.create({
  91. aktivitas: `Server gagal mengirim notif wa kepada ${contacts} untuk Pembuatan Laporan, Error: ${error.message}`,
  92. })
  93. }
  94. await pemantauanModel.create({
  95. laporan: data._id,
  96. action: CREATE_LAPORAN,
  97. pt_id: pt[0].id,
  98. user: user._id,
  99. keterangan: 'Membuat Laporan',
  100. dokumen: dokumen_id,
  101. for_pt: false,
  102. })
  103. return response.success(res, {
  104. message: 'Berhasil menambah laporan',
  105. data,
  106. })
  107. })
  108. // exports.public = handleError(async (req, res) => {
  109. // const isValid = validate(res, req.body, {
  110. // nama: 'string',
  111. // email: 'email',
  112. // alamat: 'string',
  113. // no_hp: 'string',
  114. // no_laporan: 'string',
  115. // pt_id: 'string',
  116. // pelanggaran_id: 'string',
  117. // keterangan: 'string',
  118. // is_private: { type: 'string', enum: ['true', 'false'] },
  119. // })
  120. // if (!isValid) return
  121. // const {
  122. // no_laporan,
  123. // pt_id,
  124. // keterangan,
  125. // nama,
  126. // email,
  127. // alamat,
  128. // no_hp,
  129. // is_private,
  130. // } = req.body
  131. // let { pelanggaran_id } = req.body
  132. // const pt = await axios.get(
  133. // `https://api.kemdikbud.go.id:8243/pddikti/1.2/pt/${pt_id}`
  134. // )
  135. // if (!pt) {
  136. // return response.error(res, {
  137. // message: 'pt_id tidak ditemukan',
  138. // })
  139. // }
  140. // const { dokumen, foto } = req.files
  141. // if (!foto.length) {
  142. // return response.error(res, {
  143. // message: 'foto harus ada',
  144. // })
  145. // }
  146. // const foto_id = await addDokumen(foto[0])
  147. // const user = await userModel.create({
  148. // nama,
  149. // email,
  150. // no_hp,
  151. // alamat,
  152. // isPublic: true,
  153. // isPrivate: is_private === 'true',
  154. // foto: foto_id,
  155. // })
  156. // let dokumen_id = []
  157. // if (dokumen?.length) {
  158. // const dataDokumen = await addManyDokumen(dokumen)
  159. // dokumen_id = dataDokumen.map((e) => e._id)
  160. // }
  161. // pelanggaran_id = pelanggaran_id.split(',')
  162. // const pelanggaran = await pelanggaranModel.find({
  163. // _id: {
  164. // $in: pelanggaran_id,
  165. // },
  166. // })
  167. // if (!pelanggaran.length)
  168. // return response.error(res, { message: 'pelanggaran_id tidak ada' })
  169. // let data = {
  170. // no_laporan,
  171. // user: user._id,
  172. // dokumen: dokumen_id,
  173. // pt: pt[0],
  174. // pelanggaran: pelanggaran_id,
  175. // keterangan,
  176. // role_data: 'dikti',
  177. // }
  178. // data = await laporanModel.create(data)
  179. // await pemantauanModel.create({
  180. // laporan: data._id,
  181. // pt_id: pt[0].id,
  182. // user: user._id,
  183. // keterangan: 'Mengajukan Laporan',
  184. // dokumen: dokumen_id,
  185. // for_pt: false,
  186. // })
  187. // await notifWA('d5609c3c-e9e9-4dbe-9a4e-e8fa772d6770', [
  188. // { key: '1', value: 'nama', value_text: nama },
  189. // { key: '2', value: 'pt', value_text: pt[0].nama },
  190. // { key: '3', value: 'keterangan', value_text: keterangan },
  191. // { key: '4', value: 'no_laporan', value_text: no_laporan },
  192. // ])
  193. // return response.success(res, {
  194. // message: 'Berhasil menambah laporan',
  195. // data,
  196. // })
  197. // })
  198. exports.public = handleError(async (req, res) => {
  199. const user = req.user
  200. const no_laporan = req.no_laporan
  201. let level = req.level
  202. const files = req.files
  203. const isValid = validate(res, req.body, {
  204. pt_id: 'string',
  205. pelanggaran_id: 'string',
  206. keterangan: 'string',
  207. // no_verifikasi: 'string',
  208. })
  209. if (!isValid) return
  210. const { pt_id, keterangan, no_verifikasi } = req.body
  211. let { pelanggaran_id } = req.body
  212. if (no_verifikasi && user.no_verifikasi !== no_verifikasi) {
  213. return response.error(res, {
  214. message: 'no_verifikasi tidak sesuai',
  215. error: { no_verifikasi: 'No. Verifikasi tidak sesuai' },
  216. })
  217. } else if (no_verifikasi && user.no_verifikasi === no_verifikasi) {
  218. level = 3
  219. }
  220. const pt = await axios.get(
  221. `https://api.kemdikbud.go.id:8243/pddikti/1.2/pt/${pt_id}`
  222. )
  223. if (pt.length === 0)
  224. return response.error(res, {
  225. message: 'pt_id tidak ditemukan',
  226. })
  227. let dokumen_id = []
  228. if (files.length) {
  229. const dokumen = await addManyDokumen(files)
  230. dokumen_id = dokumen.map((e) => e._id)
  231. }
  232. pelanggaran_id = pelanggaran_id.split(',')
  233. const pelanggaran = await pelanggaranModel.find({
  234. _id: {
  235. $in: pelanggaran_id,
  236. },
  237. })
  238. if (!pelanggaran.length)
  239. return response.error(res, { message: 'pelanggaran_id tidak ada' })
  240. let data = {
  241. no_laporan,
  242. user: user._id,
  243. dokumen: dokumen_id,
  244. pt: pt[0],
  245. pelanggaran: pelanggaran_id,
  246. keterangan,
  247. role_data: 'dikti',
  248. role_asal: 'dikti',
  249. level,
  250. }
  251. data = await laporanModel.create(data)
  252. await pemantauanModel.create({
  253. laporan: data._id,
  254. action: 'CREATE LAPORAN',
  255. pt_id: pt[0].id,
  256. user: user._id,
  257. keterangan: 'Membuat Laporan',
  258. dokumen: dokumen_id,
  259. for_pt: false,
  260. })
  261. if (no_verifikasi) await userModel.findByIdAndUpdate(user._id, { verified: true })
  262. let contacts = await kontakModel.find()
  263. contacts = contacts.map((e) => e.nama).join(', ')
  264. try {
  265. const notif = await notifWA(TEMPLATE_LAPORAN, [
  266. {
  267. key: '1',
  268. value: 'nama',
  269. value_text: user.isPrivate || !user.nama ? 'rahasia' : user.nama,
  270. },
  271. { key: '2', value: 'pt', value_text: pt[0].nama },
  272. { key: '3', value: 'keterangan', value_text: keterangan },
  273. { key: '4', value: 'no_laporan', value_text: no_laporan },
  274. ])
  275. if (notif[0].status == 'success') {
  276. await logModel.create({
  277. aktivitas: `Server berhasil mengirim notif wa kepada ${contacts} untuk Pembuatan Laporan`,
  278. })
  279. } else {
  280. await logModel.create({
  281. aktivitas: `Server gagal mengirim notif wa kepada ${contacts} untuk Pembuatan Laporan, Error: ${JSON.stringify(notif)}`,
  282. })
  283. }
  284. } catch (error) {
  285. await logModel.create({
  286. aktivitas: `Server gagal mengirim notif wa kepada ${contacts} untuk Pembuatan Laporan, Error: ${error.message}`,
  287. })
  288. }
  289. return response.success(res, {
  290. message: 'Berhasil menambah laporan',
  291. data,
  292. })
  293. })
  294. exports.getLaporanByNoLaporanAndId = handleError(async (req, res) => {
  295. const { no_laporan } = req.params
  296. let where = { evaluasi: { $exists: true, $ne: [] } }
  297. if (isValidObjectId(no_laporan)) where._id = no_laporan
  298. else where.no_laporan = no_laporan
  299. const data = await laporanModel.findOne(where)
  300. .populate({ path: 'user', populate: 'foto' })
  301. .populate({ path: 'pelanggaran', select: 'pelanggaran' })
  302. .populate({ path: 'sanksi', populate: ['pelanggaran'] })
  303. .populate('dokumen')
  304. .populate('peserta_penetapan_sanksi.ttd')
  305. .populate({ path: 'evaluasi', populate: ['user', 'dokumen'] })
  306. if (!data) {
  307. return response.error(res, {
  308. message: 'no_laporan atau id tidak ada',
  309. code: 404,
  310. })
  311. }
  312. return response.success(res, {
  313. message: 'Berhasil ambil data laporan',
  314. data,
  315. })
  316. })
  317. exports.getAll = handleError(async (req, res) => {
  318. const user = req.user
  319. const where = {}
  320. const { no_laporan, pt_id, jadwal, evaluasi, aktif, delegasi, all, sanksi, tuntas } =
  321. req.query
  322. if (no_laporan) where.no_laporan = no_laporan
  323. if (pt_id) where['pt.id'] = pt_id
  324. if (aktif) where.aktif = aktif === 'true'
  325. if (all) where.all = true
  326. else if (delegasi) where.delegasi = delegasi === 'true'
  327. if (jadwal === 'true') {
  328. where.jadwal = {
  329. $exists: true,
  330. $ne: null,
  331. }
  332. } else if (evaluasi === 'true') {
  333. where.evaluasi = {
  334. $exists: true,
  335. $ne: null,
  336. $not: {
  337. $size: 0,
  338. },
  339. }
  340. } else if (sanksi === 'true') {
  341. where.sanksi = {
  342. $exists: true,
  343. $ne: null,
  344. }
  345. } else if (tuntas === 'true') {
  346. let dataLaporan = (await cekBanyakDataLaporan(user, { aktif: 'empty', all: true, }, {lean: true}))
  347. .filter(e => e.tuntas?.keterangan || e.aktif === false || e.aktif === true && e.sanksi?.jawaban?.cabut_sanksi?.status === 'Diterima' || e.sanksi?.aktif === false && !e.sanksi?.masa_berlaku?.from_date)
  348. .map(e => ({ ...e, status: e.aktif === false || e.tuntas?.keterangan ? 'Ditutup' : e.sanksi?.jawaban?.cabut_sanksi?.status === 'Diterima' ? 'Diterima' : !e.sanksi?.masa_berlaku ? 'Selesai' : 'Ditutup' }))
  349. // let dataSanksi = await cekBanyakDataSanksi(user, {
  350. // aktif: false, 'jawaban.cabut_sanksi.status': 'Diterima'
  351. // })
  352. // const w = {}
  353. // switch (user.role.id) {
  354. // case 2020:
  355. // w.$or = [{
  356. // role_asal: DIKTI
  357. // }, {
  358. // role_data: DIKTI
  359. // }]
  360. // break
  361. // case 2021:
  362. // w.$or = [{
  363. // role_asal: LLDIKTI
  364. // }, {
  365. // role_data: LLDIKTI
  366. // }]
  367. // w['pt.pembina.id'] = user.lembaga.id
  368. // break
  369. // }
  370. // const dataLaporan = (await laporanModel.find(w).populate('sanksi').lean())
  371. // .filter(e => e.aktif === false || e.tuntas?.keterangan || e.sanksi?.jawaban?.cabut_sanksi === 'Diterima' && e.sanksi?.aktif === false || !e.sanksi?.masa_berlaku)
  372. // .map(e => ({...e, status: e.aktif === false || e.tuntas?.keterangan ? 'Ditutup' : e.sanksi?.jawaban?.cabut_sanksi === 'Diterima'? 'Diterima' : !e.sanksi?.masa_berlaku ? 'Selesai' : 'Ditutup'}))
  373. return response.success(res, {
  374. message: 'Berhasil ambil data laporan dan sanksi tuntas dan ditutup',
  375. data: dataLaporan
  376. })
  377. }
  378. let data = (await cekBanyakDataLaporan(user, where)).filter(e => !e.sanksi || e.sanksi.aktif === true)
  379. return response.success(res, {
  380. message: 'Berhasil ambil data laporan',
  381. data,
  382. })
  383. })
  384. exports.getOne = handleError(async (req, res) => {
  385. const { id } = req.params
  386. const user = req.user
  387. const { aktif, delegasi, all } = req.query
  388. const where = {}
  389. if (aktif) where.aktif = aktif === TRUE
  390. if (all) where.all = true
  391. else if (delegasi) where.delegasi = delegasi === TRUE
  392. const data = await cekSatuDataLaporan(res, user, id, { normal: true })
  393. if (!data) return
  394. return response.success(res, {
  395. message: 'Berhasil ambil data Laporan',
  396. data,
  397. })
  398. })
  399. exports.update = handleError(async (req, res) => {
  400. const { id } = req.params
  401. const user = req.user
  402. const files = req.files
  403. const laporan = await cekSatuDataLaporan(res, user, id, {normal: true})
  404. if (!laporan) return
  405. const isValid = validate(res, req.body, {
  406. change_role: { type: 'string', optional: true, enum: [TRUE, FALSE] },
  407. aktif: { type: 'string', optional: true, enum: [TRUE, FALSE] },
  408. keterangan: 'string',
  409. })
  410. if (!isValid) return
  411. const data = {}
  412. let keterangan = ''
  413. let alasan = ''
  414. const { change_role, aktif } = req.body
  415. const keterangan2 = req.body.keterangan
  416. if (change_role === TRUE) {
  417. data.flag = DELEGASI
  418. data.role_data = user.role.id === 2020 ? 'lldikti' : 'dikti'
  419. keterangan = `Laporan didelegasi ke ${user.role.id === 2020 ? 'LLDIKTI' : 'DIKTI'}`
  420. alasan = keterangan2
  421. data.alasan_delegasi = keterangan2
  422. // if (laporan.jadwal) {
  423. // await laporanModel.findByIdAndUpdate(laporan._id, {
  424. // $unset: { jadwal: 1 },
  425. // })
  426. // }
  427. }
  428. if (aktif) {
  429. let dokumen_id = []
  430. data.aktif = aktif === 'true'
  431. if (files) {
  432. const dokumen = await addManyDokumen(files)
  433. dokumen_id = dokumen.map((e) => e._id)
  434. }
  435. if (aktif === 'true') {
  436. keterangan = 'Laporan dibuka'
  437. } else {
  438. keterangan = `Laporan ditutup`
  439. alasan = keterangan2
  440. data.flag = DITUTUP
  441. data.tuntas = {
  442. keterangan: keterangan2,
  443. dokumen: dokumen_id,
  444. }
  445. }
  446. }
  447. const update = await laporanModel.findByIdAndUpdate(laporan._id, data)
  448. if (change_role || aktif) {
  449. await pemantauanModel.create({
  450. action: 'UPDATE LAPORAN',
  451. laporan: laporan._id,
  452. pt_id: laporan.pt.id,
  453. user: user._id,
  454. keterangan,
  455. alasan,
  456. for_pt: false,
  457. })
  458. }
  459. return response.success(res, {
  460. message: 'Berhasil update laporan',
  461. data: update,
  462. })
  463. })
  464. exports.jumlahLaporan = handleError(async (req, res) => {
  465. const laporan = await laporanModel.aggregate([
  466. {
  467. $match: {
  468. aktif: true,
  469. },
  470. },
  471. {
  472. $group: {
  473. _id: '$pt.pembina.nama',
  474. jumlah_laporan: {
  475. $sum: 1,
  476. },
  477. propinsi: {
  478. $addToSet: '$pt.propinsi.nama',
  479. },
  480. },
  481. },
  482. {
  483. $sort: {
  484. _id: 1,
  485. },
  486. },
  487. ])
  488. return response.success(res, {
  489. message: 'Jumlah Laporan',
  490. data: laporan,
  491. })
  492. })
  493. exports.laporanByPembina = handleError(async (req, res) => {
  494. const { idPembina } = req.params
  495. const {
  496. penjadwalan,
  497. pemeriksaan,
  498. sanksi,
  499. keberatan,
  500. banding,
  501. perbaikan,
  502. cabutSanksi,
  503. delegasi,
  504. ditutup,
  505. diterima
  506. } = req.query
  507. let where = {}
  508. let where2 = {}
  509. let isLaporan = true
  510. let isSanksi = false
  511. if (penjadwalan === 'true') {
  512. where.jadwal = {
  513. $exists: true,
  514. $ne: null,
  515. }
  516. isLaporan = true
  517. isSanksi = false
  518. }
  519. if (pemeriksaan === 'true') {
  520. where.evaluasi = {
  521. $exists: true,
  522. $ne: null,
  523. $not: {
  524. $size: 0,
  525. },
  526. }
  527. isLaporan = true
  528. isSanksi = false
  529. }
  530. if (sanksi === 'true') {
  531. where.sanksi = {
  532. $exists: true,
  533. $ne: null,
  534. }
  535. isLaporan = false
  536. isSanksi = true
  537. }
  538. if (keberatan === 'true') {
  539. where2['pengajuan.keberatan'] = { $exists: true, $ne: null }
  540. isLaporan = false
  541. isSanksi = true
  542. }
  543. if (banding === 'true') {
  544. where2['pengajuan.banding'] = { $exists: true, $ne: null }
  545. isLaporan = false
  546. isSanksi = true
  547. }
  548. if (cabutSanksi === 'true') {
  549. where2['pengajuan.cabut_sanksi'] = {
  550. $exists: true,
  551. $ne: null,
  552. }
  553. isLaporan = false
  554. isSanksi = true
  555. }
  556. if (perbaikan === 'true') {
  557. where2.perbaikan = {
  558. $exists: true,
  559. $ne: null,
  560. $not: {
  561. $size: 0,
  562. },
  563. }
  564. isLaporan = false
  565. isSanksi = true
  566. }
  567. if(delegasi === 'true') {
  568. where = {
  569. role_asal: 'dikti',
  570. role_data: 'lldikti'
  571. }
  572. isLaporan = true
  573. isSanksi = false
  574. }
  575. if(ditutup === 'true') {
  576. where.aktif = false
  577. isLaporan = true
  578. isSanksi = false
  579. }
  580. if(diterima === 'true') {
  581. where2 = {
  582. 'jawaban.cabut_sanksi.status': 'Diterima',
  583. aktif: false
  584. }
  585. isLaporan = false
  586. isSanksi = true
  587. }
  588. let laporan = []
  589. if (isSanksi) {
  590. laporan = (await laporanModel.find({ ...where, 'pt.pembina.id': idPembina }).lean().populate({ path: 'sanksi', match: where2 }).lean())
  591. .filter(e => e.sanksi)
  592. .map(e => {
  593. let step = 'Pelaporan'
  594. if (e.jadwal && !e.evaluasi.length) step = 'Penjadwalan'
  595. else if (e.evaluasi.length && !e.sanksi) step = 'Pemeriksaan'
  596. else if (e.sanksi?.pengajuan?.cabut_sanksi) step = 'Cabut Sanksi'
  597. else if (e.sanksi?.pengajuan?.keberatan && !e.sanksi?.pengajuan?.banding) step = 'Keberatan'
  598. else if (e.sanksi?.aktif === false && !e.sanksi?.masa_berlaku?.from_date) step = 'Selesai'
  599. else if (e.sanksi?.aktif === false && e.jawaban?.cabut_sanksi?.status === 'Diterima') step = 'Diterima'
  600. else if (e.sanksi?.pengajuan?.banding) step = 'Banding'
  601. else if (e.sanksi) step = 'Sanksi'
  602. return { ...e, step }
  603. })
  604. } else if (isLaporan) {
  605. laporan = (await laporanModel.find({ ...where, 'pt.pembina.id': idPembina }).lean().populate({ path: 'sanksi', match: where2 }).lean())
  606. .map(e => {
  607. let step = 'Pelaporan'
  608. if (e.jadwal && !e.evaluasi.length) step = 'Penjadwalan'
  609. else if (e.evaluasi.length && !e.sanksi) step = 'Pemeriksaan'
  610. else if (e.sanksi?.pengajuan?.cabut_sanksi) step = 'Cabut Sanksi'
  611. else if (e.sanksi?.pengajuan?.keberatan && !e.sanksi?.pengajuan?.banding) step = 'Keberatan'
  612. else if (e.sanksi?.aktif === false && !e.sanksi?.masa_berlaku?.from_date) step = 'Selesai'
  613. else if (e.sanksi?.aktif === false && e.jawaban?.cabut_sanksi?.status === 'Diterima') step = 'Diterima'
  614. else if (e.sanksi?.pengajuan?.banding) step = 'Banding'
  615. else if (e.sanksi) step = 'Sanksi'
  616. return { ...e, step }
  617. })
  618. }
  619. // if (isSanksi === true) {
  620. // laporan = (await sanksiModel.find(where).populate({path: 'laporan', match: {'pt.pembina.id': idPembina} }).lean())
  621. // .filter(e => e.laporan)
  622. // .map(e => {
  623. // let step = 'Sanksi'
  624. // if (e.pengajuan?.cabut_sanksi) step = 'Cabut Sanksi'
  625. // else if (e.pengajuan?.keberatan && !e.sanksi?.pengajuan?.banding) step = 'Keberatan'
  626. // else if (e.pengajuan?.banding) step = 'Banding'
  627. // else if (e.aktif === false && !e.masa_berlaku?.from_date) step = 'Selesai'
  628. // else if (e.aktif === false && e.jawaban?.cabut_sanksi?.status === 'Diterima') step = 'Diterima'
  629. // return { ...e, step }
  630. // })
  631. // } else {
  632. // laporan = (await laporanModel.find({ ...where, 'pt.pembina.id': idPembina }).lean().populate('sanksi').lean())
  633. // .filter(e => e.sanksi)
  634. // .map(e => {
  635. // let step = 'Pelaporan'
  636. // if (e.jadwal && !e.evaluasi.length) step = 'Penjadwalan'
  637. // else if (e.evaluasi.length && !e.sanksi) step = 'Pemeriksaan'
  638. // else if (e.sanksi?.pengajuan?.cabut_sanksi) step = 'Cabut Sanksi'
  639. // else if (e.sanksi?.pengajuan?.keberatan && !e.sanksi?.pengajuan?.banding) step = 'Keberatan'
  640. // else if (e.sanksi?.aktif === false && !e.sanksi?.masa_berlaku?.from_date) step = 'Selesai'
  641. // else if (e.sanksi?.aktif === false && e.jawaban?.cabut_sanksi?.status === 'Diterima') step = 'Diterima'
  642. // else if (e.sanksi?.pengajuan?.banding) step = 'Banding'
  643. // else if (e.sanksi) step = 'Sanksi'
  644. // return { ...e, step }
  645. // })
  646. // }
  647. // const [laporan, dataSanksi] = await Promise.all([
  648. // (async () => {
  649. // let laporan = isLaporan
  650. // ? await cekBanyakDataLaporan(user, {
  651. // 'pt.pembina.id': idPembina,
  652. // all: true,
  653. // ...where,
  654. // }, {lean: true})
  655. // : []
  656. // if (!laporan.length) return []
  657. // return laporan
  658. // })(),
  659. // (async () =>
  660. // isSanksi
  661. // ? (
  662. // await cekBanyakDataSanksi(
  663. // user,
  664. // { all: true, ...where },
  665. // {
  666. // ['pt.pembina.id']: idPembina,
  667. // }
  668. // )
  669. // ).filter((e) => e.laporan != null)
  670. // : [])(),
  671. // ])
  672. return response.success(res, {
  673. message: 'berhasil get laporan by pembina',
  674. data: laporan,
  675. })
  676. })
  677. exports.getOneLaporanPublic = handleError(async (req, res) => {
  678. const { id } = req.params
  679. const data = await laporanModel.findById(id)
  680. .populate({ path: 'user', populate: 'foto' })
  681. .populate({ path: 'pelanggaran', select: 'pelanggaran' })
  682. .populate({ path: 'sanksi', populate: ['pelanggaran'] })
  683. .populate('dokumen')
  684. .populate('peserta_penetapan_sanksi.ttd')
  685. .populate({ path: 'evaluasi', populate: ['user', 'dokumen'] })
  686. console.log(data)
  687. if (!data) return response.error(res, {
  688. code: 404,
  689. message: 'laporan_id tidak ada'
  690. })
  691. return response.success(res, {
  692. message: 'Berhasil ambil satu data Laporan',
  693. data,
  694. })
  695. })