const sanksiModel = require('../model/sanksi.model') const handleError = require('../utils/handleError') const response = require('../utils/responseHandler') const { addManyDokumen } = require('../utils/dokumenFunction') const { validate } = require('../utils/validation') const pemantauanModel = require('../model/pemantauan.model') const { hariKerja } = require('../utils/hariKerja') const { cekSatuDataSanksi, cekSatuDataLaporan, cekBanyakDataPelanggaran, cekBanyakDataSanksi, } = require('../utils/cekData') const laporanModel = require('../model/laporan.model') exports.create = handleError(async (req, res) => { const { no_sanksi, keterangan, from_date, to_date } = req.body let { pelanggaran_id } = req.body const { laporan_id } = req.params const files = req.files const user = req.user const isValid = validate(res, req.body, { no_sanksi: 'string', keterangan: 'string', pelanggaran_id: 'string', from_date: 'string', to_date: 'string', }) if (!isValid) return const laporan = await cekSatuDataLaporan(res, user, laporan_id, { evaluasi: { $exists: true, $ne: [] }, }) if (!laporan) return pelanggaran_id = await cekBanyakDataPelanggaran(res, pelanggaran_id) if (!pelanggaran_id) return const sanksi = await sanksiModel.findOne({ laporan: laporan_id }) if (sanksi) { return response.error(res, { message: 'Sanksi sudah ada', }) } 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.create({ no_sanksi, laporan: laporan._id, user: user._id, pelanggaran: pelanggaran_id, keterangan, dokumen: dokumen_id, masa_berlaku: { from_date, to_date, }, batas_waktu: { keberatan: hariKerja(10), }, }) await laporanModel.findByIdAndUpdate(laporan._id, { sanksi: data._id, // aktif: false, }) await pemantauanModel.create({ laporan: laporan._id, sanksi: data._id, action: 'CREATE SANKSI', pt_id: laporan.pt.id, user: user._id, keterangan: 'Melakukan penetapan Sanksi', dokumen: dokumen_id, }) return response.success(res, { message: 'Berhasil membuat Sanksi', data, }) }) exports.update = handleError(async (req, res) => { const { no_sanksi, keterangan, from_date, to_date } = req.body let sanksiBody = req.body.sanksi const { sanksi_id } = req.params const files = req.files const user = req.user const isValid = validate(res, req.body, { no_sanksi: 'string', keterangan: 'string', sanksi: 'string', from_date: 'string', to_date: 'string', }) if (!isValid) return const sanksi = await cekSatuDataSanksi(res, user, sanksi_id, { all: true }) if (!sanksi) return // pelanggaran_id = await cekBanyakDataPelanggaran(res, pelanggaran_id) // if (!pelanggaran_id) return sanksiBody = JSON.parse(sanksiBody) // const sanksi = await sanksiModel.findOne({ laporan: laporan_id }) // if (sanksi) { // return response.error(res, { // message: 'Sanksi sudah ada', // }) // } 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.updateOne( { _id: sanksi._id }, { no_sanksi, // pelanggaran: pelanggaran_id, sanksi: sanksiBody, keterangan, dokumen: dokumen_id, masa_berlaku: { from_date, to_date, }, $push: { riwayat_sanksi: sanksi, }, } ) // await laporanModel.findByIdAndUpdate(laporan._id, { // sanksi: data._id, // // aktif: false, // }) await pemantauanModel.create({ laporan: sanksi.laporan._id, sanksi: sanksi._id, action: 'UPDATE SANKSI', pt_id: sanksi.laporan.pt.id, user: user._id, keterangan: 'Melakukan Perubahan Sanksi', dokumen: dokumen_id, }) return response.success(res, { message: 'Berhasil merubah Sanksi', data, }) }) exports.getAll = handleError(async (req, res) => { const user = req.user const { keberatan, jawaban, banding, cabutSanksi, perbaikan, aktif, delegasi, naikSanksi, turunSanksi, } = req.query const where = {} const q = {} if (aktif && aktif === 'false') { where.aktif = false } if (keberatan === 'true') { where['pengajuan.keberatan'] = { $exists: true, $ne: null } if (jawaban === 'true') { where['jawaban.keberatan'] = { $exists: true, $ne: null } } } if (banding === 'true') { where.banding = true where['pengajuan.keberatan'] = { $exists: true, $ne: null } where['jawaban.keberatan'] = { $exists: true, $ne: null } where['pengajuan.banding'] = { $exists: true, $ne: null } if (jawaban === 'true') { where['jawaban.banding'] = { $exists: true, $ne: null } } } if (cabutSanksi === 'true') { where.perbaikan = { $exists: true, $ne: [] } if (jawaban === 'true') { where['pengajuan.cabut_sanksi'] = { $exists: true, $ne: null } // where['jawaban.cabut_sanksi'] = { $exists: true, $ne: null } } } if (perbaikan === 'true') { where['jawaban.banding'] = { $exists: true, $ne: null } } if (delegasi === 'true') { where.delegasi = true } if (naikSanksi === 'true') { q.level_sanksi = { $in: [1, 2] } } if (turunSanksi === 'true') { q.level_sanksi = { $in: [2, 3] } } const data = await cekBanyakDataSanksi(user, where, q) return response.success(res, { message: 'Berhasil ambil data Sanksi', data, }) }) exports.getOne = handleError(async (req, res) => { const user = req.user const { sanksi_id } = req.params const w = {} const { banding, aktif, delegasi, all } = req.query if (banding === 'true') { w.banding = true w['pengajuan.keberatan'] = { $exists: true, $ne: null } w['jawaban.keberatan'] = { $exists: true, $ne: null } w['pengajuan.banding'] = { $exists: true, $ne: null } } if (delegasi === 'true') { w.delegasi = true } if (all === 'true') { w.all = true } if (aktif && aktif === 'false') { w.aktif = false } const sanksi = await cekSatuDataSanksi(res, user, sanksi_id, w) if (!sanksi) return return response.success(res, { message: 'Berhasil ambil satu data Sanksi', data: sanksi, }) }) exports.editTmt = handleError(async (req, res) => { const user = req.user const { id } = req.params const { from_date, to_date } = req.body const files = req.files const sanksi = await cekSatuDataSanksi(res, user, id) if (!sanksi) return const isValid = validate(res, req.body, { from_date: { type: 'date', convert: true }, to_date: { type: 'date', convert: true }, }) if (!isValid) return 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.findByIdAndUpdate(sanksi._id, { masa_berlaku: { from_date, to_date, }, 'pengajuan.update_tmt': { dokumen: dokumen_id }, }) await pemantauanModel.create({ laporan: sanksi.laporan._id, user: user._id, action: 'EDIT TMT', pt_id: sanksi.laporan.pt.id, keterangan: 'Mengubah masa berlaku sanksi', for_public: true, }) return response.success(res, { message: 'Berhasil update tmt', data, }) })