|
@@ -15,6 +15,7 @@ const kontakModel = require('../../model/kontak.model')
|
|
|
const pemantauanModel = require('../../model/pemantauan.model')
|
|
const pemantauanModel = require('../../model/pemantauan.model')
|
|
|
const batchModel = require('../../model/batch.model')
|
|
const batchModel = require('../../model/batch.model')
|
|
|
const pddiktiService = require('../../services/v2/pddikti.service')
|
|
const pddiktiService = require('../../services/v2/pddikti.service')
|
|
|
|
|
+const { processBatchUpdateSanksi } = require('../../services/batchSanksi.service')
|
|
|
|
|
|
|
|
exports.keberatan = handleError(async (req, res) => {
|
|
exports.keberatan = handleError(async (req, res) => {
|
|
|
const dataSanksi = await sanksiModel
|
|
const dataSanksi = await sanksiModel
|
|
@@ -109,59 +110,37 @@ exports.reminderKeberatan = handleError(async (req, res) => {
|
|
|
})
|
|
})
|
|
|
.populate('user')
|
|
.populate('user')
|
|
|
.populate('laporan')
|
|
.populate('laporan')
|
|
|
- const notif = await Promise.all(
|
|
|
|
|
|
|
+
|
|
|
|
|
+ let count = 0
|
|
|
|
|
+ const errors = []
|
|
|
|
|
+
|
|
|
|
|
+ await Promise.all(
|
|
|
dataSanksi.map(async (e) => {
|
|
dataSanksi.map(async (e) => {
|
|
|
- const dayLeft = moment(e.batas_waktu.jawaban_keberatan).diff(
|
|
|
|
|
- new Date(),
|
|
|
|
|
- 'days'
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ const targetDate = e.batas_waktu?.jawaban_keberatan
|
|
|
|
|
+ const dayLeft = moment(targetDate).diff(new Date(), 'days')
|
|
|
if (dayLeft > 0 && dayLeft <= 7) {
|
|
if (dayLeft > 0 && dayLeft <= 7) {
|
|
|
try {
|
|
try {
|
|
|
await notifWA(TEMPLATE_REMINDER, [
|
|
await notifWA(TEMPLATE_REMINDER, [
|
|
|
- {
|
|
|
|
|
- key: '1',
|
|
|
|
|
- value: 'no_laporan',
|
|
|
|
|
- value_text: e.laporan.no_laporan
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- 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.`
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ { key: '1', value: 'no_laporan', value_text: e.laporan.no_laporan },
|
|
|
|
|
+ { 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.` }
|
|
|
])
|
|
])
|
|
|
- const contacts = await kontakModel.find({
|
|
|
|
|
- 'role.id': {
|
|
|
|
|
- $in: [PTB_ADMIN, PTB_DIKTI, PTB_LLDIKTI]
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ count++
|
|
|
|
|
+ const contacts = await kontakModel.find({ 'role.id': { $in: [PTB_ADMIN, PTB_DIKTI, PTB_LLDIKTI] } })
|
|
|
await logModel.create({
|
|
await logModel.create({
|
|
|
- aktivitas: `Server berhasil mengirim notifikasi Whatsapp kepada ${contacts.map((e) => e.nama).join(', ')} dengan Nomor Laporan ${e.laporan.no_laporan} terhadap ${e.laporan.pt.nama} untuk Mengajukan Keberatan`
|
|
|
|
|
|
|
+ aktivitas: `Server berhasil mengirim notifikasi Whatsapp kepada ${contacts.map((c) => c.nama).join(', ')} dengan Nomor Laporan ${e.laporan.no_laporan} terhadap ${e.laporan.pt.nama} untuk Mengajukan Keberatan`
|
|
|
})
|
|
})
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
- return response.error(res, {
|
|
|
|
|
- message: 'Notifikasi gagal terkirim',
|
|
|
|
|
- error: error.message
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ errors.push({ laporan: e.laporan.no_laporan, error: error.message })
|
|
|
|
|
+ await logModel.create({ aktivitas: `Server gagal mengirim notifikasi Whatsapp untuk Laporan ${e.laporan.no_laporan}, Error: ${error.message}` })
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- let message = 'Tidak ada notifikasi yang dikirim'
|
|
|
|
|
- if (notif.length) message = 'Notifikasi berhasil terkirim'
|
|
|
|
|
- return response.success(res, {
|
|
|
|
|
- message
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ let message = count === 0 ? 'Tidak ada notifikasi yang dikirim' : `Notifikasi berhasil terkirim (${count}/${dataSanksi.length})`
|
|
|
|
|
+ return response.success(res, { message, data: { sent: count, total: dataSanksi.length, errors } })
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
exports.reminderBanding = handleError(async (req, res) => {
|
|
exports.reminderBanding = handleError(async (req, res) => {
|
|
@@ -178,59 +157,40 @@ exports.reminderBanding = handleError(async (req, res) => {
|
|
|
})
|
|
})
|
|
|
.populate('user')
|
|
.populate('user')
|
|
|
.populate('laporan')
|
|
.populate('laporan')
|
|
|
- const notif = await Promise.all(
|
|
|
|
|
|
|
+
|
|
|
|
|
+ let count = 0
|
|
|
|
|
+ const errors = []
|
|
|
|
|
+
|
|
|
|
|
+ await Promise.all(
|
|
|
dataSanksi.map(async (e) => {
|
|
dataSanksi.map(async (e) => {
|
|
|
- const dayLeft = moment(e.batas_waktu.jawaban_banding).diff(
|
|
|
|
|
- new Date(),
|
|
|
|
|
- 'days'
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ const dayLeft = moment(e.batas_waktu.jawaban_banding).diff(new Date(), 'days')
|
|
|
if (dayLeft > 0 && dayLeft <= 7) {
|
|
if (dayLeft > 0 && dayLeft <= 7) {
|
|
|
try {
|
|
try {
|
|
|
await notifWA(TEMPLATE_REMINDER, [
|
|
await notifWA(TEMPLATE_REMINDER, [
|
|
|
- {
|
|
|
|
|
- key: '1',
|
|
|
|
|
- value: 'no_laporan',
|
|
|
|
|
- value_text: e.laporan.no_laporan
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- 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.`
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ { key: '1', value: 'no_laporan', value_text: e.laporan.no_laporan },
|
|
|
|
|
+ { 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.` }
|
|
|
])
|
|
])
|
|
|
|
|
+ count++
|
|
|
const contacts = await kontakModel.find({
|
|
const contacts = await kontakModel.find({
|
|
|
- 'role.id': {
|
|
|
|
|
- $in: [PTB_ADMIN, PTB_DIKTI, PTB_LLDIKTI]
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ 'role.id': { $in: [PTB_ADMIN, PTB_DIKTI, PTB_LLDIKTI] }
|
|
|
})
|
|
})
|
|
|
await logModel.create({
|
|
await logModel.create({
|
|
|
aktivitas: `Server berhasil mengirim notifikasi Whatsapp kepada ${contacts.map((e) => e.nama).join(', ')} dengan Nomor Laporan ${e.laporan.no_laporan} terhadap ${e.laporan.pt.nama} untuk Mengajukan Banding`
|
|
aktivitas: `Server berhasil mengirim notifikasi Whatsapp kepada ${contacts.map((e) => e.nama).join(', ')} dengan Nomor Laporan ${e.laporan.no_laporan} terhadap ${e.laporan.pt.nama} untuk Mengajukan Banding`
|
|
|
})
|
|
})
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
- return response.error(res, {
|
|
|
|
|
- message: 'Notifikasi gagal terkirim',
|
|
|
|
|
- error: error.message
|
|
|
|
|
|
|
+ errors.push({ laporan: e.laporan.no_laporan, error: error.message })
|
|
|
|
|
+ await logModel.create({
|
|
|
|
|
+ aktivitas: `Server gagal mengirim notifikasi Whatsapp untuk Laporan ${e.laporan.no_laporan}, Error: ${error.message}`
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- let message = 'Tidak ada notifikasi yang dikirim'
|
|
|
|
|
- if (notif.length) message = 'Notifikasi berhasil terkirim'
|
|
|
|
|
- return response.success(res, {
|
|
|
|
|
- message
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ let message = count === 0 ? 'Tidak ada notifikasi yang dikirim' : `Notifikasi berhasil terkirim (${count}/${dataSanksi.length})`
|
|
|
|
|
+ return response.success(res, { message, data: { sent: count, total: dataSanksi.length, errors } })
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
exports.updateStatusSanksi = handleError(async (req, res) => {
|
|
exports.updateStatusSanksi = handleError(async (req, res) => {
|
|
@@ -410,45 +370,9 @@ exports.berakhirSanksi = handleError(async (req, res) => {
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
exports.batchUpdateSanksi = handleError(async (req, res) => {
|
|
exports.batchUpdateSanksi = handleError(async (req, res) => {
|
|
|
- const data = await batchModel.find({
|
|
|
|
|
- type: UPDATE_SANKSI
|
|
|
|
|
- })
|
|
|
|
|
- .populate({
|
|
|
|
|
- path: 'sanksi',
|
|
|
|
|
- populate: ['laporan']
|
|
|
|
|
- })
|
|
|
|
|
- let error = []
|
|
|
|
|
- await Promise.all(data.map(async e => {
|
|
|
|
|
- const { sanksi } = e
|
|
|
|
|
- if (!sanksi?.laporan) return
|
|
|
|
|
- try {
|
|
|
|
|
- await pddiktiService.updatePDDIKTI({
|
|
|
|
|
- ptKode: sanksi.laporan.pt.kode,
|
|
|
|
|
- noSanksi: sanksi.laporan.no_laporan,
|
|
|
|
|
- fromDate: moment(sanksi.masa_berlaku.from_date).format('YYYY-MM-DD'),
|
|
|
|
|
- levelSanksi: sanksi.levelSanksi,
|
|
|
|
|
- terimaSanksi: moment(sanksi.tanggal_terima_sanksi).format('YYYY-MM-DD')
|
|
|
|
|
- })
|
|
|
|
|
- await logModel.create({
|
|
|
|
|
- aktivitas: `Server berhasil mengirimkan data Ke API PDDIKTI untuk update Status PT ${sanksi.laporan.pt.nama}`
|
|
|
|
|
- })
|
|
|
|
|
- await batchModel.deleteOne(e._id)
|
|
|
|
|
- } catch (e) {
|
|
|
|
|
- error.push(e.message)
|
|
|
|
|
- await Promise.all([
|
|
|
|
|
- logModel.create({
|
|
|
|
|
- aktivitas: `Server gagal mengirimkan data Ke API PDDIKTI untuk update Status PT ${sanksi.laporan.pt.nama}, dengan error ${e.message}`
|
|
|
|
|
- }),
|
|
|
|
|
- pemantauanModel.deleteOne({
|
|
|
|
|
- laporan: sanksi.laporan._id,
|
|
|
|
|
- sanksi: sanksi._id,
|
|
|
|
|
- action: CREATE_SANKSI
|
|
|
|
|
- })
|
|
|
|
|
- ])
|
|
|
|
|
- }
|
|
|
|
|
- }))
|
|
|
|
|
|
|
+ const { processed, error } = await processBatchUpdateSanksi()
|
|
|
return response.success(res, {
|
|
return response.success(res, {
|
|
|
- message: error.length ? 'Ada beberapa data yang tidak bisa dikirim ke PDDIKTI' : 'Berhasil mengirim data ke PDDIKTI',
|
|
|
|
|
|
|
+ message: error.length ? 'Ada beberapa data yang tidak bisa dikirim ke PDDIKTI' : `Berhasil mengirim data ke PDDIKTI (${processed} data)`,
|
|
|
data: { error },
|
|
data: { error },
|
|
|
})
|
|
})
|
|
|
})
|
|
})
|