cabutSanksi.controller.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. const handleError = require('../../utils/handleError')
  2. const sanksiModel = require('../../model/sanksi.model')
  3. const logModel = require('../../model/log.model')
  4. const { addManyDokumen } = require('../../utils/dokumenFunction')
  5. const { validate } = require('../../utils/validation')
  6. const { cekSatuDataSanksi, cekSatuDataLaporan } = require('../../utils/cekData')
  7. const response = require('../../utils/responseHandler')
  8. const pemantauanModel = require('../../model/pemantauan.model')
  9. exports.create = handleError(async (req, res) => {
  10. const user = req.user
  11. const { sanksi_id } = req.params
  12. const sanksi = await cekSatuDataSanksi(res, user, sanksi_id)
  13. if (!sanksi) return
  14. const files = req.files
  15. if (!files?.length) {
  16. return response.error(res, {
  17. message: 'dokumen harus ada'
  18. })
  19. }
  20. const dokumen = await addManyDokumen(files)
  21. const dokumen_id = dokumen.map((e) => e._id)
  22. const data = await sanksiModel.findOneAndUpdate(
  23. {
  24. laporan: sanksi.laporan._id,
  25. _id: sanksi._id,
  26. $or: [{
  27. perbaikan: { $exists: true, $ne: [] },
  28. ['pengajuan.cabut_sanksi']: { $exists: false, $eq: null }
  29. }, {
  30. bypass_cabut_sanksi: {
  31. $eq: true
  32. }
  33. }]
  34. },
  35. {
  36. last_step: 'Permohonan Pencabutan Sanksi',
  37. ['pengajuan.cabut_sanksi']: {
  38. dokumen: dokumen_id
  39. }
  40. }
  41. )
  42. if (!data) {
  43. return response.error(res, {
  44. message: 'cabut_sanksi sudah ada'
  45. })
  46. }
  47. await pemantauanModel.create({
  48. laporan: sanksi.laporan._id,
  49. sanksi: sanksi._id,
  50. action: 'ADD CABUTSANKSI',
  51. pt_id: sanksi.laporan.pt.id,
  52. user: user._id,
  53. keterangan: 'Mengajukan Pencabutan Sanksi',
  54. dokumen: dokumen_id
  55. })
  56. return response.success(res, {
  57. data,
  58. message: 'Berhasil menambah Cabut Sanksi'
  59. })
  60. })
  61. exports.createJawaban = handleError(async (req, res) => {
  62. const user = req.user
  63. const { sanksi_id } = req.params
  64. const sanksi = await cekSatuDataSanksi(res, user, sanksi_id)
  65. if (!sanksi) return
  66. const isValid = validate(res, req.body, {
  67. status: 'string',
  68. keterangan: 'string'
  69. })
  70. if (!isValid) return
  71. let dokumen_id = null
  72. // if (req.body.status === 'Diterima') {
  73. const files = req.files
  74. if (files?.length) {
  75. // return response.error(res, {
  76. // message: 'dokumen harus ada',
  77. // })
  78. const dokumen = await addManyDokumen(files)
  79. dokumen_id = dokumen.map((e) => e._id)
  80. }
  81. // }
  82. const { status, keterangan } = req.body
  83. const data = await sanksiModel.findOneAndUpdate(
  84. {
  85. laporan: sanksi.laporan._id,
  86. _id: sanksi._id,
  87. $or: [
  88. { 'pengajuan.cabut_sanksi': { $exists: true, $ne: null } },
  89. { bypass_cabut_sanksi: true }
  90. ]
  91. },
  92. {
  93. aktif: status !== 'Diterima',
  94. last_step: 'Jawaban Atas Permohonan Pencabutan Sanksi',
  95. ['jawaban.cabut_sanksi']: {
  96. status,
  97. keterangan,
  98. dokumen: dokumen_id
  99. }
  100. }
  101. )
  102. if (!data) {
  103. return response.error(res, {
  104. message: 'cabut_sanksi tidak ada'
  105. })
  106. }
  107. let message = 'Menjawab Pengajuan Pencabutan Sanksi'
  108. let for_public = true
  109. if (sanksi.jawaban?.cabut_sanksi) {
  110. message = 'Mengubah jawaban Pengajuan Pencabutan Sanksi'
  111. for_public = false
  112. }
  113. await pemantauanModel.create({
  114. laporan: sanksi.laporan._id,
  115. sanksi: sanksi._id,
  116. action: 'ADD CABUTSANKSI JAWABAN',
  117. jawaban: status,
  118. pt_id: sanksi.laporan.pt.id,
  119. user: user._id,
  120. keterangan: message,
  121. dokumen: dokumen_id,
  122. for_public
  123. })
  124. return response.success(res, {
  125. message: "Berhasil menjawab Pengajuan Cabut Sanksi",
  126. data
  127. })
  128. })
  129. exports.byPass = handleError(async (req, res) => {
  130. const user = req.user
  131. const { sanksi_id } = req.params
  132. const sanksi = await cekSatuDataSanksi(res, user, sanksi_id)
  133. if (!sanksi) return
  134. const check = await sanksiModel.findOneAndUpdate({
  135. _id: sanksi._id
  136. }, {
  137. bypass_cabut_sanksi: true,
  138. last_step: 'Permohonan Pencabutan Sanksi'
  139. })
  140. if (!check) {
  141. return response.error(res, {
  142. message: 'gagal bypass ke pencabutan sanksi'
  143. })
  144. }
  145. await logModel.create({
  146. user: user._id,
  147. aktivitas: `Berhasil bypass laporan ke pencabutan sanksi`
  148. })
  149. return response.success(res, {
  150. message: 'berhasil bypass ke pencabutan sanksi'
  151. })
  152. })