const laporanModel = require('../model/laporan.model') const sanksiModel = require('../model/sanksi.model') const pelanggaranModel = require('../model/pelanggaran.model') const handleError = require('../utils/handleError') const response = require('../utils/responseHandler') const { addManyDokumen } = require('../utils/dokumenFunction') const { validate } = require('../utils/validation') exports.create = handleError(async (req, res) => { const { no_sanksi, keterangan } = 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', }) if (!isValid) return const laporan = await laporanModel.findOne({ _id: laporan_id, evaluasi: { $exists: true, $ne: [] }, }) if ( laporan && !( (user.role.id === 2021 && laporan.role_data === 'lldikti' && laporan.pt.pembina.id === user.lembaga.id && laporan.aktif === true) || (user.role.id === 2020 && laporan.role_data === 'dikti' && laporan.aktif === true) ) ) { return response.error(res, { message: 'laporan_id tidak ada', code: 404, }) } pelanggaran_id = pelanggaran_id.split(',') const pelanggaran = await pelanggaranModel.find({ _id: { $in: pelanggaran_id, }, }) if (!pelanggaran.length) return response.error(res, { message: 'pelanggaran_id tidak ada' }) if (!files.length) { return response.error(res, { message: 'dokumen harus ada', }) } const sanksi = await sanksiModel.findOne({ laporan: laporan_id }) if (sanksi) { return response.error(res, { message: 'Sanksi sudah ada', }) } const dokumen = await addManyDokumen(files) const dokumen_id = dokumen.map((e) => e._id) let data = await sanksiModel.create({ no_sanksi, laporan: laporan._id, pt: laporan.pt, pelanggaran: pelanggaran_id, keterangan, dokumen: dokumen_id, }) return response.success(res, { message: 'Berhasil membuat Sanksi', data, }) }) exports.getAll = handleError(async (req, res) => { const user = req.user let data = await sanksiModel .find() .populate({ path: 'laporan', select: 'pt role_data aktif', }) .populate('dokumen') .populate('pelanggaran') if (user.role.id === 2021) { data = data.filter( (e) => e.laporan.role_data === 'lldikti' && e.laporan.pt.pembina.id === user.lembaga.id && e.laporan.aktif === true ) } else if (user.role.id === 2020) { data = data.filter( (e) => e.laporan.role_data === 'dikti' && e.laporan.aktif === true ) } else { data = data.filter((e) => e.laporan.pt.id === user.lembaga.id) } 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 let data = await sanksiModel .findOne({ _id: sanksi_id }) .populate({ path: 'laporan', select: 'pt role_data aktif', }) .populate('dokumen') .populate('pelanggaran') if ( data && !( (user.role.id === 2021 && data.laporan.role_data === 'lldikti' && data.laporan.pt.pembina.id === user.lembaga.id && data.laporan.aktif === true) || (user.role.id === 2020 && data.laporan.role_data === 'dikti' && data.laporan.aktif === true) || (user.role.id === 2022 && data.laporan.pt.id === user.lembaga.id) ) ) { return response.error(res, { message: 'laporan_id tidak ada', code: 404, }) } return response.success(res, { message: 'Berhasil ambil satu data Sanksi', data, }) })