const auth = require('../../middleware/verifyToken') const checkData = require('../../middleware/checkData') const laporanModel = require('../../model/laporan.model') const response = require('../../utils/responseHandler') const { validation } = require('../../middleware/validation') const uploadFile = require('../../middleware/uploadFile') const { PEMERIKSAAN, ADD_EVALUASI, EDIT_EVALUASI, PTB_DIKTI, PTB_LLDIKTI } = require('../../utils/constanta') const { addManyDokumen } = require('../../utils/dokumenFunction') const pemantauanModel = require('../../model/pemantauan.model') const forRole = require('../../middleware/role') exports.create = [ auth, forRole([PTB_DIKTI, PTB_LLDIKTI]), checkData((req) => req.params.laporan_id, (id) => laporanModel.findById({ _id: id }), 'laporan'), uploadFile.array('dokumen'), validation((req) => req.body, { judul: 'string', tanggal: { type: 'date', convert: true }, dokumen: { type: 'array', items: { type: 'object', buffer: { type: 'class', instanceOf: Buffer } } } }), async (req, res) => { const { judul, tanggal, dokumen } = req.body const { laporan } = req.data const user = req.user try { const dokumen_id = (await addManyDokumen(dokumen)).map((e) => e._id) const data = { flag: PEMERIKSAAN, $push: { evaluasi: { dari: user._id, judul, tanggal, dokumen: dokumen_id } } } if (!laporan.step.includes(PEMERIKSAAN)) data.$push = { step: PEMERIKSAAN } await laporanModel.findOneAndUpdate({ _id: laporan._id }, data) let for_public = true if (laporan.evaluasi.length > 0) for_public = false await pemantauanModel.create({ laporan: laporan._id, user: user._id, action: ADD_EVALUASI, pt_id: laporan.pt.id, keterangan: 'Melakukan evaluasi', dokumen: dokumen_id, for_pt: false, for_public }) } catch (e) { return response.error(res, { message: e.message, code: 500 }) } return response.success(res, { message: 'Berhasil membuat evaluasi pemeriksaan', code: 201 }) } ] exports.edit = [ auth, checkData((req) => req.params.id, (id) => laporanModel.findById({ _id: id })), uploadFile.array('dokumen'), validation((req) => req.body, { judul: 'string', tanggal: { type: 'date', convert: true } }), async (req, res) => { const user = req.user const { laporan } = req.data const { judul, tanggal, dokumen } = req.body let dokumen_id if (dokumen.length) dokumen_id = (await addManyDokumen(dokumen)).map((e) => e._id) const data = await laporanModel.findOneAndUpdate({ _id: laporan._id }, { $set: { 'evaluasi.$.judul': judul, 'evaluasi.$.tanggal': tanggal, 'evaluasi.$.dokumen': dokumen_id } } ) await pemantauanModel.create({ laporan: laporan._id, user: user._id, action: EDIT_EVALUASI, pt_id: laporan.pt.id, keterangan: 'Melakukan edit evaluasi', dokumen: dokumen_id, for_pt: false, for_public: true }) return response.success(res, { message: 'Berhasil edit evaluasi', data }) } ]