const handleError = require('../../utils/handleError') const sanksiModel = require('../../model/sanksi.model') const { addManyDokumen } = require('../../utils/dokumenFunction') const { validate } = require('../../utils/validation') const { cekSatuDataSanksi } = require('../../utils/cekData') const response = require('../../utils/responseHandler') const pemantauanModel = require('../../model/pemantauan.model') const { notifWA } = require('../../utils/notifFunction') const { TEMPLATE_PERBAIKAN_DOKUMEN } = require('../../utils/constanta') const kontakModel = require('../../model/kontak.model') const logModel = require('../../model/log.model') exports.add = handleError(async (req, res) => { const user = req.user const { sanksi_id } = req.params const sanksi = await cekSatuDataSanksi(res, user, sanksi_id) if (!sanksi) return const isValid = validate(res, req.body, { keterangan: 'string', }) if (!isValid) return const files = req.files if (!files?.length) { return response.error(res, { message: 'dokumen harus ada', }) } const dokumen = await addManyDokumen(files) const dokumen_id = dokumen.map((e) => e._id) const { keterangan } = req.body const data = await sanksiModel.findOneAndUpdate( { laporan: sanksi.laporan._id, _id: sanksi._id, aktif: true, $or: [ { ['pengajuan.banding']: { $exists: true, $ne: null }, ['pengajuan.cabut_sanksi']: { $exists: false, $eq: null, }, }, { is_pengajuan_keberatan: false, ['pengajuan.cabut_sanksi']: { $exists: false, $eq: null, }, }, { is_pengajuan_banding: false, ['pengajuan.cabut_sanksi']: { $exists: false, $eq: null, }, }, { 'jawaban.cabut_sanksi': { $exists: true, $ne: null }, ['jawaban.cabut_sanksi.status']: { $exists: true, $eq: 'Rekomendasi Perbaikan' } } ], // ['pengajuan.cabut_sanksi']: { // $exists: false, // $eq: null, // }, }, { last_step: 'Dokumen Perbaikan', $push: { perbaikan: { keterangan, dokumen: dokumen_id, }, }, } ) if (!data) { return response.error(res, { message: 'Pengajuan banding atau cabut sanksi tidak ada', }) } await pemantauanModel.create({ laporan: sanksi.laporan._id, sanksi: sanksi._id, action: 'ADD PERBAIKAN DOKUMEN', user: user._id, pt_id: sanksi.laporan.pt.id, keterangan: 'Melakukan Perbaikan Dokumen', dokumen: dokumen_id, }) let contacts = await kontakModel.find() contacts = contacts.map((e) => e.nama).join(', ') try { const notif = await notifWA(TEMPLATE_PERBAIKAN_DOKUMEN, [ { key: '1', value: 'pt', value_text: sanksi.laporan.pt.nama }, { key: '2', value: 'pemberi_sanksi', value_text: `${sanksi.user.nama} - ${sanksi.user.role.nama}`, }, { key: '3', value: 'no_laporan', value_text: sanksi.laporan.no_laporan }, ]) if (notif[0].status == 'success') { await logModel.create({ aktivitas: `Server berhasil mengirim notif wa kepada ${contacts} perihal Dokumen Perbaikan dari PT ${sanksi.laporan.pt.nama}`, }) } else { await logModel.create({ aktivitas: `Server gagal mengirim notif wa kepada ${contacts} perihal Dokumen Perbaikan dari PT ${sanksi.laporan.pt.nama}, Error: ${JSON.stringify(notif)}`, }) } } catch (error) { await logModel.create({ aktivitas: `Server gagal mengirim notif wa kepada ${contacts} perihal Dokumen Perbaikan dari PT ${sanksi.laporan.pt.nama}, Error: ${error.message}`, }) } return response.success(res, { data, message: 'Berhasil menambah Perbaikan', }) })