const handleError = require('../utils/handleError') const response = require('../utils/responseHandler') const { cekBanyakDataLaporan, dataLaporanAggregate, } = require('../utils/cekData') exports.laporan = handleError(async (req, res) => { const user = req.user const data = {} const date = new Date() // let berdasarkan_tahun = {} const { jumlahLaporan, jadwal, evaluasi, sanksi, newLaporan, laporanBulan, laporanTahun, bulan, tahun, listJadwal, } = req.query // if (tahun) { berdasarkan_tahun = { $and: [ { createdAt: { $gte: new Date(`${tahun || date.getFullYear()}`), }, }, { createdAt: { $lt: new Date(`${parseInt(tahun) + 1 || date.getFullYear() + 1}`), }, }, ], } // } const laporan = await cekBanyakDataLaporan(user, { ...berdasarkan_tahun }) if (jumlahLaporan == 'true') { const delegasi = await cekBanyakDataLaporan(user, { delegasi: true, ...berdasarkan_tahun, }) const ditutup = await cekBanyakDataLaporan(user, { aktif: false, ...berdasarkan_tahun, }) data.jumlah_laporan = { dikti: laporan.length, lldikti: delegasi.length, ditutup: ditutup.length, tes: { delegasi: true, ...berdasarkan_tahun, }, } } if (jadwal == 'true') { const hasJadwal = laporan.filter((e) => e.jadwal.judul).length const notHasJadwal = laporan.filter((e) => !e.jadwal.judul).length data.jadwal = { hasJadwal, notHasJadwal, } } if (evaluasi == 'true') { const hasEvaluasi = laporan.filter( (e) => e.evaluasi.length && e.jadwal.judul ).length const notHasEvaluasi = laporan.filter( (e) => e.evaluasi.length == 0 && e.jadwal.judul ).length data.evaluasi = { hasEvaluasi, notHasEvaluasi, } } if (sanksi == 'true') { const hasSanksi = laporan.filter( (e) => e.sanksi && e.evaluasi.length ).length const notHasSanksi = laporan.filter( (e) => !e.sanksi && e.evaluasi.length ).length data.sanksi = { hasSanksi, notHasSanksi, } } if (newLaporan == 'true') { data.newLaporan = await cekBanyakDataLaporan(user, { limit: 3, select: 'no_laporan pt.nama -user createdAt', }) } if (laporanBulan == 'true') { let date = {} if (bulan || (bulan && tahun)) { const temp = new Date() date = { $expr: { $and: [ { $eq: [{ $month: '$createdAt' }, parseInt(bulan)] }, { $eq: [ { $year: '$createdAt' }, parseInt(tahun) || temp.getFullYear(), ], }, ], }, } } data.laporan_perbulan = await dataLaporanAggregate( user, { ...date }, { _id: { bulan: { $month: '$createdAt', }, tahun: { $year: '$createdAt', }, }, jumlah_laporan: { $sum: 1, }, } ) } else if (laporanTahun == 'true') { const temp = new Date() let date = { $expr: { $eq: [{ $year: '$createdAt' }, parseInt(tahun) || temp.getFullYear()], }, } data.laporan_perTahun = await dataLaporanAggregate( user, { ...date }, { _id: { bulan: { $month: '$createdAt', }, tahun: { $year: '$createdAt', }, }, jumlah_laporan: { $sum: 1, }, } ) } if (listJadwal == 'true') { const temp = new Date() let date = { $expr: { $and: [ { $eq: [ { $month: '$jadwal.dari_tanggal' }, parseInt(bulan) || temp.getMonth() + 1, ], }, { $eq: [ { $year: '$jadwal.dari_tanggal' }, parseInt(tahun) || temp.getFullYear(), ], }, ], }, } data.list_jadwal = await dataLaporanAggregate( user, { ...date, jadwal: { $ne: null, $exists: true, }, }, { _id: { bulan: { $month: '$jadwal.dari_tanggal', }, tahun: { $year: '$jadwal.dari_tanggal', }, }, jadwal: { $push: '$jadwal', }, } ) } return response.success(res, { message: 'Berhasil menganalisis data', data, }) })