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, TEMPLATE_REMINDER, } = require('../utils/constanta') const moment = require('moment') exports.keberatan = handleError(async (req, res) => { const dataSanksi = await sanksiModel .find({ 'batas_waktu.keberatan': { $lt: new Date().toISOString(), }, 'batas_waktu.jawaban_keberatan': { $exists: false, $eq: null, }, }) .populate('user') .populate('laporan') if (!dataSanksi.length) { return response.success(res, { message: 'Tidak ada notifikasi yg dikirim', }) } Promise.all( dataSanksi.map( async (sanksi) => await notifWA(TEMPLATE_KEBERATAN, [ { key: '1', value: 'nama_pt', value_text: sanksi.laporan.pt.nama, }, { key: '2', value: 'pemberi_sanksi', value_text: sanksi.user.lembaga.nama, }, { key: '3', value: 'no_sanksi', value_text: sanksi.no_sanksi, }, ]) ) ) return response.success(res, { message: 'Notifikasi berhasil terkirim', }) }) exports.banding = handleError(async (req, res) => { const dataSanksi = await sanksiModel .find({ 'batas_waktu.banding': { $lt: new Date().toISOString(), }, 'batas_waktu.jawaban_banding': { $exists: false, $eq: null, }, 'batas_waktu.jawaban_keberatan': { $exists: true, $ne: null, }, }) .populate('user') .populate('laporan') if (!dataSanksi.length) { return response.success(res, { message: 'Tidak ada notifikasi yg dikirim', }) } Promise.all( dataSanksi.map( async (sanksi) => await notifWA(TEMPLATE_BANDING, [ { key: '1', value: 'nama_pt', value_text: sanksi.laporan.pt.nama, }, { key: '2', value: 'pemberi_sanksi', value_text: sanksi.user.lembaga.nama, }, { key: '3', value: 'no_sanksi', value_text: sanksi.no_sanksi, }, ]) ) ) return response.success(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') const notif = await 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, }) } } }) ) let message = 'Tidak ada notifikasi yang dikirim' if (notif.length) message = 'Notifikasi berhasil terkirim' return response.success(res, { message, }) }) 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') const notif = await 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, }) } } }) ) let message = 'Tidak ada notifikasi yang dikirim' if (notif.length) message = 'Notifikasi berhasil terkirim' return response.success(res, { message, }) }) exports.updateStatusSanksi = handleError(async (req, res) => { const sanksi = await sanksiModel.find({ 'masa_berlaku.to_date': { $lte: new Date().toISOString(), }, aktif: true, }) Promise.all( sanksi.map(async (e) => sanksiModel.findByIdAndUpdate(e._id, { aktif: false, }) ) ) return response.success(res, { message: 'update status sanksi berhasil', }) })