yazid138 2 年之前
父节点
当前提交
1ac9fefc30

+ 139 - 121
controller/auto.controller.js

@@ -12,7 +12,7 @@ const {
   TEMPLATE_KEBERATAN,
   TEMPLATE_BANDING,
   TEMPLATE_REMINDER,
-  TEMPLATE_REMINDER2
+  TEMPLATE_REMINDER2,
 } = require('../utils/constanta')
 const moment = require('moment')
 const autoSaveModel = require('../model/autoSave.model')
@@ -21,31 +21,28 @@ const userModel = require('../model/user.model')
 const { addManyDokumen } = require('../utils/dokumenFunction')
 const logModel = require('../model/log.model')
 const kontakModel = require('../model/kontak.model')
-const childProcess = require('child_process')
-const coba = require('../utils/coba')
-const { validate } = require('../utils/validation')
 
 exports.keberatan = handleError(async (req, res) => {
   const dataSanksi = await sanksiModel
     .find({
       'tanggal_akhir_keberatan': {
-        $lt: moment().add(-1, 'day').toISOString()
+        $lt: moment().add(-1, 'day').toISOString(),
       },
       'is_pengajuan_keberatan': {
         $exists: false,
-        $eq: null
+        $eq: null,
       },
       'pengajuan.cabut_sanksi': {
         $exists: false,
-        $eq: null
-      }
+        $eq: null,
+      },
     })
     .populate('user')
     .populate('laporan')
 
   if (!dataSanksi.length) {
     return response.success(res, {
-      message: 'Tidak ada notifikasi yg dikirim'
+      message: 'Tidak ada notifikasi yg dikirim',
     })
   }
 
@@ -54,12 +51,12 @@ exports.keberatan = handleError(async (req, res) => {
       async (sanksi) =>
         await sanksiModel.findByIdAndUpdate(sanksi._id, {
           is_pengajuan_keberatan: false,
-          last_step: 'Dokumen Perbaikan'
+          last_step: "Dokumen Perbaikan"
         })
     )
   )
   return response.success(res, {
-    message: 'Notifikasi berhasil terkirim'
+    message: 'Notifikasi berhasil terkirim',
   })
 })
 
@@ -67,27 +64,27 @@ exports.banding = handleError(async (req, res) => {
   const dataSanksi = await sanksiModel
     .find({
       'tanggal_akhir_banding': {
-        $lt: moment().add(-1, 'day').toISOString()
+        $lt: moment().add(-1, 'day').toISOString(),
       },
       'is_pengajuan_banding': {
         $exists: false,
-        $eq: null
+        $eq: null,
       },
       'batas_waktu.jawaban_keberatan': {
         $exists: true,
-        $ne: null
+        $ne: null,
       },
       ['pengajuan.cabut_sanksi']: {
         $exists: false,
-        $eq: null
-      }
+        $eq: null,
+      },
     })
     .populate('user')
     .populate('laporan')
 
   if (!dataSanksi.length) {
     return response.success(res, {
-      message: 'Tidak ada notifikasi yg dikirim'
+      message: 'Tidak ada notifikasi yg dikirim',
     })
   }
 
@@ -113,13 +110,13 @@ exports.banding = handleError(async (req, res) => {
         // ])
         await sanksiModel.findByIdAndUpdate(sanksi._id, {
           is_pengajuan_banding: false,
-          last_step: 'Dokumen Perbaikan'
+          last_step: "Dokumen Perbaikan"
         })
       }
     )
   )
   return response.success(res, {
-    message: 'Notifikasi berhasil terkirim'
+    message: 'Notifikasi berhasil terkirim',
   })
 })
 
@@ -128,12 +125,12 @@ exports.reminderKeberatan = handleError(async (req, res) => {
     .find({
       'batas_waktu.jawaban_keberatan': {
         $exists: true,
-        $ne: null
+        $ne: null,
       },
       'jawaban.keberatan': {
         $exists: false,
-        $eq: null
-      }
+        $eq: null,
+      },
     })
     .populate('user')
     .populate('laporan')
@@ -149,28 +146,32 @@ exports.reminderKeberatan = handleError(async (req, res) => {
             {
               key: '1',
               value: 'no_laporan',
-              value_text: e.laporan.no_laporan
+              value_text: e.laporan.no_laporan,
             },
             {
               key: '2',
               value: 'keterangan',
-              value_text: 'Proses Menjawab Pengajuan Keberatan'
+              value_text: 'Proses Menjawab Pengajuan Keberatan',
             },
             {
               key: '3',
               value: 'pt',
-              value_text: e.laporan.pt.nama
+              value_text: e.laporan.pt.nama,
             },
             {
               key: '4',
               value: 'masa',
-              value_text: `menjawab pengajuan keberatan tersisa ${dayLeft} hari lagi.`
-            }
+              value_text: `menjawab pengajuan keberatan tersisa ${dayLeft} hari lagi.`,
+            },
           ])
