andi 2 роки тому
батько
коміт
4b259ee49a

+ 4 - 0
controller/pelanggaran.controller.js

@@ -29,12 +29,16 @@ exports.public = handleError(async (req, res) => {
 })
 
 exports.sanksi = handleError(async (req, res) => {
+  const { down } = req.query
   const user = req.user
   const w = {}
   if (user.role.id === 2021) {
     w.level_sanksi = 1
   } else {
     w.level_sanksi = { $nin: [0, 1] }
+    if (down === 'true') {
+      w.level_sanksi = 1
+    }
   }
   let data = await pelanggaranModel.find(w)
   data = [

+ 29 - 16
controller/sanksi.controller.js

@@ -88,16 +88,16 @@ exports.create = handleError(async (req, res) => {
 })
 
 exports.update = handleError(async (req, res) => {
-  const { no_surat, keterangan, from_date, to_date } = req.body
-  let { pelanggaran_id } = req.body
+  const { no_sanksi, keterangan, from_date, to_date } = req.body
+  let sanksiBody = req.body.sanksi
   const { sanksi_id } = req.params
   const files = req.files
   const user = req.user
 
   const isValid = validate(res, req.body, {
-    no_surat: 'string',
+    no_sanksi: 'string',
     keterangan: 'string',
-    pelanggaran_id: 'string',
+    sanksi: 'string',
     from_date: 'string',
     to_date: 'string',
   })
@@ -106,8 +106,10 @@ exports.update = handleError(async (req, res) => {
   const sanksi = await cekSatuDataSanksi(res, user, sanksi_id, { all: true })
   if (!sanksi) return
 
-  pelanggaran_id = await cekBanyakDataPelanggaran(res, pelanggaran_id)
-  if (!pelanggaran_id) return
+  // pelanggaran_id = await cekBanyakDataPelanggaran(res, pelanggaran_id)
+  // if (!pelanggaran_id) return
+
+  sanksiBody = JSON.parse(sanksiBody)
 
   // const sanksi = await sanksiModel.findOne({ laporan: laporan_id })
   // if (sanksi) {
@@ -127,15 +129,17 @@ exports.update = handleError(async (req, res) => {
   const data = await sanksiModel.updateOne(
     { _id: sanksi._id },
     {
-      perubahan_sanksi: {
-        no_surat,
-        pelanggaran: pelanggaran_id,
-        keterangan,
-        dokumen: dokumen_id,
-        masa_berlaku: {
-          from_date,
-          to_date,
-        },
+      no_sanksi,
+      // pelanggaran: pelanggaran_id,
+      sanksi: sanksiBody,
+      keterangan,
+      dokumen: dokumen_id,
+      masa_berlaku: {
+        from_date,
+        to_date,
+      },
+      $push: {
+        riwayat_sanksi: sanksi,
       },
     }
   )
@@ -169,8 +173,11 @@ exports.getAll = handleError(async (req, res) => {
     perbaikan,
     aktif,
     delegasi,
+    naikSanksi,
+    turunSanksi,
   } = req.query
   const where = {}
+  const q = {}
   if (aktif && aktif === 'false') {
     where.aktif = false
   }
@@ -202,7 +209,13 @@ exports.getAll = handleError(async (req, res) => {
   if (delegasi === 'true') {
     where.delegasi = true
   }
-  const data = await cekBanyakDataSanksi(user, where)
+  if (naikSanksi === 'true') {
+    q.level_sanksi = { $in: [1, 2] }
+  }
+  if (turunSanksi === 'true') {
+    q.level_sanksi = { $in: [2, 3] }
+  }
+  const data = await cekBanyakDataSanksi(user, where, q)
   return response.success(res, {
     message: 'Berhasil ambil data Sanksi',
     data,

+ 36 - 14
model/sanksi.model.js

@@ -12,6 +12,7 @@ module.exports = mongoose.model(
       no_sanksi: String,
       laporan: { type: Types.ObjectId, unique: true, ref: laporan },
       user: { type: Types.ObjectId, ref: user },
+      sanksi: [{ description: String, label: String, level: Number }],
       pelanggaran: [{ type: Types.ObjectId, ref: pelanggaran }],
       keterangan: String,
       aktif: { type: Boolean, default: true },
@@ -117,22 +118,43 @@ module.exports = mongoose.model(
           { timestamps: true }
         ),
       },
-      perubahan_sanksi: {
-        no_surat: String,
-        user: { type: Types.ObjectId, ref: user },
-        pelanggaran: [{ type: Types.ObjectId, ref: pelanggaran }],
-        keterangan: String,
-        dokumen: [
+      riwayat_sanksi: [
+        new Schema(
           {
-            type: Types.ObjectId,
-            ref: dokumen,
+            no_sanksi: String,
+            laporan: { type: Types.ObjectId, unique: true, ref: laporan },
+            user: { type: Types.ObjectId, ref: user },
+            pelanggaran: [{ type: Types.ObjectId, ref: pelanggaran }],
+            keterangan: String,
+            aktif: { type: Boolean, default: true },
+            dokumen: [
+              {
+                type: Types.ObjectId,
+                ref: dokumen,
+              },
+            ],
+            masa_berlaku: new Schema({
+              from_date: Date,
+              to_date: Date,
+            }),
+            perbaikan: [
+              new Schema(
+                {
+                  keterangan: String,
+                  dokumen: [
+                    {
+                      type: Types.ObjectId,
+                      ref: dokumen,
+                    },
+                  ],
+                },
+                { timestamps: true }
+              ),
+            ],
           },
-        ],
-        masa_berlaku: new Schema({
-          from_date: Date,
-          to_date: Date,
-        }),
-      },
+          { timestamps: true }
+        ),
+      ],
       perbaikan: [
         new Schema(
           {

+ 35 - 14
model/sanksi2.model.js

@@ -11,6 +11,7 @@ module.exports = mongoose.model(
       no_sanksi: String,
       user: { type: Types.ObjectId, ref: user },
       pelanggaran: [{ type: Types.ObjectId, ref: pelanggaran }],
+      sanksi: [{ description: String, label: String, level: Number }],
       keterangan: String,
       aktif: { type: Boolean, default: true },
       dokumen: [
@@ -115,22 +116,42 @@ module.exports = mongoose.model(
           { timestamps: true }
         ),
       },
-      perubahan_sanksi: {
-        no_surat: String,
-        user: { type: Types.ObjectId, ref: user },
-        pelanggaran: [{ type: Types.ObjectId, ref: pelanggaran }],
-        keterangan: String,
-        dokumen: [
+      riwayat_sanksi: [
+        new Schema(
           {
-            type: Types.ObjectId,
-            ref: dokumen,
+            no_sanksi: String,
+            user: { type: Types.ObjectId, ref: user },
+            pelanggaran: [{ type: Types.ObjectId, ref: pelanggaran }],
+            keterangan: String,
+            aktif: { type: Boolean, default: true },
+            dokumen: [
+              {
+                type: Types.ObjectId,
+                ref: dokumen,
+              },
+            ],
+            masa_berlaku: new Schema({
+              from_date: Date,
+              to_date: Date,
+            }),
+            perbaikan: [
+              new Schema(
+                {
+                  keterangan: String,
+                  dokumen: [
+                    {
+                      type: Types.ObjectId,
+                      ref: dokumen,
+                    },
+                  ],
+                },
+                { timestamps: true }
+              ),
+            ],
           },
-        ],
-        masa_berlaku: new Schema({
-          from_date: Date,
-          to_date: Date,
-        }),
-      },
+          { timestamps: true }
+        ),
+      ],
       perbaikan: [
         new Schema(
           {

+ 5 - 6
utils/cekData.js

@@ -151,8 +151,8 @@ exports.cekSatuDataSanksi = async (
     .populate('jawaban.cabut_sanksi.dokumen')
     .populate('rekomendasi.dokumen')
     .populate('perbaikan.dokumen')
-    .populate('perubahan_sanksi.pelanggaran')
-    .populate('perubahan_sanksi.dokumen')
+    .populate('riwayat_sanksi.dokumen')
+    .populate('riwayat_sanksi.perbaikan.dokumen')
   if (!sanksi?.laporan) {
     response.error(res, {
       message: 'sanksi_id tidak ada',
@@ -191,14 +191,13 @@ exports.cekBanyakDataSanksi = async (user, where = {}, q = {}) => {
       populate: ['pelanggaran'],
     })
     .populate('user')
-    .populate('pelanggaran')
-    .populate('perubahan_sanksi.pelanggaran')
-    .populate('perubahan_sanksi.dokumen')
+    .populate({ path: 'pelanggaran', match: w })
+    .populate('riwayat_sanksi.dokumen')
     .select('-dokumen')
     .sort({
       createdAt: -1,
     })
-  data = data.filter((e) => e.laporan !== null)
+  data = data.filter((e) => e.laporan !== null && e.pelanggaran.length)
   return data
 }