package com.jasamedika.medifirst2000.dao.custom.impl;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import java.util.Map;

import javax.persistence.Query;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Repository;

import com.jasamedika.medifirst2000.constants.Master;
import com.jasamedika.medifirst2000.dao.custom.PlanningPegawaiStatusDaoCustom;
import com.jasamedika.medifirst2000.dao.custom.base.impl.CoreDaoImpl;
import com.jasamedika.medifirst2000.entities.PlanningPegawaiStatus;
import com.jasamedika.medifirst2000.util.CommonUtil;

@Repository
public class PlanningPegawaiStatusDaoCustomImpl extends CoreDaoImpl<PlanningPegawaiStatus>
		implements PlanningPegawaiStatusDaoCustom {

	public PlanningPegawaiStatusDaoCustomImpl() {
		super(PlanningPegawaiStatus.class);
	}

	@Override
	public List<Map<String, Object>> getApprovalStatus(Integer idPegawai) {
		List<Map<String, Object>> result = new ArrayList<>();
		StringBuffer buffer = new StringBuffer();

		Integer currentYear = Calendar.getInstance().get(Calendar.YEAR);

		buffer.append("select NEW Map (a.noRec as noRec, " + "a.statusEnabled as statusEnabled, "
				+ "a.noPlanning as noPlanning, " + "a.deskripsiStatusPegawaiPlan as deskripsiStatusPegawaiPlan, "
				+ "a.keteranganLainyaPlan as keteranganLainyaPlan, "
				+ "a.deskripsiStatusPegawaiExec as deskripsiStatusPegawaiExec, "
				+ "a.keteranganLainyaExec as keteranganLainyaExec, " + "a.tglPengajuan as tglPengajuan, "
				+ "a.tglKeputusan as tglKeputusan, " + "a.approvalStatus as approvalStatus, "
				+ "a.alamatCuti as alamatCuti, " + "a.nomorTelepon as nomorTelepon, "
				+ "a.isCutiLuarNegeri as isCutiLuarNegeri, " + "a.isCutiLuarKota as isCutiLuarKota, "
				+ "a.noSuratTugas as noSuratTugas, " + "a.noNotaDinas as noNotaDinas, "
				+ "a.tglNotaDinas as tglNotaDinas, " + "a.alamatTugas as alamatTugas, "
				+ "a.jabatanIdPemberiNotaDinas as jabatanIdPemberiNotaDinas, " + "listTgl.noRec as norecTgl, "
				+ "listTgl.tgl as tgl, " + "listTgl.approvalStatus as approvalStatusTgl, "
				+ "fp.namaJabatan as jabatanPemberiNotaDinas, " + "subUnitKerja.id as idUnitKerja, "
				+ "subUnitKerja.name as unitKerja, " + "b.id as pegwaiId, " + "b.namaLengkap as namaPegawai, "
				+ "b.nipPns as nip, " + "b.eselonId as eselonId, " + "c.id as statusPegawaiId, "
				+ "c.statusPegawai as statusPegawai, " + "f.namaJabatan as namaJabatan) "
				+ "from PlanningPegawaiStatus a, " + "MapPegawaiJabatanToUnitKerja mp " + "left join a.pegawai b "
				+ "left join a.statusPegawaiPlan c " + "left join a.noSk e " + "left join a.listTanggal listTgl "
				+ "left join a.jabatanPemberiNotaDinas fp " + "left join mp.jabatan f "
				+ "left join mp.subUnitKerjaPegawai subUnitKerja " + "where mp.pegawaiId = b.id "
				+ "and a.pegawaiId = mp.pegawaiId " + "and a.statusEnabled is true "
				+ "and listTgl.statusEnabled is true " + "and mp.statusEnabled is true " + "and mp.isPrimary is true "
				+ "and a.approvalStatus <> :approvalStatusId " + "and e.noRec is null "
				+ "and to_char(listTgl.tgl, 'yyyy') = :currentYear " + "and c.id in (:ketidakhadiranId) ");

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			buffer.append("and b.id = :idPegawai order by a.tglPengajuan desc, listTgl.tgl asc");
			Query query = em.createQuery(buffer.toString());
			query.setParameter("idPegawai", idPegawai);
			query.setParameter("approvalStatusId", Master.PengajuanCuti.DITANGGUHKAN);
			query.setParameter("currentYear", currentYear.toString());
			query.setParameter("ketidakhadiranId", Arrays.asList(Master.StatusPegawai.KETIDAKHADIRAN));

			result = query.getResultList();
		} else if (CommonUtil.isNullOrEmpty(idPegawai)) {
			buffer.append("order by a.tglPengajuan desc, listTgl.tgl asc");
			Query query = em.createQuery(buffer.toString());
			query.setParameter("approvalStatusId", Master.PengajuanCuti.DITANGGUHKAN);
			query.setParameter("currentYear", currentYear.toString());
			query.setParameter("ketidakhadiranId", Arrays.asList(Master.StatusPegawai.KETIDAKHADIRAN));

			result = query.getResultList();
		}
		return result;
	}

	@Override
	public List<Map<String, Object>> getApprovalStatusCutiAlasanPentingDanSakit() {
		List<Map<String, Object>> result = new ArrayList<>();
		StringBuffer buffer = new StringBuffer();

		Integer currentYear = Calendar.getInstance().get(Calendar.YEAR);

		buffer.append("select NEW Map (a.noRec as noRec, " + "a.noPlanning as noPlanning, "
				+ "a.deskripsiStatusPegawaiPlan as deskripsiStatusPegawaiPlan, "
				+ "a.keteranganLainyaPlan as keteranganLainyaPlan, "
				+ "a.deskripsiStatusPegawaiExec as deskripsiStatusPegawaiExec, "
				+ "a.keteranganLainyaExec as keteranganLainyaExec, " + "a.tglPengajuan as tglPengajuan, "
				+ "a.tglKeputusan as tglKeputusan, " + "a.approvalStatus as approvalStatus, "
				+ "a.alamatCuti as alamatCuti, " + "a.nomorTelepon as nomorTelepon, "
				+ "a.noSuratTugas as noSuratTugas, " + "a.noNotaDinas as noNotaDinas, "
				+ "a.tglNotaDinas as tglNotaDinas, " + "a.alamatTugas as alamatTugas, "
				+ "a.jabatanIdPemberiNotaDinas as jabatanIdPemberiNotaDinas, " + "listTgl.noRec as norecTgl, "
				+ "listTgl.tgl as tgl, " + "listTgl.approvalStatus as approvalStatusTgl, "
				+ "fp.namaJabatan as jabatanPemberiNotaDinas, " + "subUnitKerja.id as idUnitKerja, "
				+ "subUnitKerja.name as unitKerja, " + "b.id as pegwaiId, " + "b.namaLengkap as namaPegawai, "
				+ "b.nipPns as nip, " + "c.id as statusPegawaiId, " + "c.statusPegawai as statusPegawai, "
				+ "f.namaJabatan as namaJabatan) " + "from PlanningPegawaiStatus a, "
				+ "MapPegawaiJabatanToUnitKerja mp " + "left join a.pegawai b " + "left join a.statusPegawaiPlan c "
				+ "left join a.noSk e " + "left join a.jabatanPemberiNotaDinas fp " + "left join a.listTanggal listTgl "
				+ "left join mp.jabatan f " + "left join mp.subUnitKerjaPegawai subUnitKerja "
				+ "where mp.pegawaiId = b.id " + "and a.pegawaiId = mp.pegawaiId " + "and a.statusEnabled = true "
				+ "and listTgl.statusEnabled = true " + "and mp.statusEnabled is true " + "and mp.isPrimary is true "
				+ "and a.approvalStatus = :approvalStatusId " + "and e.noRec is null "
				+ "and to_char(listTgl.tgl, 'yyyy') = :currentYear " + "and c.id in (:ketidakhadiranId) "
				+ "order by a.tglPengajuan desc, listTgl.tgl asc");

		Query query = em.createQuery(buffer.toString());
		query.setParameter("approvalStatusId", Master.PengajuanCuti.BELUM_DISETUJUI);
		query.setParameter("currentYear", currentYear.toString());
		query.setParameter("ketidakhadiranId", Arrays.asList(Master.StatusPegawai.SAKIT_ALASAN_PENTING));

		result = query.getResultList();

		return result;
	}

	@Override
	public List<Map<String, Object>> getApprovalStatusByStatusPegawaiPlan(Integer idPegawai,
			Integer statusPegawaiPlanId) {
		List<Map<String, Object>> result = new ArrayList<>();
		StringBuffer buffer = new StringBuffer();
		buffer.append("select NEW Map (");
		buffer.append("a.noRec as noRec,");
		buffer.append("a.noPlanning as noPlanning,");
		buffer.append("a.deskripsiStatusPegawaiPlan as deskripsiStatusPegawaiPlan,");
		buffer.append("a.keteranganLainyaPlan as keteranganLainyaPlan,");
		buffer.append("a.deskripsiStatusPegawaiExec as deskripsiStatusPegawaiExec,");
		buffer.append("a.keteranganLainyaExec as keteranganLainyaExec,");
		buffer.append("a.tglPengajuan as tglPengajuan,");
		buffer.append("a.tglKeputusan as tglKeputusan,");
		buffer.append("a.approvalStatus as approvalStatus,");
		buffer.append("subUnitKerja.id as idUnitKerja,");
		buffer.append("subUnitKerja.name as unitKerja,");
		buffer.append("b.id as pegwaiId,");
		buffer.append("b.namaLengkap as namaPegawai,");
		buffer.append("b.nipPns as nip,");
		buffer.append("c.id as statusPegawaiId,");
		buffer.append("c.statusPegawai as statusPegawai,");
		buffer.append("f.namaJabatan as namaJabatan) ");
		buffer.append("from PlanningPegawaiStatus a, MapPegawaiJabatanToUnitKerja mp ");
		buffer.append("left join a.pegawai b ");
		buffer.append("left join a.statusPegawaiPlan c ");
		buffer.append("left join a.noSk e ");
		buffer.append("left join mp.jabatan f ");
		buffer.append("left join mp.subUnitKerjaPegawai subUnitKerja ");
		buffer.append("where mp.pegawaiId = b.id and ");
		buffer.append("a.pegawaiId = mp.pegawaiId and ");
		buffer.append("mp.isPrimary is true and ");
		buffer.append("mp.statusEnabled is true and ");
		buffer.append("e.noRec is null and ");
		buffer.append("(c.id=1 or ");
		buffer.append("c.id=24 or ");
		buffer.append("c.id=25 or ");
		buffer.append("c.id=26 or ");
		buffer.append("c.id=27 or ");
		buffer.append("c.id=28 or ");
		buffer.append("c.id=29  ");
		buffer.append(" and a.statusEnabled=true ");

		if (CommonUtil.isNotNullOrEmpty(idPegawai) && CommonUtil.isNotNullOrEmpty(statusPegawaiPlanId)) {
			buffer.append(") and b.id = :idPegawai");
			buffer.append(" and c.id = :statusPegawaiPlanId");
			Query query = em.createQuery(buffer.toString());
			query.setParameter("idPegawai", idPegawai);
			query.setParameter("statusPegawaiPlanId", statusPegawaiPlanId);

			result = query.getResultList();
		} else if (CommonUtil.isNotNullOrEmpty(idPegawai) && CommonUtil.isNullOrEmpty(statusPegawaiPlanId)) {
			buffer.append(") and b.id = :idPegawai");
			Query query = em.createQuery(buffer.toString());
			query.setParameter("idPegawai", idPegawai);

			result = query.getResultList();
		} else if (CommonUtil.isNullOrEmpty(idPegawai) && CommonUtil.isNotNullOrEmpty(statusPegawaiPlanId)) {
			buffer.append(") and c.id = :statusPegawaiPlanId");
			Query query = em.createQuery(buffer.toString());
			query.setParameter("statusPegawaiPlanId", statusPegawaiPlanId);

			result = query.getResultList();
		} else if (CommonUtil.isNullOrEmpty(idPegawai) && CommonUtil.isNullOrEmpty(statusPegawaiPlanId)) {
			buffer.append(")");
			Query query = em.createQuery(buffer.toString());
			result = query.getResultList();
		}
		return result;
	}

	@Override
	public List<Map<String, Object>> getApprovalStatusByNorecPlanning(Integer idPegawai, String noRec) {
		List<Map<String, Object>> result = new ArrayList<>();
		StringBuffer buffer = new StringBuffer();
		buffer.append("select NEW Map (");
		buffer.append("a.noRec as noRec,");
		buffer.append("a.statusEnabled as statusEnabled,");
		buffer.append("a.noPlanning as noPlanning,");
		buffer.append("a.deskripsiStatusPegawaiPlan as deskripsiStatusPegawaiPlan,");
		buffer.append("a.keteranganLainyaPlan as keteranganLainyaPlan,");
		buffer.append("a.deskripsiStatusPegawaiExec as deskripsiStatusPegawaiExec,");
		buffer.append("a.keteranganLainyaExec as keteranganLainyaExec,");
		buffer.append("a.tglPengajuan as tglPengajuan,");
		buffer.append("a.tglKeputusan as tglKeputusan,");
		buffer.append("a.approvalStatus as approvalStatus,");
		buffer.append("a.alamatCuti as alamatCuti,");
		buffer.append("a.nomorTelepon as nomorTelepon,");
		buffer.append("a.isCutiLuarNegeri as isCutiLuarNegeri,");
		buffer.append("a.isCutiLuarKota as isCutiLuarKota,");
		buffer.append("a.noSuratTugas as noSuratTugas,");
		buffer.append("a.noNotaDinas as noNotaDinas,");
		buffer.append("a.tglNotaDinas as tglNotaDinas,");
		buffer.append("a.alamatTugas as alamatTugas,");
		buffer.append("a.jabatanIdPemberiNotaDinas as jabatanIdPemberiNotaDinas,");
		buffer.append("fp.namaJabatan as jabatanPemberiNotaDinas, ");
		buffer.append("subUnitKerja.id as idUnitKerja,");
		buffer.append("subUnitKerja.name as unitKerja,");
		buffer.append("b.id as pegwaiId,");
		buffer.append("b.namaLengkap as namaPegawai,");
		buffer.append("b.nipPns as nip,");
		buffer.append("b.eselonId as eselonId,");
		buffer.append("c.id as statusPegawaiId,");
		buffer.append("c.statusPegawai as statusPegawai,");
		buffer.append("f.namaJabatan as namaJabatan) ");
		buffer.append("from PlanningPegawaiStatus a, MapPegawaiJabatanToUnitKerja mp ");
		buffer.append("left join a.pegawai b ");
		buffer.append("left join a.statusPegawaiPlan c ");
		buffer.append("left join a.noSk e ");
		buffer.append("left join mp.jabatan f ");
		buffer.append("left join a.jabatanPemberiNotaDinas fp ");
		buffer.append("left join mp.subUnitKerjaPegawai subUnitKerja ");
		buffer.append("where mp.pegawaiId = b.id and ");
		buffer.append("a.pegawaiId = mp.pegawaiId and ");
		buffer.append("a.statusEnabled is true and ");
		buffer.append("mp.isPrimary is true and ");
		buffer.append("mp.statusEnabled is true and ");
		buffer.append("e.noRec is null and ");
		buffer.append("(c.id=1 or ");
		buffer.append("c.id=24 or ");
		buffer.append("c.id=25 or ");
		buffer.append("c.id=26 or ");
		buffer.append("c.id=27 or ");
		buffer.append("c.id=28 or ");
		buffer.append("c.id=29 ");

		if (CommonUtil.isNotNullOrEmpty(idPegawai) && CommonUtil.isNotNullOrEmpty(noRec)) {
			buffer.append(") and b.id = :idPegawai");
			buffer.append(" and a.noRec = :noRec");
			Query query = em.createQuery(buffer.toString());
			query.setParameter("idPegawai", idPegawai);
			query.setParameter("noRec", noRec);
			result = query.getResultList();
		} else if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			buffer.append(") and b.id = :idPegawai");
			Query query = em.createQuery(buffer.toString());
			query.setParameter("idPegawai", idPegawai);
			result = query.getResultList();
		} else if (CommonUtil.isNotNullOrEmpty(noRec)) {
			buffer.append(") and a.noRec = :noRec");
			Query query = em.createQuery(buffer.toString());
			query.setParameter("noRec", noRec);
			result = query.getResultList();
		} else {
			buffer.append(")");
			Query query = em.createQuery(buffer.toString());
			result = query.getResultList();
		}
		return result;
	}

	@Override
	public Iterable<PlanningPegawaiStatus> findAll(Sort sort) {
		return null;
	}

	@Override
	public Page<PlanningPegawaiStatus> findAll(Pageable pageable) {
		return null;
	}

	@Override
	public <S extends PlanningPegawaiStatus> S save(S entity) {
		return null;
	}

	@Override
	public <S extends PlanningPegawaiStatus> Iterable<S> save(Iterable<S> entities) {
		return null;
	}

	@Override
	public PlanningPegawaiStatus findOne(Long id) {
		return null;
	}

	@Override
	public boolean exists(Long id) {
		return false;
	}

	@Override
	public Iterable<PlanningPegawaiStatus> findAll() {
		return null;
	}

	@Override
	public Iterable<PlanningPegawaiStatus> findAll(Iterable<Long> ids) {
		return null;
	}

	@Override
	public long count() {
		return 0;
	}

	@Override
	public void delete(Long id) {

	}

	@Override
	public void delete(PlanningPegawaiStatus entity) {

	}

	@Override
	public void delete(Iterable<? extends PlanningPegawaiStatus> entities) {

	}

	@Override
	public void deleteAll() {

	}

	@Override
	public List<Map<String, Object>> getApprovalStatusPaging(int rowStart, int rowEnd, String sort, String dir,
			Integer idPegawai, String nama, String jenisPermohonan, Integer statusPermohonan) {
		List<Map<String, Object>> result = new ArrayList<>();
		StringBuffer buffer = new StringBuffer();
		buffer.append("select NEW Map (");
		buffer.append("a.noRec as noRec,");
		buffer.append("a.statusEnabled as statusEnabled,");
		buffer.append("a.noPlanning as noPlanning,");
		buffer.append("a.deskripsiStatusPegawaiPlan as deskripsiStatusPegawaiPlan,");
		buffer.append("a.keteranganLainyaPlan as keteranganLainyaPlan,");
		buffer.append("a.deskripsiStatusPegawaiExec as deskripsiStatusPegawaiExec,");
		buffer.append("a.keteranganLainyaExec as keteranganLainyaExec,");
		buffer.append("a.tglPengajuan as tglPengajuan,");
		buffer.append("a.tglKeputusan as tglKeputusan,");
		buffer.append("a.approvalStatus as approvalStatus,");
		buffer.append("a.alamatCuti as alamatCuti,");
		buffer.append("a.nomorTelepon as nomorTelepon,");
		buffer.append("a.isCutiLuarNegeri as isCutiLuarNegeri,");
		buffer.append("a.isCutiLuarKota as isCutiLuarKota,");
		buffer.append("a.noSuratTugas as noSuratTugas,");
		buffer.append("a.noNotaDinas as noNotaDinas,");
		buffer.append("a.tglNotaDinas as tglNotaDinas,");
		buffer.append("a.alamatTugas as alamatTugas,");
		buffer.append("a.jabatanIdPemberiNotaDinas as jabatanIdPemberiNotaDinas,");
		buffer.append("fp.namaJabatan as jabatanPemberiNotaDinas, ");
		buffer.append("subUnitKerja.id as idUnitKerja,");
		buffer.append("subUnitKerja.name as unitKerja,");
		buffer.append("b.id as pegwaiId,");
		buffer.append("b.namaLengkap as namaPegawai,");
		buffer.append("b.nipPns as nip,");
		buffer.append("b.eselonId as eselonId,");
		buffer.append("c.id as statusPegawaiId,");
		buffer.append("c.statusPegawai as statusPegawai,");
		buffer.append("f.namaJabatan as namaJabatan) ");
		buffer.append("from PlanningPegawaiStatus a, MapPegawaiJabatanToUnitKerja mp ");
		buffer.append("left join a.pegawai b ");
		buffer.append("left join a.statusPegawaiPlan c ");
		buffer.append("left join a.noSk e ");
		buffer.append("left join mp.jabatan f ");
		buffer.append("left join a.jabatanPemberiNotaDinas fp ");
		buffer.append("left join mp.subUnitKerjaPegawai subUnitKerja ");
		buffer.append("where mp.pegawaiId = b.id and ");
		buffer.append("a.pegawaiId = mp.pegawaiId and ");
		buffer.append("a.statusEnabled is true and ");
		buffer.append("a.approvalStatus not in (1,3) and "); // bukan approval
																// yang
																// dibatalkan
		buffer.append("mp.isPrimary is true and ");
		buffer.append("mp.statusEnabled is true and ");
		buffer.append("e.noRec is null and ");
		buffer.append("(c.id=1 or ");
		buffer.append("c.id=24 or ");
		buffer.append("c.id=25 or ");
		buffer.append("c.id=26 or ");
		buffer.append("c.id=27 or ");
		buffer.append("c.id=28 or ");
		buffer.append("c.id=29) ");

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			buffer.append("and b.id = :idPegawai ");
		}

		if (CommonUtil.isNotNullOrEmpty(nama)) {
			buffer.append("and lower(b.nama) like lower(:nama) ");
		}

		if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
			buffer.append("and lower(c.statusPegawai) like lower(:jenisPermohonan) ");
		}

		if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
			buffer.append("and a.approvalStatus = :statusPermohonan ");
		}

		if (sort != "") {
			buffer.append("order by b." + sort + " " + dir);
		} else {
			buffer.append("order by b.namaLengkap desc ");
		}

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			}
		} else {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			}
		}

		return result;
	}

	@Override
	public List<Map<String, Object>> getApprovalStatusPaging(int rowStart, int rowEnd, String sort, String dir,
			Integer idPegawai, String nama, String jenisPermohonan, Integer statusPermohonan, String tglPermohonan,
			Boolean isCutiLuarNegeri, Boolean isCutiLuarKota) {
		List<Map<String, Object>> result = new ArrayList<>();
		StringBuffer buffer = new StringBuffer();
		buffer.append("select distinct NEW Map (");
		buffer.append("a.noRec as noRec,");
		buffer.append("a.statusEnabled as statusEnabled,");
		buffer.append("a.noPlanning as noPlanning,");
		buffer.append("a.deskripsiStatusPegawaiPlan as deskripsiStatusPegawaiPlan,");
		buffer.append("a.keteranganLainyaPlan as keteranganLainyaPlan,");
		buffer.append("a.deskripsiStatusPegawaiExec as deskripsiStatusPegawaiExec,");
		buffer.append("a.keteranganLainyaExec as keteranganLainyaExec,");
		buffer.append("a.tglPengajuan as tglPengajuan,");
		buffer.append("a.tglKeputusan as tglKeputusan,");
		buffer.append("a.approvalStatus as approvalStatus,");
		buffer.append("a.alamatCuti as alamatCuti,");
		buffer.append("a.nomorTelepon as nomorTelepon,");
		buffer.append("a.isCutiLuarNegeri as isCutiLuarNegeri,");
		buffer.append("a.isCutiLuarKota as isCutiLuarKota,");
		buffer.append("a.noSuratTugas as noSuratTugas,");
		buffer.append("a.noNotaDinas as noNotaDinas,");
		buffer.append("a.tglNotaDinas as tglNotaDinas,");
		buffer.append("a.alamatTugas as alamatTugas,");
		buffer.append("a.jabatanIdPemberiNotaDinas as jabatanIdPemberiNotaDinas,");
		buffer.append("fp.namaJabatan as jabatanPemberiNotaDinas, ");
		buffer.append("subUnitKerja.id as idUnitKerja,");
		buffer.append("subUnitKerja.name as unitKerja,");
		buffer.append("b.id as pegwaiId,");
		buffer.append("b.namaLengkap as namaPegawai,");
		buffer.append("b.nipPns as nip,");
		buffer.append("b.eselonId as eselonId,");
		buffer.append("c.id as statusPegawaiId,");
		buffer.append("c.statusPegawai as statusPegawai,");
		buffer.append("f.namaJabatan as namaJabatan) ");
		buffer.append("from PlanningPegawaiStatus a, MapPegawaiJabatanToUnitKerja mp ");
		buffer.append("left join a.listTanggal l ");
		buffer.append("left join a.pegawai b ");
		buffer.append("left join a.statusPegawaiPlan c ");
		buffer.append("left join a.noSk e ");
		buffer.append("left join mp.jabatan f ");
		buffer.append("left join a.jabatanPemberiNotaDinas fp ");
		buffer.append("left join mp.subUnitKerjaPegawai subUnitKerja ");
		buffer.append("where mp.pegawaiId = b.id and ");
		buffer.append("a.pegawaiId = mp.pegawaiId and ");
		buffer.append("a.statusEnabled is true and ");
		buffer.append("a.approvalStatus not in (1,3) and "); // bukan_approval_yang_dibatalkan
		buffer.append("mp.isPrimary is true and ");
		buffer.append("mp.statusEnabled is true and ");
		buffer.append("e.noRec is null and ");
		buffer.append("(c.id=1 or ");
		buffer.append("c.id=24 or ");
		buffer.append("c.id=25 or ");
		buffer.append("c.id=26 or ");
		buffer.append("c.id=27 or ");
		buffer.append("c.id=28 or ");
		buffer.append("c.id=29) ");

		if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
			buffer.append("and to_char(l.tgl,'yyyy-MM') = :tglPermohonan ");
		}

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			buffer.append("and b.id = :idPegawai ");
		}

		if (CommonUtil.isNotNullOrEmpty(nama)) {
			buffer.append("and lower(b.nama) like lower(:nama) ");
		}

		if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
			buffer.append("and lower(c.statusPegawai) like lower(:jenisPermohonan) ");
		}

		if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
			buffer.append("and a.approvalStatus = :statusPermohonan ");
		}

		if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
			buffer.append("and a.isCutiLuarNegeri = :isCutiLuarNegeri ");
		}

		if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
			buffer.append("and a.isCutiLuarKota = :isCutiLuarKota ");
		}

		if (sort != "") {
			buffer.append("order by b." + sort + " " + dir);
		} else {
			buffer.append("order by b.namaLengkap desc ");
		}

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			}
		} else {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			}
		}

		return result;
	}

	@Override
	public Long countApprovedStatus(String sort, Integer idPegawai, String nama, String jenisPermohonan,
			Integer statusPermohonan) {
		Long result = 0L;
		StringBuffer buffer = new StringBuffer();
		buffer.append("select count(a.noRec) ");
		buffer.append("from PlanningPegawaiStatus a, MapPegawaiJabatanToUnitKerja mp ");
		buffer.append("left join a.pegawai b ");
		buffer.append("left join a.statusPegawaiPlan c ");
		buffer.append("left join a.noSk e ");
		buffer.append("left join mp.jabatan f ");
		buffer.append("left join a.jabatanPemberiNotaDinas fp ");
		buffer.append("left join mp.subUnitKerjaPegawai subUnitKerja ");
		buffer.append("where mp.pegawaiId = b.id and ");
		buffer.append("a.pegawaiId = mp.pegawaiId and ");
		buffer.append("a.statusEnabled is true and ");
		buffer.append("a.approvalStatus <> 3 and "); // bukan approval yang
														// dibatalkan
		buffer.append("mp.isPrimary is true and ");
		buffer.append("mp.statusEnabled is true and ");
		buffer.append("e.noRec is null and ");
		buffer.append("(c.id=1 or ");
		buffer.append("c.id=24 or ");
		buffer.append("c.id=25 or ");
		buffer.append("c.id=26 or ");
		buffer.append("c.id=27 or ");
		buffer.append("c.id=28 or ");
		buffer.append("c.id=29 ");

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			buffer.append("and b.id = :idPegawai ");
		}

		if (CommonUtil.isNotNullOrEmpty(nama)) {
			buffer.append("and lower(b.nama) like lower(:nama) ");
		}

		if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
			buffer.append("and lower(c.statusPegawai) like lower(:jenisPermohonan) ");
		}

		if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
			buffer.append("and a.approvalStatus = :statusPermohonan ");
		}

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						result = (Long) query.getSingleResult();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						result = (Long) query.getSingleResult();
					}
				}
			}
		} else {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						result = (Long) query.getSingleResult();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						result = (Long) query.getSingleResult();
					}
				}
			}
		}

		// if(CommonUtil.isNotNullOrEmpty(idPegawai)){
		// buffer.append(") and b.id = :idPegawai");
		// Query query = em.createQuery(buffer.toString());
		// query.setParameter("idPegawai", idPegawai);
		//
		// result = (Long) query.getSingleResult();
		// } else if(CommonUtil.isNullOrEmpty(idPegawai)){
		// buffer.append(")");
		// Query query = em.createQuery(buffer.toString());
		// result = (Long) query.getSingleResult();
		// }

		return result;
	}

	@Override
	public Long countApprovedStatus(String sort, Integer idPegawai, String nama, String jenisPermohonan,
			Integer statusPermohonan, String tglPermohonan, Boolean isCutiLuarNegeri, Boolean isCutiLuarKota) {
		Long result = 0L;
		StringBuffer buffer = new StringBuffer();
		buffer.append("select count(distinct a.noRec) ");
		buffer.append("from PlanningPegawaiStatus a, MapPegawaiJabatanToUnitKerja mp ");
		buffer.append("left join a.listTanggal l ");
		buffer.append("left join a.pegawai b ");
		buffer.append("left join a.statusPegawaiPlan c ");
		buffer.append("left join a.noSk e ");
		buffer.append("left join mp.jabatan f ");
		buffer.append("left join a.jabatanPemberiNotaDinas fp ");
		buffer.append("left join mp.subUnitKerjaPegawai subUnitKerja ");
		buffer.append("where mp.pegawaiId = b.id and ");
		buffer.append("a.pegawaiId = mp.pegawaiId and ");
		buffer.append("a.statusEnabled is true and ");
		buffer.append("a.approvalStatus <> 3 and "); // bukan_approval_yang_dibatalkan
		buffer.append("mp.isPrimary is true and ");
		buffer.append("mp.statusEnabled is true and ");
		buffer.append("e.noRec is null and ");
		buffer.append("(c.id=1 or ");
		buffer.append("c.id=24 or ");
		buffer.append("c.id=25 or ");
		buffer.append("c.id=26 or ");
		buffer.append("c.id=27 or ");
		buffer.append("c.id=28 or ");
		buffer.append("c.id=29 ");

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			buffer.append("and b.id = :idPegawai ");
		}

		if (CommonUtil.isNotNullOrEmpty(nama)) {
			buffer.append("and lower(b.nama) like lower(:nama) ");
		}

		if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
			buffer.append("and lower(c.statusPegawai) like lower(:jenisPermohonan) ");
		}

		if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
			buffer.append("and a.approvalStatus = :statusPermohonan ");
		}

		if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
			buffer.append("and to_char(l.tgl,'yyyy-MM') = :tglPermohonan ");
		}

		if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
			buffer.append("and a.isCutiLuarNegeri = :isCutiLuarNegeri ");
		}

		if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
			buffer.append("and a.isCutiLuarKota = :isCutiLuarKota ");
		}

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				}
			}
		} else {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				}
			}
		}

		// if(CommonUtil.isNotNullOrEmpty(idPegawai)){
		// buffer.append(") and b.id = :idPegawai");
		// Query query = em.createQuery(buffer.toString());
		// query.setParameter("idPegawai", idPegawai);
		//
		// result = (Long) query.getSingleResult();
		// } else if(CommonUtil.isNullOrEmpty(idPegawai)){
		// buffer.append(")");
		// Query query = em.createQuery(buffer.toString());
		// result = (Long) query.getSingleResult();
		// }

		return result;
	}

	@Override
	public Long countApprovalStatus(String sort, Integer idPegawai, String nama, String jenisPermohonan,
			Integer statusPermohonan) {
		Long result = 0L;
		StringBuffer buffer = new StringBuffer();
		buffer.append("select count(a.noRec) ");
		buffer.append("from PlanningPegawaiStatus a, MapPegawaiJabatanToUnitKerja mp ");
		buffer.append("left join a.pegawai b ");
		buffer.append("left join a.statusPegawaiPlan c ");
		buffer.append("left join a.noSk e ");
		buffer.append("left join mp.jabatan f ");
		buffer.append("left join a.jabatanPemberiNotaDinas fp ");
		buffer.append("left join mp.subUnitKerjaPegawai subUnitKerja ");
		buffer.append("where mp.pegawaiId = b.id and ");
		buffer.append("a.pegawaiId = mp.pegawaiId and ");
		buffer.append("a.statusEnabled is true and ");
		buffer.append("a.approvalStatus not in (1,3) and "); // bukan approval
																// yang
																// dibatalkan
		buffer.append("mp.isPrimary is true and ");
		buffer.append("mp.statusEnabled is true and ");
		buffer.append("e.noRec is null and ");
		buffer.append("(c.id=1 or ");
		buffer.append("c.id=24 or ");
		buffer.append("c.id=25 or ");
		buffer.append("c.id=26 or ");
		buffer.append("c.id=27 or ");
		buffer.append("c.id=28 or ");
		buffer.append("c.id=29) ");

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			buffer.append("and b.id = :idPegawai ");
		}

		if (CommonUtil.isNotNullOrEmpty(nama)) {
			buffer.append("and lower(b.nama) like lower(:nama) ");
		}

		if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
			buffer.append("and lower(c.statusPegawai) like lower(:jenisPermohonan) ");
		}

		if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
			buffer.append("and a.approvalStatus = :statusPermohonan ");
		}

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						result = (Long) query.getSingleResult();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						result = (Long) query.getSingleResult();
					}
				}
			}
		} else {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						result = (Long) query.getSingleResult();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						result = (Long) query.getSingleResult();
					}
				}
			}
		}

		return result;
	}

	@Override
	public Long countApprovalStatus(String sort, Integer idPegawai, String nama, String jenisPermohonan,
			Integer statusPermohonan, String tglPermohonan, Boolean isCutiLuarNegeri, Boolean isCutiLuarKota) {
		Long result = 0L;
		StringBuffer buffer = new StringBuffer();
		buffer.append("select count(distinct a.noRec) ");
		buffer.append("from PlanningPegawaiStatus a, MapPegawaiJabatanToUnitKerja mp ");
		buffer.append("left join a.listTanggal l ");
		buffer.append("left join a.pegawai b ");
		buffer.append("left join a.statusPegawaiPlan c ");
		buffer.append("left join a.noSk e ");
		buffer.append("left join mp.jabatan f ");
		buffer.append("left join a.jabatanPemberiNotaDinas fp ");
		buffer.append("left join mp.subUnitKerjaPegawai subUnitKerja ");
		buffer.append("where mp.pegawaiId = b.id and ");
		buffer.append("a.pegawaiId = mp.pegawaiId and ");
		buffer.append("a.statusEnabled is true and ");
		buffer.append("a.approvalStatus not in (1,3) and "); // bukan_approval_yang_dibatalkan
		buffer.append("mp.isPrimary is true and ");
		buffer.append("mp.statusEnabled is true and ");
		buffer.append("e.noRec is null and ");
		buffer.append("(c.id=1 or ");
		buffer.append("c.id=24 or ");
		buffer.append("c.id=25 or ");
		buffer.append("c.id=26 or ");
		buffer.append("c.id=27 or ");
		buffer.append("c.id=28 or ");
		buffer.append("c.id=29) ");

		if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
			buffer.append("and to_char(l.tgl,'yyyy-MM') = :tglPermohonan ");
		}

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			buffer.append("and b.id = :idPegawai ");
		}

		if (CommonUtil.isNotNullOrEmpty(nama)) {
			buffer.append("and lower(b.nama) like lower(:nama) ");
		}

		if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
			buffer.append("and lower(c.statusPegawai) like lower(:jenisPermohonan) ");
		}

		if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
			buffer.append("and a.approvalStatus = :statusPermohonan ");
		}

		if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
			buffer.append("and a.isCutiLuarNegeri = :isCutiLuarNegeri ");
		}

		if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
			buffer.append("and a.isCutiLuarKota = :isCutiLuarKota ");
		}

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				}
			}
		} else {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				}
			}
		}

		return result;
	}

	@Override
	public Long countPermohonanStatusByPegawai(String sort, Integer idPegawai) {
		Long result = 0L;
		StringBuffer buffer = new StringBuffer();
		buffer.append("select count(a.noRec) " + "from PlanningPegawaiStatus a, MapPegawaiJabatanToUnitKerja m "
				+ "left join a.pegawai b " + "left join a.statusPegawaiPlan c " + "left join m.subUnitKerjaPegawai g "
				+ "left join m.unitKerjaPegawai d " + "left join a.noSk e " + "left join m.jabatan f "
				+ "where m.pegawaiId = b.id " + "and m.isPrimary is true " + "and m.statusEnabled is true "
				+ "and e.noRec is null " + "and a.statusEnabled is true " + "and a.approvalStatus =1 "
				+ "and (c.id=1 or " + "c.id=24 or " + "c.id=25 or " + "c.id=26 or " + "c.id=27 or " + "c.id=28 or "
				+ "c.id=29) ");

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			buffer.append(") and b.id = :idPegawai");
			Query query = em.createQuery(buffer.toString());
			query.setParameter("idPegawai", idPegawai);

			result = (Long) query.getSingleResult();
		} else if (CommonUtil.isNullOrEmpty(idPegawai)) {
			buffer.append(")");
			Query query = em.createQuery(buffer.toString());
			result = (Long) query.getSingleResult();
		}
		return result;
	}

	@Override
	public List<Map<String, Object>> getListPermohonanDisetujuiByPegawai(int rowStart, int rowEnd, String sort,
			String dir, Integer idPegawai, String nama, String jenisPermohonan, Integer statusPermohonan) {
		List<Map<String, Object>> result = new ArrayList<>();
		StringBuffer buffer = new StringBuffer();

		buffer.append("select NEW Map (" + "a.noRec as noRec," + "a.noPlanning as noPlanning,"
				+ "a.deskripsiStatusPegawaiPlan as deskripsiStatusPegawaiPlan,"
				+ "a.keteranganLainyaPlan as keteranganLainyaPlan," + "a.tglPengajuan as tglPengajuan,"
				+ "b.id as pegwaiId," + "b.nipPns as nipPns," + "a.approvalStatus as approvalStatus, "
				+ "b.namaLengkap as namaPegawai," + "c.id as statusPegawaiId," + "c.statusPegawai as statusPegawai,"
				+ "d.id as unitKerjaId," + "d.name as unitKerja," + "g.id as subUnitKerjaId,"
				+ "g.name as subUnitKerja," + "f.namaJabatan as namaJabatan) "
				+ "from PlanningPegawaiStatus a, MapPegawaiJabatanToUnitKerja m " + "left join a.pegawai b "
				+ "left join a.statusPegawaiPlan c " + "left join m.subUnitKerjaPegawai g "
				+ "left join m.unitKerjaPegawai d " + "left join a.noSk e " + "left join m.jabatan f "
				+ "where m.pegawaiId = b.id " + "and m.isPrimary is true " + "and m.statusEnabled is true "
				+ "and e.noRec is null " + "and a.statusEnabled is true " + "and a.approvalStatus =1 "
				+ "and (c.id=1 or " + "c.id=24 or " + "c.id=25 or " + "c.id=26 or " + "c.id=27 or " + "c.id=28 or "
				+ "c.id=29 ");

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			buffer.append("and b.id = :idPegawai ");
		}

		if (CommonUtil.isNotNullOrEmpty(nama)) {
			buffer.append("and lower(b.nama) like lower(:nama) ");
		}

		if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
			buffer.append("and lower(c.statusPegawai) like lower(:jenisPermohonan) ");
		}

		if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
			buffer.append("and a.approvalStatus = :statusPermohonan ");
		}

		if (sort != "") {
			buffer.append("order by b." + sort + " " + dir);
		} else {
			buffer.append("order by b.namaLengkap desc ");
		}

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			}
		} else {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			}
		}

		// if(CommonUtil.isNotNullOrEmpty(idPegawai)){
		// buffer.append(") and b.id = :idPegawai ");
		//
		// if (sort != "") {
		// buffer.append("order by b." + sort + " " + dir);
		// } else {
		// buffer.append("order by b.namaLengkap desc ");
		// }
		//
		// Query query = em.createQuery(buffer.toString());
		// query.setParameter("idPegawai", idPegawai);
		//
		// query.setFirstResult(rowStart);
		// query.setMaxResults(rowEnd);
		//
		// result = query.getResultList();
		// } else if(CommonUtil.isNullOrEmpty(idPegawai)){
		// buffer.append(") ");
		//
		// if (sort != "") {
		// buffer.append("order by b." + sort + " " + dir);
		// } else {
		// buffer.append("order by b.namaLengkap desc ");
		// }
		//
		// Query query = em.createQuery(buffer.toString());
		//
		// query.setFirstResult(rowStart);
		// query.setMaxResults(rowEnd);
		//
		// result = query.getResultList();
		// }

		return result;
	}

	@Override
	public List<Map<String, Object>> getListPermohonanDisetujuiByPegawai(int rowStart, int rowEnd, String sort,
			String dir, Integer idPegawai, String nama, String jenisPermohonan, Integer statusPermohonan,
			String tglPermohonan, Boolean isCutiLuarNegeri, Boolean isCutiLuarKota) {
		List<Map<String, Object>> result = new ArrayList<>();
		StringBuffer buffer = new StringBuffer();

		buffer.append("select distinct NEW Map (" + "a.noRec as noRec," + "a.noPlanning as noPlanning,"
				+ "a.deskripsiStatusPegawaiPlan as deskripsiStatusPegawaiPlan,"
				+ "a.keteranganLainyaPlan as keteranganLainyaPlan," + "a.tglPengajuan as tglPengajuan,"
				+ "b.id as pegwaiId," + "b.nipPns as nipPns," + "a.approvalStatus as approvalStatus, "
				+ "a.isCutiLuarNegeri as isCutiLuarNegeri, " + "a.isCutiLuarKota as isCutiLuarKota, "
				+ "b.namaLengkap as namaPegawai," + "c.id as statusPegawaiId," + "c.statusPegawai as statusPegawai,"
				+ "d.id as unitKerjaId," + "d.name as unitKerja," + "g.id as subUnitKerjaId,"
				+ "g.name as subUnitKerja," + "f.namaJabatan as namaJabatan) "
				+ "from PlanningPegawaiStatus a, MapPegawaiJabatanToUnitKerja m " + "left join a.listTanggal l "
				+ "left join a.pegawai b " + "left join a.statusPegawaiPlan c " + "left join m.subUnitKerjaPegawai g "
				+ "left join m.unitKerjaPegawai d " + "left join a.noSk e " + "left join m.jabatan f "
				+ "where m.pegawaiId = b.id " + "and m.isPrimary is true " + "and m.statusEnabled is true "
				+ "and e.noRec is null " + "and a.statusEnabled is true " + "and a.approvalStatus =1 "
				+ "and (c.id=1 or " + "c.id=24 or " + "c.id=25 or " + "c.id=26 or " + "c.id=27 or " + "c.id=28 or "
				+ "c.id=29 ");

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			buffer.append("and b.id = :idPegawai ");
		}

		if (CommonUtil.isNotNullOrEmpty(nama)) {
			buffer.append("and lower(b.nama) like lower(:nama) ");
		}

		if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
			buffer.append("and lower(c.statusPegawai) like lower(:jenisPermohonan) ");
		}

		if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
			buffer.append("and a.approvalStatus = :statusPermohonan ");
		}

		if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
			buffer.append("and to_char(l.tgl,'yyyy-MM') = :tglPermohonan ");
		}

		if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
			buffer.append("and a.isCutiLuarNegeri = :isCutiLuarNegeri ");
		}

		if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
			buffer.append("and a.isCutiLuarKota = :isCutiLuarKota ");
		}

		if (sort != "") {
			buffer.append("order by b." + sort + " " + dir);
		} else {
			buffer.append("order by b.namaLengkap desc ");
		}

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			}
		} else {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			}
		}

		// if(CommonUtil.isNotNullOrEmpty(idPegawai)){
		// buffer.append(") and b.id = :idPegawai ");
		//
		// if (sort != "") {
		// buffer.append("order by b." + sort + " " + dir);
		// } else {
		// buffer.append("order by b.namaLengkap desc ");
		// }
		//
		// Query query = em.createQuery(buffer.toString());
		// query.setParameter("idPegawai", idPegawai);
		//
		// query.setFirstResult(rowStart);
		// query.setMaxResults(rowEnd);
		//
		// result = query.getResultList();
		// } else if(CommonUtil.isNullOrEmpty(idPegawai)){
		// buffer.append(") ");
		//
		// if (sort != "") {
		// buffer.append("order by b." + sort + " " + dir);
		// } else {
		// buffer.append("order by b.namaLengkap desc ");
		// }
		//
		// Query query = em.createQuery(buffer.toString());
		//
		// query.setFirstResult(rowStart);
		// query.setMaxResults(rowEnd);
		//
		// result = query.getResultList();
		// }

		return result;
	}

	@Override
	public Long countPermohonanStatusAll(String sort, Integer idPegawai, String nama, String jenisPermohonan,
			Integer statusPermohonan) {
		Long result = 0L;
		StringBuffer buffer = new StringBuffer();
		buffer.append("select count(a.noRec) " + "from PlanningPegawaiStatus a, MapPegawaiJabatanToUnitKerja m "
				+ "left join a.pegawai b " + "left join a.statusPegawaiPlan c " + "left join a.noSk e "
				+ "left join m.jabatan f " + "left join m.subUnitKerjaPegawai g " + "left join m.unitKerjaPegawai d "
				+ "where m.pegawaiId = b.id " + "and m.isPrimary is true " + "and m.statusEnabled is true "
				+ "and e.noRec is null " + "and a.statusEnabled is true " + "and a.approvalStatus =1 "
				+ "and (c.id=1 or c.id=24 or c.id=25 or c.id=26 or c.id=27 or c.id=28 or c.id=29)");

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			buffer.append("and b.id = :idPegawai ");
		}

		if (CommonUtil.isNotNullOrEmpty(nama)) {
			buffer.append("and lower(b.nama) like lower(:nama) ");
		}

		if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
			buffer.append("and lower(c.statusPegawai) like lower(:jenisPermohonan) ");
		}

		if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
			buffer.append("and a.approvalStatus = :statusPermohonan ");
		}

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						result = (Long) query.getSingleResult();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						result = (Long) query.getSingleResult();
					}
				}
			}
		} else {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						result = (Long) query.getSingleResult();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("statusPermohonan", statusPermohonan);
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						result = (Long) query.getSingleResult();
					}
				}
			}
		}

		// if (CommonUtil.isNotNullOrEmpty(nama)) {
		// buffer.append(" and lower(b.nama) like lower(:nama)");
		// Query query = em.createQuery(buffer.toString());
		// query.setParameter("nama", "%"+nama+"%");
		//
		// result = (Long) query.getSingleResult();
		// } else {
		// Query query = em.createQuery(buffer.toString());
		// result = (Long) query.getSingleResult();
		// }

		return result;
	}

	@Override
	public Long countPermohonanStatusAll(String sort, Integer idPegawai, String nama, String jenisPermohonan,
			Integer statusPermohonan, String tglPermohonan, Boolean isCutiLuarNegeri, Boolean isCutiLuarKota) {
		Long result = 0L;
		StringBuffer buffer = new StringBuffer();
		buffer.append("select count(distinct a.noRec) "
				+ "from PlanningPegawaiStatus a, MapPegawaiJabatanToUnitKerja m " + "left join a.listTanggal l "
				+ "left join a.pegawai b " + "left join a.statusPegawaiPlan c " + "left join a.noSk e "
				+ "left join m.jabatan f " + "left join m.subUnitKerjaPegawai g " + "left join m.unitKerjaPegawai d "
				+ "where m.pegawaiId = b.id " + "and m.isPrimary is true " + "and m.statusEnabled is true "
				+ "and e.noRec is null " + "and a.statusEnabled is true " + "and a.approvalStatus =1 "
				+ "and (c.id=1 or c.id=24 or c.id=25 or c.id=26 or c.id=27 or c.id=28 or c.id=29)");

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			buffer.append("and b.id = :idPegawai ");
		}

		if (CommonUtil.isNotNullOrEmpty(nama)) {
			buffer.append("and lower(b.nama) like lower(:nama) ");
		}

		if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
			buffer.append("and lower(c.statusPegawai) like lower(:jenisPermohonan) ");
		}

		if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
			buffer.append("and a.approvalStatus = :statusPermohonan ");
		}

		if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
			buffer.append("and to_char(l.tgl,'yyyy-MM') = :tglPermohonan ");
		}

		if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
			buffer.append("and a.isCutiLuarNegeri = :isCutiLuarNegeri ");
		}

		if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
			buffer.append("and a.isCutiLuarKota = :isCutiLuarKota ");
		}

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				}
			}
		} else {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					} else {
						Query query = em.createQuery(buffer.toString());
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						result = (Long) query.getSingleResult();
					}
				}
			}
		}

		// if (CommonUtil.isNotNullOrEmpty(nama)) {
		// buffer.append(" and lower(b.nama) like lower(:nama)");
		// Query query = em.createQuery(buffer.toString());
		// query.setParameter("nama", "%"+nama+"%");
		//
		// result = (Long) query.getSingleResult();
		// } else {
		// Query query = em.createQuery(buffer.toString());
		// result = (Long) query.getSingleResult();
		// }

		return result;
	}

	@Override
	public List<Map<String, Object>> getListPermohonanStatusAll(int rowStart, int rowEnd, String sort, String dir,
			Integer idPegawai, String nama, String jenisPermohonan, Integer statusPermohonan) {
		List<Map<String, Object>> result = new ArrayList<>();
		StringBuffer buffer = new StringBuffer();

		buffer.append("select NEW Map (" + "a.noRec as noRec," + "a.noPlanning as noPlanning,"
				+ "a.deskripsiStatusPegawaiPlan as deskripsiStatusPegawaiPlan,"
				+ "a.keteranganLainyaPlan as keteranganLainyaPlan," + "a.tglPengajuan as tglPengajuan,"
				+ "b.id as pegwaiId," + "b.nipPns as nipPns," + "a.approvalStatus as approvalStatus, "
				+ "b.namaLengkap as namaPegawai," + "c.id as statusPegawaiId," + "c.statusPegawai as statusPegawai,"
				+ "d.id as unitKerjaId," + "d.name as unitKerja," + "g.id as subUnitKerjaId,"
				+ "g.name as subUnitKerja," + "f.namaJabatan as namaJabatan) "
				+ "from PlanningPegawaiStatus a, MapPegawaiJabatanToUnitKerja m " + "left join a.pegawai b "
				+ "left join a.statusPegawaiPlan c " + "left join a.noSk e " + "left join m.jabatan f "
				+ "left join m.subUnitKerjaPegawai g " + "left join m.unitKerjaPegawai d " + "where m.pegawaiId = b.id "
				+ "and m.isPrimary is true " + "and m.statusEnabled is true " + "and e.noRec is null "
				+ "and a.statusEnabled is true " + "and a.approvalStatus =1 "
				+ "and (c.id=1 or c.id=24 or c.id=25 or c.id=26 or c.id=27 or c.id=28 or c.id=29) ");

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			buffer.append("and b.id = :idPegawai ");
		}

		if (CommonUtil.isNotNullOrEmpty(nama)) {
			buffer.append("and lower(b.nama) like lower(:nama) ");
		}

		if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
			buffer.append("and lower(c.statusPegawai) like lower(:jenisPermohonan) ");
		}

		if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
			buffer.append("and a.approvalStatus = :statusPermohonan ");
		}

		if (sort != "") {
			buffer.append("order by a." + sort + " " + dir);
		} else {
			buffer.append("order by b.namaLengkap desc ");
		}

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			}
		} else {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("statusPermohonan", statusPermohonan);
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			}
		}

		// if (CommonUtil.isNotNullOrEmpty(nama)) {
		// buffer.append("and lower(b.nama) like lower(:nama) ");
		// }
		//
		// if (sort != "") {
		// buffer.append("order by a." + sort + " " + dir);
		// } else {
		// buffer.append("order by b.namaLengkap desc ");
		// }
		//
		// Query query = em.createQuery(buffer.toString());
		// if (CommonUtil.isNotNullOrEmpty(nama)) {
		// query.setParameter("nama", "%"+nama+"%");
		// }
		//
		// query.setFirstResult(rowStart);
		// query.setMaxResults(rowEnd);
		//
		// result = query.getResultList();

		return result;
	}

	@Override
	public List<Map<String, Object>> getListPermohonanStatusAll(int rowStart, int rowEnd, String sort, String dir,
			Integer idPegawai, String nama, String jenisPermohonan, Integer statusPermohonan, String tglPermohonan,
			Boolean isCutiLuarNegeri, Boolean isCutiLuarKota) {
		List<Map<String, Object>> result = new ArrayList<>();
		StringBuffer buffer = new StringBuffer();

		buffer.append("select distinct NEW Map (" + "a.noRec as noRec," + "a.noPlanning as noPlanning,"
				+ "a.deskripsiStatusPegawaiPlan as deskripsiStatusPegawaiPlan,"
				+ "a.keteranganLainyaPlan as keteranganLainyaPlan," + "a.tglPengajuan as tglPengajuan,"
				+ "b.id as pegwaiId," + "b.nipPns as nipPns," + "a.approvalStatus as approvalStatus, "
				+ "a.isCutiLuarNegeri as isCutiLuarNegeri, " + "a.isCutiLuarKota as isCutiLuarKota, "
				+ "b.namaLengkap as namaPegawai," + "c.id as statusPegawaiId," + "c.statusPegawai as statusPegawai,"
				+ "d.id as unitKerjaId," + "d.name as unitKerja," + "g.id as subUnitKerjaId,"
				+ "g.name as subUnitKerja," + "f.namaJabatan as namaJabatan) "
				+ "from PlanningPegawaiStatus a, MapPegawaiJabatanToUnitKerja m " + "left join a.listTanggal l "
				+ "left join a.pegawai b " + "left join a.statusPegawaiPlan c " + "left join a.noSk e "
				+ "left join m.jabatan f " + "left join m.subUnitKerjaPegawai g " + "left join m.unitKerjaPegawai d "
				+ "where m.pegawaiId = b.id " + "and m.isPrimary is true " + "and m.statusEnabled is true "
				+ "and e.noRec is null " + "and a.statusEnabled is true " + "and a.approvalStatus =1 "
				+ "and (c.id=1 or c.id=24 or c.id=25 or c.id=26 or c.id=27 or c.id=28 or c.id=29) ");

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			buffer.append("and b.id = :idPegawai ");
		}

		if (CommonUtil.isNotNullOrEmpty(nama)) {
			buffer.append("and lower(b.nama) like lower(:nama) ");
		}

		if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
			buffer.append("and lower(c.statusPegawai) like lower(:jenisPermohonan) ");
		}

		if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
			buffer.append("and a.approvalStatus = :statusPermohonan ");
		}

		if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
			buffer.append("and to_char(l.tgl,'yyyy-MM') = :tglPermohonan ");
		}

		if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
			buffer.append("and a.isCutiLuarNegeri = :isCutiLuarNegeri ");
		}

		if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
			buffer.append("and a.isCutiLuarKota = :isCutiLuarKota ");
		}

		if (sort != "") {
			buffer.append("order by a." + sort + " " + dir);
		} else {
			buffer.append("order by b.namaLengkap desc ");
		}

		if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("nama", "%" + nama + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("idPegawai", idPegawai);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			}
		} else {
			if (CommonUtil.isNotNullOrEmpty(nama)) {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("nama", "%" + nama + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			} else {
				if (CommonUtil.isNotNullOrEmpty(jenisPermohonan)) {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("jenisPermohonan", "%" + jenisPermohonan + "%");
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				} else {
					if (CommonUtil.isNotNullOrEmpty(statusPermohonan)) {
						Query query = em.createQuery(buffer.toString());
						query.setParameter("statusPermohonan", statusPermohonan);
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					} else {
						Query query = em.createQuery(buffer.toString());
						if (CommonUtil.isNotNullOrEmpty(tglPermohonan)) {
							query.setParameter("tglPermohonan", tglPermohonan);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarNegeri)) {
							query.setParameter("isCutiLuarNegeri", isCutiLuarNegeri);
						}
						if (CommonUtil.isNotNullOrEmpty(isCutiLuarKota)) {
							query.setParameter("isCutiLuarKota", isCutiLuarKota);
						}
						query.setFirstResult(rowStart);
						query.setMaxResults(rowEnd);
						result = query.getResultList();
					}
				}
			}
		}

		// if (CommonUtil.isNotNullOrEmpty(nama)) {
		// buffer.append("and lower(b.nama) like lower(:nama) ");
		// }
		//
		// if (sort != "") {
		// buffer.append("order by a." + sort + " " + dir);
		// } else {
		// buffer.append("order by b.namaLengkap desc ");
		// }
		//
		// Query query = em.createQuery(buffer.toString());
		// if (CommonUtil.isNotNullOrEmpty(nama)) {
		// query.setParameter("nama", "%"+nama+"%");
		// }
		//
		// query.setFirstResult(rowStart);
		// query.setMaxResults(rowEnd);
		//
		// result = query.getResultList();

		return result;
	}

}