+          const contacts = await kontakModel.find()
+          await logModel.create({
+            aktivitas: `Server berhasil mengirim notifikasi Whatsapp kepada ${contacts.map((e) => e.nama).join(', ')} dengan Nomor Laporan ${e.laporan.no_laporan} terhadap ${e.laporan.pt.nama} untuk Mengajukan Keberatan`
+          })
         } catch (error) {
           return response.error(res, {
             message: 'Notifikasi gagal terkirim',
-            error: error.message
+            error: error.message,
           })
         }
       }
@@ -178,16 +179,9 @@ exports.reminderKeberatan = handleError(async (req, res) => {
   )
 
   let message = 'Tidak ada notifikasi yang dikirim'
-  if (notif.length) {
-    message = 'Notifikasi berhasil terkirim'
-    const contacts = await kontakModel.find()
-    await logModel.create({
-      aktivitas: `Server berhasil mengirim notif wa kepada ${contacts.map((e) => e.nama).join(', ')} untuk reminder keberatan`
-    })
-  }
-
+  if (notif.length) message = 'Notifikasi berhasil terkirim'
   return response.success(res, {
-    message
+    message,
   })
 })
 
@@ -196,12 +190,12 @@ exports.reminderBanding = handleError(async (req, res) => {
     .find({
       'batas_waktu.jawaban_banding': {
         $exists: true,
-        $ne: null
+        $ne: null,
       },
       'jawaban.banding': {
         $exists: false,
-        $eq: null
-      }
+        $eq: null,
+      },
     })
     .populate('user')
     .populate('laporan')
@@ -217,28 +211,32 @@ exports.reminderBanding = handleError(async (req, res) => {
             {
               key: '1',
               value: 'no_laporan',
-              value_text: e.laporan.no_laporan
+              value_text: e.laporan.no_laporan,
             },
             {
               key: '2',
               value: 'keterangan',
-              value_text: 'Proses Menjawab Pengajuan Banding'
+              value_text: 'Proses Menjawab Pengajuan Banding',
             },
             {
               key: '3',
               value: 'pt',
-              value_text: e.laporan.pt.nama
+              value_text: e.laporan.pt.nama,
             },
             {
               key: '4',
               value: 'masa',
-              value_text: `menjawab pengajuan banding tersisa ${dayLeft} hari lagi.`
-            }
+              value_text: `menjawab pengajuan banding tersisa ${dayLeft} hari lagi.`,
+            },
           ])
+          const contacts = await kontakModel.find()
+          await logModel.create({
+            aktivitas: `Server berhasil mengirim notifikasi Whatsapp kepada ${contacts.map((e) => e.nama).join(', ')} dengan Nomor Laporan ${e.laporan.no_laporan} terhadap ${e.laporan.pt.nama} untuk Mengajukan Banding`
+          })
         } catch (error) {
           return response.error(res, {
             message: 'Notifikasi gagal terkirim',
-            error: error.message
+            error: error.message,
           })
         }
       }
@@ -246,37 +244,30 @@ exports.reminderBanding = handleError(async (req, res) => {
   )
 
   let message = 'Tidak ada notifikasi yang dikirim'
-  if (notif.length) {
-    message = 'Notifikasi berhasil terkirim'
-    const contacts = await kontakModel.find()
-    await logModel.create({
-      aktivitas: `Server berhasil mengirim notif wa kepada ${contacts.map((e) => e.nama).join(', ')} untuk reminder banding`
-    })
-  }
-
+  if (notif.length) message = 'Notifikasi berhasil terkirim'
   return response.success(res, {
-    message
+    message,
   })
 })
 
 exports.updateStatusSanksi = handleError(async (req, res) => {
   const sanksi = await sanksiModel.find({
     'masa_berlaku.to_date': {
-      $lte: new Date().toISOString()
+      $lte: new Date().toISOString(),
     },
-    aktif: true
+    aktif: true,
   })
 
   Promise.all(
     sanksi.map(async (e) =>
       sanksiModel.findByIdAndUpdate(e._id, {
-        aktif: false
+        aktif: false,
       })
     )
   )
 
   return response.success(res, {
-    message: 'update status sanksi berhasil'
+    message: 'update status sanksi berhasil',
   })
 })
 
