| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 | const handleError = require('../../../utils/v1/handleError')const sanksiModel = require('../../../model/sanksi.model')const { addManyDokumen } = require('../../../utils/dokumenFunction')const { validate } = require('../../../utils/v1/validation')const { cekSatuDataSanksi } = require('../../../utils/v1/cekData')const response = require('../../../utils/responseHandler')const pemantauanModel = require('../../../model/pemantauan.model')const { notifWA } = require('../../../utils/v1/notifFunction')const { TEMPLATE_PERBAIKAN_DOKUMEN, PERBAIKAN } = require('../../../utils/constanta')const kontakModel = require('../../../model/kontak.model')const logModel = require('../../../model/log.model')const laporanModel = require('../../../model/laporan.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,      // },    },    {      flag: 'dokumen_perbaikan',      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 laporanModel.findOneAndUpdate({_id: sanksi.laporan._id},{    flag: PERBAIKAN,    $push: {      step: PERBAIKAN,    }  })  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',  })})
 |