yazid138 3 anos atrás
pai
commit
997f606eaf

+ 20 - 9
controller/evaluasi.controller.js

@@ -13,6 +13,25 @@ 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 files = req.files
   if (!files.length) {
     return response.error(res, {
@@ -25,8 +44,7 @@ exports.add = handleError(async (req, res) => {
   const { judul, tanggal } = req.body
   const data = await laporanModel.findOneAndUpdate(
     {
-      _id: id,
-      user: user._id,
+      _id: laporan._id,
       jadwal: {
         $exists: true,
         $ne: null,
@@ -46,13 +64,6 @@ exports.add = handleError(async (req, res) => {
     }
   )
 
-  if (!data) {
-    return response.error(res, {
-      message: 'id tidak ada',
-      code: 404,
-    })
-  }
-
   return response.success(res, {
     message: 'Berhasil tambah evaluasi',
     data,

+ 22 - 9
controller/jadwal.controller.js

@@ -15,8 +15,28 @@ exports.update = handleError(async (req, res) => {
   if (!isValid) return
 
   const { judul, dari_tanggal, sampai_tanggal, warna } = req.body
-  const data = await laporanModel.findOneAndUpdate(
-    { _id: id, user: user._id },
+
+  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 data = await laporanModel.findByIdAndUpdate(
+    laporan._id,
     {
       jadwal: {
         judul,
@@ -30,13 +50,6 @@ exports.update = handleError(async (req, res) => {
     }
   )
 
-  if (!data) {
-    return response.error(res, {
-      message: 'id tidak ada',
-      code: 404,
-    })
-  }
-
   return response.success(res, {
     message: 'Berhasil ubah jadwal',
     data,

+ 5 - 4
controller/laporan.controller.js

@@ -16,8 +16,8 @@ exports.create = handleError(async (req, res) => {
   })
   if (!isValid) return
 
-  const { no_laporan, pt_id, keterangan, pelanggaran_id, role_data } = req.body
-
+  const { no_laporan, pt_id, keterangan, role_data } = req.body
+  let { pelanggaran_id } = req.body
   const pt = await axios.get(
     `https://api.kemdikbud.go.id:8243/pddikti/1.2/pt/${pt_id}`
   )
@@ -33,9 +33,10 @@ exports.create = handleError(async (req, res) => {
     dokumen_id = dokumen.map((e) => e._id)
   }
 
+  pelanggaran_id = pelanggaran_id.split(',')
   const pelanggaran = await pelanggaranModel.find({
     _id: {
-      $in: pelanggaran_id.split(',').map((e) => e),
+      $in: pelanggaran_id,
     },
   })
   if (!pelanggaran.length)
@@ -47,7 +48,7 @@ exports.create = handleError(async (req, res) => {
     user: user._id,
     dokumen: dokumen_id,
     pt,
-    pelanggaran: pelanggaran_id.split(',').map((e) => e),
+    pelanggaran: pelanggaran_id,
     keterangan,
   }
   if (role_data) data.role_data = role_data

+ 146 - 0
controller/sanksi.controller.js

@@ -0,0 +1,146 @@
+const laporanModel = require('../model/laporan.model')
+const sanksiModel = require('../model/sanksi.model')
+const pelanggaranModel = require('../model/pelanggaran.model')
+const handleError = require('../utils/handleError')
+const response = require('../utils/responseHandler')
+const { addManyDokumen } = require('../utils/dokumenFunction')
+const { validate } = require('../utils/validation')
+
+exports.create = handleError(async (req, res) => {
+  const { no_sanksi, keterangan } = req.body
+  let { pelanggaran_id } = req.body
+  const { laporan_id } = req.params
+  const files = req.files
+  const user = req.user
+
+  const isValid = validate(res, req.body, {
+    no_sanksi: 'string',
+    keterangan: 'string',
+    pelanggaran_id: 'string',
+  })
+  if (!isValid) return
+
+  const laporan = await laporanModel.findOne({
+    _id: laporan_id,
+    evaluasi: { $exists: true, $ne: [] },
+  })
+
+  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,
+    })
+  }
+
+  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({
+    no_sanksi,
+    laporan: laporan._id,
+    pt: laporan.pt,
+    pelanggaran: pelanggaran_id,
+    keterangan,
+    dokumen: dokumen_id,
+  })
+  return response.success(res, {
+    message: 'Berhasil membuat Sanksi',
+    data,
+  })
+})
+
+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)
+  }
+  return response.success(res, {
+    message: 'Berhasil ambil data Sanksi',
+    data,
+  })
+})
+
+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,
+    })
+  }
+  return response.success(res, {
+    message: 'Berhasil ambil satu data Sanksi',
+    data,
+  })
+})

+ 4 - 5
model/sanksi.model.js

@@ -9,12 +9,11 @@ module.exports = mongoose.model(
   'Sanksi',
   new Schema(
     {
-      no_sanksi: { type: String, unique },
-      laporan: { type: Types.ObjectId, ref: laporan },
-      pt: Object,
+      no_sanksi: String,
+      laporan: { type: Types.ObjectId, unique: true, ref: laporan },
+      pelanggaran: [{ type: Types.ObjectId, ref: pelanggaran }],
       keterangan: String,
       aktif: { type: Boolean, default: true },
-      pelanggaran: [{ type: Types.ObjectId, ref: pelanggaran }],
       dokumen: [
         {
           type: Types.ObjectId,
@@ -22,7 +21,7 @@ module.exports = mongoose.model(
         },
       ],
     },
-    { timestamps }
+    { timestamps: true }
   ),
   'sanksi'
 )

+ 1 - 0
routes/v1/index.js

@@ -10,6 +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('/public', require('./public.routes'))
 router.use('/auth', require('./auth.routes'))
 router.use('/pt', require('./pt.routes'))

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

@@ -0,0 +1,13 @@
+const router = require('express').Router()
+const sanksi = require('../../../controller/sanksi.controller')
+const handleDokumen = require('../../../utils/handleDokumen')
+
+router.post(
+  '/create/:laporan_id',
+  handleDokumen.array('dokumen'),
+  sanksi.create
+)
+router.get('/', sanksi.getAll)
+router.get('/:sanksi_id', sanksi.getOne)
+
+module.exports = router