| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 | const handleError = require('../../utils/handleError')const sanksiModel = require('../../model/sanksi.model')const { addManyDokumen } = require('../../utils/dokumenFunction')const { validate } = require('../../utils/validation')const { cekSatuDataSanksi, cekSatuDataLaporan } = require('../../utils/cekData')const response = require('../../utils/responseHandler')const { hariKerja } = require('../../utils/hariKerja')const pemantauanModel = require('../../model/pemantauan.model')exports.create = handleError(async (req, res) => {  const user = req.user  const { laporan_id, sanksi_id } = req.query  if (!laporan_id || !sanksi_id) {    return response.error(res, {      message: 'query laporan_id atau sanksi_id harus ada',    })  }  const laporan = await cekSatuDataLaporan(res, user, laporan_id)  const sanksi = await cekSatuDataSanksi(res, user, sanksi_id)  if (!laporan || !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: laporan._id,      _id: sanksi._id,      ['pengajuan.keberatan']: { $exists: false, $eq: null },    },    {      ['pengajuan.keberatan']: {        dokumen: dokumen_id,      },      ['batas_waktu.jawaban_keberatan']: hariKerja(10),    }  )  if (!data) {    return response.error(res, {      message: 'Pengajuan Keberatan sudah ada',    })  }  await pemantauanModel.findOneAndUpdate(    {      laporan: laporan._id,      sanksi: sanksi._id,    },    {      $push: {        riwayat: {          user: user._id,          keterangan: 'Mengajukan Keberatan',          dokumen: dokumen_id,        },      },    }  )  return response.success(res, {    data,    message: 'Berhasil menambah keberatan',  })})exports.createJawaban = handleError(async (req, res) => {  const user = req.user  const { laporan_id, sanksi_id } = req.query  if (!laporan_id || !sanksi_id) {    return response.error(res, {      message: 'query laporan_id atau sanksi_id harus ada',    })  }  const laporan = await cekSatuDataLaporan(res, user, laporan_id)  const sanksi = await cekSatuDataSanksi(res, user, sanksi_id)  if (!laporan || !sanksi) return  const isValid = validate(res, req.body, {    status: 'string',    keterangan: 'string',  })  if (!isValid) 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 { status, keterangan } = req.body  const data = await sanksiModel.findOneAndUpdate(    {      laporan: laporan._id,      _id: sanksi._id,      ['pengajuan.keberatan']: { $exists: true, $ne: null },    },    {      ['jawaban.keberatan']: {        status,        keterangan,        dokumen: dokumen_id,      },      ['batas_waktu.banding']: hariKerja(21),    }  )  if (!data) {    return response.error(res, {      message: 'keberatan tidak ada',    })  }  await pemantauanModel.findOneAndUpdate(    {      laporan: laporan._id,      sanksi: sanksi._id,    },    {      $push: {        riwayat: {          user: user._id,          keterangan: 'Menjawab Pengajuan Keberatan',          dokumen: dokumen_id,        },      },    }  )  return response.success(res, {    data,  })})
 |