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?.length) { return response.error(res, { message: 'dokumen harus ada' }) } const dokumen = await addManyDokumen(files) const dokumen_id = dokumen.map((e) => e._id) const data = await sanksiModel.findOneAndUpdate( { laporan: sanksi.laporan._id, _id: sanksi._id, $or: [{ perbaikan: { $exists: true, $ne: [] }, 'pengajuan.cabut_sanksi': { $exists: false, $eq: null } }, { bypass_cabut_sanksi: { $eq: true } }] }, { last_step: 'Permohonan Pencabutan Sanksi', 'pengajuan.cabut_sanksi': { dokumen: dokumen_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 } ] }, { aktif: status !== 'Diterima', last_step: 'Jawaban Atas Permohonan Pencabutan Sanksi', 'jawaban.cabut_sanksi': { 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' }) })