| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 | 
							- const auth = require('../../middleware/verifyToken')
 
- const { validation } = require('../../middleware/validation')
 
- const uploadFile = require('../../middleware/uploadFile')
 
- const response = require('../../utils/responseHandler')
 
- const { addManyDokumen } = require('../../utils/dokumenFunction')
 
- const checkData = require('../../middleware/checkData')
 
- const pelanggaranModel = require('../../model/pelanggaran.model')
 
- const axios = require('../../utils/axios')
 
- const laporanModel = require('../../model/laporan.model')
 
- const pemantauanModel = require('../../model/pemantauan.model')
 
- const { sendWaCreateLaporan } = require('../../services/v2/notifikasi.service')
 
- const isUnique = require('../../middleware/isUnique')
 
- const {
 
-   CREATE_LAPORAN, PELAPORAN, DIKTI, TRUE, LLDIKTI, PENJADWALAN, PEMERIKSAAN, PTB_DIKTI, PTB_LLDIKTI, PTB_PT,
 
-   PTB_ADMIN, PTB_READ, FALSE, DELEGASI, DITUTUP, UPDATE_LAPORAN
 
- } = require('../../utils/constanta')
 
- const forRole = require('../../middleware/role')
 
- const handleDokumen = require('../../utils/handleDokumen')
 
- exports.create = [
 
-   auth,
 
-   uploadFile.array('dokumen'),
 
-   validation((req) => req.body, {
 
-     no_laporan: 'string',
 
-     pt_id: 'string',
 
-     pelanggaran_id: 'string',
 
-     keterangan: 'string'
 
-   }),
 
-   isUnique((req) => req.body.no_laporan, (no_laporan) => laporanModel.findOne({ no_laporan })),
 
-   checkData((req) => req.body.pt_id, (pt_id) => axios.get(`https://api.kemdikbud.go.id:8243/pddikti/1.2/pt/${pt_id}`), 'pt'),
 
-   checkData((req) => req.body.pelanggaran_id, (data) => {
 
-       const pelanggaran_id = data.split(',')
 
-       return pelanggaranModel.find({
 
-         _id: {
 
-           $in: pelanggaran_id
 
-         }
 
-       })
 
-     },
 
-     'pelanggaran'
 
-   ),
 
-   async (req, res) => {
 
-     const { no_laporan, keterangan, dokumen } = req.body
 
-     const { pt, pelanggaran } = req.data
 
-     const user = req.user
 
-     let dokumen_id = []
 
-     if (dokumen.length) dokumen_id = (await addManyDokumen(dokumen)).map(e => e._id)
 
-     try {
 
-       const data = await laporanModel.create({
 
-         no_laporan,
 
-         user: user._id,
 
-         dokumen: dokumen_id,
 
-         pt: pt[0],
 
-         pelanggaran: pelanggaran.map(e => e._id),
 
-         keterangan,
 
-         role_data: user.role.id === 2021 ? LLDIKTI : DIKTI,
 
-         role_asal: user.role.id === 2021 ? LLDIKTI : DIKTI,
 
-         step: [PELAPORAN],
 
-         flag: PELAPORAN
 
-       })
 
-       await pemantauanModel.create({
 
-         laporan: data._id,
 
-         action: CREATE_LAPORAN,
 
-         pt_id: pt[0].id,
 
-         user: user._id,
 
-         keterangan: 'Membuat Laporan',
 
-         dokumen: dokumen_id,
 
-         for_pt: false
 
-       })
 
-       await sendWaCreateLaporan({ user, pt, keterangan, no_laporan })
 
-     } catch (e) {
 
-       return response.error(res, {
 
-         message: e.message,
 
-         code: 500
 
-       })
 
-     }
 
-     return response.success(res, {
 
-       message: 'Berhasil menambah laporan',
 
-       code: 201
 
-     })
 
-   }
 
- ]
 
