Forráskód Böngészése

penambahan input alasan di update laporan, menambahkan level pada laporan, dan menambahkan for_public untuk pemantauan publik

yazid138 3 éve
szülő
commit
eaa0d5ab1d

+ 25 - 6
controller/laporan.controller.js

@@ -55,6 +55,7 @@ exports.create = handleError(async (req, res) => {
     pelanggaran: pelanggaran_id,
     keterangan,
     role_data: user.role.id === 2020 ? 'dikti' : 'lldikti',
+    level: 2,
   }
 
   data = await laporanModel.create(data)
@@ -173,24 +174,28 @@ exports.create = handleError(async (req, res) => {
 exports.public = handleError(async (req, res) => {
   const user = req.user
   const no_laporan = req.no_laporan
+  let level = req.level
   const files = req.files
 
   const isValid = validate(res, req.body, {
     pt_id: 'string',
     pelanggaran_id: 'string',
     keterangan: 'string',
-    no_verifikasi: 'string',
+    // no_verifikasi: 'string',
   })
   if (!isValid) return
 
   const { pt_id, keterangan, no_verifikasi } = req.body
   let { pelanggaran_id } = req.body
-  if (user.no_verifikasi !== no_verifikasi) {
+  if (no_verifikasi && user.no_verifikasi !== no_verifikasi) {
     return response.error(res, {
       message: 'no_verifikasi tidak sesuai',
       error: { no_verifikasi: 'No. Verifikasi tidak sesuai' },
     })
+  } else if (no_verifikasi && user.no_verifikasi === no_verifikasi) {
+    level = 3
   }
+
   const pt = await axios.get(
     `https://api.kemdikbud.go.id:8243/pddikti/1.2/pt/${pt_id}`
   )
@@ -222,6 +227,7 @@ exports.public = handleError(async (req, res) => {
     pelanggaran: pelanggaran_id,
     keterangan,
     role_data: 'dikti',
+    level,
   }
 
   data = await laporanModel.create(data)
@@ -234,9 +240,14 @@ exports.public = handleError(async (req, res) => {
     for_pt: false,
   })
 
-  await userModel.findByIdAndUpdate(user._id, { verified: true })
+  if (no_verifikasi)
+    await userModel.findByIdAndUpdate(user._id, { verified: true })
   await notifWA('d5609c3c-e9e9-4dbe-9a4e-e8fa772d6770', [
-    { key: '1', value: 'nama', value_text: user.nama },
+    {
+      key: '1',
+      value: 'nama',
+      value_text: user.isPrivate || !user.nama ? 'rahasia' : user.nama,
+    },
     { key: '2', value: 'pt', value_text: pt[0].nama },
     { key: '3', value: 'keterangan', value_text: keterangan },
     { key: '4', value: 'no_laporan', value_text: no_laporan },
@@ -299,15 +310,21 @@ exports.update = handleError(async (req, res) => {
   const isValid = validate(res, req.body, {
     change_role: { type: 'string', optional: true, enum: ['true', 'false'] },
     aktif: { type: 'string', optional: true, enum: ['true', 'false'] },
+    keterangan: 'string',
   })
   if (!isValid) return
 
   const data = {}
   let keterangan = ''
+  let alasan = ''
   const { change_role, aktif } = req.body
+  const keterangan2 = req.body.keterangan
   if (change_role === 'true') {
     data.role_data = user.role.id === 2020 ? 'lldikti' : 'dikti'
-    keterangan = `Delegasi ke ${user.role.id === 2020 ? 'LLDIKTI' : 'DIKTI'}`
+    keterangan = `Laporan didelegasi ke ${
+      user.role.id === 2020 ? 'LLDIKTI' : 'DIKTI'
+    }`
+    alasan = keterangan2
     if (laporan.jadwal) {
       await laporanModel.findByIdAndUpdate(laporan._id, {
         $unset: { jadwal: 1 },
@@ -319,7 +336,8 @@ exports.update = handleError(async (req, res) => {
     if (aktif === 'true') {
       keterangan = 'Laporan dibuka'
     } else {
-      keterangan = 'Laporan ditutup'
+      keterangan = `Laporan ditutup`
+      alasan = keterangan2
     }
   }
 
@@ -330,6 +348,7 @@ exports.update = handleError(async (req, res) => {
       pt_id: laporan.pt.id,
       user: user._id,
       keterangan,
+      alasan,
       for_pt: false,
     })
   }

+ 7 - 0
controller/laporan/evaluasi.controller.js

@@ -49,6 +49,12 @@ exports.add = handleError(async (req, res) => {
       new: true,
     }
   )
+
+  let for_public = true
+  if (laporan.evaluasi.length > 0) {
+    for_public = false
+  }
+
   await pemantauanModel.create({
     laporan: laporan._id,
     user: user._id,
@@ -56,6 +62,7 @@ exports.add = handleError(async (req, res) => {
     keterangan: 'Melakukan evaluasi',
     dokumen: dokumen_id,
     for_pt: false,
+    for_public,
   })
 
   return response.success(res, {

+ 6 - 1
controller/laporan/jadwal.controller.js

@@ -37,7 +37,11 @@ exports.update = handleError(async (req, res) => {
   )
 
   let message = 'Mengatur Jadwal Pemeriksaan'
-  if (laporan.jadwal) message = 'Mengubah Jadwal Pemeriksaan'
+  let for_public = true
+  if (laporan.jadwal) {
+    message = 'Mengubah Jadwal Pemeriksaan'
+    for_public = false
+  }
 
   await pemantauanModel.create({
     laporan: laporan._id,
@@ -48,6 +52,7 @@ exports.update = handleError(async (req, res) => {
       dari_tanggal,
       sampai_tanggal,
     },
+    for_public,
   })
 
   return response.success(res, {

+ 1 - 1
controller/pemantauan.controller.js

@@ -84,7 +84,7 @@ exports.public = handleError(async (req, res) => {
     })
   }
   const data = await pemantauanModel
-    .find({ laporan })
+    .find({ laporan, for_public: true })
     .populate({ path: 'user', select: 'nama isPublic role' })
     .select('user keterangan laporan sanksi')
     .populate({ path: 'laporan', select: 'no_laporan' })

+ 7 - 1
controller/sanksi/banding.controller.js

@@ -109,7 +109,12 @@ exports.createJawaban = handleError(async (req, res) => {
   }
 
   let message = 'Menjawab Pengajuan Banding'
-  if (sanksi.jawaban?.banding) message = 'Mengubah jawaban Pengajuan Banding'
+  let for_public = true
+  if (sanksi.jawaban?.banding) {
+    message = 'Mengubah jawaban Pengajuan Banding'
+    for_public = false
+  }
+
   await pemantauanModel.create({
     laporan: sanksi.laporan._id,
     sanksi: sanksi._id,
@@ -117,6 +122,7 @@ exports.createJawaban = handleError(async (req, res) => {
     user: user._id,
     keterangan: message,
     dokumen: dokumen_id,
+    for_public,
   })
 
   return response.success(res, {

+ 5 - 1
controller/sanksi/cabutSanksi.controller.js

@@ -96,8 +96,11 @@ exports.createJawaban = handleError(async (req, res) => {
   }
 
   let message = 'Menjawab Pengajuan Pencabutan Sanksi'
-  if (sanksi.jawaban?.cabut_sanksi)
+  let for_public = true
+  if (sanksi.jawaban?.cabut_sanksi) {
     message = 'Mengubah jawaban Pengajuan Pencabutan Sanksi'
+    for_public = false
+  }
 
   await pemantauanModel.create({
     laporan: sanksi.laporan._id,
@@ -106,6 +109,7 @@ exports.createJawaban = handleError(async (req, res) => {
     user: user._id,
     keterangan: message,
     dokumen: dokumen_id,
+    for_public,
   })
   return response.success(res, {
     data,

+ 5 - 1
controller/sanksi/keberatan.controller.js

@@ -118,8 +118,11 @@ exports.createJawaban = handleError(async (req, res) => {
   }
 
   let message = 'Menjawab Pengajuan Keberatan'
-  if (sanksi.jawaban?.keberatan)
+  let for_public = true
+  if (sanksi.jawaban?.keberatan) {
     message = 'Mengubah jawaban Pengajuan Keberatan'
+    for_public = false
+  }
 
   await pemantauanModel.create({
     laporan: sanksi.laporan._id,
@@ -128,6 +131,7 @@ exports.createJawaban = handleError(async (req, res) => {
     pt_id: sanksi.laporan.pt.id,
     keterangan: message,
     dokumen: dokumen_id,
+    for_public,
   })
 
   return response.success(res, {

+ 27 - 13
controller/user.controller.js

@@ -9,19 +9,20 @@ const jwt = require('jsonwebtoken')
 
 exports.addUserPublic = handleError(async (req, res) => {
   const { no_laporan, pt_id, nama, email, no_hp, alamat, is_private } = req.body
-  const no_hp2 =
-    no_hp.substring(0, 1) === '0' ? '62' + no_hp.substring(1) : no_hp
   const isValid = validate(res, req.body, {
     no_laporan: 'string',
     pt_id: 'string',
-    nama: 'string',
-    email: 'email',
+    // nama: 'string',
+    // email: 'email',
     no_hp: 'string',
-    alamat: 'string',
+    // alamat: 'string',
     is_private: { type: 'string', enum: ['true', 'false'] },
   })
   if (!isValid) return
 
+  const no_hp2 =
+    no_hp.substring(0, 1) === '0' ? '62' + no_hp.substring(1) : no_hp
+
   const pt = await axios.get(
     `https://api.kemdikbud.go.id:8243/pddikti/1.2/pt/${pt_id}`
   )
@@ -30,15 +31,28 @@ exports.addUserPublic = handleError(async (req, res) => {
       message: 'pt_id tidak ditemukan',
     })
 
+  let foto_id = null
   const foto = req.file
-  if (!foto) {
-    return response.error(res, {
-      message: 'foto harus ada',
-    })
+  if (foto) {
+    foto_id = await addDokumen(foto)
   }
-  const foto_id = await addDokumen(foto)
 
   const no_verifikasi = Math.floor(Math.random() * 1000000)
+
+  let level = 1
+  if (
+    no_laporan &&
+    pt_id &&
+    nama &&
+    email &&
+    no_hp &&
+    alamat &&
+    is_private &&
+    foto_id
+  ) {
+    level = 3
+  }
+
   const user = await userModel.create({
     nama,
     email,
@@ -53,7 +67,7 @@ exports.addUserPublic = handleError(async (req, res) => {
 
   await notifWA2(
     '37a9ccba-e1bc-4d02-86e0-3be4c718af2a',
-    { nama, no_hp: no_hp2 },
+    { nama: nama || 'rahasia', no_hp: no_hp2 },
     [
       { key: '1', value: 'pt', value_text: pt[0].nama },
       { key: '3', value: 'no_verifikasi', value_text: no_verifikasi },
@@ -62,14 +76,14 @@ exports.addUserPublic = handleError(async (req, res) => {
   )
 
   const accessToken = jwt.sign(
-    { _id: user._id, no_laporan },
+    { _id: user._id, no_laporan, level },
     process.env.SECRET,
     {
       expiresIn: '30m',
     }
   )
 
-  const data = {
+  data = {
     token: `Bearer ${accessToken}`,
   }
 

+ 1 - 0
middleware/verifyTokenPublic.js

@@ -22,6 +22,7 @@ module.exports = (req, res, next) => {
       const user = await userModel.findById(data._id)
       req.user = user
       req.no_laporan = data.no_laporan
+      req.level = data.level
       next()
     } catch (error) {
       return response.error(res, {

+ 1 - 0
model/laporan.model.js

@@ -14,6 +14,7 @@ module.exports = mongoose.model(
       pt: Object,
       keterangan: String,
       pelanggaran: [{ type: Types.ObjectId, ref: pelanggaran }],
+      level: { type: Number, enum: [1, 2, 3] },
       role_data: {
         type: String,
         enum: ['dikti', 'lldikti'],

+ 2 - 0
model/pemantauan.model.js

@@ -14,12 +14,14 @@ module.exports = mongoose.model(
       pt_id: String,
       user: { type: Types.ObjectId, ref: user },
       keterangan: String,
+      alasan: String,
       dokumen: [{ type: Types.ObjectId, ref: dokumen }],
       jadwal: {
         dari_tanggal: Date,
         sampai_tanggal: Date,
       },
       for_pt: { type: Boolean, default: true },
+      for_public: { type: Boolean, default: true },
     },
     { timestamps: true }
   ),