| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 | const handleError = require('../../../utils/v1/handleError')const sanksiModel = require('../../../model/sanksi.model')const logModel = require('../../../model/log.model')const { addManyDokumen } = require('../../../utils/dokumenFunction')const { validate } = require('../../../utils/v1/validation')const { cekSatuDataSanksi, cekSatuDataLaporan } = require('../../../utils/v1/cekData')const response = require('../../../utils/responseHandler')const pemantauanModel = require('../../../model/pemantauan.model')const laporanModel = require('../../../model/laporan.model')const { CABUT_SANKSI } = require('../../../utils/constanta')exports.create = 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 files = req.files  if (!(files?.dokumen && files?.dokumen_rekomendasi)) {    return response.error(res, {      message: 'dokumen dan dokumen_rekomendasi harus ada'    })  }  const [dokumen_id, dokumenRekomendasi_id] = await Promise.all([    (async () => (await addManyDokumen(files.dokumen)).map((e) => e._id))(),    (async ()=> (await addManyDokumen(files.dokumen_rekomendasi)).map(e => e._id))()  ])  const data = await sanksiModel.findOneAndUpdate(    {      laporan: sanksi.laporan._id,      _id: sanksi._id,      $or: [{        perbaikan: { $exists: true, $ne: [] },        $or: [{          'pengajuan.cabut_sanksi': { $exists: false, $eq: null }        }, {          is_finalisasi: true        }],      }, {        bypass_cabut_sanksi: {          $eq: true        }      }]    },    {      last_step: 'Permohonan Pencabutan Sanksi',      'pengajuan.cabut_sanksi': {        dokumen: dokumen_id      },      $push: {        riwayat_pengajuan_cabut_sanksi: {          index: sanksi.index_perbaikan - 1,          dokumen: dokumen_id,          dokumen_rekomendasi: dokumenRekomendasi_id        }      }    }  )  if (!data) {    return response.error(res, {      message: 'cabut_sanksi sudah ada'    })  }  await laporanModel.findOneAndUpdate({ _id: sanksi.laporan._id }, {    flag: CABUT_SANKSI,    $push: {      step: CABUT_SANKSI    }  })  await pemantauanModel.create({    laporan: sanksi.laporan._id,    sanksi: sanksi._id,    action: 'ADD CABUTSANKSI',    pt_id: sanksi.laporan.pt.id,    user: user._id,    keterangan: 'Mengajukan Pencabutan Sanksi',    dokumen: dokumen_id  })  return response.success(res, {    data,    message: 'Berhasil menambah Cabut Sanksi'  })})exports.createJawaban = 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, {    status: 'string',    keterangan: 'string'  })  if (!isValid) return  let dokumen_id = null  const files = req.files  if (files?.length) {    const dokumen = await addManyDokumen(files)    dokumen_id = dokumen.map((e) => e._id)  }  const { status, keterangan } = req.body  const data = await sanksiModel.findOneAndUpdate(    {      laporan: sanksi.laporan._id,      _id: sanksi._id,      $or: [        { 'pengajuan.cabut_sanksi': { $exists: true, $ne: null } },        { bypass_cabut_sanksi: true }      ]    },    {      is_finalisasi: false,      aktif: status !== 'Diterima',      last_step: 'Jawaban Atas Permohonan Pencabutan Sanksi',      'jawaban.cabut_sanksi': {        status,        keterangan,        dokumen: dokumen_id      },      $push: {        riwayat_jawaban_cabut_sanksi: {          index: sanksi.index_perbaikan,          status,          keterangan,          dokumen: dokumen_id        }      }    }  )  if (!data) {    return response.error(res, {      message: 'cabut_sanksi tidak ada'    })  }  await laporanModel.findOneAndUpdate({ _id: sanksi.laporan._id }, {    flag: status === 'Diterima' ? 'diterima' : 'cabut_sanksi',    $push: {      step: status === 'Diterima' ? 'diterima' : 'cabut_sanksi'    }  })  let message = 'Menjawab Pengajuan Pencabutan Sanksi'  let for_public = true  if (sanksi.jawaban?.cabut_sanksi) {    message = 'Mengubah jawaban Pengajuan Pencabutan Sanksi'    for_public = false  }  await pemantauanModel.create({    laporan: sanksi.laporan._id,    sanksi: sanksi._id,    action: 'ADD CABUTSANKSI JAWABAN',    jawaban: status,    pt_id: sanksi.laporan.pt.id,    user: user._id,    keterangan: message,    dokumen: dokumen_id,    for_public  })  return response.success(res, {    message: 'Berhasil menjawab Pengajuan Cabut Sanksi',    data  })})exports.byPass = 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 check = await sanksiModel.findOneAndUpdate({    _id: sanksi._id  }, {    bypass_cabut_sanksi: true,    last_step: 'Permohonan Pencabutan Sanksi'  })  if (!check) {    return response.error(res, {      message: 'gagal bypass ke pencabutan sanksi'    })  }  await logModel.create({    user: user._id,    aktivitas: `Berhasil bypass laporan ke pencabutan sanksi`  })  return response.success(res, {    message: 'berhasil bypass ke pencabutan sanksi'  })})
 |