@@ -285,20 +276,20 @@ exports.save = handleError(async (req, res) => {
   const { laporan: isLaporan, sanksi: isSanksi } = req.query
   const user = req.user
 
-  let autoData = null
-  let laporan = null
-  let sanksi = null
+  let autoData = null;
+  let laporan = null;
+  let sanksi = null;
   if (isLaporan === 'true') {
-    laporan = await cekSatuDataLaporan(res, user, id)
+    laporan = await cekSatuDataLaporan(res, user, id);
     if (!laporan) return
-    autoData = await autoSaveModel.findOne({ laporan_id: laporan._id })
+    autoData = await autoSaveModel.findOne({ laporan_id: laporan._id });
   } else if (isSanksi === 'true') {
-    sanksi = await cekSatuDataSanksi(res, user, id)
+    sanksi = await cekSatuDataSanksi(res, user, id);
     if (!sanksi) return
-    autoData = await autoSaveModel.findOne({ sanksi_id: sanksi._id })
+    autoData = await autoSaveModel.findOne({ sanksi_id: sanksi._id });
   } else {
     return response.error(res, {
-      message: 'query harus sanksi atau laporan yg bernilai true'
+      message: 'query harus sanksi atau laporan yg bernilai true',
     })
   }
 
@@ -311,7 +302,7 @@ exports.save = handleError(async (req, res) => {
             dataSuratBA: req.body?.PenetapanSanksi?.dataSuratBA || dataSave.laporan.PenetapanSanksi?.dataSuratBA,
             dataUpload: req.body?.PenetapanSanksi?.dataUpload || dataSave.laporan.PenetapanSanksi?.dataUpload,
             dataPelanggaran: req.body?.PenetapanSanksi?.dataPelanggaran || dataSave.laporan.PenetapanSanksi?.dataPelanggaran,
-            activeStep: req.body?.PenetapanSanksi?.activeStep || dataSave.laporan.PenetapanSanksi?.activeStep
+            activeStep: req.body?.PenetapanSanksi?.activeStep || dataSave.laporan.PenetapanSanksi?.activeStep,
           }
         }
       })
@@ -327,7 +318,7 @@ exports.save = handleError(async (req, res) => {
   }
 
   return response.success(res, {
-    message: 'Berhasil menyimpan data auto save'
+    message: 'Berhasil menyimpan data auto save',
   })
 })
 
