const laporanModel = require('../../../model/laporan.model') const handleError = require('../../../utils/v1/handleError') const response = require('../../../utils/responseHandler') const { validate } = require('../../../utils/v1/validation') const { addManyDokumen } = require('../../../utils/dokumenFunction') const { cekSatuDataLaporan } = require('../../../utils/v1/cekData') const pemantauanModel = require('../../../model/pemantauan.model') const { PEMERIKSAAN, ADD_EVALUASI } = require('../../../utils/constanta') exports.add = handleError(async (req, res) => { const user = req.user const { id } = req.params const isValid = validate(res, req.body, { judul: 'string', tanggal: { type: 'date', convert: true }, }) if (!isValid) return const laporan = await cekSatuDataLaporan(res, user, id) if (!laporan) return const files = req.files if (!files.length) { return response.error(res, { message: 'dokumen harus ada', }) } const dokumen = await addManyDokumen(files) const dokumen_id = dokumen.map((e) => e._id) const { judul, tanggal } = req.body const data = await laporanModel.findOneAndUpdate( { _id: laporan._id, jadwal: { $exists: true, $ne: null, }, }, { flag: PEMERIKSAAN, $push: { evaluasi: { dari: user._id, judul, tanggal, dokumen: dokumen_id, }, step: PEMERIKSAAN }, }, { new: true, } ) 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, }) return response.success(res, { message: 'Berhasil tambah evaluasi', data, }) }) exports.edit = handleError(async (req, res) => { const user = req.user const { id } = req.params const { judul, tanggal, evaluasi_id } = req.body const isValid = validate(res, req.body, { evaluasi_id: 'string', judul: 'string|optional', tanggal: { type: 'date', convert: true, optional: true }, }) if (!isValid) return const laporan = await cekSatuDataLaporan(res, user, id, { 'evaluasi._id': evaluasi_id, }) if (!laporan) return const files = req.files let dokumen_id if (files.length) { const dokumen = await addManyDokumen(files) dokumen_id = dokumen.map((e) => e._id) } const data = await laporanModel.findOneAndUpdate( { _id: laporan._id, jadwal: { $exists: true, $ne: null, }, 'evaluasi._id': evaluasi_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, }) })