pemeriksaan.controller.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. const auth = require('../../middleware/verifyToken')
  2. const checkData = require('../../middleware/checkData')
  3. const laporanModel = require('../../model/laporan.model')
  4. const response = require('../../utils/responseHandler')
  5. const { validation } = require('../../middleware/validation')
  6. const uploadFile = require('../../middleware/uploadFile')
  7. const { PEMERIKSAAN, ADD_EVALUASI, EDIT_EVALUASI, PTB_DIKTI, PTB_LLDIKTI } = require('../../utils/constanta')
  8. const { addManyDokumen } = require('../../utils/dokumenFunction')
  9. const pemantauanModel = require('../../model/pemantauan.model')
  10. const forRole = require('../../middleware/role')
  11. exports.create = [
  12. auth,
  13. forRole([PTB_DIKTI, PTB_LLDIKTI]),
  14. checkData((req) => req.params.laporan_id, (id) => laporanModel.findById({ _id: id }), 'laporan'),
  15. uploadFile.array('dokumen'),
  16. validation((req) => req.body, {
  17. judul: 'string',
  18. tanggal: { type: 'date', convert: true },
  19. dokumen: {
  20. type: 'array',
  21. items: {
  22. type: 'object',
  23. buffer: { type: 'class', instanceOf: Buffer }
  24. }
  25. }
  26. }),
  27. async (req, res) => {
  28. const { judul, tanggal, dokumen } = req.body
  29. const { laporan } = req.data
  30. const user = req.user
  31. try {
  32. const dokumen_id = (await addManyDokumen(dokumen)).map((e) => e._id)
  33. const data = {
  34. flag: PEMERIKSAAN,
  35. $push: {
  36. evaluasi: {
  37. dari: user._id,
  38. judul,
  39. tanggal,
  40. dokumen: dokumen_id
  41. }
  42. }
  43. }
  44. if (!laporan.step.includes(PEMERIKSAAN)) data.$push = { step: PEMERIKSAAN }
  45. await laporanModel.findOneAndUpdate({ _id: laporan._id }, data)
  46. let for_public = true
  47. if (laporan.evaluasi.length > 0) for_public = false
  48. await pemantauanModel.create({
  49. laporan: laporan._id,
  50. user: user._id,
  51. action: ADD_EVALUASI,
  52. pt_id: laporan.pt.id,
  53. keterangan: 'Melakukan evaluasi',
  54. dokumen: dokumen_id,
  55. for_pt: false,
  56. for_public
  57. })
  58. } catch (e) {
  59. return response.error(res, {
  60. message: e.message,
  61. code: 500
  62. })
  63. }
  64. return response.success(res, {
  65. message: 'Berhasil membuat evaluasi pemeriksaan',
  66. code: 201
  67. })
  68. }
  69. ]
  70. exports.edit = [
  71. auth,
  72. checkData((req) => req.params.id, (id) => laporanModel.findById({ _id: id })),
  73. uploadFile.array('dokumen'),
  74. validation((req) => req.body, {
  75. judul: 'string',
  76. tanggal: { type: 'date', convert: true }
  77. }),
  78. async (req, res) => {
  79. const user = req.user
  80. const { laporan } = req.data
  81. const { judul, tanggal, dokumen } = req.body
  82. let dokumen_id
  83. if (dokumen.length) dokumen_id = (await addManyDokumen(dokumen)).map((e) => e._id)
  84. const data = await laporanModel.findOneAndUpdate({ _id: laporan._id },
  85. {
  86. $set: {
  87. 'evaluasi.$.judul': judul,
  88. 'evaluasi.$.tanggal': tanggal,
  89. 'evaluasi.$.dokumen': dokumen_id
  90. }
  91. }
  92. )
  93. await pemantauanModel.create({
  94. laporan: laporan._id,
  95. user: user._id,
  96. action: EDIT_EVALUASI,
  97. pt_id: laporan.pt.id,
  98. keterangan: 'Melakukan edit evaluasi',
  99. dokumen: dokumen_id,
  100. for_pt: false,
  101. for_public: true
  102. })
  103. return response.success(res, {
  104. message: 'Berhasil edit evaluasi',
  105. data
  106. })
  107. }
  108. ]