yazid138 před 2 roky
rodič
revize
d6068ea57f

+ 25 - 10
controller/auto.controller.js

@@ -2,6 +2,7 @@ const handleError = require('../utils/handleError')
 const response = require('../utils/responseHandler')
 const { notifWA } = require('../utils/notifFunction')
 const sanksiModel = require('../model/sanksi.model')
+const laporanModel = require('../model/laporan.model')
 const {
   TEMPLATE_KEBERATAN,
   TEMPLATE_BANDING,
@@ -273,11 +274,11 @@ exports.save = handleError(async (req, res) => {
   let laporan = null;
   let sanksi = null;
   if (isLaporan === 'true') {
-    laporan = await cekSatuDataLaporan(res, user, id, { all: true });
+    laporan = await cekSatuDataLaporan(res, user, id);
     if (!laporan) return
     autoData = await autoSaveModel.findOne({ laporan_id: laporan._id });
   } else if (isSanksi === 'true') {
-    sanksi = await cekSatuDataSanksi(res, user, id, { all: true });
+    sanksi = await cekSatuDataSanksi(res, user, id);
     if (!sanksi) return
     autoData = await autoSaveModel.findOne({ sanksi_id: sanksi._id });
   } else {
@@ -288,7 +289,16 @@ exports.save = handleError(async (req, res) => {
 
   if (autoData) {
     if (isLaporan) {
-      await autoSaveModel.updateOne({ laporan_id: laporan._id }, { laporan: req.body })
+      const dataSave = await autoSaveModel.findOne({ laporan_id: laporan._id })
+      await autoSaveModel.updateOne({ laporan_id: laporan._id }, {
+        laporan: {
+          ...req.body, PenetapanSanksi: {
+            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,
+          }
+        }
+      })
     } else {
       await autoSaveModel.updateOne({ sanksi_id: sanksi._id }, { sanksi: req.body })
     }
@@ -308,19 +318,24 @@ exports.save = handleError(async (req, res) => {
 exports.getSave = handleError(async (req, res) => {
   const { id } = req.params
   const { laporan: isLaporan, sanksi: isSanksi } = req.query
-  const user = req.user
 
   let data = null;
   let laporan = null;
   let sanksi = null;
   if (isLaporan === 'true') {
-    laporan = await cekSatuDataLaporan(res, user, id, { all: true });
-    if (!laporan) return
-    data = (await autoSaveModel.findOne({ laporan_id: laporan._id})).laporan;
+    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;
   } else if (isSanksi === 'true') {
-    sanksi = await cekSatuDataSanksi(res, user, id, { all: true });
-    if (!sanksi) return
-    data = (await autoSaveModel.findOne({ sanksi_id: sanksi._id})).sanksi;
+    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;
   } else {
     return response.error(res, {
       message: 'harus terdapat query sanksi atau laporan yg bernilai true',

+ 57 - 30
controller/laporan.controller.js

@@ -16,6 +16,7 @@ const {
 const { TEMPLATE_LAPORAN } = require('../utils/constanta')
 const logModel = require('../model/log.model')
 const kontakModel = require('../model/kontak.model')
+const { isValidObjectId } = require('mongoose')
 
 exports.create = handleError(async (req, res) => {
   const user = req.user
@@ -81,10 +82,10 @@ exports.create = handleError(async (req, res) => {
       { key: '3', value: 'keterangan', value_text: keterangan },
       { key: '4', value: 'no_laporan', value_text: no_laporan },
     ])
-    
+
     if (notif[0].status == 'success') {
       await logModel.create({
-          aktivitas: `Server berhasil mengirim notif wa kepada ${contacts} untuk Pembuatan Laporan`,
+        aktivitas: `Server berhasil mengirim notif wa kepada ${contacts} untuk Pembuatan Laporan`,
       })
     } else {
       await logModel.create({
@@ -318,19 +319,25 @@ exports.public = handleError(async (req, res) => {
   })
 })
 
-exports.getLaporanByNoLaporan = handleError(async (req, res) => {
-   const { no_laporan } = req.params
-   const data = await laporanModel.findOne({
-      no_laporan,
-      evaluasi: { $exists: true, $ne: [] },
-   })
-   if (!data) {
-      return response.error(res, {
-         message: 'no_laporan tidak ada',
-         code: 404,
-      })
-   }
-   return response.success(res, {
+exports.getLaporanByNoLaporanAndId = handleError(async (req, res) => {
+  const { no_laporan } = req.params
+  let where = { evaluasi: { $exists: true, $ne: [] } }
+  if (isValidObjectId(no_laporan)) where._id = no_laporan
+  else where.no_laporan = no_laporan
+  const data = await laporanModel.findOne(where)
+    .populate({ path: 'user', populate: 'foto' })
+    .populate({ path: 'pelanggaran', select: 'pelanggaran' })
+    .populate({ path: 'sanksi', populate: ['pelanggaran'] })
+    .populate('dokumen')
+    .populate('peserta_penetapan_sanksi.ttd')
+    .populate({ path: 'evaluasi', populate: ['user', 'dokumen'] })
+  if (!data) {
+    return response.error(res, {
+      message: 'no_laporan atau id tidak ada',
+      code: 404,
+    })
+  }
+  return response.success(res, {
     message: 'Berhasil ambil data laporan',
     data,
   })
@@ -409,9 +416,8 @@ exports.update = handleError(async (req, res) => {
   const keterangan2 = req.body.keterangan
   if (change_role === 'true') {
     data.role_data = user.role.id === 2020 ? 'lldikti' : 'dikti'
-    keterangan = `Laporan didelegasi ke ${
-      user.role.id === 2020 ? 'LLDIKTI' : 'DIKTI'
-    }`
+    keterangan = `Laporan didelegasi ke ${user.role.id === 2020 ? 'LLDIKTI' : 'DIKTI'
+      }`
     alasan = keterangan2
     data.alasan_delegasi = keterangan2
     // if (laporan.jadwal) {
@@ -557,22 +563,22 @@ exports.laporanByPembina = handleError(async (req, res) => {
     (async () =>
       isLaporan
         ? await cekBanyakDataLaporan(user, {
-            'pt.pembina.id': idPembina,
-            all: true,
-            ...where,
-          })
+          'pt.pembina.id': idPembina,
+          all: true,
+          ...where,
+        })
         : [])(),
     (async () =>
       isSanksi
         ? (
-            await cekBanyakDataSanksi(
-              user,
-              { all: true, ...where },
-              {
-                ['pt.pembina.id']: idPembina,
-              }
-            )
-          ).filter((e) => e.laporan != null)
+          await cekBanyakDataSanksi(
+            user,
+            { all: true, ...where },
+            {
+              ['pt.pembina.id']: idPembina,
+            }
+          )
+        ).filter((e) => e.laporan != null)
         : [])(),
   ])
 
@@ -581,3 +587,24 @@ exports.laporanByPembina = handleError(async (req, res) => {
     data: { laporan, sanksi: dataSanksi },
   })
 })
+
+exports.getOneLaporanPublic = handleError(async (req, res) => {
+  const { id } = req.params
+  const data = await laporanModel.findById(id)
+    .populate({ path: 'user', populate: 'foto' })
+    .populate({ path: 'pelanggaran', select: 'pelanggaran' })
+    .populate({ path: 'sanksi', populate: ['pelanggaran'] })
+    .populate('dokumen')
+    .populate('peserta_penetapan_sanksi.ttd')
+    .populate({ path: 'evaluasi', populate: ['user', 'dokumen'] })
+  console.log(data)
+  if (!data) return response.error(res, {
+    code: 404,
+    message: 'laporan_id tidak ada'
+  })
+
+  return response.success(res, {
+    message: 'Berhasil ambil satu data Laporan',
+    data,
+  })
+})

+ 18 - 0
controller/migrasi.controller.js

@@ -48,4 +48,22 @@ exports.dokumen = handleError(async (req, res) => {
   })
 })
 
+exports.pelanggaranSanksi = handleError(async (req, res) => {
+  const sanksi = await sanksiModel.find({sanksi: {
+     $eq: [],
+  }}).populate('pelanggaran')
+
+ if(sanksi?.length) await Promise.all(sanksi.map(async e => {
+    await sanksiModel.findOneAndUpdate({
+      _id: e._id
+    }, {
+      sanksi: e.pelanggaran.map(e2 => ({label: e2.label_sanksi, description: e2.sanksi, level: e2.level_sanksi}))
+   })
+  }))
+
+  return response.success(res, {
+    message: 'Berhasil migrasi pelanggaran sanksi',
+  })
+})
+
 

+ 1 - 1
controller/pelanggaran.controller.js

@@ -43,7 +43,7 @@ exports.sanksi = handleError(async (req, res) => {
   let data = await pelanggaranModel.find(w)
   data = [
     ...new Set(
-      data.map((e) => `${e.sanksi} - Sanksi Administratif ${e.label_sanksi}`)
+      data.map((e) => `${e.label_sanksi};${e.sanksi};${e.level_sanksi}`)
     ),
   ]
   return response.success(res, {

+ 71 - 5
controller/sanksi.controller.js

@@ -1,9 +1,10 @@
 const sanksiModel = require('../model/sanksi.model')
 const handleError = require('../utils/handleError')
 const response = require('../utils/responseHandler')
-const { addManyDokumen } = require('../utils/dokumenFunction')
+const { addManyDokumen, addDokumen } = require('../utils/dokumenFunction')
 const { validate } = require('../utils/validation')
 const pemantauanModel = require('../model/pemantauan.model')
+const pelanggaranModel = require('../model/pelanggaran.model')
 const { hariKerja } = require('../utils/hariKerja')
 const {
   cekSatuDataSanksi,
@@ -36,8 +37,16 @@ exports.create = handleError(async (req, res) => {
   })
   if (!laporan) return
 
-  pelanggaran_id = await cekBanyakDataPelanggaran(res, pelanggaran_id)
-  if (!pelanggaran_id) return
+  const id_pelanggaran = pelanggaran_id.split(',')
+  const pelanggaran = await pelanggaranModel.find({
+    _id: {
+      $in: id_pelanggaran,
+    },
+  })
+  if (!pelanggaran.length) {
+    return response.error(res, { message: 'pelanggaran_id tidak ada' })
+  }
+  pelanggaran_id = pelanggaran.map((e) => e._id)
 
   const sanksi = await sanksiModel.findOne({ laporan: laporan_id })
   if (sanksi) {
@@ -71,6 +80,7 @@ exports.create = handleError(async (req, res) => {
     pelanggaran: pelanggaran_id,
     keterangan,
     dokumen: dokumen_id,
+    sanksi: pelanggaran.map(e=> ({label: e.label_sanksi, value: e.sanksi, level: e.level_sanksi})),
     berita_acara: dokumenBeritaAcara_id,
     tanggal_terima_sanksi,
     dokumen_terima_sanksi: dokumenTerimaSanksi_id,
@@ -171,6 +181,16 @@ exports.update = handleError(async (req, res) => {
     user: user._id,
     keterangan: 'Melakukan Perubahan Sanksi',
     dokumen: dokumen_id,
+    data: {
+      no_sanksi,
+      // pelanggaran: pelanggaran_id,
+      sanksi: sanksiBody,
+      keterangan,
+      masa_berlaku: {
+        from_date,
+        to_date,
+      },
+    }
   })
 
   return response.success(res, {
@@ -288,10 +308,10 @@ exports.getAll = handleError(async (req, res) => {
     where.delegasi = true
   }
   if (naikSanksi === 'true') {
-    q.level_sanksi = { $in: [1, 2] }
+    where['sanksi.level'] = { $in: [1, 2] }
   }
   if (turunSanksi === 'true') {
-    q.level_sanksi = { $in: [2, 3] }
+    where['sanksi.level'] = { $in: [2, 3] }
   }
   const data = await cekBanyakDataSanksi(user, where, q)
   return response.success(res, {
@@ -378,3 +398,49 @@ exports.editTmt = handleError(async (req, res) => {
     data,
   })
 })
+
+exports.addPesertaPleno = handleError(async (req, res) => {
+  const isValid = validate(res, req.body, {
+    laporan_id: 'string',
+    nama: 'string',
+  })
+  if (!isValid) return
+
+  const { laporan_id, nama } = req.body
+
+  const laporan = await laporanModel.findOne({
+    _id: laporan_id,
+    // sanksi: {
+    //   $eq: null,
+    //   $exists: false
+    // }
+  })
+  if (!laporan) return response.error(res, {
+    code: 404,
+    message: 'laporan_id tidak ada'
+  })
+
+  const file = req.file
+  if (!file) {
+    return response.error(res, {
+      message: 'ttd harus ada',
+    })
+  }
+  const dokumen = await addDokumen(file)
+
+  await laporanModel.findOneAndUpdate(
+    { _id: laporan._id },
+    {
+      $push: {
+        peserta_penetapan_sanksi: {
+          nama,
+          ttd: dokumen.id
+        }
+      }
+    }
+  )
+
+  return response.success(res, {
+    message: 'Berhasil tambah peserta pleno',
+  })
+})

+ 1 - 1
model/autoSave.model.js

@@ -9,7 +9,7 @@ module.exports = mongoose.model(
         laporan_id: { type: Types.ObjectId, ref: laporan },
         sanksi_id: { type: Types.ObjectId, ref: sanksi },
         sanksi: { type: Object },
-        laporan: { type: Object }
+        laporan: { type: Object },
     }, {
         timestamps: true,
     }),

+ 14 - 0
model/laporan.model.js

@@ -41,6 +41,20 @@ module.exports = mongoose.model(
         sampai_tanggal: Date,
         warna: String,
       },
+      peserta_penetapan_sanksi: [
+        new Schema(
+          {
+            nama: String,
+            ttd: {
+              type: Types.ObjectId,
+              ref: dokumen,
+            },
+          },
+          {
+            timestamps: true
+          }
+        )
+      ],
       evaluasi: [
         new Schema(
           {

+ 1 - 0
model/pemantauan.model.js

@@ -18,6 +18,7 @@ module.exports = mongoose.model(
       alasan: String,
       jawaban: String,
       dokumen: [{ type: Types.ObjectId, ref: dokumen }],
+      data: { type: Object },
       jadwal: {
         dari_tanggal: Date,
         sampai_tanggal: Date,

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

@@ -9,6 +9,6 @@ router.get('/reminder-keberatan', verify, auto.reminderKeberatan)
 router.get('/reminder-banding', verify, auto.reminderBanding)
 router.get('/status-sanksi', verify, auto.updateStatusSanksi)
 router.post('/save/:id', auth, auto.save)
-router.get('/save/:id', auth, auto.getSave)
+router.get('/save/:id', auto.getSave)
 
 module.exports = router

+ 1 - 0
routes/v1/migration.routes.js

@@ -3,5 +3,6 @@ const migrasi = require('../../controller/migrasi.controller')
 
 router.put('/pengajuan', migrasi.pengajuan)
 router.put('/dokumen', migrasi.dokumen)
+router.put('/pelanggaran-sanksi', migrasi.pelanggaranSanksi)
 
 module.exports = router

+ 3 - 1
routes/v1/public.routes.js

@@ -7,11 +7,12 @@ const pemantauan = require('../../controller/pemantauan.controller')
 const handleDokumen = require('../../utils/handleDokumen')
 const auth = require('../../middleware/verifyTokenPublic')
 const pengunjung = require('../../controller/pengunjung.controller')
+const sanksi = require('../../controller/sanksi.controller')
 
 router.get('/pt', pt.public)
 router.get('/pelanggaran', pelanggaran.public)
 router.get('/pemantauan', pemantauan.public)
-router.get('/laporan/:no_laporan', laporan.getLaporanByNoLaporan)
+router.get('/laporan/:no_laporan', laporan.getLaporanByNoLaporanAndId)
 router.post(
   '/laporan/create',
   auth,
@@ -19,6 +20,7 @@ router.post(
   laporan.public
 )
 router.post('/user/create', handleDokumen.single('foto'), user.addUserPublic)
+router.post('/sanksi/add-peserta-pleno', handleDokumen.single('ttd'), sanksi.addPesertaPleno)
 router.get('/pengunjung', pengunjung.getPengunjungPublic)
 
 module.exports = router

+ 1 - 0
utils/cekData.js

@@ -49,6 +49,7 @@ exports.cekSatuDataLaporan = async (
     .populate({ path: 'pelanggaran', select: 'pelanggaran' })
     .populate({ path: 'sanksi', populate: ['pelanggaran'] })
     .populate('dokumen')
+    .populate('peserta_penetapan_sanksi.ttd')
     .populate({ path: 'evaluasi', populate: ['user', 'dokumen'] })
   // .populate('evaluasi.user')
   if (!laporan) {