- exports.getAll = [
 
-   auth,
 
-   forRole([PTB_DIKTI, PTB_LLDIKTI, PTB_ADMIN, PTB_READ]),
 
-   async (req, res) => {
 
-     const user = req.user
 
-     const { no_laporan, pt_id, penjadwalan, pemeriksaan, aktif, delegasi, all, sanksi, tuntas } = req.query
 
-     let query = {}
 
-     switch (user.role.id) {
 
-       case PTB_DIKTI:
 
-         query.$or = [
 
-           { role_asal: DIKTI },
 
-           { role_data: DIKTI }
 
-         ]
 
-         if (delegasi === TRUE) {
 
-           query = {
 
-             role_asal: DIKTI,
 
-             role_data: LLDIKTI
 
-           }
 
-         }
 
-         break
 
-       case PTB_LLDIKTI:
 
-         query.$or = [
 
-           { role_asal: LLDIKTI },
 
-           { role_data: LLDIKTI }
 
-         ]
 
-         if (delegasi === TRUE) {
 
-           query = {
 
-             role_asal: LLDIKTI,
 
-             role_data: DIKTI
 
-           }
 
-         }
 
-         query['pt.pembina.id'] = user.lembaga.id
 
-         break
 
-     }
 
-     query.step = { $in: [PELAPORAN] }
 
-     if (penjadwalan === TRUE) {
 
-       query.step = { $in: [PENJADWALAN] }
 
-     }
 
-     if (pemeriksaan === TRUE) {
 
-       query.step = { $in: [PEMERIKSAAN] }
 
-     }
 
-     let data
 
-     try {
 
-       data = await laporanModel
 
-         .find(query)
 
-         .populate('user')
 
-         .populate({ path: 'sanksi', populate: ['pelanggaran'] })
 
-         .sort({
 
-           createdAt: -1
 
-         })
 
-     } catch (e) {
 
-       return response.error(res, {
 
-         message: e.message,
 
-         code: 500
 
-       })
 
-     }
 
-     return response.success(res, {
 
-       message: 'Berhasil mendapatkan data',
 
-       data
 
-     })
 
-   }
 
- ]
 
- exports.getOne = [
 
-   auth,
 
-   forRole([PTB_DIKTI, PTB_LLDIKTI, PTB_PT]),
 
-   checkData((req) => req.params.id, (id) =>
 
-       laporanModel.findById(id)
 
-         .populate({ path: 'user', populate: 'foto' })
 
-         .populate({ path: 'pelanggaran', select: 'pelanggaran' })
 
-         .populate({ path: 'sanksi', populate: ['pelanggaran'] })
 
-         .populate('dokumen')
 
-         .populate('peserta_penetapan_sanksi.ttd')
 
-         .populate({ path: 'evaluasi', populate: ['user', 'dokumen'] })
 
-         .populate('tuntas.dokumen'),
 
-     'laporan'
 
-   ),
 
-   async (req, res) => {
 
-     const { laporan } = req.data
 
-     return response.success(res, {
 
-       message: 'Berhasil mendapatkan data',
 
-       data: laporan
 
-     })
 
-   }
 
- ]
 
- exports.update = [
 
-   auth,
 
-   forRole([PTB_DIKTI, PTB_LLDIKTI, PTB_PT]),
 
-   checkData((req) => req.params.id, (id) => laporanModel.findById(id), 'laporan'),
 
-   (req, res, next) => {
 
-     if (req.query['redudansi'] === 'true') return handleDokumen.array('dokumen')(req, res, next)
 
-     return next()
 
-   },
 
-   (req, res, next) => {
 
-     req.body['dokumen'] = req.files
 
-     return next()
 
-   },
 
-   validation((req) => req.body, {
 
-     change_role: { type: 'string', optional: true, enum: [TRUE, FALSE] },
 
-     aktif: { type: 'string', optional: true, enum: [TRUE, FALSE] },
 
-     keterangan: 'string'
 
-   }),
 
-   async (req, res) => {
 
-     let { keterangan, dokumen } = req.body
 
-     const user = req.user
 
-     const data = {}
 
-     let message = ''
 
-     const { change_role, aktif } = req.body
 
-     const { laporan } = req.data
 
-     if (change_role === 'true') {
 
-       data.flag = DELEGASI
 
-       data.role_data = user.role.id === 2020 ? LLDIKTI : DIKTI
 
-       message = `Laporan didelegasi ke ${user.role.id === 2020 ? LLDIKTI : DIKTI}`
 
-       data.alasan_delegasi = keterangan
 
-     }
 
-     if (aktif) {
 
-       data.aktif = aktif === TRUE
 
-       let dokumen_id = []
 
-       if (dokumen) dokumen_id = (await addManyDokumen(dokumen)).map((e) => e._id)
 
-       if (aktif === TRUE) {
 
-         message = 'Laporan dibuka'
 
-       } else {
 
-         message = `Laporan ditutup`
 
-         alasan = keterangan
 
-         data.flag = DITUTUP
 
-         data.tuntas = {
 
-           keterangan,
 
-           dokumen: dokumen_id
 
-         }
 
-         data.sebelum_ditutup = {
 
-           step : laporan.step
 
-         }
 
-         data.step = []
 
-       }
 
-     }
 
-     await laporanModel.findByIdAndUpdate(laporan._id, data)
 
-     await pemantauanModel.create({
 
-       action: UPDATE_LAPORAN,
 
-       laporan: laporan._id,
 
-       pt_id: laporan.pt.id,
 
-       user: user._id,
 
-       keterangan: message,
 
-       alasan: keterangan,
 
-       for_pt: false
 
-     })
 
-     return response.success(res, {
 
-       message: 'Berhasil update laporan'
 
-     })
 
-   }
 
- ]
 
 
  |