Jelajahi Sumber

Merge branch 'master' of https://source.sidali.sixsenz.net/appsptb/PTB-be

andi 3 tahun lalu
induk
melakukan
23bdd2693a

+ 0 - 1
.env

@@ -1,7 +1,6 @@
 BASE_URL=https://api.sidali.sixsenz.net
 PORT=5000
 SECRET=3d3eb3d842f4e595048f1806ca815f8092e29fb6b98a30dff0b8241ad0e6c273
-
 MONGO_URL=mongodb://production.sidali.sixsenz.net:50010/ptb-db
 TOKEN_DEVELOPMENT=77aecfec-10ac-3b4f-ab59-3fbfbeed6324
 TOKEN_PRODUCTION=5b62f743-eef2-3370-8c66-6951b2e9c2c5

+ 3 - 3
.gitignore

@@ -55,7 +55,7 @@ typings/
 .yarn-integrity
 
 # dotenv environment variables file
-.env
+#.env
 
 # next.js build output
 # .next
@@ -65,6 +65,6 @@ typings/
 
 public/images/
 
-Jenkinsfile
+#Jenkinsfile
 
-dockerfile
+#dockerfile

+ 134 - 1
controller/auto.controller.js

@@ -2,7 +2,12 @@ const handleError = require('../utils/handleError')
 const response = require('../utils/responseHandler')
 const { notifWA } = require('../utils/notifFunction')
 const sanksiModel = require('../model/sanksi.model')
-const { TEMPLATE_KEBERATAN, TEMPLATE_BANDING } = require('../utils/constanta')
+const {
+  TEMPLATE_KEBERATAN,
+  TEMPLATE_BANDING,
+  TEMPLATE_REMINDER,
+} = require('../utils/constanta')
+const moment = require('moment')
 
 exports.keberatan = handleError(async (req, res) => {
   const dataSanksi = await sanksiModel
@@ -101,3 +106,131 @@ exports.banding = handleError(async (req, res) => {
     message: 'Notifikasi berhasil terkirim',
   })
 })
+
+exports.reminderKeberatan = handleError(async (req, res) => {
+  let dataSanksi = await sanksiModel
+    .find({
+      'batas_waktu.jawaban_keberatan': {
+        $exists: true,
+        $ne: null,
+      },
+      'jawaban.keberatan': {
+        $exists: false,
+        $eq: null,
+      },
+    })
+    .populate('user')
+    .populate('laporan')
+  Promise.all(
+    dataSanksi.map(async (e) => {
+      if (
+        e.batas_waktu.jawaban_keberatan &&
+        new Date() >
+          moment(e.batas_waktu.jawaban_keberatan).add(-7, 'days').toDate() &&
+        new Date() < e.batas_waktu.jawaban_keberatan
+      ) {
+        const dayLeft = moment(e.batas_waktu.jawaban_keberatan).diff(
+          new Date(),
+          'days'
+        )
+        try {
+          await notifWA(TEMPLATE_REMINDER, [
+            {
+              key: '1',
+              value: 'no_sanksi',
+              value_text: e.no_sanksi,
+            },
+            {
+              key: '2',
+              value: 'keterangan',
+              value_text: 'Proses Menjawab Pengajuan Keberatan',
+            },
+            {
+              key: '3',
+              value: 'pt',
+              value_text: e.laporan.pt.nama,
+            },
+            {
+              key: '4',
+              value: 'masa',
+              value_text: `menjawab pengajuan keberatan tersisa ${dayLeft} hari lagi.`,
+            },
+          ])
+        } catch (error) {
+          return response.error(res, {
+            message: 'Notifikasi gagal terkirim',
+            error: error.message,
+          })
+        }
+      }
+    })
+  )
+
+  return response.success(res, {
+    message: 'Notifikasi berhasil terkirim',
+  })
+})
+
+exports.reminderBanding = handleError(async (req, res) => {
+  let dataSanksi = await sanksiModel
+    .find({
+      'batas_waktu.jawaban_banding': {
+        $exists: true,
+        $ne: null,
+      },
+      'jawaban.banding': {
+        $exists: false,
+        $eq: null,
+      },
+    })
+    .populate('user')
+    .populate('laporan')
+  Promise.all(
+    dataSanksi.map(async (e) => {
+      if (
+        e.batas_waktu.jawaban_banding &&
+        new Date() >
+          moment(e.batas_waktu.jawaban_banding).add(-7, 'days').toDate() &&
+        new Date() < e.batas_waktu.jawaban_banding
+      ) {
+        const dayLeft = moment(e.batas_waktu.jawaban_banding).diff(
+          new Date(),
+          'days'
+        )
+        try {
+          await notifWA(TEMPLATE_REMINDER, [
+            {
+              key: '1',
+              value: 'no_sanksi',
+              value_text: e.no_sanksi,
+            },
+            {
+              key: '2',
+              value: 'keterangan',
+              value_text: 'Proses Menjawab Pengajuan Banding',
+            },
+            {
+              key: '3',
+              value: 'pt',
+              value_text: e.laporan.pt.nama,
+            },
+            {
+              key: '4',
+              value: 'masa',
+              value_text: `menjawab pengajuan banding tersisa ${dayLeft} hari lagi.`,
+            },
+          ])
+        } catch (error) {
+          return response.error(res, {
+            message: 'Notifikasi gagal terkirim',
+            error: error.message,
+          })
+        }
+      }
+    })
+  )
+
+  return response.success(res, {
+    message: 'Notifikasi berhasil terkirim',
+  })
+})

+ 20 - 0
controller/laporan.controller.js

