cabutSanksi.controller.js 5.0 KB

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