const laporanModel = require('../model/laporan.model') const pelanggaranModel = require('../model/pelanggaran.model') const sanksiModel = require('../model/sanksi.model') const response = require('../utils/responseHandler') exports.cekSatuDataLaporan = async ( res, user, laporan_id, where = { delegasi: false, aktif: true } ) => { const w = { _id: laporan_id, aktif: where.aktif || true, ...where } switch (user.role.id) { case 2020: if (!where.delegasi) w.role_data = 'dikti' else { w.role_data = 'lldikti' w.role_asal = 'dikti' } break case 2021: if (!where.delegasi) { w.role_data = 'lldikti' w['pt.pembina.id'] = user.lembaga.id } else { w.role_asal = 'lldikti' w.role_data = 'dikti' w['pt.pembina.id'] = user.lembaga.id } break case 2022: w['pt.id'] = user.lembaga.id break } const laporan = await laporanModel .findOne(w) .populate({ path: 'user', populate: 'foto' }) .populate({ path: 'pelanggaran', select: 'pelanggaran' }) .populate('dokumen') .populate({path: 'evaluasi', populate: ['user', 'dokumen']}) // .populate('evaluasi.user') if (!laporan) { response.error(res, { message: 'laporan_id tidak ada', code: 404, }) return false } return laporan } exports.cekBanyakDataLaporan = async (user, where = { delegasi: false }) => { const w = { aktif: where.aktif || true, ...where } switch (user.role.id) { case 2020: if (!where.delegasi) w.role_data = 'dikti' else { w.role_data = 'lldikti' w.role_asal = 'dikti' } break case 2021: if (!where.delegasi) { w.role_data = 'lldikti' w['pt.pembina.id'] = user.lembaga.id } else { w.role_asal = 'lldikti' w.role_data = 'dikti' w['pt.pembina.id'] = user.lembaga.id } break case 2022: w['pt.id'] = user.lembaga.id break } const data = await laporanModel .find(w) .populate('user') .select(w.select || ' -pelanggaran -aktif -dokumen') .limit(w.limit) .sort({ createdAt: -1, }) return data } exports.cekSatuDataSanksi = async ( res, user, sanksi_id, where = { banding: false } ) => { const w = { aktif: where.aktif || true } switch (user.role.id) { case 2020: if (!where.banding) w.role_data = 'dikti' break case 2021: w.role_data = 'lldikti' w['pt.pembina.id'] = user.lembaga.id break case 2022: w['pt.id'] = user.lembaga.id break } let sanksi = await sanksiModel .findOne({ _id: sanksi_id, aktif: true, ...where }) .populate({ path: 'laporan', select: 'pt role_data aktif', match: w, }) .populate('dokumen') .populate('pelanggaran') .populate('user') .populate('pengajuan.keberatan.dokumen') .populate('jawaban.keberatan.dokumen') .populate('pengajuan.banding.dokumen') .populate('jawaban.banding.dokumen') .populate('pengajuan.cabut_sanksi.dokumen') .populate('jawaban.cabut_sanksi.dokumen') .populate('perbaikan.dokumen') if (!sanksi?.laporan) { response.error(res, { message: 'sanksi_id tidak ada', code: 404, }) return false } return sanksi } exports.cekBanyakDataSanksi = async (user, where = { banding: false }) => { const w = {} switch (user.role.id) { case 2020: if (!where.banding) { w.role_data = 'dikti' } break case 2021: w['role_data'] = 'lldikti' w['pt.pembina.id'] = user.lembaga.id break case 2022: w['pt.id'] = user.lembaga.id break } let data = await sanksiModel .find({ aktif: where.aktif || true, ...where }) .populate({ path: 'laporan', select: 'pt no_laporan', match: w, }) .populate('user') .select('-batas_waktu -dokumen -pelanggaran') .sort({ createdAt: -1, }) data = data.filter((e) => e.laporan !== null) return data } exports.cekBanyakDataDokumen = async (res, files) => { if (!files.length) { response.error(res, { message: 'dokumen harus ada', }) return false } const dokumen = await addManyDokumen(files) return dokumen.map((e) => e._id) } exports.cekBanyakDataPelanggaran = async (res, pelanggaran_id) => { id_pelanggaran = pelanggaran_id.split(',') const pelanggaran = await pelanggaranModel.find({ _id: { $in: id_pelanggaran, }, }) if (!pelanggaran.length) { response.error(res, { message: 'pelanggaran_id tidak ada' }) return false } return pelanggaran.map((e) => e._id) } exports.dataLaporanAggregate = async (user, where, aggregate) => { const w = { ...where } switch (user.role.id) { case 2020: w['$or'] = [{ role_asal: 'dikti' }, { role_data: 'dikti' }] break case 2021: w['$or'] = [{ role_asal: 'lldikti' }, { role_data: 'lldikti' }] w['pt.pembina.id'] = user.lembaga.id break } const laporan = await laporanModel.aggregate([ { $match: w }, { $group: aggregate }, { $sort: { ['_id.bulan']: 1, }, }, ]) return laporan }