laporan.controller.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. const axios = require('../utils/axios')
  2. const handleError = require('../utils/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/validation')
  8. const { addManyDokumen } = require('../utils/dokumenFunction')
  9. const { cekSatuDataLaporan, cekBanyakDataLaporan } = require('../utils/cekData')
  10. exports.create = handleError(async (req, res) => {
  11. const isValid = validate(res, req.body, {
  12. no_laporan: 'string',
  13. pt_id: 'string',
  14. pelanggaran_id: 'string',
  15. keterangan: 'string',
  16. })
  17. if (!isValid) return
  18. const { no_laporan, pt_id, keterangan } = req.body
  19. let { pelanggaran_id } = req.body
  20. const pt = await axios.get(
  21. `https://api.kemdikbud.go.id:8243/pddikti/1.2/pt/${pt_id}`
  22. )
  23. if (!pt)
  24. return response.error(res, {
  25. message: 'pt_id tidak ditemukan',
  26. })
  27. const files = req.files
  28. let dokumen_id = []
  29. if (files.length) {
  30. const dokumen = await addManyDokumen(files)
  31. dokumen_id = dokumen.map((e) => e._id)
  32. }
  33. pelanggaran_id = pelanggaran_id.split(',')
  34. const pelanggaran = await pelanggaranModel.find({
  35. _id: {
  36. $in: pelanggaran_id,
  37. },
  38. })
  39. if (!pelanggaran.length)
  40. return response.error(res, { message: 'pelanggaran_id tidak ada' })
  41. const user = req.user
  42. let data = {
  43. no_laporan,
  44. user: user._id,
  45. dokumen: dokumen_id,
  46. pt: pt[0],
  47. pelanggaran: pelanggaran_id,
  48. keterangan,
  49. role_data: user.role.id === 2020 ? 'dikti' : 'lldikti',
  50. }
  51. data = await laporanModel.create(data)
  52. await pemantauanModel.create({
  53. laporan: data._id,
  54. pt_id: pt[0].id,
  55. user: user._id,
  56. keterangan: 'Membuat Laporan',
  57. dokumen: dokumen_id,
  58. for_pt: false,
  59. })
  60. return response.success(res, {
  61. message: 'Berhasil menambah laporan',
  62. data,
  63. })
  64. })
  65. exports.getAll = handleError(async (req, res) => {
  66. const user = req.user
  67. const where = {}
  68. const { no_laporan, pt_id, jadwal, evaluasi } = req.query
  69. if (no_laporan) where.no_laporan = no_laporan
  70. if (pt_id) where.pt.id = pt_id
  71. if (jadwal === 'true') {
  72. where.jadwal = {
  73. $exists: true,
  74. $ne: null,
  75. }
  76. } else if (evaluasi === 'true') {
  77. where.evaluasi = {
  78. $exists: true,
  79. $ne: null,
  80. $not: {
  81. $size: 0,
  82. },
  83. }
  84. }
  85. let data = await cekBanyakDataLaporan(user, where)
  86. return response.success(res, {
  87. message: 'Berhasil ambil data laporan',
  88. data,
  89. })
  90. })
  91. exports.getOne = handleError(async (req, res) => {
  92. const { id } = req.params
  93. const user = req.user
  94. const data = await cekSatuDataLaporan(res, user, id)
  95. if (!data) return
  96. return response.success(res, {
  97. message: 'Berhasil ambil data Laporan',
  98. data,
  99. })
  100. })
  101. exports.update = handleError(async (req, res) => {
  102. const { id } = req.params
  103. const user = req.user
  104. const laporan = await cekSatuDataLaporan(res, user, id)
  105. if (!laporan) return
  106. const isValid = validate(res, req.body, {
  107. change_role: { type: 'string', optional: true, enum: ['true', 'false'] },
  108. aktif: { type: 'string', optional: true, enum: ['true', 'false'] },
  109. })
  110. if (!isValid) return
  111. const data = {}
  112. let keterangan = ''
  113. const { change_role, aktif } = req.body
  114. if (change_role === 'true') {
  115. data.role_data = user.role.id === 2020 ? 'lldikti' : 'dikti'
  116. keterangan = `Delegasi ke ${user.role.id === 2020 ? 'LLDIKTI' : 'DIKTI'}`
  117. if (laporan.jadwal) {
  118. await laporanModel.findByIdAndUpdate(laporan._id, {
  119. $unset: { jadwal: 1 },
  120. })
  121. }
  122. }
  123. if (aktif) {
  124. data.aktif = aktif === 'true'
  125. if (aktif === 'true') {
  126. keterangan = 'Laporan dibuka'
  127. } else {
  128. keterangan = 'Laporan ditutup'
  129. }
  130. }
  131. const update = await laporanModel.findByIdAndUpdate(laporan._id, data)
  132. if (change_role || aktif) {
  133. await pemantauanModel.create({
  134. laporan: laporan._id,
  135. pt_id: laporan.pt.id,
  136. user: user._id,
  137. keterangan,
  138. for_pt: false,
  139. })
  140. }
  141. return response.success(res, {
  142. message: 'Berhasil update laporan',
  143. data: update,
  144. })
  145. })