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 forRole = require('../../middleware/role') const { PTB_DIKTI, PTB_LLDIKTI, PENJADWALAN, ADD_JADWAL } = require('../../utils/constanta') const uploadFile = require('../../middleware/uploadFile') const pemantauanModel = require('../../model/pemantauan.model') 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', dari_tanggal: { type: 'date', convert: true }, sampai_tanggal: { type: 'date', convert: true }, warna: 'string' }), async (req, res) => { const { judul, dari_tanggal, sampai_tanggal, warna } = req.body const { laporan } = req.data const user = req.user try { const data = { flag: PENJADWALAN, jadwal: { judul, dari_tanggal, sampai_tanggal, warna } } if (!laporan.step.includes(PENJADWALAN)) data.$push = { step: PENJADWALAN } 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_JADWAL, pt_id: laporan.pt.id, keterangan: 'Membuat Jadwal Pemeriksaan', jadwal: { dari_tanggal, sampai_tanggal }, for_public }) } catch (e) { return response.error(res, { message: e.message, code: 500 }) } return response.success(res, { message: 'Berhasil membuat jadwal pemeriksaan', code: 201 }) } ]