@@ -63,6 +63,26 @@ exports.create = handleError(async (req, res) => {
   }
 
   data = await laporanModel.create(data)
+
+  const notif = await notifWA(TEMPLATE_LAPORAN, [
+    {
+      key: '1',
+      value: 'nama',
+      value_text: 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 },
+  ])
+
+  let contacts = await kontakModel.find()
+  contacts = contacts.map((e) => e.nama).join(', ')
+  if (notif[0].status == 'success') {
+    await logModel.create({
+      aktivitas: `Server berhasil mengirim notif wa kepada ${contacts} untuk Pembuatan Laporan`,
+    })
+  }
+
   await pemantauanModel.create({
     laporan: data._id,
     action: 'CREATE LAPORAN',

+ 9 - 2
controller/sanksi.controller.js

@@ -88,8 +88,12 @@ exports.create = handleError(async (req, res) => {
 
 exports.getAll = handleError(async (req, res) => {
   const user = req.user
-  const { keberatan, jawaban, banding, cabutSanksi, perbaikan } = req.query
+  const { keberatan, jawaban, banding, cabutSanksi, perbaikan, aktif } =
+    req.query
   const where = {}
+  if (aktif && aktif === 'false') {
+    where.aktif = false
+  }
   if (keberatan === 'true') {
     where['pengajuan.keberatan'] = { $exists: true, $ne: null }
     if (jawaban === 'true') {
@@ -124,13 +128,16 @@ exports.getOne = handleError(async (req, res) => {
   const { sanksi_id } = req.params
 
   const w = {}
-  const { banding } = req.query
+  const { banding, aktif } = req.query
   if (banding === 'true') {
     w.banding = true
     w['pengajuan.keberatan'] = { $exists: true, $ne: null }
     w['jawaban.keberatan'] = { $exists: true, $ne: null }
     w['pengajuan.banding'] = { $exists: true, $ne: null }
   }
+  if (aktif && aktif === 'false') {
+    w.aktif = false
+  }
 
   const sanksi = await cekSatuDataSanksi(res, user, sanksi_id, w)
   if (!sanksi) return

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

@@ -84,6 +84,7 @@ exports.createJawaban = handleError(async (req, res) => {
       ['pengajuan.cabut_sanksi']: { $exists: true, $ne: null },
     },
     {
+      aktif: status === 'Diterima' ? false : true,
       ['jawaban.cabut_sanksi']: {
         status,
         keterangan,

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

@@ -3,5 +3,7 @@ const auto = require('../../controller/auto.controller')
 
 router.get('/keberatan', auto.keberatan)
 router.get('/banding', auto.banding)
+router.get('/reminder-keberatan', auto.reminderKeberatan)
+router.get('/reminder-banding', auto.reminderBanding)
 
 module.exports = router

+ 7 - 9
utils/cekData.js

@@ -7,10 +7,9 @@ exports.cekSatuDataLaporan = async (
   res,
   user,
   laporan_id,
-  where = { delegasi: false }
+  where = { delegasi: false, aktif: true }
 ) => {
-  const w = { _id: laporan_id, aktif: true, ...where }
-  if (where.aktif === false) w.aktif = false
+  const w = { _id: laporan_id, aktif: where.aktif || true, ...where }
   switch (user.role.id) {
     case 2020:
       if (!where.delegasi) w.role_data = 'dikti'
@@ -50,8 +49,7 @@ exports.cekSatuDataLaporan = async (
 }
 
 exports.cekBanyakDataLaporan = async (user, where = { delegasi: false }) => {
-  const w = { aktif: true, ...where }
-  if (where.aktif === false) w.aktif = false
+  const w = { aktif: where.aktif || true, ...where }
   switch (user.role.id) {
     case 2020:
       if (!where.delegasi) w.role_data = 'dikti'
@@ -91,7 +89,7 @@ exports.cekSatuDataSanksi = async (
   sanksi_id,
   where = { banding: false }
 ) => {
-  const w = { aktif: true }
+  const w = { aktif: where.aktif || true }
   switch (user.role.id) {
     case 2020:
       if (!where.banding) w.role_data = 'dikti'
@@ -133,7 +131,7 @@ exports.cekSatuDataSanksi = async (
 }
 
 exports.cekBanyakDataSanksi = async (user, where = { banding: false }) => {
-  const w = { aktif: true }
+  const w = {}
   switch (user.role.id) {
     case 2020:
       if (!where.banding) {
@@ -149,14 +147,14 @@ exports.cekBanyakDataSanksi = async (user, where = { banding: false }) => {
       break
   }
   let data = await sanksiModel
-    .find({ aktif: true, ...where })
+    .find({ aktif: where.aktif || true, ...where })
     .populate({
       path: 'laporan',
       select: 'pt',
       match: w,
     })
     .populate('user')
-    .select('-batas_waktu -aktif -dokumen -pelanggaran')
+    .select('-batas_waktu -dokumen -pelanggaran')
     .sort({
       createdAt: -1,
     })

+ 2 - 1
utils/constanta.js

@@ -6,4 +6,5 @@ exports.TEMPLATE_KEBERATAN = '8d2d8bfd-4100-4f78-b877-caffded2d56a'
 exports.TEMPLATE_BANDING = '2bbc0080-1187-4213-8017-b6d1d6ec3cbb'
 exports.TEMPLATE_LAPORAN = 'd5609c3c-e9e9-4dbe-9a4e-e8fa772d6770'
 exports.TEMPLATE_PERBAIKAN_DOKUMEN = '891ee9c7-39f8-416e-af5c-6b3a10e9dbec'
-exports.TEMPLATE_VERIFIKASI = '37a9ccba-e1bc-4d02-86e0-3be4c718af2a'
+exports.TEMPLATE_VERIFIKASI = '37a9ccba-e1bc-4d02-86e0-3be4c718af2a'
+exports.TEMPLATE_REMINDER = '960eaacb-0dd9-42a6-b331-60fac972eb96'