banding.controller.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. const handleError = require('../../utils/handleError')
  2. const sanksiModel = require('../../model/sanksi.model')
  3. const { addManyDokumen } = require('../../utils/dokumenFunction')
  4. const { validate } = require('../../utils/validation')
  5. const { cekSatuDataSanksi, cekSatuDataLaporan } = require('../../utils/cekData')
  6. const response = require('../../utils/responseHandler')
  7. exports.create = handleError(async (req, res) => {
  8. const user = req.user
  9. const { laporan_id, sanksi_id } = req.query
  10. if (!laporan_id || !sanksi_id) {
  11. return response.error(res, {
  12. message: 'query laporan_id atau sanksi_id harus ada',
  13. })
  14. }
  15. const laporan = await cekSatuDataLaporan(res, user, laporan_id)
  16. const sanksi = await cekSatuDataSanksi(res, user, sanksi_id)
  17. if (!laporan || !sanksi) return
  18. const files = req.files
  19. if (!files?.length) {
  20. return response.error(res, {
  21. message: 'dokumen harus ada',
  22. })
  23. }
  24. const dokumen = await addManyDokumen(files)
  25. const dokumen_id = dokumen.map((e) => e._id)
  26. const data = await sanksiModel.findOneAndUpdate(
  27. {
  28. laporan: laporan._id,
  29. _id: sanksi._id,
  30. ['pengajuan.banding']: { $exists: false, $eq: null },
  31. ['jawaban.keberatan']: { $exists: true, $ne: null },
  32. },
  33. {
  34. ['pengajuan.banding']: {
  35. dokumen: dokumen_id,
  36. },
  37. }
  38. )
  39. if (!data) {
  40. return response.error(res, {
  41. message: 'pengajuan banding sudah ada atau jawaban keberatan belum ada',
  42. })
  43. }
  44. return response.success(res, {
  45. data,
  46. message: 'Berhasil menambah pengajuan banding',
  47. })
  48. })
  49. exports.createJawaban = handleError(async (req, res) => {
  50. const user = req.user
  51. const { laporan_id, sanksi_id } = req.query
  52. if (!laporan_id || !sanksi_id) {
  53. return response.error(res, {
  54. message: 'query laporan_id atau sanksi_id harus ada',
  55. })
  56. }
  57. const laporan = await cekSatuDataLaporan(res, user, laporan_id)
  58. const sanksi = await cekSatuDataSanksi(res, user, sanksi_id)
  59. if (!laporan || !sanksi) return
  60. const isValid = validate(res, req.body, {
  61. status: 'string',
  62. keterangan: 'string',
  63. })
  64. if (!isValid) return
  65. const files = req.files
  66. if (!files?.length) {
  67. return response.error(res, {
  68. message: 'dokumen harus ada',
  69. })
  70. }
  71. const dokumen = await addManyDokumen(files)
  72. const dokumen_id = dokumen.map((e) => e._id)
  73. const { status, keterangan } = req.body
  74. const data = await sanksiModel.findOneAndUpdate(
  75. {
  76. laporan: laporan._id,
  77. _id: sanksi._id,
  78. ['pengajuan.banding']: { $exists: true, $ne: null },
  79. },
  80. {
  81. ['jawaban.banding']: {
  82. status,
  83. keterangan,
  84. dokumen: dokumen_id,
  85. },
  86. }
  87. )
  88. if (!data) {
  89. return response.error(res, {
  90. message: 'banding tidak ada',
  91. })
  92. }
  93. return response.success(res, {
  94. data,
  95. })
  96. })