yazid138 há 3 anos atrás
pai
commit
e747939f50

+ 0 - 0
controller/banding.controller.js


+ 0 - 0
controller/cabutSanksi.controller.js


+ 0 - 0
controller/docPerbaikan.controller.js


+ 3 - 18
controller/evaluasi.controller.js

@@ -3,6 +3,7 @@ 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')
 
 exports.add = handleError(async (req, res) => {
   const user = req.user
@@ -13,24 +14,8 @@ exports.add = handleError(async (req, res) => {
   })
   if (!isValid) return
 
-  let laporan = await laporanModel.findOne({ _id: id })
-  if (
-    laporan &&
-    !(
-      (user.role.id === 2021 &&
-        laporan.role_data === 'lldikti' &&
-        laporan.pt.pembina.id === user.lembaga.id &&
-        laporan.aktif === true) ||
-      (user.role.id === 2020 &&
-        laporan.role_data === 'dikti' &&
-        laporan.aktif === true)
-    )
-  ) {
-    return response.error(res, {
-      message: 'laporan_id tidak ada',
-      code: 404,
-    })
-  }
+  const laporan = await cekSatuDataLaporan(res, user, id)
+  if (!laporan) return
 
   const files = req.files
   if (!files.length) {

+ 3 - 18
controller/jadwal.controller.js

@@ -1,4 +1,5 @@
 const laporanModel = require('../model/laporan.model')
+const { cekSatuDataLaporan } = require('../utils/cekData')
 const handleError = require('../utils/handleError')
 const response = require('../utils/responseHandler')
 const { validate } = require('../utils/validation')
@@ -16,24 +17,8 @@ exports.update = handleError(async (req, res) => {
 
   const { judul, dari_tanggal, sampai_tanggal, warna } = req.body
 
-  let laporan = await laporanModel.findOne({ _id: id })
-  if (
-    laporan &&
-    !(
-      (user.role.id === 2021 &&
-        laporan.role_data === 'lldikti' &&
-        laporan.pt.pembina.id === user.lembaga.id &&
-        laporan.aktif === true) ||
-      (user.role.id === 2020 &&
-        laporan.role_data === 'dikti' &&
-        laporan.aktif === true)
-    )
-  ) {
-    return response.error(res, {
-      message: 'laporan_id tidak ada',
-      code: 404,
-    })
-  }
+  const laporan = await cekSatuDataLaporan(res, user, id)
+  if (!laporan) return
 
   const data = await laporanModel.findByIdAndUpdate(
     laporan._id,

+ 38 - 0
controller/keberatan.controller.js

@@ -0,0 +1,38 @@
+const handleError = require('../utils/handleError')
+const pengajuanModel = require('../model/pengajuan.model')
+const { validate } = require('../utils/validation')
+const { addManyDokumen } = require('../utils/dokumenFunction')
+const { cekSatuDataSanksi } = require('../utils/cekData')
+
+exports.create = handleError(async (req, res) => {
+  const user = req.user
+  const isValid = validate(res, req.query, {
+    laporan_id: 'string',
+    sanksi_id: 'string',
+  })
+  if (!isValid) return
+
+  const { laporan_id, sanksi_id } = req.query
+  const laporan = await cekSatuDataLaporan(res, user, laporan_id)
+  const sanksi = await cekSatuDataSanksi(res, user, sanksi_id)
+  if (!laporan || !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)
+  pengajuanModel.findOneAndUpdate(
+    { laporan: laporan._id, sanksi: sanksi._id },
+    {
+      keberatan: {
+        dokumen: dokumen_id,
+      },
+    }
+  )
+})
+
+exports.createJawaban = handleError(async (req, res) => {})

+ 4 - 38
controller/laporan.controller.js

@@ -5,6 +5,7 @@ const laporanModel = require('../model/laporan.model')
 const pelanggaranModel = require('../model/pelanggaran.model')
 const { validate } = require('../utils/validation')
 const { addManyDokumen } = require('../utils/dokumenFunction')
+const { cekSatuDataLaporan, cekBanyakDataLaporan } = require('../utils/cekData')
 
 exports.create = handleError(async (req, res) => {
   const isValid = validate(res, req.body, {
@@ -63,31 +64,7 @@ exports.create = handleError(async (req, res) => {
 
 exports.getAll = handleError(async (req, res) => {
   const user = req.user
-  let data = await laporanModel
-    .find({ aktif: true })
-    .populate('user')
-    .populate('pelanggaran')
-    .populate('dokumen')
-    .populate('evaluasi.dokumen')
-    .sort({
-      createdAt: -1,
-    })
-
-  if (!data) {
-    return response.error(res, {
-      message: 'Not Found',
-      code: 404,
-    })
-  }
-
-  if (user.role.id !== 2020) {
-    data = data.filter(
-      (e) => e.role_data === 'lldikti' && e.pt.pembina.id === user.lembaga.id
-    )
-  } else {
-    data = data.filter((e) => e.role_data === 'dikti')
-  }
-
+  let data = await cekBanyakDataLaporan(user)
   return response.success(res, {
     message: '',
     data,
@@ -97,19 +74,8 @@ exports.getAll = handleError(async (req, res) => {
 exports.getOne = handleError(async (req, res) => {
   const { id } = req.params
   const user = req.user
-  const data = await laporanModel
-    .findOne({ _id: id, user: user._id })
-    .populate('user')
-    .populate('pelanggaran')
-    .populate('dokumen')
-    .populate('evaluasi.dokumen')
-
-  if (!data) {
-    return response.error(res, {
-      message: 'Laporan Id tidak ada',
-      code: 404,
-    })
-  }
+  const data = await cekSatuDataLaporan(res, user, id)
+  if (!data) return
   return response.success(res, {
     message: 'Berhasil ngambil data Laporan',
     data: user,

+ 0 - 0
controller/pengajuan.controller.js


+ 30 - 82
controller/sanksi.controller.js

@@ -1,10 +1,17 @@
-const laporanModel = require('../model/laporan.model')
 const sanksiModel = require('../model/sanksi.model')
 const pelanggaranModel = require('../model/pelanggaran.model')
+const pengajuanModel = require('../model/pengajuan.model')
 const handleError = require('../utils/handleError')
 const response = require('../utils/responseHandler')
 const { addManyDokumen } = require('../utils/dokumenFunction')
 const { validate } = require('../utils/validation')
+const { hariKerja } = require('../utils/hariKerja')
+const {
+  cekSatuDataSanksi,
+  cekSatuDataLaporan,
+  cekBanyakDataPelanggaran,
+  cekBanyakDataSanksi,
+} = require('../utils/cekData')
 
 exports.create = handleError(async (req, res) => {
   const { no_sanksi, keterangan } = req.body
@@ -20,53 +27,30 @@ exports.create = handleError(async (req, res) => {
   })
   if (!isValid) return
 
-  const laporan = await laporanModel.findOne({
-    _id: laporan_id,
+  const laporan = await cekSatuDataLaporan(res, user, laporan_id, {
     evaluasi: { $exists: true, $ne: [] },
   })
+  if (!laporan) return
 
-  if (
-    laporan &&
-    !(
-      (user.role.id === 2021 &&
-        laporan.role_data === 'lldikti' &&
-        laporan.pt.pembina.id === user.lembaga.id &&
-        laporan.aktif === true) ||
-      (user.role.id === 2020 &&
-        laporan.role_data === 'dikti' &&
-        laporan.aktif === true)
-    )
-  ) {
+  pelanggaran_id = await cekBanyakDataPelanggaran(res, pelanggaran_id)
+  if (!pelanggaran_id) return
+
+  const sanksi = await sanksiModel.findOne({ laporan: laporan_id })
+  if (sanksi) {
     return response.error(res, {
-      message: 'laporan_id tidak ada',
-      code: 404,
+      message: 'Sanksi sudah ada',
     })
   }
 
-  pelanggaran_id = pelanggaran_id.split(',')
-  const pelanggaran = await pelanggaranModel.find({
-    _id: {
-      $in: pelanggaran_id,
-    },
-  })
-  if (!pelanggaran.length)
-    return response.error(res, { message: 'pelanggaran_id tidak ada' })
   if (!files.length) {
     return response.error(res, {
       message: 'dokumen harus ada',
     })
   }
 
-  const sanksi = await sanksiModel.findOne({ laporan: laporan_id })
-  if (sanksi) {
-    return response.error(res, {
-      message: 'Sanksi sudah ada',
-    })
-  }
-
   const dokumen = await addManyDokumen(files)
   const dokumen_id = dokumen.map((e) => e._id)
-  let data = await sanksiModel.create({
+  const data = await sanksiModel.create({
     no_sanksi,
     laporan: laporan._id,
     pt: laporan.pt,
@@ -74,6 +58,13 @@ exports.create = handleError(async (req, res) => {
     keterangan,
     dokumen: dokumen_id,
   })
+  await pengajuanModel.create({
+    laporan: laporan._id,
+    sanksi: data._id,
+    batas_waktu: {
+      keberatan: hariKerja(10),
+    },
+  })
   return response.success(res, {
     message: 'Berhasil membuat Sanksi',
     data,
@@ -82,28 +73,7 @@ exports.create = handleError(async (req, res) => {
 
 exports.getAll = handleError(async (req, res) => {
   const user = req.user
-  let data = await sanksiModel
-    .find()
-    .populate({
-      path: 'laporan',
-      select: 'pt role_data aktif',
-    })
-    .populate('dokumen')
-    .populate('pelanggaran')
-  if (user.role.id === 2021) {
-    data = data.filter(
-      (e) =>
-        e.laporan.role_data === 'lldikti' &&
-        e.laporan.pt.pembina.id === user.lembaga.id &&
-        e.laporan.aktif === true
-    )
-  } else if (user.role.id === 2020) {
-    data = data.filter(
-      (e) => e.laporan.role_data === 'dikti' && e.laporan.aktif === true
-    )
-  } else {
-    data = data.filter((e) => e.laporan.pt.id === user.lembaga.id)
-  }
+  let data = await cekBanyakDataSanksi(user)
   return response.success(res, {
     message: 'Berhasil ambil data Sanksi',
     data,
@@ -113,34 +83,12 @@ exports.getAll = handleError(async (req, res) => {
 exports.getOne = handleError(async (req, res) => {
   const user = req.user
   const { sanksi_id } = req.params
-  let data = await sanksiModel
-    .findOne({ _id: sanksi_id })
-    .populate({
-      path: 'laporan',
-      select: 'pt role_data aktif',
-    })
-    .populate('dokumen')
-    .populate('pelanggaran')
-  if (
-    data &&
-    !(
-      (user.role.id === 2021 &&
-        data.laporan.role_data === 'lldikti' &&
-        data.laporan.pt.pembina.id === user.lembaga.id &&
-        data.laporan.aktif === true) ||
-      (user.role.id === 2020 &&
-        data.laporan.role_data === 'dikti' &&
-        data.laporan.aktif === true) ||
-      (user.role.id === 2022 && data.laporan.pt.id === user.lembaga.id)
-    )
-  ) {
-    return response.error(res, {
-      message: 'laporan_id tidak ada',
-      code: 404,
-    })
-  }
+
+  const sanksi = await cekSatuDataSanksi(res, user, sanksi_id)
+  if (!sanksi) return
+
   return response.success(res, {
     message: 'Berhasil ambil satu data Sanksi',
-    data,
+    data: sanksi,
   })
 })

+ 7 - 7
model/pengajuan.model.js

@@ -27,7 +27,7 @@ module.exports = mongoose.model(
             },
           ],
         },
-        { timestamps }
+        { timestamps: true }
       ),
       banding: new Schema(
         {
@@ -40,7 +40,7 @@ module.exports = mongoose.model(
             },
           ],
         },
-        { timestamps }
+        { timestamps: true }
       ),
       cabut_sanksi: new Schema(
         {
@@ -53,7 +53,7 @@ module.exports = mongoose.model(
             },
           ],
         },
-        { timestamps }
+        { timestamps: true }
       ),
     },
     keberatan: new Schema(
@@ -65,7 +65,7 @@ module.exports = mongoose.model(
           },
         ],
       },
-      { timestamps }
+      { timestamps: true }
     ),
     banding: new Schema(
       {
@@ -76,7 +76,7 @@ module.exports = mongoose.model(
           },
         ],
       },
-      { timestamps }
+      { timestamps: true }
     ),
     cabut_sanksi: new Schema(
       {
@@ -87,7 +87,7 @@ module.exports = mongoose.model(
           },
         ],
       },
-      { timestamps }
+      { timestamps: true }
     ),
     perbaikan: new Schema(
       {
@@ -99,7 +99,7 @@ module.exports = mongoose.model(
           },
         ],
       },
-      { timestamps }
+      { timestamps: true }
     ),
   }),
   'pengajuan'

+ 1 - 0
model/sanksi.model.js

@@ -11,6 +11,7 @@ module.exports = mongoose.model(
     {
       no_sanksi: String,
       laporan: { type: Types.ObjectId, unique: true, ref: laporan },
+      pt: Object,
       pelanggaran: [{ type: Types.ObjectId, ref: pelanggaran }],
       keterangan: String,
       aktif: { type: Boolean, default: true },

+ 5 - 0
package-lock.json

@@ -2077,6 +2077,11 @@
         "minimist": "^1.2.5"
       }
     },
+    "moment": {
+      "version": "2.29.1",
+      "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
+      "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
+    },
     "mongodb": {
       "version": "4.3.1",
       "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.3.1.tgz",

+ 1 - 0
package.json

@@ -17,6 +17,7 @@
     "express": "~4.16.1",
     "fastest-validator": "^1.12.0",
     "jsonwebtoken": "^8.5.1",
+    "moment": "^2.29.1",
     "mongoose": "^6.2.7",
     "morgan": "~1.9.1",
     "multer": "^1.4.4"

+ 1 - 1
routes/v1/index.js

@@ -10,7 +10,7 @@ router.get('/', (req, res) => {
 })
 
 router.use('/laporan', auth, roleId([2020, 2021]), require('./laporan'))
-router.use('/sanksi', auth, roleId([2020, 2021, 2022]), require('./sanksi'))
+router.use('/sanksi', auth, require('./sanksi'))
 router.use('/public', require('./public.routes'))
 router.use('/auth', require('./auth.routes'))
 router.use('/pt', require('./pt.routes'))

+ 4 - 2
routes/v1/sanksi/index.js

@@ -1,13 +1,15 @@
 const router = require('express').Router()
 const sanksi = require('../../../controller/sanksi.controller')
 const handleDokumen = require('../../../utils/handleDokumen')
+const roleId = require('../../../middleware/role')
 
 router.post(
   '/create/:laporan_id',
+  roleId([2020, 2021]),
   handleDokumen.array('dokumen'),
   sanksi.create
 )
-router.get('/', sanksi.getAll)
-router.get('/:sanksi_id', sanksi.getOne)
+router.get('/', roleId([2020, 2021, 2022]), sanksi.getAll)
+router.get('/:sanksi_id', roleId([2020, 2021, 2022]), sanksi.getOne)
 
 module.exports = router

+ 135 - 0
utils/cekData.js

@@ -0,0 +1,135 @@
+const laporanModel = require('../model/laporan.model')
+const pelanggaranModel = require('../model/pelanggaran.model')
+const sanksiModel = require('../model/sanksi.model')
+const response = require('../utils/responseHandler')
+
+exports.cekSatuDataLaporan = async (res, user, laporan_id, where = {}) => {
+  const laporan = await laporanModel
+    .findOne({ _id: laporan_id, ...where })
+    .populate('user')
+    .populate('pelanggaran')
+    .populate('dokumen')
+    .populate('evaluasi.dokumen')
+  if (
+    laporan &&
+    !(
+      (user.role.id === 2021 &&
+        laporan.role_data === 'lldikti' &&
+        laporan.pt.pembina.id === user.lembaga.id &&
+        laporan.aktif === true) ||
+      (user.role.id === 2020 &&
+        laporan.role_data === 'dikti' &&
+        laporan.aktif === true)
+    )
+  ) {
+    response.error(res, {
+      message: 'laporan_id tidak ada',
+      code: 404,
+    })
+    return false
+  }
+  return laporan
+}
+
+exports.cekBanyakDataLaporan = async (user, where = {}) => {
+  let data = await laporanModel
+    .find({ aktif: true, ...where })
+    .populate('user')
+    .populate('pelanggaran')
+    .populate('dokumen')
+    .populate('evaluasi.dokumen')
+    .sort({
+      createdAt: -1,
+    })
+
+  if (user.role.id !== 2020) {
+    data = data.filter(
+      (e) => e.role_data === 'lldikti' && e.pt.pembina.id === user.lembaga.id
+    )
+  } else {
+    data = data.filter((e) => e.role_data === 'dikti')
+  }
+  return data
+}
+
+exports.cekSatuDataSanksi = async (res, user, sanksi_id, where = {}) => {
+  const sanksi = await sanksiModel
+    .findOne({ _id: sanksi_id, ...where })
+    .populate({
+      path: 'laporan',
+      select: 'pt role_data aktif',
+    })
+    .populate('dokumen')
+    .populate('pelanggaran')
+  if (
+    sanksi &&
+    !(
+      (user.role.id === 2021 &&
+        sanksi.laporan.role_data === 'lldikti' &&
+        sanksi.pt.pembina.id === user.lembaga.id &&
+        sanksi.laporan.aktif === true) ||
+      (user.role.id === 2020 &&
+        sanksi.laporan.role_data === 'dikti' &&
+        sanksi.laporan.aktif === true) ||
+      (user.role.id === 2022 && sanksi.pt.id === user.lembaga.id)
+    )
+  ) {
+    response.error(res, {
+      message: 'sanksi_id tidak ada',
+      code: 404,
+    })
+    return false
+  }
+  return sanksi
+}
+
+exports.cekBanyakDataSanksi = async (user, where = {}) => {
+  let data = await sanksiModel
+    .find({ ...where })
+    .populate({
+      path: 'laporan',
+      select: 'role_data aktif',
+    })
+    .populate('dokumen')
+    .populate('pelanggaran')
+  if (user.role.id === 2021) {
+    data = data.filter(
+      (e) =>
+        e.laporan.role_data === 'lldikti' &&
+        e.pt.pembina.id === user.lembaga.id &&
+        e.laporan.aktif === true
+    )
+  } else if (user.role.id === 2020) {
+    data = data.filter(
+      (e) => e.laporan.role_data === 'dikti' && e.laporan.aktif === true
+    )
+  } else {
+    data = data.filter((e) => e.pt.id === user.lembaga.id)
+  }
+  return data
+}
+
+exports.cekBanyakDataDokumen = async (res, files) => {
+  if (!files.length) {
+    response.error(res, {
+      message: 'dokumen harus ada',
+    })
+    return false
+  }
+  const dokumen = await addManyDokumen(files)
+  return dokumen.map((e) => e._id)
+}
+
+exports.cekBanyakDataPelanggaran = async (res, pelanggaran_id) => {
+  id_pelanggaran = pelanggaran_id.split(',')
+  const pelanggaran = await pelanggaranModel.find({
+    _id: {
+      $in: id_pelanggaran,
+    },
+  })
+  if (!pelanggaran.length) {
+    response.error(res, { message: 'pelanggaran_id tidak ada' })
+    return false
+  }
+  return pelanggaran.map((e) => e._id)
+}

+ 15 - 0
utils/hariKerja.js

@@ -0,0 +1,15 @@
+const moment = require('moment')
+
+exports.hariKerja = (n) => {
+  const date = new Date()
+  const day = parseInt(moment().format('E'))
+  let counter = 0
+  let result = -1
+  for (let i = day; counter < n; i++) {
+    result++
+    if (i % 7 === 0 || i % 7 === 6) continue
+    counter++
+  }
+  date.setDate(date.getDate() + result)
+  return date.toISOString()
+}