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 { hariKerja } = require('../../utils/hariKerja') const pemantauanModel = require('../../model/pemantauan.model') const { notifWA } = require('../../utils/notifFunction') 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, ['pengajuan.banding']: { $exists: false, $eq: null }, ['jawaban.keberatan']: { $exists: true, $ne: null }, }, { ['pengajuan.banding']: { dokumen: dokumen_id, }, ['batas_waktu.jawaban_banding']: hariKerja(10), } ) if (!data) { return response.error(res, { message: 'pengajuan banding sudah ada atau jawaban keberatan belum ada', }) } await pemantauanModel.create({ laporan: sanksi.laporan._id, sanksi: sanksi._id, pt_id: sanksi.laporan.pt.id, user: user._id, keterangan: 'Mengajukan Banding', dokumen: dokumen_id, }) await notifWA('2bbc0080-1187-4213-8017-b6d1d6ec3cbb', [ { 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_sanksi', value_text: sanksi.no_sanksi }, ]) return response.success(res, { data, message: 'Berhasil menambah pengajuan banding', }) }) exports.createJawaban = handleError(async (req, res) => { const user = req.user const { sanksi_id } = req.params const sanksi = await cekSatuDataSanksi(res, user, sanksi_id, { banding: true, }) if (!sanksi) return const isValid = validate(res, req.body, { status: 'string', }) if (!isValid) return const files = req.files let dokumen_id = [] if (files?.length) { const dokumen = await addManyDokumen(files) dokumen_id = dokumen.map((e) => e._id) } const { status } = req.body const data = await sanksiModel.findOneAndUpdate( { laporan: sanksi.laporan._id, _id: sanksi._id, ['pengajuan.banding']: { $exists: true, $ne: null }, }, { ['jawaban.banding']: { status, dokumen: dokumen_id, }, } ) if (!data) { return response.error(res, { message: 'banding tidak ada', }) } await pemantauanModel.create({ laporan: sanksi.laporan._id, sanksi: sanksi._id, pt_id: sanksi.laporan.pt.id, user: user._id, keterangan: 'Menjawab Pengajuan Banding', dokumen: dokumen_id, }) return response.success(res, { data, }) })