| 
					
				 | 
			
			
				@@ -12,7 +12,7 @@ const { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   TEMPLATE_KEBERATAN, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   TEMPLATE_BANDING, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   TEMPLATE_REMINDER, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  TEMPLATE_REMINDER2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  TEMPLATE_REMINDER2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } = require('../utils/constanta') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const moment = require('moment') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const autoSaveModel = require('../model/autoSave.model') 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -21,31 +21,28 @@ const userModel = require('../model/user.model') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const { addManyDokumen } = require('../utils/dokumenFunction') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const logModel = require('../model/log.model') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const kontakModel = require('../model/kontak.model') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const childProcess = require('child_process') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const coba = require('../utils/coba') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const { validate } = require('../utils/validation') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 exports.keberatan = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const dataSanksi = await sanksiModel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     .find({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       'tanggal_akhir_keberatan': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $lt: moment().add(-1, 'day').toISOString() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $lt: moment().add(-1, 'day').toISOString(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       'is_pengajuan_keberatan': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $exists: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $eq: null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $eq: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       'pengajuan.cabut_sanksi': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $exists: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $eq: null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $eq: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     .populate('user') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     .populate('laporan') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (!dataSanksi.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return response.success(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      message: 'Tidak ada notifikasi yg dikirim' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      message: 'Tidak ada notifikasi yg dikirim', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -54,12 +51,12 @@ exports.keberatan = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       async (sanksi) => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         await sanksiModel.findByIdAndUpdate(sanksi._id, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           is_pengajuan_keberatan: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          last_step: 'Dokumen Perbaikan' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          last_step: "Dokumen Perbaikan" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return response.success(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    message: 'Notifikasi berhasil terkirim' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    message: 'Notifikasi berhasil terkirim', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -67,27 +64,27 @@ exports.banding = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const dataSanksi = await sanksiModel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     .find({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       'tanggal_akhir_banding': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $lt: moment().add(-1, 'day').toISOString() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $lt: moment().add(-1, 'day').toISOString(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       'is_pengajuan_banding': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $exists: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $eq: null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $eq: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       'batas_waktu.jawaban_keberatan': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $exists: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $ne: null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $ne: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ['pengajuan.cabut_sanksi']: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $exists: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $eq: null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $eq: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     .populate('user') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     .populate('laporan') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (!dataSanksi.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return response.success(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      message: 'Tidak ada notifikasi yg dikirim' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      message: 'Tidak ada notifikasi yg dikirim', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -113,13 +110,13 @@ exports.banding = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // ]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         await sanksiModel.findByIdAndUpdate(sanksi._id, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           is_pengajuan_banding: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          last_step: 'Dokumen Perbaikan' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          last_step: "Dokumen Perbaikan" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return response.success(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    message: 'Notifikasi berhasil terkirim' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    message: 'Notifikasi berhasil terkirim', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -128,12 +125,12 @@ exports.reminderKeberatan = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     .find({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       'batas_waktu.jawaban_keberatan': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $exists: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $ne: null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $ne: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       'jawaban.keberatan': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $exists: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $eq: null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $eq: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     .populate('user') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     .populate('laporan') 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -149,28 +146,32 @@ exports.reminderKeberatan = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               key: '1', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               value: 'no_laporan', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              value_text: e.laporan.no_laporan 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              value_text: e.laporan.no_laporan, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               key: '2', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               value: 'keterangan', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              value_text: 'Proses Menjawab Pengajuan Keberatan' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              value_text: 'Proses Menjawab Pengajuan Keberatan', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               key: '3', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               value: 'pt', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              value_text: e.laporan.pt.nama 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              value_text: e.laporan.pt.nama, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               key: '4', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               value: 'masa', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              value_text: `menjawab pengajuan keberatan tersisa ${dayLeft} hari lagi.` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              value_text: `menjawab pengajuan keberatan tersisa ${dayLeft} hari lagi.`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           ]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const contacts = await kontakModel.find() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          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` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           return response.error(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             message: 'Notifikasi gagal terkirim', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            error: error.message 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            error: error.message, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -178,16 +179,9 @@ exports.reminderKeberatan = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   let message = 'Tidak ada notifikasi yang dikirim' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (notif.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    message = 'Notifikasi berhasil terkirim' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const contacts = await kontakModel.find() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    await logModel.create({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      aktivitas: `Server berhasil mengirim notif wa kepada ${contacts.map((e) => e.nama).join(', ')} untuk reminder keberatan` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (notif.length) message = 'Notifikasi berhasil terkirim' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return response.success(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    message 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    message, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -196,12 +190,12 @@ exports.reminderBanding = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     .find({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       'batas_waktu.jawaban_banding': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $exists: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $ne: null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $ne: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       'jawaban.banding': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $exists: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $eq: null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $eq: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     .populate('user') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     .populate('laporan') 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -217,28 +211,32 @@ exports.reminderBanding = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               key: '1', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               value: 'no_laporan', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              value_text: e.laporan.no_laporan 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              value_text: e.laporan.no_laporan, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               key: '2', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               value: 'keterangan', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              value_text: 'Proses Menjawab Pengajuan Banding' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              value_text: 'Proses Menjawab Pengajuan Banding', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               key: '3', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               value: 'pt', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              value_text: e.laporan.pt.nama 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              value_text: e.laporan.pt.nama, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               key: '4', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               value: 'masa', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              value_text: `menjawab pengajuan banding tersisa ${dayLeft} hari lagi.` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              value_text: `menjawab pengajuan banding tersisa ${dayLeft} hari lagi.`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           ]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const contacts = await kontakModel.find() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          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` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           return response.error(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             message: 'Notifikasi gagal terkirim', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            error: error.message 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            error: error.message, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -246,37 +244,30 @@ exports.reminderBanding = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   let message = 'Tidak ada notifikasi yang dikirim' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (notif.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    message = 'Notifikasi berhasil terkirim' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const contacts = await kontakModel.find() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    await logModel.create({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      aktivitas: `Server berhasil mengirim notif wa kepada ${contacts.map((e) => e.nama).join(', ')} untuk reminder banding` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (notif.length) message = 'Notifikasi berhasil terkirim' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return response.success(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    message 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    message, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 exports.updateStatusSanksi = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const sanksi = await sanksiModel.find({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     'masa_berlaku.to_date': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $lte: new Date().toISOString() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $lte: new Date().toISOString(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    aktif: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    aktif: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   Promise.all( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     sanksi.map(async (e) => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       sanksiModel.findByIdAndUpdate(e._id, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        aktif: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        aktif: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return response.success(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    message: 'update status sanksi berhasil' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    message: 'update status sanksi berhasil', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -285,20 +276,20 @@ exports.save = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const { laporan: isLaporan, sanksi: isSanksi } = req.query 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const user = req.user 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  let autoData = null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  let laporan = null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  let sanksi = null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  let autoData = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  let laporan = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  let sanksi = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (isLaporan === 'true') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    laporan = await cekSatuDataLaporan(res, user, id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    laporan = await cekSatuDataLaporan(res, user, id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (!laporan) return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    autoData = await autoSaveModel.findOne({ laporan_id: laporan._id }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    autoData = await autoSaveModel.findOne({ laporan_id: laporan._id }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } else if (isSanksi === 'true') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    sanksi = await cekSatuDataSanksi(res, user, id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sanksi = await cekSatuDataSanksi(res, user, id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (!sanksi) return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    autoData = await autoSaveModel.findOne({ sanksi_id: sanksi._id }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    autoData = await autoSaveModel.findOne({ sanksi_id: sanksi._id }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return response.error(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      message: 'query harus sanksi atau laporan yg bernilai true' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      message: 'query harus sanksi atau laporan yg bernilai true', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -311,7 +302,7 @@ exports.save = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             dataSuratBA: req.body?.PenetapanSanksi?.dataSuratBA || dataSave.laporan.PenetapanSanksi?.dataSuratBA, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             dataUpload: req.body?.PenetapanSanksi?.dataUpload || dataSave.laporan.PenetapanSanksi?.dataUpload, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             dataPelanggaran: req.body?.PenetapanSanksi?.dataPelanggaran || dataSave.laporan.PenetapanSanksi?.dataPelanggaran, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            activeStep: req.body?.PenetapanSanksi?.activeStep || dataSave.laporan.PenetapanSanksi?.activeStep 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            activeStep: req.body?.PenetapanSanksi?.activeStep || dataSave.laporan.PenetapanSanksi?.activeStep, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -327,7 +318,7 @@ exports.save = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return response.success(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    message: 'Berhasil menyimpan data auto save' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    message: 'Berhasil menyimpan data auto save', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -335,26 +326,26 @@ exports.getSave = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const { id } = req.params 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const { laporan: isLaporan, sanksi: isSanksi } = req.query 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  let data = null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  let laporan = null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  let sanksi = null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  let data = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  let laporan = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  let sanksi = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (isLaporan === 'true') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     laporan = await laporanModel.findById(id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (!laporan) return response.error(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       code: 404, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       message: 'laporan_id tidak ada' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    data = (await autoSaveModel.findOne({ laporan_id: laporan._id })).laporan 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    data = (await autoSaveModel.findOne({ laporan_id: laporan._id })).laporan; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } else if (isSanksi === 'true') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     sanksi = await sanksiModel.findById(id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (!sanksi) return response.error(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       code: 404, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       message: 'sanksi_id tidak ada' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    data = (await autoSaveModel.findOne({ sanksi_id: sanksi._id })).sanksi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    data = (await autoSaveModel.findOne({ sanksi_id: sanksi._id })).sanksi; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return response.error(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      message: 'harus terdapat query sanksi atau laporan yg bernilai true' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      message: 'harus terdapat query sanksi atau laporan yg bernilai true', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -365,40 +356,69 @@ exports.getSave = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 exports.backup = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const mongoUrl = coba.decrypt(process.env.MYDSY) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  let cmd = `mongodump --uri ${mongoUrl} -o backup/${moment().format('YYYY-MM-DD')}` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const akun = mongoUrl.match(/\/\/(.*?)@/i) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (akun?.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    cmd += ` --authenticationDatabase admin` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  childProcess.execSync(cmd) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const timeNow = new Date().getTime() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const dataBakup = await Promise.all([ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (async () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const path = 'backup/' + timeNow + '-sanksi.json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const sanksi = await sanksiModel.find() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      fs.writeFileSync(path, JSON.stringify(sanksi)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const { size } = fs.statSync(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const mimetype = 'application/json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const buffer = fs.readFileSync(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return { buffer, mimetype, size, originalname: 'sanksi.json' } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    })(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (async () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const path = 'backup/' + timeNow + '-laporan.json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const laporan = await laporanModel.find() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      fs.writeFileSync(path, JSON.stringify(laporan)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const { size } = fs.statSync(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const mimetype = 'application/json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const buffer = fs.readFileSync(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return { buffer, mimetype, size, originalname: 'laporan.json' } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    })(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (async () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const path = 'backup/' + timeNow + '-user.json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const user = await userModel.find() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      fs.writeFileSync(path, JSON.stringify(user)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const { size } = fs.statSync(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const mimetype = 'application/json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const buffer = fs.readFileSync(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return { buffer, mimetype, size, originalname: 'user.json' } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    })(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (async () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const path = 'backup/' + timeNow + '-chunk.json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const chunk = await chunkModel.find() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      fs.writeFileSync(path, JSON.stringify(chunk)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // const { size } = fs.statSync(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // const mimetype = 'application/json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // const buffer = fs.readFileSync(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // return { buffer, mimetype, size, originalname: 'chunk.json' } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    })(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (async () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const path = 'backup/' + new Date().getTime() + '-dokumen.json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const dokumen = await dokumenModel.find() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      fs.writeFileSync(path, JSON.stringify(dokumen)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const { size } = fs.statSync(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const mimetype = 'application/json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const buffer = fs.readFileSync(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return { buffer, mimetype, size, originalname: 'dokumen.json' } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    })(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (async () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const path = 'backup/' + new Date().getTime() + '-pemantauan.json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const pemantauan = await dokumenModel.find() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      fs.writeFileSync(path, JSON.stringify(pemantauan)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const { size } = fs.statSync(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const mimetype = 'application/json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const buffer = fs.readFileSync(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return { buffer, mimetype, size, originalname: 'pemantauan.json' } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    })(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // const dokumen = await addManyDokumen(dataBakup) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // const tes = await backupModel.create({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //   dokumen: dokumen.map(e => e._id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return response.success(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    message: 'berhasil membuat backup' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-exports.restore = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const isValid = validate(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    tanggal: { type: 'date', convert: true } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }, req.query) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (!isValid) return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const { tanggal } = req.query 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const mongoUrl = coba.decrypt(process.env.MYDSY) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  let cmd = `mongorestore --uri ${mongoUrl}` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const akun = mongoUrl.match(/\/\/(.*?)@/i) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (akun?.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const [username, password] = akun[1].split(':') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    cmd += ` --authenticationDatabase admin` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  cmd += ` backup/${tanggal}` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  childProcess.execSync(cmd) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return response.success(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    message: 'berhasil membuat backup' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    message: 'berhasil membuat backup', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -408,7 +428,7 @@ exports.getBackup = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const data = await backupModel.findById(id).populate('dokumen') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (!data) return response.error(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     code: 404, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    message: 'Not Found' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    message: 'Not Found', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return response.success(res, { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -418,13 +438,11 @@ exports.getBackup = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 exports.berakhirSanksi = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const sanksi = await sanksiModel.find({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    'masa_berlaku.to_date': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const sanksi = await sanksiModel.find({'masa_berlaku.to_date': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       $ne: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       $exists: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }).populate('laporan') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  let count = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }}).populate('laporan') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  let count = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   await Promise.all(sanksi.map(async e => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const dayLeft = moment(e.masa_berlaku.to_date).diff( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -450,22 +468,22 @@ exports.berakhirSanksi = handleError(async (req, res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             value_text: `habis masa berlaku sanksi tersisa ${dayLeft} hari lagi.` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        count++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        count++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const contacts = await kontakModel.find() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        await logModel.create({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          aktivitas: `Server berhasil mengirim notifikasi reminder Whatsapp kepada ${contacts.map((e) => e.nama).join(', ')} dengan Nomor Sanksi ${e.no_sanksi} terhadap ${e.laporan.pt.nama} bahwa Masa Berlaku Sanksi tersisa ${dayLeft} hari lagi.` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return response.error(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           message: 'Notifikasi gagal terkirim', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          error: error.message 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          error: error.message, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   })) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  const contacts = await kontakModel.find() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   let message = 'Notifikasi berhasil terkirim' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (count === 0) message = 'tidak ada notifikasi yg dikirim' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  else await logModel.create({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    aktivitas: `Server berhasil mengirim notif wa kepada ${contacts.map((e) => e.nama).join(', ')} untuk reminder berakhirnya sanksi` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return response.success(res, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    message 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    message, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 |