yazid138 пре 3 година
родитељ
комит
1e84eb8109

+ 12 - 0
controller/auth.controller.js

@@ -90,9 +90,21 @@ exports.login = handleError(async (req, res) => {
     token: `Bearer ${accessToken}`,
     user: cekUser,
   }
+  const now = new Date()
+  const time = now.getTime()
+  now.setTime(time + 24 * 60 * 60 * 1000)
+  res.cookie('sidali-cookie', accessToken, { httpOnly: true, expires: now })
 
   response.success(res, {
     message: 'Berhasil Login',
     data,
   })
 })
+
+exports.logout = (req, res) => {
+  res.cookie('sidali-cookie', '', { expires: new Date() })
+
+  response.success(res, {
+    message: 'Berhasil Logout',
+  })
+}

+ 31 - 4
controller/auto.controller.js

@@ -121,7 +121,7 @@ exports.reminderKeberatan = handleError(async (req, res) => {
     })
     .populate('user')
     .populate('laporan')
-  Promise.all(
+  const notif = await Promise.all(
     dataSanksi.map(async (e) => {
       if (
         e.batas_waktu.jawaban_keberatan &&
@@ -166,8 +166,11 @@ exports.reminderKeberatan = handleError(async (req, res) => {
     })
   )
 
+  let message = 'Tidak ada notifikasi yang dikirim'
+  if (notif.length) message = 'Notifikasi berhasil terkirim'
+
   return response.success(res, {
-    message: 'Notifikasi berhasil terkirim',
+    message,
   })
 })
 
@@ -185,7 +188,7 @@ exports.reminderBanding = handleError(async (req, res) => {
     })
     .populate('user')
     .populate('laporan')
-  Promise.all(
+  const notif = await Promise.all(
     dataSanksi.map(async (e) => {
       if (
         e.batas_waktu.jawaban_banding &&
@@ -230,7 +233,31 @@ exports.reminderBanding = handleError(async (req, res) => {
     })
   )
 
+  let message = 'Tidak ada notifikasi yang dikirim'
+  if (notif.length) message = 'Notifikasi berhasil terkirim'
+
   return response.success(res, {
-    message: 'Notifikasi berhasil terkirim',
+    message,
+  })
+})
+
+exports.updateStatusSanksi = handleError(async (req, res) => {
+  const sanksi = await sanksiModel.find({
+    'masa_berlaku.to_date': {
+      $lte: new Date().toISOString(),
+    },
+    aktif: true,
+  })
+
+  Promise.all(
+    sanksi.map(async (e) =>
+      sanksiModel.findByIdAndUpdate(e._id, {
+        aktif: false,
+      })
+    )
+  )
+
+  return response.success(res, {
+    message: 'update status sanksi berhasil',
   })
 })

+ 1 - 3
controller/laporan/evaluasi.controller.js

@@ -1,13 +1,11 @@
 const laporanModel = require('../../model/laporan.model')
-const logModel = require('../../model/log.model')
 const handleError = require('../../utils/handleError')
 const response = require('../../utils/responseHandler')
 const { validate } = require('../../utils/validation')
 const { addManyDokumen } = require('../../utils/dokumenFunction')
 const { cekSatuDataLaporan } = require('../../utils/cekData')
 const pemantauanModel = require('../../model/pemantauan.model')
-const ip = require('ip')
-const osValue = require('../../utils/osValue')
+
 
 exports.add = handleError(async (req, res) => {
   const user = req.user

+ 60 - 0
controller/rekomendasi.controller.js

@@ -0,0 +1,60 @@
+const handleError = require('../utils/handleError')
+const response = require('../utils/responseHandler')
+const { addManyDokumen } = require('../utils/dokumenFunction')
+const { cekSatuDataSanksi } = require('../utils/cekData')
+const pemantauanModel = require('../model/pemantauan.model')
+const sanksiModel = require('../model/sanksi.model')
+
+exports.createRekomendasi = handleError(async (req, res) => {
+  const user = req.user
+  const { id } = req.params
+
+  const sanksi = await cekSatuDataSanksi(res, user, id, { delegasi: true })
+  if (!sanksi) return
+
+  const files = req.files
+  if (!files.length) {
+    return response.error(res, {
+      message: 'dokumen harus ada',
+    })
+  }
+  const dokumen = await addManyDokumen(files)
+  const dokumen_id = dokumen.map((e) => e._id)
+
+  const data = await sanksiModel.findOneAndUpdate(
+    {
+      _id: sanksi._id,
+    },
+    {
+      $push: {
+        rekomendasi: {
+          dokumen: dokumen_id,
+        },
+      },
+    },
+    {
+      new: true,
+    }
+  )
+
+  let for_public = true
+  if (sanksi.rekomendasi.length > 0) {
+    for_public = false
+  }
+
+  await pemantauanModel.create({
+    laporan: sanksi.laporan._id,
+    user: user._id,
+    action: 'ADD REKOMENDASI',
+    pt_id: sanksi.laporan.pt.id,
+    keterangan: 'Melakukan rekomendasi delegasi',
+    dokumen: dokumen_id,
+    for_pt: false,
+    for_public,
+  })
+
+  return response.success(res, {
+    message: 'Berhasil tambah rekomendasi delegasi',
+    data,
+  })
+})

+ 45 - 2
controller/sanksi.controller.js

@@ -88,8 +88,15 @@ exports.create = handleError(async (req, res) => {
 
 exports.getAll = handleError(async (req, res) => {
   const user = req.user
-  const { keberatan, jawaban, banding, cabutSanksi, perbaikan, aktif, delegasi } =
-    req.query
+  const {
+    keberatan,
+    jawaban,
+    banding,
+    cabutSanksi,
+    perbaikan,
+    aktif,
+    delegasi,
+  } = req.query
   const where = {}
   if (aktif && aktif === 'false') {
     where.aktif = false
@@ -155,3 +162,39 @@ exports.getOne = handleError(async (req, res) => {
     data: sanksi,
   })
 })
+
+exports.editTmt = handleError(async (req, res) => {
+  const user = req.user
+  const { id } = req.params
+  const { from_date, to_date } = req.body
+
+  const sanksi = await cekSatuDataSanksi(res, user, id)
+  if (!sanksi) return
+
+  const isValid = validate(res, req.body, {
+    from_date: { type: 'date', convert: true },
+    to_date: { type: 'date', convert: true },
+  })
+  if (!isValid) return
+
+  const data = await sanksiModel.findByIdAndUpdate(sanksi._id, {
+    masa_berlaku: {
+      from_date,
+      to_date,
+    },
+  })
+
+  await pemantauanModel.create({
+    laporan: sanksi.laporan._id,
+    user: user._id,
+    action: 'EDIT TMT',
+    pt_id: sanksi.laporan.pt.id,
+    keterangan: 'Mengubah masa berlaku sanksi',
+    for_public: true,
+  })
+
+  return response.success(res, {
+    message: 'Berhasil update tmt',
+    data,
+  })
+})

+ 5 - 2
middleware/verifyToken.js

@@ -6,7 +6,8 @@ module.exports = (req, res, next) => {
   const authHeader = req.headers.authorization
   const token =
     (req.params.token && req.params.token.split(' ')[1]) ||
-    (authHeader && authHeader.split(' ')[1])
+    (authHeader && authHeader.split(' ')[1]) ||
+    req.cookies['sidali-cookie']
 
   if (!token)
     return response.error(res, {
@@ -15,11 +16,13 @@ module.exports = (req, res, next) => {
     })
 
   jwt.verify(token, process.env.SECRET, async (err, data) => {
-    if (err)
+    if (err) {
       return response.error(res, {
         code: 401,
         message: 'Unauthorized',
       })
+    }
+
     try {
       const user = await userModel.findById(data._id)
       req.user = user

+ 13 - 0
model/sanksi.model.js

@@ -120,6 +120,19 @@ module.exports = mongoose.model(
           { timestamps: true }
         ),
       ],
+      rekomendasi: [
+        new Schema(
+          {
+            dokumen: [
+              {
+                type: Types.ObjectId,
+                ref: dokumen,
+              },
+            ],
+          },
+          { timestamps: true }
+        ),
+      ],
     },
     { timestamps: true }
   ),

+ 13 - 0
model/sanksi2.model.js

@@ -118,6 +118,19 @@ module.exports = mongoose.model(
           { timestamps: true }
         ),
       ],
+      rekomendasi: [
+        new Schema(
+          {
+            dokumen: [
+              {
+                type: Types.ObjectId,
+                ref: dokumen,
+              },
+            ],
+          },
+          { timestamps: true }
+        ),
+      ],
     },
     { timestamps: true }
   ),

+ 2 - 0
routes/v1/auth.routes.js

@@ -1,6 +1,8 @@
 const router = require('express').Router()
 const auth = require('../../controller/auth.controller')
+const verify = require('../../middleware/verifyToken')
 
 router.post('/login', auth.login)
+router.delete('/logout', verify, auth.logout)
 
 module.exports = router

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

@@ -5,5 +5,6 @@ router.get('/keberatan', auto.keberatan)
 router.get('/banding', auto.banding)
 router.get('/reminder-keberatan', auto.reminderKeberatan)
 router.get('/reminder-banding', auto.reminderBanding)
+router.get('/status-sanksi', auto.updateStatusSanksi)
 
 module.exports = router

+ 1 - 0
routes/v1/index.js

@@ -23,5 +23,6 @@ router.use('/graph', require('./graph.routes'))
 router.use('/log', require('./log.routes'))
 router.use('/auto', verify, require('./auto.routes'))
 router.use('/pengunjung', require('./pengunjung.routes'))
+router.use('/rekomendasi', auth, require('./rekomendasi.routes'))
 
 module.exports = router

+ 13 - 0
routes/v1/rekomendasi.routes.js

@@ -0,0 +1,13 @@
+const router = require('express').Router()
+const rekomendasi = require('../../controller/rekomendasi.controller')
+const handleDokumen = require('../../utils/handleDokumen')
+const roleId = require('../../middleware/role')
+
+router.post(
+  '/add/:id',
+  roleId([2020, 2021, 2023]),
+  handleDokumen.array('dokumen'),
+  rekomendasi.createRekomendasi
+)
+
+module.exports = router

+ 1 - 0
routes/v1/sanksi/index.js

@@ -9,6 +9,7 @@ router.post(
   handleDokumen.array('dokumen'),
   sanksi.create
 )
+router.put('/tmt/update/:id', roleId([2020, 2021, 2023]), sanksi.editTmt)
 router.get('/', sanksi.getAll)
 router.get('/:sanksi_id', sanksi.getOne)
 

+ 4 - 5
utils/cekData.js

@@ -122,8 +122,7 @@ exports.cekSatuDataSanksi = async (
       else if (where.delegasi) {
         w.role_data = 'lldikti'
         w.role_asal = 'dikti'
-      }
-      else if (!where.banding) w.role_data = 'dikti'
+      } else if (!where.banding) w.role_data = 'dikti'
       break
     case 2021:
       w.role_data = 'lldikti'
@@ -137,7 +136,7 @@ exports.cekSatuDataSanksi = async (
     .findOne({ _id: sanksi_id, aktif: true, ...where })
     .populate({
       path: 'laporan',
-      select: 'pt role_data aktif',
+      select: 'pt role_data aktif keterangan',
       match: w,
     })
     .populate('dokumen')
@@ -149,6 +148,7 @@ exports.cekSatuDataSanksi = async (
     .populate('jawaban.banding.dokumen')
     .populate('pengajuan.cabut_sanksi.dokumen')
     .populate('jawaban.cabut_sanksi.dokumen')
+    .populate('rekomendasi.dokumen')
     .populate('perbaikan.dokumen')
   if (!sanksi?.laporan) {
     response.error(res, {
@@ -169,8 +169,7 @@ exports.cekBanyakDataSanksi = async (user, where = {}, q = {}) => {
       else if (where.delegasi) {
         w.role_data = 'lldikti'
         w.role_asal = 'dikti'
-      }
-      else if (!where.banding) w.role_data = 'dikti'
+      } else if (!where.banding) w.role_data = 'dikti'
       break
     case 2021:
       w['role_data'] = 'lldikti'