|  | @@ -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',
 | 
	
		
			
				|  |  | +  })
 | 
	
		
			
				|  |  | +})
 |