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

import java.util.List;
import java.util.Map;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.springframework.stereotype.Repository;

import com.jasamedika.medifirst2000.dao.custom.PelatihanPaketDaoCustom;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.util.DateUtil;

/**
 * Repository Custom class
 * 
 * @author Roberto
 */

@Repository("PelatihanPaketDaoCustom")
public class PelatihanPaketDaoCustomImpl  implements PelatihanPaketDaoCustom {

	@PersistenceContext
	protected EntityManager em;
	
	@Override
	public List<Map<String, Object>> daftarKomponen() {
		StringBuffer buffer = new StringBuffer();
		buffer.append(" select new map(hargaNetto.id as idHargaNetto,hargaNetto.hargaSatuan as hargaSatuan,p.id as id,p.namaProduk as namaProduk) from HargaNettoProdukByKelas hargaNetto left join hargaNetto.produk p left join p.detailJenisProduk djp where djp.id=1335 ");

		Query query = em.createQuery(buffer.toString());

		List<Map<String, Object>> list = query.getResultList();

		return list;

	}

	@Override
	public List<Map<String, Object>> listPelatihanPaket(String tanggalAwal, String tanggalAhir) {
		StringBuffer buffer = new StringBuffer();
		buffer.append(" select new map( strukPlanning.noRec as noRec,pelatihanPaket.namaPaketPelatihan as namaPaketPelatihan,pelatihanPaket.penyelenggara as penyelenggara,pelatihanPaket.tanggalAwal as tanggalAwal,pelatihanPaket.tanggalAhir as tanggalAhir, "
				+ "pelatihanPaket.akreditasiPelatihanOleh as akreditasiOleh,pelatihanPaket.tanggalAkreditasi as tanggalAkreditasi,"
				+ "pelatihanPaket.jumlahNarasumber as jumlahPengajar ,produk.id as produkId) from PlanningDiklatHumasMarket planningDiklatHumasMarket "
				+ "left join planningDiklatHumasMarket.strukPlaning strukPlanning "
				+ "left join planningDiklatHumasMarket.produk produk,PelatihanPaket pelatihanPaket "
				+ "where pelatihanPaket.produkId=produk.id   ");
		if (CommonUtil.isNotNullOrEmpty(tanggalAwal) && CommonUtil.isNotNullOrEmpty(tanggalAhir)) {
			buffer.append(" and pelatihanPaket.tanggalAwal between ");
		}
		

		Query query = em.createQuery(buffer.toString());
		if (CommonUtil.isNotNullOrEmpty(tanggalAwal) && CommonUtil.isNotNullOrEmpty(tanggalAhir)) {
			query.setParameter("tanggalAwal", DateUtil.toDate(tanggalAwal));
			query.setParameter("tanggalAhir", DateUtil.toDate(tanggalAhir));
		}
		List<Map<String, Object>> list = query.getResultList();

		return list;
	}

	@Override
	public Map<String, Object> detailPelatihanPaket(Integer produkId) {
		StringBuffer buffer = new StringBuffer();
		buffer.append("select new Map (jenisPelatihan.jenisPelatihan as jenisPelatihan, "
				+ "pelatihanPaket.namaPaketPelatihan as namaPakrtPelatihan, "
				+ "pelatihanPaket.penyelenggara as penyelenggara, "
				+ "pelatihanPaket.tempat as tempat,"
				+ "pelatihanPaket.tanggalAwal as tanggalAwal,"
				+ "pelatihanPaket.tanggalAhir as tanggalAhir,"
				+ "jenisPelatihan.id as jenisPelatihanId,"
				+ "pelatihanPaket.kapasitasPeserta as kapasitasPeserta,"
				+ "pelatihanPaket.akreditasiPelatihanOleh as akreditasiPelatihanOleh,"
				+ "pelatihanPaket.tanggalAkreditasi as tanggalAkreditasi,"
				+ "pelatihanPaket.jumlahNarasumber as jumlahNarasumber )  "
				+ "from PelatihanPaket pelatihanPaket "
				+ "left join pelatihanPaket.jenisPelatihan jenisPelatihan "
				+ "left join pelatihanPaket.produk produk where produk.id=:produkId ");

		Query query = em.createQuery(buffer.toString());
		query.setParameter("produkId", produkId);
		Map<String, Object> list = (Map<String, Object>)query.getSingleResult();

		return list;
	}

