|  | @@ -1,10 +1,17 @@
 | 
	
		
			
				|  |  | -const laporanModel = require('../model/laporan.model')
 | 
	
		
			
				|  |  |  const sanksiModel = require('../model/sanksi.model')
 | 
	
		
			
				|  |  |  const pelanggaranModel = require('../model/pelanggaran.model')
 | 
	
		
			
				|  |  | +const pengajuanModel = require('../model/pengajuan.model')
 | 
	
		
			
				|  |  |  const handleError = require('../utils/handleError')
 | 
	
		
			
				|  |  |  const response = require('../utils/responseHandler')
 | 
	
		
			
				|  |  |  const { addManyDokumen } = require('../utils/dokumenFunction')
 | 
	
		
			
				|  |  |  const { validate } = require('../utils/validation')
 | 
	
		
			
				|  |  | +const { hariKerja } = require('../utils/hariKerja')
 | 
	
		
			
				|  |  | +const {
 | 
	
		
			
				|  |  | +  cekSatuDataSanksi,
 | 
	
		
			
				|  |  | +  cekSatuDataLaporan,
 | 
	
		
			
				|  |  | +  cekBanyakDataPelanggaran,
 | 
	
		
			
				|  |  | +  cekBanyakDataSanksi,
 | 
	
		
			
				|  |  | +} = require('../utils/cekData')
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  exports.create = handleError(async (req, res) => {
 | 
	
		
			
				|  |  |    const { no_sanksi, keterangan } = req.body
 | 
	
	
		
			
				|  | @@ -20,53 +27,30 @@ exports.create = handleError(async (req, res) => {
 | 
	
		
			
				|  |  |    })
 | 
	
		
			
				|  |  |    if (!isValid) return
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  const laporan = await laporanModel.findOne({
 | 
	
		
			
				|  |  | -    _id: laporan_id,
 | 
	
		
			
				|  |  | +  const laporan = await cekSatuDataLaporan(res, user, laporan_id, {
 | 
	
		
			
				|  |  |      evaluasi: { $exists: true, $ne: [] },
 | 
	
		
			
				|  |  |    })
 | 
	
		
			
				|  |  | +  if (!laporan) return
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  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)
 | 
	
		
			
				|  |  | -    )
 | 
	
		
			
				|  |  | -  ) {
 | 
	
		
			
				|  |  | +  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: 'laporan_id tidak ada',
 | 
	
		
			
				|  |  | -      code: 404,
 | 
	
		
			
				|  |  | +      message: 'Sanksi sudah ada',
 | 
	
		
			
				|  |  |      })
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  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({
 | 
	
		
			
				|  |  | +  const data = await sanksiModel.create({
 | 
	
		
			
				|  |  |      no_sanksi,
 | 
	
		
			
				|  |  |      laporan: laporan._id,
 | 
	
		
			
				|  |  |      pt: laporan.pt,
 | 
	
	
		
			
				|  | @@ -74,6 +58,13 @@ exports.create = handleError(async (req, res) => {
 | 
	
		
			
				|  |  |      keterangan,
 | 
	
		
			
				|  |  |      dokumen: dokumen_id,
 | 
	
		
			
				|  |  |    })
 | 
	
		
			
				|  |  | +  await pengajuanModel.create({
 | 
	
		
			
				|  |  | +    laporan: laporan._id,
 | 
	
		
			
				|  |  | +    sanksi: data._id,
 | 
	
		
			
				|  |  | +    batas_waktu: {
 | 
	
		
			
				|  |  | +      keberatan: hariKerja(10),
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +  })
 | 
	
		
			
				|  |  |    return response.success(res, {
 | 
	
		
			
				|  |  |      message: 'Berhasil membuat Sanksi',
 | 
	
		
			
				|  |  |      data,
 | 
	
	
		
			
				|  | @@ -82,28 +73,7 @@ exports.create = handleError(async (req, res) => {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  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)
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | +  let data = await cekBanyakDataSanksi(user)
 | 
	
		
			
				|  |  |    return response.success(res, {
 | 
	
		
			
				|  |  |      message: 'Berhasil ambil data Sanksi',
 | 
	
		
			
				|  |  |      data,
 | 
	
	
		
			
				|  | @@ -113,34 +83,12 @@ exports.getAll = handleError(async (req, res) => {
 | 
	
		
			
				|  |  |  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,
 | 
	
		
			
				|  |  | -    })
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const sanksi = await cekSatuDataSanksi(res, user, sanksi_id)
 | 
	
		
			
				|  |  | +  if (!sanksi) return
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    return response.success(res, {
 | 
	
		
			
				|  |  |      message: 'Berhasil ambil satu data Sanksi',
 | 
	
		
			
				|  |  | -    data,
 | 
	
		
			
				|  |  | +    data: sanksi,
 | 
	
		
			
				|  |  |    })
 | 
	
		
			
				|  |  |  })
 |