laporan.controller.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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 { id, no_laporan, pt_id, jadwal, evaluasi } = req.query
  69. if (id) where._id = id
  70. if (no_laporan) where.no_laporan = no_laporan
  71. if (pt_id) where.pt.id = pt_id
  72. if (jadwal === 'true')
  73. where.jadwal = {
  74. $exists: true,
  75. $ne: null,
  76. }
  77. if (evaluasi === 'true')
  78. where.evaluasi = {
  79. $exists: true,
  80. $ne: null,
  81. $not: {
  82. $size: 0,
  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. })