|
|
@@ -0,0 +1,225 @@
|
|
|
+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,
|
|
|
+ })
|
|
|
+})
|