@@ -335,26 +326,26 @@ exports.getSave = handleError(async (req, res) => {
   const { id } = req.params
   const { laporan: isLaporan, sanksi: isSanksi } = req.query
 
-  let data = null
-  let laporan = null
-  let sanksi = null
+  let data = null;
+  let laporan = null;
+  let sanksi = null;
   if (isLaporan === 'true') {
     laporan = await laporanModel.findById(id)
     if (!laporan) return response.error(res, {
       code: 404,
       message: 'laporan_id tidak ada'
     })
-    data = (await autoSaveModel.findOne({ laporan_id: laporan._id })).laporan
+    data = (await autoSaveModel.findOne({ laporan_id: laporan._id })).laporan;
   } else if (isSanksi === 'true') {
     sanksi = await sanksiModel.findById(id)
     if (!sanksi) return response.error(res, {
       code: 404,
       message: 'sanksi_id tidak ada'
     })
-    data = (await autoSaveModel.findOne({ sanksi_id: sanksi._id })).sanksi
+    data = (await autoSaveModel.findOne({ sanksi_id: sanksi._id })).sanksi;
   } else {
     return response.error(res, {
-      message: 'harus terdapat query sanksi atau laporan yg bernilai true'
+      message: 'harus terdapat query sanksi atau laporan yg bernilai true',
     })
   }
 
@@ -365,40 +356,69 @@ exports.getSave = handleError(async (req, res) => {
 })
 
 exports.backup = handleError(async (req, res) => {
-  const mongoUrl = coba.decrypt(process.env.MYDSY)
-  let cmd = `mongodump --uri ${mongoUrl} -o backup/${moment().format('YYYY-MM-DD')}`
-
-  const akun = mongoUrl.match(/\/\/(.*?)@/i)
-  if (akun?.length) {
-    cmd += ` --authenticationDatabase admin`
-  }
-
-  childProcess.execSync(cmd)
+  const timeNow = new Date().getTime()
+  const dataBakup = await Promise.all([
+    (async () => {
+      const path = 'backup/' + timeNow + '-sanksi.json'
+      const sanksi = await sanksiModel.find()
+      fs.writeFileSync(path, JSON.stringify(sanksi))
+      const { size } = fs.statSync(path)
+      const mimetype = 'application/json'
+      const buffer = fs.readFileSync(path)
+      return { buffer, mimetype, size, originalname: 'sanksi.json' }
+    })(),
+    (async () => {
+      const path = 'backup/' + timeNow + '-laporan.json'
+      const laporan = await laporanModel.find()
+      fs.writeFileSync(path, JSON.stringify(laporan))
+      const { size } = fs.statSync(path)
+      const mimetype = 'application/json'
+      const buffer = fs.readFileSync(path)
+      return { buffer, mimetype, size, originalname: 'laporan.json' }
+    })(),
+    (async () => {
+      const path = 'backup/' + timeNow + '-user.json'
+      const user = await userModel.find()
+      fs.writeFileSync(path, JSON.stringify(user))
+      const { size } = fs.statSync(path)
+      const mimetype = 'application/json'
+      const buffer = fs.readFileSync(path)
+      return { buffer, mimetype, size, originalname: 'user.json' }
+    })(),
+    (async () => {
+      const path = 'backup/' + timeNow + '-chunk.json'
+      const chunk = await chunkModel.find()
+      fs.writeFileSync(path, JSON.stringify(chunk))
+      // const { size } = fs.statSync(path)
+      // const mimetype = 'application/json'
+      // const buffer = fs.readFileSync(path)
+      // return { buffer, mimetype, size, originalname: 'chunk.json' }
+    })(),
+    (async () => {
+      const path = 'backup/' + new Date().getTime() + '-dokumen.json'
+      const dokumen = await dokumenModel.find()
+      fs.writeFileSync(path, JSON.stringify(dokumen))
+      const { size } = fs.statSync(path)
+      const mimetype = 'application/json'
+      const buffer = fs.readFileSync(path)
+      return { buffer, mimetype, size, originalname: 'dokumen.json' }
+    })(),
+    (async () => {
+      const path = 'backup/' + new Date().getTime() + '-pemantauan.json'
+      const pemantauan = await dokumenModel.find()
+      fs.writeFileSync(path, JSON.stringify(pemantauan))
+      const { size } = fs.statSync(path)
+      const mimetype = 'application/json'
+      const buffer = fs.readFileSync(path)
+      return { buffer, mimetype, size, originalname: 'pemantauan.json' }
+    })(),
+  ])
+  // const dokumen = await addManyDokumen(dataBakup)
+  // const tes = await backupModel.create({
+  //   dokumen: dokumen.map(e => e._id)
+  // })
   return response.success(res, {
-    message: 'berhasil membuat backup'
-  })
-})
-
-exports.restore = handleError(async (req, res) => {
-  const isValid = validate(res, {
-    tanggal: { type: 'date', convert: true }
-  }, req.query)
-  if (!isValid) return
-
-  const { tanggal } = req.query
-  const mongoUrl = coba.decrypt(process.env.MYDSY)
-  let cmd = `mongorestore --uri ${mongoUrl}`
-
-  const akun = mongoUrl.match(/\/\/(.*?)@/i)
-  if (akun?.length) {
-    const [username, password] = akun[1].split(':')
-    cmd += ` --authenticationDatabase admin`
-  }
-  cmd += ` backup/${tanggal}`
-
-  childProcess.execSync(cmd)
-  return response.success(res, {
-    message: 'berhasil membuat backup'
+    message: 'berhasil membuat backup',
   })
 })
 
@@ -408,7 +428,7 @@ exports.getBackup = handleError(async (req, res) => {
   const data = await backupModel.findById(id).populate('dokumen')
   if (!data) return response.error(res, {
     code: 404,
-    message: 'Not Found'
+    message: 'Not Found',
   })
 
   return response.success(res, {
@@ -418,13 +438,11 @@ exports.getBackup = handleError(async (req, res) => {
 })
 
 exports.berakhirSanksi = handleError(async (req, res) => {
-  const sanksi = await sanksiModel.find({
-    'masa_berlaku.to_date': {
+  const sanksi = await sanksiModel.find({'masa_berlaku.to_date': {
       $ne: null,
       $exists: true
-    }
-  }).populate('laporan')
-  let count = 0
+    }}).populate('laporan')
+  let count = 0;
 
   await Promise.all(sanksi.map(async e => {
     const dayLeft = moment(e.masa_berlaku.to_date).diff(
@@ -450,22 +468,22 @@ exports.berakhirSanksi = handleError(async (req, res) => {
             value_text: `habis masa berlaku sanksi tersisa ${dayLeft} hari lagi.`
           }
         ])
-        count++
+        count++;
+        const contacts = await kontakModel.find()
+        await logModel.create({
+          aktivitas: `Server berhasil mengirim notifikasi reminder Whatsapp kepada ${contacts.map((e) => e.nama).join(', ')} dengan Nomor Sanksi ${e.no_sanksi} terhadap ${e.laporan.pt.nama} bahwa Masa Berlaku Sanksi tersisa ${dayLeft} hari lagi.`
+        })
       } catch (error) {
         return response.error(res, {
           message: 'Notifikasi gagal terkirim',
-          error: error.message
+          error: error.message,
         })
       }
     }
   }))
-  const contacts = await kontakModel.find()
   let message = 'Notifikasi berhasil terkirim'
   if (count === 0) message = 'tidak ada notifikasi yg dikirim'
-  else await logModel.create({
-    aktivitas: `Server berhasil mengirim notif wa kepada ${contacts.map((e) => e.nama).join(', ')} untuk reminder berakhirnya sanksi`
-  })
   return response.success(res, {
-    message
+    message,
   })
 })

+ 29 - 6
controller/laporan.controller.js

@@ -399,7 +399,8 @@ exports.getOne = handleError(async (req, res) => {
 exports.update = handleError(async (req, res) => {
   const { id } = req.params
   const user = req.user
-  const laporan = await cekSatuDataLaporan(res, user, id)
+  const files = req.files
+  const laporan = await cekSatuDataLaporan(res, user, id, {normal: true})
   if (!laporan) return
 
   const isValid = validate(res, req.body, {
@@ -427,12 +428,21 @@ exports.update = handleError(async (req, res) => {
     // }
   }
   if (aktif) {
+    let dokumen_id = []
     data.aktif = aktif === 'true'
+    if (files) {
+      const dokumen = await addManyDokumen(files)
+      dokumen_id = dokumen.map((e) => e._id)
+    }
     if (aktif === 'true') {
       keterangan = 'Laporan dibuka'
     } else {
       keterangan = `Laporan ditutup`
       alasan = keterangan2
+      data.tuntas = {
+        keterangan: keterangan2,
+        dokumen: dokumen_id,
+      }
     }
   }
 
@@ -500,7 +510,7 @@ exports.laporanByPembina = handleError(async (req, res) => {
   const user = req.user
   const where = {}
   let isLaporan = true
-  let isSanksi = true
+  let isSanksi = false
 
   if (penjadwalan === 'true') {
     where.jadwal = {
@@ -560,14 +570,27 @@ exports.laporanByPembina = handleError(async (req, res) => {
   }
 
   const [laporan, dataSanksi] = await Promise.all([
-    (async () =>
-      isLaporan
+    (async () => {
+      let laporan = isLaporan
         ? await cekBanyakDataLaporan(user, {
           'pt.pembina.id': idPembina,
           all: true,
           ...where,
-        })
-        : [])(),
+        }, {lean: true})
+        : []
+      if (!laporan.length) return []
+      laporan = laporan.map(e => {
+        let step = 'Pelaporan'
+        if (e.jadwal && !e.evaluasi.length) step = 'Penjadwalan'
+        else if (e.evaluasi.length && !e.sanksi) step = 'Pemeriksaan'
+        else if (e.sanksi?.pengajuan?.cabut_sanksi) step = 'Cabut Sanksi'
+        else if (e.sanksi?.pengajuan?.keberatan && !e.sanksi?.pengajuan?.banding) step = 'Keberatan'
+        else if (e.sanksi?.pengajuan?.banding) step = 'Banding'
+        else if (e.sanksi) step = 'Sanksi'
+        return { ...e, step }
+      })
+      return laporan
+    })(),
     (async () =>
       isSanksi
         ? (

+ 4 - 9
controller/sanksi.controller.js

@@ -80,9 +80,6 @@ exports.create = handleError(async (req, res) => {
     await laporanModel.findByIdAndUpdate(laporan._id, {
       berita_acara: autoSave.laporan.PenetapanSanksi
     })
-  const batas_waktu = from_date ? {
-    keberatan: hariKerja(10, from_date)
-  } : null
   const data = await sanksiModel.create({
     no_sanksi,
     laporan: laporan._id,
@@ -95,11 +92,9 @@ exports.create = handleError(async (req, res) => {
     tanggal_terima_sanksi,
     dokumen_terima_sanksi: dokumenTerimaSanksi_id,
     tanggal_akhir_keberatan,
-    masa_berlaku: {
-      from_date,
-      to_date
-    },
-    batas_waktu
+    masa_berlaku: from_date && to_date ? { from_date, to_date} : null,
+    batas_waktu: from_date ? { keberatan: hariKerja(10, from_date) } : null,
+    aktif: from_date ? true : false,
   })
   await laporanModel.findByIdAndUpdate(laporan._id, {
     sanksi: data._id
@@ -361,7 +356,7 @@ exports.getAll = handleError(async (req, res) => {
       where.$or = [
         {
           perbaikan: { $exists: true, $ne: [] },
-          'jawaban.cabut_sanksi': { $exists: true, $ne: null }
+          'jawaban.cabut_sanksi': { $exists: false, $eq: null }
         },
         {
           bypass_cabut_sanksi: { $eq: true }

+ 9 - 0
model/laporan.model.js

@@ -29,6 +29,15 @@ module.exports = mongoose.model(
         default: 'dikti',
       },
       aktif: { type: Boolean, default: true },
+      tuntas: {
+        keterangan: String,
+        dokumen: [
+          {
+            type: Types.ObjectId,
+            ref: dokumen,
+          },
+        ],
+      },
       dokumen: [
         {
           type: Types.ObjectId,

+ 3 - 3
routes/v1/graph.routes.js

@@ -3,14 +3,14 @@ const graph = require('../../controller/graph.controller')
 const auth = require('../../middleware/verifyToken')
 const roleId = require('../../middleware/role')
 
-router.get('/', auth, roleId([2020, 2021, 2023]), graph.laporan)
+router.get('/', auth, roleId([2020, 2021, 2023, 2024]), graph.laporan)
 router.get(
   '/laporanSelesai',
   auth,
-  roleId([2020, 2021, 2023]),
+  roleId([2020, 2021, 2023, 2024]),
   graph.laporanSelesai
 )
 router.get('/jumlahStatusLaporan', auth, graph.jumlahStatusLaporan)
-router.get('/:token/:nama_file', auth, roleId([2020, 2021, 2023]), graph.excel)
+router.get('/:token/:nama_file', auth, roleId([2020, 2021, 2023, 2024]), graph.excel)
 
 module.exports = router

+ 5 - 2
routes/v1/laporan/index.js

@@ -5,10 +5,13 @@ const roleId = require('../../../middleware/role')
 
 router.get('/', laporan.getAll)
 router.get('/jumlah', laporan.jumlahLaporan)
-router.get('/byPembina/:idPembina', roleId([2020,2023]),laporan.laporanByPembina)
+router.get('/byPembina/:idPembina', roleId([2020,2023, 2024]),laporan.laporanByPembina)
 router.get('/:id', laporan.getOne)
 router.post('/create', handleDokumen.array('dokumen'), laporan.create)
-router.put('/update/:id', laporan.update)
+router.put('/update/:id', ((req, res, next) => {
+  if (req.query.redudansi === 'true') return handleDokumen.array('dokumen')(req, res, next);
+  return next()
+}), laporan.update)
 
 router.use('/jadwal', require('./jadwal.routes'))
 router.use('/evaluasi', require('./evaluasi.routes'))

+ 2 - 2
routes/v1/pelanggaran.routes.js

@@ -3,7 +3,7 @@ const pelanggaran = require('../../controller/pelanggaran.controller')
 const roleId = require('../../middleware/role')
 const auth = require('../../middleware/verifyToken')
 
-router.get('/', roleId([2020, 2021, 2023]), pelanggaran.getAll)
-router.get('/sanksi', auth,roleId([2020, 2021, 2023]), pelanggaran.sanksi)
+router.get('/', roleId([2020, 2021, 2023, 2024]), pelanggaran.getAll)
+router.get('/sanksi', auth,roleId([2020, 2021, 2023, 2024]), pelanggaran.sanksi)
 
 module.exports = router

+ 1 - 1
routes/v1/pemantauan.routes.js

@@ -3,6 +3,6 @@ const pemantauan = require('../../controller/pemantauan.controller')
 const roleId = require('../../middleware/role')
 
 router.get('/pt', roleId(2022), pemantauan.getPT)
-router.get('/:laporan_id', roleId([2020, 2021, 2023]), pemantauan.get)
+router.get('/:laporan_id', roleId([2020, 2021, 2023, 2024]), pemantauan.get)
 
 module.exports = router

+ 1 - 1
routes/v1/pt.routes.js

@@ -3,6 +3,6 @@ const pt = require('../../controller/pt.controller')
 const roleId = require('../../middleware/role')
 
 router.get('/', pt.getAll)
-router.get('/:id', roleId([2020, 2021, 2023]), pt.getOne)
+router.get('/:id', roleId([2020, 2021, 2023, 2024]), pt.getOne)
 
 module.exports = router

+ 9 - 5
utils/cekData.js

@@ -9,7 +9,7 @@ exports.cekSatuDataLaporan = async (
   laporan_id,
   where = { delegasi: false, aktif: true }
 ) => {
-  const w = { _id: laporan_id, aktif: where.aktif || true, ...where }
+  let w = { _id: laporan_id, aktif: where.aktif || true, ...where }
   switch (user.role.id) {
     case 2020:
       if (where.all) {
@@ -43,6 +43,7 @@ exports.cekSatuDataLaporan = async (
       w['pt.id'] = user.lembaga.id
       break
   }
+  if (where.normal) w = { _id: laporan_id }
   const laporan = await laporanModel
     .findOne(w)
     .populate({ path: 'user', populate: 'foto' })
@@ -51,6 +52,7 @@ exports.cekSatuDataLaporan = async (
     .populate('dokumen')
     .populate('peserta_penetapan_sanksi.ttd')
     .populate({ path: 'evaluasi', populate: ['user', 'dokumen'] })
+    .populate('tuntas.dokumen')
   // .populate('evaluasi.user')
   if (!laporan) {
     response.error(res, {
@@ -62,7 +64,7 @@ exports.cekSatuDataLaporan = async (
   return laporan
 }
 
-exports.cekBanyakDataLaporan = async (user, where = { delegasi: false }) => {
+exports.cekBanyakDataLaporan = async (user, where = { delegasi: false }, options = {}) => {
   const w = { aktif: where.aktif || true, ...where }
   switch (user.role.id) {
     case 2020:
@@ -97,7 +99,7 @@ exports.cekBanyakDataLaporan = async (user, where = { delegasi: false }) => {
       w['pt.id'] = user.lembaga.id
       break
   }
-  const data = await laporanModel
+  let laporan =  laporanModel
     .find(w)
     .populate('user')
     .populate({ path: 'sanksi', populate: ['pelanggaran'] })
@@ -106,7 +108,8 @@ exports.cekBanyakDataLaporan = async (user, where = { delegasi: false }) => {
     .sort({
       createdAt: -1,
     })
-  return data
+  if (options.lean) laporan = laporan.lean()
+  return await laporan
 }
 
 exports.cekSatuDataSanksi = async (
@@ -115,7 +118,7 @@ exports.cekSatuDataSanksi = async (
   sanksi_id,
   where = { banding: false }
 ) => {
-  const w = { aktif: where.aktif || true }
+  let w = { aktif: where.aktif || true }
   switch (user.role.id) {
     case 2020:
       // if (where.all) w.role_asal = 'dikti'
@@ -134,6 +137,7 @@ exports.cekSatuDataSanksi = async (
       w['pt.id'] = user.lembaga.id
       break
   }
+  if (where.normal) w = { _id: sanksi_id }
   let sanksi = await sanksiModel
     .findOne({ _id: sanksi_id, ...where })
     .populate({