	@Override
	public List<Map<String, Object>> jabatan(Integer produkId) {
		
		StringBuffer buffer = new StringBuffer();
		buffer.append(
				" select new map(mapPelatihanPaketToJabatan.id as id,jabatan.namaJabatan as jabatan,jabatan.id as jabatanId ) from MapPelatihanPaketToJabatan mapPelatihanPaketToJabatan "
						+ "left join mapPelatihanPaketToJabatan.jabatan jabatan "
						+ "left join mapPelatihanPaketToJabatan.pelatihanPaket pelatihanPaket left join pelatihanPaket.produk produk where produk.id=:produkId  ");

		Query query = em.createQuery(buffer.toString());
		query.setParameter("produkId", produkId);

		List<Map<String, Object>> list = query.getResultList();

		return list;
	
	}

	@Override
	public List<Map<String, Object>> jpl(Integer produkId) {
		StringBuffer buffer = new StringBuffer();
		buffer.append(" Select new map( pelatihanJpl.noRec as noRec,pelatihanJpl.jpl as jpl,eselon.eselon as eselon,eselon.id as eselonId,golongan.golonganPegawai as golongan,golongan.id as golonganId ) from PelatihanJpl pelatihanJpl "
				+ "left join pelatihanJpl.eselon eselon  "
				+ "left join pelatihanJpl.golonganPegawai golongan left join pelatihanJpl.pelatihanPaket pelatihanPaket left join pelatihanPaket.produk produk where produk.id=:produkId");

		Query query = em.createQuery(buffer.toString());
		query.setParameter("produkId", produkId);

		List<Map<String, Object>> list = query.getResultList();

		return list;
	}

	@Override
	public List<Map<String, Object>> kreditAkreditasi(Integer produkId) {
		StringBuffer buffer = new StringBuffer();
		buffer.append(" Select new Map(pelatihanKreditAkreditasi.noRec as noRec, pelatihanKreditAkreditasi.skp as skp,pelatihanKreditAkreditasi.jenisKepersetaan as jenisKepersetaan ) "
				+ "from PelatihanKreditAkreditasi pelatihanKreditAkreditasi  "
				+ "left join pelatihanKreditAkreditasi.pelatihanPaket pelatihanPaket left join pelatihanPaket.produk produk where produk.id=:produkId");

		Query query = em.createQuery(buffer.toString());
		query.setParameter("produkId", produkId);

		List<Map<String, Object>> list = query.getResultList();

		return list;
	}

	@Override
	public List<Map<String, Object>> biaya(Integer produkId) {
		StringBuffer buffer = new StringBuffer();
		buffer.append(" select new map(planningMarketBiaya.id as id,planningMarketBiaya.hargaSatuan as hargaSatuan,planningMarketBiaya.qtyProduk as qtyProduk,planningMarketBiaya.qtyProduk*planningMarketBiaya.hargaSatuan as totalHarga ,planningMarketBiaya.isSetBiayaPeserta as isSetBiayaPeserta) from PlanningDiklatHumasMarketBiaya planningMarketBiaya "
				+ "left join planningMarketBiaya.produk produk "
				+ "left join planningMarketBiaya.strukPlanning strukPlanning where produk.id=:produkId");

		Query query = em.createQuery(buffer.toString());
		query.setParameter("produkId", produkId);

		List<Map<String, Object>> list = query.getResultList();

		return list;
	}

	

	
	
}
