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