evaluasi.controller.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. const laporanModel = require('../../../model/laporan.model')
  2. const handleError = require('../../../utils/v1/handleError')
  3. const response = require('../../../utils/responseHandler')
  4. const { validate } = require('../../../utils/v1/validation')
  5. const { addManyDokumen } = require('../../../utils/dokumenFunction')
  6. const { cekSatuDataLaporan } = require('../../../utils/v1/cekData')
  7. const pemantauanModel = require('../../../model/pemantauan.model')
  8. const { PEMERIKSAAN, ADD_EVALUASI } = require('../../../utils/constanta')
  9. exports.add = handleError(async (req, res) => {
  10. const user = req.user
  11. const { id } = req.params
  12. const isValid = validate(res, req.body, {
  13. judul: 'string',
  14. tanggal: { type: 'date', convert: true },
  15. })
  16. if (!isValid) return
  17. const laporan = await cekSatuDataLaporan(res, user, id)
  18. if (!laporan) return
  19. const files = req.files
  20. if (!files.length) {
  21. return response.error(res, {
  22. message: 'dokumen harus ada',
  23. })
  24. }
  25. const dokumen = await addManyDokumen(files)
  26. const dokumen_id = dokumen.map((e) => e._id)
  27. const { judul, tanggal } = req.body
  28. const data = await laporanModel.findOneAndUpdate(
  29. {
  30. _id: laporan._id,
  31. jadwal: {
  32. $exists: true,
  33. $ne: null,
  34. },
  35. },
  36. {
  37. flag: PEMERIKSAAN,
  38. $push: {
  39. evaluasi: {
  40. dari: user._id,
  41. judul,
  42. tanggal,
  43. dokumen: dokumen_id,
  44. },
  45. step: PEMERIKSAAN
  46. },
  47. },
  48. {
  49. new: true,
  50. }
  51. )
  52. let for_public = true
  53. if (laporan.evaluasi.length > 0) {
  54. for_public = false
  55. }
  56. await pemantauanModel.create({
  57. laporan: laporan._id,
  58. user: user._id,
  59. action: ADD_EVALUASI,
  60. pt_id: laporan.pt.id,
  61. keterangan: 'Melakukan evaluasi',
  62. dokumen: dokumen_id,
  63. for_pt: false,
  64. for_public,
  65. })
  66. return response.success(res, {
  67. message: 'Berhasil tambah evaluasi',
  68. data,
  69. })
  70. })
  71. exports.edit = handleError(async (req, res) => {
  72. const user = req.user
  73. const { id } = req.params
  74. const { judul, tanggal, evaluasi_id } = req.body
  75. const isValid = validate(res, req.body, {
  76. evaluasi_id: 'string',
  77. judul: 'string|optional',
  78. tanggal: { type: 'date', convert: true, optional: true },
  79. })
  80. if (!isValid) return
  81. const laporan = await cekSatuDataLaporan(res, user, id, {
  82. 'evaluasi._id': evaluasi_id,
  83. })
  84. if (!laporan) return
  85. const files = req.files
  86. let dokumen_id
  87. if (files.length) {
  88. const dokumen = await addManyDokumen(files)
  89. dokumen_id = dokumen.map((e) => e._id)
  90. }
  91. const data = await laporanModel.findOneAndUpdate(
  92. {
  93. _id: laporan._id,
  94. jadwal: {
  95. $exists: true,
  96. $ne: null,
  97. },
  98. 'evaluasi._id': evaluasi_id,
  99. },
  100. {
  101. $set: {
  102. 'evaluasi.$.judul': judul,
  103. 'evaluasi.$.tanggal': tanggal,
  104. 'evaluasi.$.dokumen': dokumen_id,
  105. },
  106. }
  107. )
  108. await pemantauanModel.create({
  109. laporan: laporan._id,
  110. user: user._id,
  111. action: 'EDIT EVALUASI',
  112. pt_id: laporan.pt.id,
  113. keterangan: 'Melakukan edit evaluasi',
  114. dokumen: dokumen_id,
  115. for_pt: false,
  116. for_public: true,
  117. })
  118. return response.success(res, {
  119. message: 'Berhasil edit evaluasi',
  120. data,
  121. })
  122. })