cabutSanksi.controller.js 5.3 KB

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