graph.controller.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. const handleError = require('../utils/handleError')
  2. const response = require('../utils/responseHandler')
  3. const {
  4. cekBanyakDataLaporan,
  5. dataLaporanAggregate,
  6. } = require('../utils/cekData')
  7. exports.laporan = handleError(async (req, res) => {
  8. const user = req.user
  9. const data = {}
  10. const laporan = await cekBanyakDataLaporan(user)
  11. const {
  12. jumlahLaporan,
  13. jadwal,
  14. evaluasi,
  15. sanksi,
  16. newLaporan,
  17. laporanBulan,
  18. laporanTahun,
  19. bulan,
  20. tahun,
  21. } = req.query
  22. if (jumlahLaporan == 'true') {
  23. const delegasi = await cekBanyakDataLaporan(user, { delegasi: true })
  24. const ditutup = await cekBanyakDataLaporan(user, { aktif: false })
  25. data.jumlah_laporan = {
  26. dikti: laporan.length,
  27. lldikti: delegasi.length,
  28. ditutup: ditutup.length,
  29. }
  30. }
  31. if (jadwal == 'true') {
  32. const hasJadwal = laporan.filter((e) => e.jadwal).length
  33. const notHasJadwal = laporan.filter((e) => !e.jadwal).length
  34. data.jadwal = {
  35. hasJadwal,
  36. notHasJadwal,
  37. }
  38. }
  39. if (evaluasi == 'true') {
  40. const hasEvaluasi = laporan.filter(
  41. (e) => e.evaluasi.length && e.jadwal
  42. ).length
  43. const notHasEvaluasi = laporan.filter(
  44. (e) => e.evaluasi.length == 0 && e.jadwal
  45. ).length
  46. data.evaluasi = {
  47. hasEvaluasi,
  48. notHasEvaluasi,
  49. }
  50. }
  51. if (sanksi == 'true') {
  52. const hasSanksi = laporan.filter(
  53. (e) => e.sanksi && e.evaluasi.length
  54. ).length
  55. const notHasSanksi = laporan.filter(
  56. (e) => !e.sanksi && e.evaluasi.length
  57. ).length
  58. data.sanksi = {
  59. hasSanksi,
  60. notHasSanksi,
  61. }
  62. }
  63. if (newLaporan == 'true') {
  64. data.newLaporan = await cekBanyakDataLaporan(user, {
  65. limit: 3,
  66. select: 'no_laporan pt.nama -user createdAt',
  67. })
  68. }
  69. if (laporanBulan == 'true') {
  70. let date = {}
  71. if (bulan || (bulan && tahun)) {
  72. const temp = new Date()
  73. date = {
  74. $expr: {
  75. $and: [
  76. { $eq: [{ $month: '$createdAt' }, parseInt(bulan)] },
  77. {
  78. $eq: [
  79. { $year: '$createdAt' },
  80. parseInt(tahun) || temp.getFullYear(),
  81. ],
  82. },
  83. ],
  84. },
  85. }
  86. }
  87. data.laporan_perbulan = await dataLaporanAggregate(
  88. user,
  89. { ...date },
  90. {
  91. _id: {
  92. bulan: {
  93. $month: '$createdAt',
  94. },
  95. tahun: {
  96. $year: '$createdAt',
  97. },
  98. },
  99. jumlah_laporan: {
  100. $sum: 1,
  101. },
  102. }
  103. )
  104. } else if (laporanTahun == 'true') {
  105. const temp = new Date()
  106. let date = {}
  107. date = {
  108. $expr: {
  109. $eq: [{ $year: '$createdAt' }, parseInt(tahun) || temp.getFullYear()],
  110. },
  111. }
  112. data.laporan_perTahun = await dataLaporanAggregate(
  113. user,
  114. { ...date },
  115. {
  116. _id: {
  117. bulan: {
  118. $month: '$createdAt',
  119. },
  120. tahun: {
  121. $year: '$createdAt',
  122. },
  123. },
  124. jumlah_laporan: {
  125. $sum: 1,
  126. },
  127. }
  128. )
  129. }
  130. return response.success(res, {
  131. message: 'Berhasil menganalisis data',
  132. data,
  133. })
  134. })