|  | @@ -0,0 +1,102 @@
 | 
	
		
			
				|  |  | +const handleError = require('../../utils/v1/handleError')
 | 
	
		
			
				|  |  | +const response = require('../../utils/responseHandler')
 | 
	
		
			
				|  |  | +const laporanModel = require('../../model/laporan.model')
 | 
	
		
			
				|  |  | +const { validate } = require('../../utils/v1/validation')
 | 
	
		
			
				|  |  | +const signatureModel = require('../../model/signature.model')
 | 
	
		
			
				|  |  | +const { addDokumen } = require('../../utils/dokumenFunction')
 | 
	
		
			
				|  |  | +const { cekSatuDataLaporan } = require('../../utils/v1/cekData')
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +exports.getPeserta = handleError(async (req, res) => {
 | 
	
		
			
				|  |  | +  const { laporan_id } = req.params
 | 
	
		
			
				|  |  | +  const data = await signatureModel.findOne({ laporan_id }).populate('daftar_kehadiran_peserta.ttd')
 | 
	
		
			
				|  |  | +  return response.success(res, {
 | 
	
		
			
				|  |  | +    message: 'Berhasil mendapatkan daftar kehadiran peserta',
 | 
	
		
			
				|  |  | +    data
 | 
	
		
			
				|  |  | +  })
 | 
	
		
			
				|  |  | +})
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +exports.addPeserta = handleError(async (req, res) => {
 | 
	
		
			
				|  |  | +  const isValid = validate(res, req.body, {
 | 
	
		
			
				|  |  | +    laporan_id: 'string',
 | 
	
		
			
				|  |  | +    nama: 'string'
 | 
	
		
			
				|  |  | +  })
 | 
	
		
			
				|  |  | +  if (!isValid) return
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const { laporan_id, nama } = req.body
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const laporan = await laporanModel.findOne({
 | 
	
		
			
				|  |  | +    _id: laporan_id
 | 
	
		
			
				|  |  | +  })
 | 
	
		
			
				|  |  | +  if (!laporan) return response.error(res, {
 | 
	
		
			
				|  |  | +    code: 404,
 | 
	
		
			
				|  |  | +    message: 'laporan_id tidak ada'
 | 
	
		
			
				|  |  | +  })
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const file = req.file
 | 
	
		
			
				|  |  | +  if (!file) {
 | 
	
		
			
				|  |  | +    return response.error(res, {
 | 
	
		
			
				|  |  | +      message: 'ttd harus ada'
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  const dokumen = await addDokumen(file)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const signature = await signatureModel.findOne({ laporan_id: laporan._id })
 | 
	
		
			
				|  |  | +  if (!signature) {
 | 
	
		
			
				|  |  | +    await signatureModel.create(
 | 
	
		
			
				|  |  | +      {
 | 
	
		
			
				|  |  | +        laporan_id: laporan._id,
 | 
	
		
			
				|  |  | +        daftar_kehadiran_peserta: [{
 | 
	
		
			
				|  |  | +          nama,
 | 
	
		
			
				|  |  | +          ttd: dokumen.id
 | 
	
		
			
				|  |  | +        }]
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    )
 | 
	
		
			
				|  |  | +  } else {
 | 
	
		
			
				|  |  | +    await signatureModel.findOneAndUpdate(
 | 
	
		
			
				|  |  | +      { laporan_id: laporan._id },
 | 
	
		
			
				|  |  | +      {
 | 
	
		
			
				|  |  | +        $push: {
 | 
	
		
			
				|  |  | +          daftar_kehadiran_peserta: {
 | 
	
		
			
				|  |  | +            nama,
 | 
	
		
			
				|  |  | +            ttd: dokumen.id
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    )
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  return response.success(res, {
 | 
	
		
			
				|  |  | +    message: 'Berhasil tambah peserta pleno'
 | 
	
		
			
				|  |  | +  })
 | 
	
		
			
				|  |  | +})
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +exports.removePeserta = handleError(async (req, res) => {
 | 
	
		
			
				|  |  | +  const isValid = validate(res, req.body, {
 | 
	
		
			
				|  |  | +    peserta_id: 'string',
 | 
	
		
			
				|  |  | +    laporan_id: 'string'
 | 
	
		
			
				|  |  | +  })
 | 
	
		
			
				|  |  | +  if (!isValid) return
 | 
	
		
			
				|  |  | +  const user = req.user
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const { laporan_id, peserta_id } = req.body
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const laporan = await cekSatuDataLaporan(res, user, laporan_id, {
 | 
	
		
			
				|  |  | +    evaluasi: { $exists: true, $ne: [] }
 | 
	
		
			
				|  |  | +  })
 | 
	
		
			
				|  |  | +  if (!laporan) return
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  await signatureModel.findOneAndUpdate(
 | 
	
		
			
				|  |  | +    { laporan_id: laporan._id },
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +      $pull: {
 | 
	
		
			
				|  |  | +        daftar_kehadiran_peserta: {
 | 
	
		
			
				|  |  | +          _id: peserta_id
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  )
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  return response.success(res, {
 | 
	
		
			
				|  |  | +    message: 'Berhasil menghapus peserta pleno'
 | 
	
		
			
				|  |  | +  })
 | 
	
		
			
				|  |  | +})
 |