auto.controller.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. const handleError = require('../utils/handleError')
  2. const response = require('../utils/responseHandler')
  3. const { notifWA } = require('../utils/notifFunction')
  4. const sanksiModel = require('../model/sanksi.model')
  5. const {
  6. TEMPLATE_KEBERATAN,
  7. TEMPLATE_BANDING,
  8. TEMPLATE_REMINDER,
  9. } = require('../utils/constanta')
  10. const moment = require('moment')
  11. exports.keberatan = handleError(async (req, res) => {
  12. const dataSanksi = await sanksiModel
  13. .find({
  14. 'batas_waktu.keberatan': {
  15. $lt: new Date().toISOString(),
  16. },
  17. 'batas_waktu.jawaban_keberatan': {
  18. $exists: false,
  19. $eq: null,
  20. },
  21. })
  22. .populate('user')
  23. .populate('laporan')
  24. if (!dataSanksi.length) {
  25. return response.success(res, {
  26. message: 'Tidak ada notifikasi yg dikirim',
  27. })
  28. }
  29. Promise.all(
  30. dataSanksi.map(
  31. async (sanksi) =>
  32. await notifWA(TEMPLATE_KEBERATAN, [
  33. {
  34. key: '1',
  35. value: 'nama_pt',
  36. value_text: sanksi.laporan.pt.nama,
  37. },
  38. {
  39. key: '2',
  40. value: 'pemberi_sanksi',
  41. value_text: sanksi.user.lembaga.nama,
  42. },
  43. {
  44. key: '3',
  45. value: 'no_laporan',
  46. value_text: sanksi.laporan.no_laporan,
  47. },
  48. ])
  49. )
  50. )
  51. return response.success(res, {
  52. message: 'Notifikasi berhasil terkirim',
  53. })
  54. })
  55. exports.banding = handleError(async (req, res) => {
  56. const dataSanksi = await sanksiModel
  57. .find({
  58. 'batas_waktu.banding': {
  59. $lt: new Date().toISOString(),
  60. },
  61. 'batas_waktu.jawaban_banding': {
  62. $exists: false,
  63. $eq: null,
  64. },
  65. 'batas_waktu.jawaban_keberatan': {
  66. $exists: true,
  67. $ne: null,
  68. },
  69. })
  70. .populate('user')
  71. .populate('laporan')
  72. if (!dataSanksi.length) {
  73. return response.success(res, {
  74. message: 'Tidak ada notifikasi yg dikirim',
  75. })
  76. }
  77. Promise.all(
  78. dataSanksi.map(
  79. async (sanksi) =>
  80. await notifWA(TEMPLATE_BANDING, [
  81. {
  82. key: '1',
  83. value: 'nama_pt',
  84. value_text: sanksi.laporan.pt.nama,
  85. },
  86. {
  87. key: '2',
  88. value: 'pemberi_sanksi',
  89. value_text: sanksi.user.lembaga.nama,
  90. },
  91. {
  92. key: '3',
  93. value: 'no_laporan',
  94. value_text: sanksi.laporan.no_laporan,
  95. },
  96. ])
  97. )
  98. )
  99. return response.success(res, {
  100. message: 'Notifikasi berhasil terkirim',
  101. })
  102. })
  103. exports.reminderKeberatan = handleError(async (req, res) => {
  104. let dataSanksi = await sanksiModel
  105. .find({
  106. 'batas_waktu.jawaban_keberatan': {
  107. $exists: true,
  108. $ne: null,
  109. },
  110. 'jawaban.keberatan': {
  111. $exists: false,
  112. $eq: null,
  113. },
  114. })
  115. .populate('user')
  116. .populate('laporan')
  117. const notif = await Promise.all(
  118. dataSanksi.map(async (e) => {
  119. if (
  120. e.batas_waktu.jawaban_keberatan &&
  121. new Date() >
  122. moment(e.batas_waktu.jawaban_keberatan).add(-7, 'days').toDate() &&
  123. new Date() < e.batas_waktu.jawaban_keberatan
  124. ) {
  125. const dayLeft = moment(e.batas_waktu.jawaban_keberatan).diff(
  126. new Date(),
  127. 'days'
  128. )
  129. try {
  130. await notifWA(TEMPLATE_REMINDER, [
  131. {
  132. key: '1',
  133. value: 'no_laporan',
  134. value_text: e.laporan.no_laporan,
  135. },
  136. {
  137. key: '2',
  138. value: 'keterangan',
  139. value_text: 'Proses Menjawab Pengajuan Keberatan',
  140. },
  141. {
  142. key: '3',
  143. value: 'pt',
  144. value_text: e.laporan.pt.nama,
  145. },
  146. {
  147. key: '4',
  148. value: 'masa',
  149. value_text: `menjawab pengajuan keberatan tersisa ${dayLeft} hari lagi.`,
  150. },
  151. ])
  152. } catch (error) {
  153. return response.error(res, {
  154. message: 'Notifikasi gagal terkirim',
  155. error: error.message,
  156. })
  157. }
  158. }
  159. })
  160. )
  161. let message = 'Tidak ada notifikasi yang dikirim'
  162. if (notif.length) message = 'Notifikasi berhasil terkirim'
  163. return response.success(res, {
  164. message,
  165. })
  166. })
  167. exports.reminderBanding = handleError(async (req, res) => {
  168. let dataSanksi = await sanksiModel
  169. .find({
  170. 'batas_waktu.jawaban_banding': {
  171. $exists: true,
  172. $ne: null,
  173. },
  174. 'jawaban.banding': {
  175. $exists: false,
  176. $eq: null,
  177. },
  178. })
  179. .populate('user')
  180. .populate('laporan')
  181. const notif = await Promise.all(
  182. dataSanksi.map(async (e) => {
  183. if (
  184. e.batas_waktu.jawaban_banding &&
  185. new Date() >
  186. moment(e.batas_waktu.jawaban_banding).add(-7, 'days').toDate() &&
  187. new Date() < e.batas_waktu.jawaban_banding
  188. ) {
  189. const dayLeft = moment(e.batas_waktu.jawaban_banding).diff(
  190. new Date(),
  191. 'days'
  192. )
  193. try {
  194. await notifWA(TEMPLATE_REMINDER, [
  195. {
  196. key: '1',
  197. value: 'no_laporan',
  198. value_text: e.laporan.no_laporan,
  199. },
  200. {
  201. key: '2',
  202. value: 'keterangan',
  203. value_text: 'Proses Menjawab Pengajuan Banding',
  204. },
  205. {
  206. key: '3',
  207. value: 'pt',
  208. value_text: e.laporan.pt.nama,
  209. },
  210. {
  211. key: '4',
  212. value: 'masa',
  213. value_text: `menjawab pengajuan banding tersisa ${dayLeft} hari lagi.`,
  214. },
  215. ])
  216. } catch (error) {
  217. return response.error(res, {
  218. message: 'Notifikasi gagal terkirim',
  219. error: error.message,
  220. })
  221. }
  222. }
  223. })
  224. )
  225. let message = 'Tidak ada notifikasi yang dikirim'
  226. if (notif.length) message = 'Notifikasi berhasil terkirim'
  227. return response.success(res, {
  228. message,
  229. })
  230. })
  231. exports.updateStatusSanksi = handleError(async (req, res) => {
  232. const sanksi = await sanksiModel.find({
  233. 'masa_berlaku.to_date': {
  234. $lte: new Date().toISOString(),
  235. },
  236. aktif: true,
  237. })
  238. Promise.all(
  239. sanksi.map(async (e) =>
  240. sanksiModel.findByIdAndUpdate(e._id, {
  241. aktif: false,
  242. })
  243. )
  244. )
  245. return response.success(res, {
  246. message: 'update status sanksi berhasil',
  247. })
  248. })