| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 | 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    })  }]
 |