package com.jasamedika.medifirst2000.service.impl;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
import com.jasamedika.medifirst2000.converter.base.BaseVoConverter;
import com.jasamedika.medifirst2000.dao.IpsrsPreventiveMaintenanceDao;
import com.jasamedika.medifirst2000.dao.KirimProdukDao;
import com.jasamedika.medifirst2000.dao.OrderPelayananDao;
import com.jasamedika.medifirst2000.dao.PemeriksaanDao;
import com.jasamedika.medifirst2000.dao.PlanningPegawaiStatusDao;
import com.jasamedika.medifirst2000.dao.PlanningPelayananDao;
import com.jasamedika.medifirst2000.dao.PlanningPelayananDbhpDao;
import com.jasamedika.medifirst2000.dao.PlanningPelayananPetugasDao;
import com.jasamedika.medifirst2000.dao.ProdukDao;
import com.jasamedika.medifirst2000.dao.PsrsPermintaanPerbaikanDao;
import com.jasamedika.medifirst2000.dao.RegistrasiAsetDao;
import com.jasamedika.medifirst2000.dao.RekananSkKontrakDao;
import com.jasamedika.medifirst2000.dao.RuanganDao;
import com.jasamedika.medifirst2000.dao.StrukKirimDao;
import com.jasamedika.medifirst2000.dao.StrukKonfirmasiDao;
import com.jasamedika.medifirst2000.dao.StrukOrderDao;
import com.jasamedika.medifirst2000.dao.StrukPlanningDao;
import com.jasamedika.medifirst2000.dao.custom.StrukOrderDaoCustom;
import com.jasamedika.medifirst2000.entities.AsalProduk;
import com.jasamedika.medifirst2000.entities.AsalSukuCadang;
import com.jasamedika.medifirst2000.entities.DetailJenisProduk;
import com.jasamedika.medifirst2000.entities.IpsrsPemeriksaanAlat;
import com.jasamedika.medifirst2000.entities.JenisPekerjaan;
import com.jasamedika.medifirst2000.entities.JenisPermintaan;
import com.jasamedika.medifirst2000.entities.KelompokTransaksi;
import com.jasamedika.medifirst2000.entities.KirimProduk;
import com.jasamedika.medifirst2000.entities.OrderPelayanan;
import com.jasamedika.medifirst2000.entities.Pegawai;
import com.jasamedika.medifirst2000.entities.PelayananPasienPetugas;
import com.jasamedika.medifirst2000.entities.Pemeriksaan;
import com.jasamedika.medifirst2000.entities.PengecekanPeralatanMapping;
import com.jasamedika.medifirst2000.entities.PlanningPelayanan;
import com.jasamedika.medifirst2000.entities.PlanningPelayananDbhp;
import com.jasamedika.medifirst2000.entities.PlanningPelayananPetugas;
import com.jasamedika.medifirst2000.entities.Produk;
import com.jasamedika.medifirst2000.entities.RegistrasiAset;
import com.jasamedika.medifirst2000.entities.Rekanan;
import com.jasamedika.medifirst2000.entities.RekananSkKontrak;
import com.jasamedika.medifirst2000.entities.RekananSkKontrakDetail;
import com.jasamedika.medifirst2000.entities.Ruangan;
import com.jasamedika.medifirst2000.entities.SatuanStandar;
import com.jasamedika.medifirst2000.entities.StatusPekerjaan;
import com.jasamedika.medifirst2000.entities.StokProdukGlobal;
import com.jasamedika.medifirst2000.entities.StrukKirim;
import com.jasamedika.medifirst2000.entities.StrukKonfirmasi;
import com.jasamedika.medifirst2000.entities.StrukOrder;
import com.jasamedika.medifirst2000.entities.StrukPelayanan;
import com.jasamedika.medifirst2000.entities.StrukPlanning;
import com.jasamedika.medifirst2000.service.LoginUserService;
import com.jasamedika.medifirst2000.service.PsrsPermintaanPerbaikanService;
import com.jasamedika.medifirst2000.service.StrukOrderService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.util.HibernateInitialize;
import com.jasamedika.medifirst2000.util.StringUtil;
import com.jasamedika.medifirst2000.vo.AsalSukuCadangVO;
import com.jasamedika.medifirst2000.vo.IpsrsPemeriksaanAlatVO;
import com.jasamedika.medifirst2000.vo.JenisPekerjaanVO;
import com.jasamedika.medifirst2000.vo.KirimPerbaikanVO;
import com.jasamedika.medifirst2000.vo.PegawaiVO;
import com.jasamedika.medifirst2000.vo.PemeliharaanVO;
import com.jasamedika.medifirst2000.vo.PemeriksaanVO;
import com.jasamedika.medifirst2000.vo.PenjadwalanDetailVO;
import com.jasamedika.medifirst2000.vo.PenjadwalanHeaderVO;
import com.jasamedika.medifirst2000.vo.PerbaikanVO;
import com.jasamedika.medifirst2000.vo.PermintaanPerbaikanVO;
import com.jasamedika.medifirst2000.vo.PlanningPelayananPetugasVO;
import com.jasamedika.medifirst2000.vo.ProdukVO;
import com.jasamedika.medifirst2000.vo.RegistrasiAsetVO;
import com.jasamedika.medifirst2000.vo.RekananSkKontrakDetailVO;
import com.jasamedika.medifirst2000.vo.RekananSkKontrakVO;
import com.jasamedika.medifirst2000.vo.RekananVO;
import com.jasamedika.medifirst2000.vo.RequestBarangDariRuanganDetailVO;
import com.jasamedika.medifirst2000.vo.RequestBarangDariRuanganVO;
import com.jasamedika.medifirst2000.vo.RuanganVO;
import com.jasamedika.medifirst2000.vo.SatuanStandarVO;
import com.jasamedika.medifirst2000.vo.StatusPekerjaanVO;
import com.jasamedika.medifirst2000.vo.StrukOrderVO;
import com.jasamedika.medifirst2000.vo.SukuCadangLuarVO;


@Service("psrsPermintaanPerbaikanService")
public class PsrsPermintaanPerbaikanServiceImpl extends BaseAngaranServiceImpl implements PsrsPermintaanPerbaikanService {
	private static final Logger LOG = LoggerFactory.getLogger(StrukOrderServiceImpl.class);

	@Autowired
	private StrukOrderService strukOrderService;
	
	@Autowired
	private PlanningPelayananDbhpDao planningPelayananDbhpDao;
	
	@Autowired
	private RekananSkKontrakDao rekananSkKontrakDao;
	
	@Autowired
	private BaseVoConverter<ProdukVO, Produk> produkConverter;
	
	@Autowired
	private BaseVoConverter<SatuanStandarVO, SatuanStandar> satuanStandarConverter;
	
	@Autowired
	private BaseVoConverter<StrukOrderVO, StrukOrder> strukOrderConverter;
	
	@Autowired
	private StrukKonfirmasiDao strukKonfirmasiDao;
	
	@Autowired
	private IpsrsPreventiveMaintenanceDao ipsrsPreventiveMaintenanceDao;
	
	@Autowired
	private RuanganDao ruanganDao;
	
	@Autowired
	private PlanningPelayananPetugasDao planningPelayananPetugasDao;
	
	@Autowired
	private PemeriksaanDao pemeriksaanDao;
	
	@Autowired
	private KirimProdukDao kirimProdukDao;
	
	@Autowired
	private StrukPlanningDao strukPlanningDao;
	
	@Autowired
	private PlanningPelayananDao planningPelayananDao;
	
	@Autowired
	private ProdukDao produkDao;
	
	@Autowired
	private BaseConverterImpl<RekananVO, Rekanan> rekananConverter;
	
	@Autowired
	private BaseVoConverter<IpsrsPemeriksaanAlatVO,IpsrsPemeriksaanAlat> ipsrsPemeriksaanAlatConverter;
	
	@Autowired
	private BaseConverterImpl<RegistrasiAsetVO, RegistrasiAset> registrasiAsetConverter;
	
	@Autowired
	private BaseConverterImpl<StatusPekerjaanVO, StatusPekerjaan> statusPekerjaanConverter;
	
	@Autowired
	private BaseConverterImpl<JenisPekerjaanVO, JenisPekerjaan> jenisPekerjaanConverter;
	
	@Autowired
	private BaseConverterImpl<PegawaiVO, Pegawai> pegawaiConverter;
	
	@Autowired
	private BaseConverterImpl<RekananSkKontrakDetailVO, RekananSkKontrakDetail> rekananSkKontrakDetailConverter;
	
	@Autowired
	private BaseConverterImpl<AsalSukuCadangVO, AsalSukuCadang> asalSukuCadangConverter;
	
	@Autowired
	private BaseConverterImpl<RekananSkKontrakVO, RekananSkKontrak> rekananSkKontrakConverter;
	
	@Autowired
	private LoginUserService loginUserService;
	

	@Autowired
	private StrukKirimDao strukKirimDao;
	
	@Autowired
	private RegistrasiAsetDao registrasiAsetDao;
	
	@Autowired
	private StrukOrderDao strukOrderDao;
	
	@Autowired
	private StrukOrderDaoCustom strukOrderDaoCustom;
	
	@Autowired
	private BaseConverterImpl<RuanganVO, Ruangan> ruanganConverter;
	
	//add by iwankasan
	//12.12.2017
	@Autowired
	private PsrsPermintaanPerbaikanDao psrsPermintaanPerbaikanDao;
	
	@Autowired
	private OrderPelayananDao orderPelayananDao;
	
	@Override
	public Map<String, Object> savePermintaanPerbaikan(PermintaanPerbaikanVO vo) {
		StrukOrder strukOrder=new StrukOrder();
		String noUrut=strukOrderService.formatNoUrut("Order Perbaikan", "PBK");
		strukOrder.setNoOrder(noUrut);
		strukOrder.setStatusEnabled(true);
		strukOrder.setNoOrderIntern(noUrut);
		strukOrder.setTglOrder(new Date());
		strukOrder.setQtyJenisProduk(0.0);
		strukOrder.setQtyProduk(0.0);
		strukOrder.setTotalBeaMaterai(0.0);
		strukOrder.setTotalHargaSatuan(0.0);
		strukOrder.setTotalBiayaKirim(0.0);
		strukOrder.setTotalBiayaTambahan(0.0);
		strukOrder.setTotalDiscount(0.0);
		strukOrder.setTotalHarusDibayar(0.0);
		strukOrder.setTotalPph(0.0);
		strukOrder.setTotalPpn(0.0);
		strukOrder.setPegawaiOrder(loginUserService.getLoginUser().getPegawai());
		strukOrder.setIsDelivered((byte) 1);
		strukOrder.setKeteranganLainnya(vo.getKeteranganOrder());
		strukOrder.setKeteranganOrder("Permintaan Perbaikan");
		KelompokTransaksi kelompokTransaksi = new KelompokTransaksi();
		kelompokTransaksi.setId(Integer.parseInt(GetSettingDataFixed("kelompokTransaksiPermintaanPerbaikanIpsrs")));
		strukOrder.setKelompokTransaksi(kelompokTransaksi);
		
		if(CommonUtil.isNotNullOrEmpty(vo.getRuanganTujuan())){
			strukOrder.setRuanganTujuan(ruanganConverter.transferVOToModel(vo.getRuanganTujuan(),new Ruangan()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getRuanganAsal())){
			strukOrder.setRuangan(ruanganConverter.transferVOToModel(vo.getRuanganAsal(),new Ruangan()));
		}
		
		strukOrder.setRuangan(getRuanganByUserLogin());
		OrderPelayanan orderPelayanan=new OrderPelayanan();
		if(CommonUtil.isNotNullOrEmpty(vo.getRegistrasiAset())){
			
		}
		orderPelayanan.setNoOrder(strukOrder);
		orderPelayanan.setQtyProduk(0.0);				
		orderPelayanan.setQtyStokCurrent(0.0);
		orderPelayanan.setStrukOrder(strukOrder);
		orderPelayanan.setStatusEnabled(true);
		orderPelayanan.setQtyProdukRetur(0.0);
		orderPelayanan.setIsCito((byte) 1);
		orderPelayanan.setTglPelayanan(strukOrder.getTglOrder());
		if(CommonUtil.isNotNullOrEmpty(vo.getRegistrasiAset())){
			RegistrasiAset registrasiAset=registrasiAsetDao.findById(vo.getRegistrasiAset().getNoRec());
			orderPelayanan.setRegistrasiAset(registrasiAset);
			if(CommonUtil.isNotNullOrEmpty(registrasiAset.getProduk())){
				orderPelayanan.setProduk(registrasiAset.getProduk());
				if(CommonUtil.isNotNullOrEmpty(orderPelayanan.getProduk().getSatuanStandar())){
					orderPelayanan.setSatuanStandar(orderPelayanan.getProduk().getSatuanStandar());
				}
			}
		}
		
		if(CommonUtil.isNotNullOrEmpty(vo.getRuanganTujuan())){
			orderPelayanan.setRuanganTujuan(ruanganConverter.transferVOToModel(vo.getRuanganTujuan(),new Ruangan()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getRuanganAsal())){
			orderPelayanan.setRuangan(ruanganConverter.transferVOToModel(vo.getRuanganAsal(),new Ruangan()));
		}
		
			
		orderPelayanan.setHasilKonversi(0.0);
		strukOrder.getOrderPelayanan().add(orderPelayanan);
		
		strukOrder=strukOrderDao.save(strukOrder);
		Map<String,Object> result=new HashMap<String,Object>();
		result.put("noRec", strukOrder.getNoRec());
		
		return result;
		
	}
	
	@Override
	public Map<String, Object> getAsetByRuangan(){
		Ruangan r=getRuanganByUserLogin();
		Map<String, Object> result = new HashMap<>();
		List<Map<String,Object>> listAsetRuangan = registrasiAsetDao.getAsetByRuangan(r.getId());
		result.put("produk", listAsetRuangan);
		return result;
	}
	
	@Override
	@Transactional(readOnly=false)
	public Map<String, Object> kirimPerbaikan(KirimPerbaikanVO vo) {
		StrukKirim strukKirim=new StrukKirim();
		OrderPelayanan op=strukOrderDao.findDataOrderPelayanan(vo.getNoRecOrderPelayanan());
		StrukOrder strukOrder = op.getNoOrder();
		strukKirim.setNoorder(strukOrder);
		strukKirim.setKeteranganlainnyakirim("Kirim Teknisi Ke ruangan");
		String noUrut=strukOrderService.formatNoUrut("KRIM", "KRM");
		strukKirim.setNokirim(noUrut);
		strukKirim.setStatusEnabled(true);
		strukKirim.setNokirim_intern(noUrut);
		strukKirim.setTglkirim(new Date());
		strukKirim.setQtydetailjenisproduk(0.0);
		strukKirim.setQtyproduk(0.0);
		strukKirim.setTotalbeamaterai(0.0);
		strukKirim.setTotalhargasatuan(0.0);
		strukKirim.setTotalbiayakirim(0.0);
		strukKirim.setTotalbiayatambahan(0.0);
		strukKirim.setTotaldiscount(0.0);
		strukKirim.setTotalharusdibayar(0.0);
		strukKirim.setTotalpph(0.0);
		strukKirim.setTotalppn(0.0);
		strukKirim.setStatusEnabled(true);
		strukKirim.setPegawaiPengirim(loginUserService.getLoginUser().getPegawai());
		
		strukKirim.setKeteranganlainnyakirim("Kirim Teknisi Ke ruangan");
		KelompokTransaksi kelompokTransaksi = new KelompokTransaksi();
		kelompokTransaksi.setId(Integer.parseInt(GetSettingDataFixed("KdKelompokTransaksiKirimBarang")));
		strukKirim.setKelompokTransaksi(kelompokTransaksi);
		if(CommonUtil.isNotNullOrEmpty(strukOrder.getRuanganTujuan())){
			strukKirim.setKdruangantujuan(strukOrder.getRuanganTujuan());
		}
		
		if(CommonUtil.isNotNullOrEmpty(strukOrder.getRuangan())){
			strukKirim.setKdruanganasal(strukOrder.getRuangan());
			strukKirim.setKdruangan(strukOrder.getRuangan());
		}

				KirimProduk kirimProduk = new KirimProduk();
				kirimProduk.setHargaDiscount(0.0);
				kirimProduk.setHargaNetto(0.0);
				kirimProduk.setHargaPph(0.0);
				kirimProduk.setHargaPpn(0.0);
				kirimProduk.setHargaSatuan(0.0);
				kirimProduk.setStatusEnabled(true);
				
				if(CommonUtil.isNotNullOrEmpty(op.getSatuanStandar())){
					kirimProduk.setSatuanStandar(op.getSatuanStandar());
				}
				if(CommonUtil.isNotNullOrEmpty(op.getProduk())){
					kirimProduk.setProduk(op.getProduk());
				}
				kirimProduk.setNamaKonfirmasi("-");
				kirimProduk.setNoKirim(strukKirim);
				kirimProduk.setHargaDiscount(0.0);
				kirimProduk.setHargaTambahan(0.0);
				kirimProduk.setPersenDiscount(0.0);
				kirimProduk.setQtyProdukOuText(0.0);
				kirimProduk.setQtyProdukOutInt(0.0);
				kirimProduk.setQtyProdukRetur(0.0);
				kirimProduk.setQtyProdukTerima(0.0);
				kirimProduk.setSatuan("");
				kirimProduk.setQtyOrder(0.0);
				kirimProduk.setQtyProduk(0.0);
				kirimProduk.setRuanganPengirim(getRuanganByUserLogin());
				kirimProduk.setQtyProdukKonfirmasi(0.0);
				kirimProduk.setQtyProdukKonfirmasiKonversi(0.0);
				kirimProduk.setQtyOrderKonversi(0.0);
				kirimProduk.setNamaKonfirmasi("-");
				kirimProduk.setQtyProdukRetur(0.0);
				kirimProduk.setTglpelayanan(strukKirim.getTglkirim());
				
				
				if(CommonUtil.isNotNullOrEmpty(strukOrder.getRuangan())){
					kirimProduk.setRuangan(strukOrder.getRuangan());
				}
				
				strukKirim.getKirimProduk().add(kirimProduk);
			
		
		strukKirim=strukKirimDao.save(strukKirim);
		
		StrukPlanning strukPlanning=new StrukPlanning();
		strukPlanning.setDeskripsiplanning("Jadwal Pemeliharaan");
		strukPlanning.setNamaplanning("Jadwal Pemeliharaan");
		
		strukPlanning.setKdalamattujuan(null);
		strukPlanning.setKdasalanggaran(null);
		strukPlanning.setKddokumensk(null);
		strukPlanning.setKdjenisanggaran(null);
		strukPlanning.setKdjenistempat(null);
		strukPlanning.setKdkelompoktransaksi(null);
		strukPlanning.setKdpegawaipjawab(null);
		strukPlanning.setKdpegawaipjawabevaluasi(null);
		strukPlanning.setKdperiodeaccount(null);
		strukPlanning.setKdProfile((short) 0);
		if(CommonUtil.isNotNullOrEmpty(strukOrder.getRuanganTujuan())){
			strukPlanning.setKdruangan(strukOrder.getRuanganTujuan());
		}
		if(CommonUtil.isNotNullOrEmpty(strukOrder.getRuangan())){
			strukPlanning.setKdruanganasal(strukOrder.getRuangan());
		}
		strukPlanning.setTglplanning(new Date());
		strukPlanning.setTglpegajuan(strukOrder.getTglOrder());
		
		strukPlanning=strukPlanningDao.save(strukPlanning);
		
		PlanningPelayanan planningPelayanan=new PlanningPelayanan();
		planningPelayanan.setKdProfile((short) 0);
		planningPelayanan.setStrukOrder(strukOrder);
		planningPelayanan.setTglPlanningAkhir(new Date());
		planningPelayanan.setTglPlanning(strukOrder.getTglOrder());
		planningPelayanan.setStrukPlaning(strukPlanning);
		planningPelayanan.setQtyProdukRetur(0.0);
		if(CommonUtil.isNotNullOrEmpty(op.getRegistrasiAset())){
			RegistrasiAset registrasiAset=registrasiAsetDao.findById(op.getRegistrasiAset().getNoRec());
			planningPelayanan.setRegistrasiAset(registrasiAset);
			if(CommonUtil.isNotNullOrEmpty(registrasiAset.getProduk())){
				planningPelayanan.setProduk(registrasiAset.getProduk());
			}
		}
		planningPelayanan.setTglPelayanan(new Date());
		planningPelayanan.setQtyProdukExec(0.0);
		planningPelayananDao.save(planningPelayanan);
		
		
		PlanningPelayananPetugas planningPelayananPetugas=new PlanningPelayananPetugas();
		planningPelayananPetugas.setPegawai(strukKirim.getPegawaiPengirim());
		planningPelayananPetugas.setIsPetugasPepJawab((byte) 0);
		planningPelayananPetugas.setTglPelayanan(new Date());
		planningPelayananPetugas.setTglPlanning(new Date());
		planningPelayananPetugas.setStrukOrder(op.getNoOrder());
		planningPelayananPetugasDao.save(planningPelayananPetugas);
		Map<String,Object> result=new HashMap<String,Object>();
		result.put("noRec", strukKirim.getNoRec());
		
		return result;
	}
	
	
	@Override
	@Transactional(readOnly=false)
	public Map<String, Object> konfirmasiPerbaikan(KirimPerbaikanVO vo) {
		KelompokTransaksi kelompokTransaksi = new KelompokTransaksi();
		kelompokTransaksi.setId(Integer.parseInt(GetSettingDataFixed("KdKelompokTransaksiKonfirmasiBarang")));
		StrukKonfirmasi strukKonfirmasi = new StrukKonfirmasi();
		strukKonfirmasi.setTglKonfirmasi(new Date());
		strukKonfirmasi.setRuangan(getRuanganByUserLogin());
		strukKonfirmasi.setKelompokTransaksi(kelompokTransaksi);
		strukKonfirmasi.setNoKonfirmasi(strukOrderService.formatNoUrut("KONFIRMASI", "KFS"));
		strukKonfirmasi.setStatusEnabled(true);
		strukKonfirmasiDao.save(strukKonfirmasi);
		if (CommonUtil.isNotNullOrEmpty(vo.getNoRec())) {
			KirimProduk orderPelayanan = kirimProdukDao.findOne(vo.getNoRec());
			orderPelayanan.setNoKonfirmasi(strukKonfirmasi);
			kirimProdukDao.save(orderPelayanan);
		}
		Map<String,Object> result=new HashMap<String,Object>();
		result.put("noRec", strukKonfirmasi.getNoRec());
	
		return result;
	}
	
	
	@Override
	@Transactional(readOnly=false)
	public Map<String, Object> saveVerifikasiPerbaikan(KirimPerbaikanVO vo) {
		KelompokTransaksi kelompokTransaksi = new KelompokTransaksi();
		kelompokTransaksi.setId(Integer.parseInt(GetSettingDataFixed("KdKelompokTransaksiKonfirmasiBarang")));
		StrukKonfirmasi strukKonfirmasi = new StrukKonfirmasi();
		strukKonfirmasi.setTglKonfirmasi(new Date());
		strukKonfirmasi.setRuangan(getRuanganByUserLogin());
		strukKonfirmasi.setKelompokTransaksi(kelompokTransaksi);
		strukKonfirmasi.setNoKonfirmasi(strukOrderService.formatNoUrut("KONFIRMASI", "KFS"));
		strukKonfirmasi.setStatusEnabled(true);
		strukKonfirmasi=strukKonfirmasiDao.save(strukKonfirmasi);
		KirimProduk orderPelayanan = kirimProdukDao.findOne(vo.getNoRecKirimProduk());
		orderPelayanan.setNoKonfirmasi(strukKonfirmasi);
		kirimProdukDao.save(orderPelayanan);
		Map<String,Object> result=new HashMap<String,Object>();
		result.put("noRec", strukKonfirmasi.getNoRec());
		return result;
	}
	
	
	@Override
	public Map<String, Object> savePenjadwalan(PenjadwalanHeaderVO vo) {
		if(CommonUtil.isNotNullOrEmpty(vo.getPenjadwalanKerjaDetail())){
			for(PenjadwalanDetailVO penjadwalanDetail:vo.getPenjadwalanKerjaDetail()){

				StrukOrder strukOrder=new StrukOrder();
				String noUrut=strukOrderService.formatNoUrut("Order Perbaikan", "PBK");
				strukOrder.setNoOrder(noUrut);
				strukOrder.setStatusEnabled(true);
				strukOrder.setNoOrderIntern(noUrut);
				strukOrder.setTglOrder(vo.getTglOrder());
				strukOrder.setQtyJenisProduk(0.0);
				strukOrder.setQtyProduk(0.0);
				strukOrder.setTotalBeaMaterai(0.0);
				strukOrder.setTotalHargaSatuan(0.0);
				strukOrder.setTotalBiayaKirim(0.0);
				strukOrder.setTotalBiayaTambahan(0.0);
				strukOrder.setTotalDiscount(0.0);
				strukOrder.setTotalHarusDibayar(0.0);
				strukOrder.setTotalPph(0.0);
				strukOrder.setTotalPpn(0.0);
				strukOrder.setPegawaiOrder(loginUserService.getLoginUser().getPegawai());
				strukOrder.setIsDelivered((byte) 1);
				strukOrder.setKeteranganLainnya(vo.getKeteranganOrder());
				if(penjadwalanDetail.getJenisPenjadwalan().equals("PEMELIHARAAN")){
					strukOrder.setKeteranganOrder("Jadwal Pemeliharaan");
				}else if(penjadwalanDetail.getJenisPenjadwalan().equals("KONTRAK SERVICE")){
					strukOrder.setKeteranganOrder("Jadwal Kontrak Service");
				}else if(penjadwalanDetail.getJenisPenjadwalan().equals("KALIBRASI")){
					strukOrder.setKeteranganOrder("Jadwal Kalibrasi");
				}
				KelompokTransaksi kelompokTransaksi = new KelompokTransaksi();
				kelompokTransaksi.setId(Integer.parseInt(GetSettingDataFixed("kelompokTransaksiPermintaanPerbaikanIpsrs")));
				strukOrder.setKelompokTransaksi(kelompokTransaksi);
				
				if(CommonUtil.isNotNullOrEmpty(vo.getRuanganTujuan())){
					strukOrder.setRuanganTujuan(ruanganConverter.transferVOToModel(vo.getRuanganTujuan(),new Ruangan()));
				}
				if(CommonUtil.isNotNullOrEmpty(vo.getRuanganAsal())){
					strukOrder.setRuangan(ruanganConverter.transferVOToModel(vo.getRuanganAsal(),new Ruangan()));
				}
				
				OrderPelayanan orderPelayanan=new OrderPelayanan();
				if(CommonUtil.isNotNullOrEmpty(vo.getRegistrasiAset())){
					
				}
				orderPelayanan.setNoOrder(strukOrder);
				orderPelayanan.setQtyProduk(0.0);				
				orderPelayanan.setQtyStokCurrent(0.0);
				orderPelayanan.setStrukOrder(strukOrder);
				orderPelayanan.setStatusEnabled(true);
				orderPelayanan.setQtyProdukRetur(0.0);
				orderPelayanan.setIsCito((byte) 1);
				orderPelayanan.setTglPelayanan(strukOrder.getTglOrder());
				if(CommonUtil.isNotNullOrEmpty(vo.getRegistrasiAset())){
					RegistrasiAset registrasiAset=registrasiAsetDao.findById(vo.getRegistrasiAset().getNoRec());
					orderPelayanan.setRegistrasiAset(registrasiAset);
					if(CommonUtil.isNotNullOrEmpty(registrasiAset.getProduk())){
						orderPelayanan.setProduk(registrasiAset.getProduk());
						if(CommonUtil.isNotNullOrEmpty(orderPelayanan.getProduk().getSatuanStandar())){
							orderPelayanan.setSatuanStandar(orderPelayanan.getProduk().getSatuanStandar());
						}
					}
				}
				
				
				if(CommonUtil.isNotNullOrEmpty(vo.getRuanganTujuan())){
					orderPelayanan.setRuanganTujuan(ruanganConverter.transferVOToModel(vo.getRuanganTujuan(),new Ruangan()));
				}
				if(CommonUtil.isNotNullOrEmpty(vo.getRuanganAsal())){
					orderPelayanan.setRuangan(ruanganConverter.transferVOToModel(vo.getRuanganAsal(),new Ruangan()));
				}
				
				
				orderPelayanan.setHasilKonversi(0.0);
				strukOrder.getOrderPelayanan().add(orderPelayanan);
				
				strukOrder=strukOrderDao.save(strukOrder);
			
				if(CommonUtil.isNotNullOrEmpty(penjadwalanDetail.getPegawai())){
					PlanningPelayananPetugas planningPelayananPetugas=new PlanningPelayananPetugas();
					planningPelayananPetugas.setPegawai(pegawaiConverter.transferVOToModel(penjadwalanDetail.getPegawai(), new Pegawai()));
					planningPelayananPetugas.setIsPetugasPepJawab((byte) 0);
					planningPelayananPetugas.setTglPelayanan(new Date());
					planningPelayananPetugas.setTglPlanning(new Date());
					planningPelayananPetugas.setStrukOrder(strukOrder);
					planningPelayananPetugasDao.save(planningPelayananPetugas);
			}
				StrukPlanning strukPlanning=new StrukPlanning();
				if(penjadwalanDetail.getJenisPenjadwalan().equals("PEMELIHARAAN")){
					strukPlanning.setDeskripsiplanning("Jadwal Pemeliharaan");
					strukPlanning.setNamaplanning("Jadwal Pemeliharaan");
				}else if(penjadwalanDetail.getJenisPenjadwalan().equals("KONTRAK SERVICE")){
					strukPlanning.setDeskripsiplanning("Jadwal Kontrak Service");
					strukPlanning.setNamaplanning("Jadwal Kontrak Service");
				}else if(penjadwalanDetail.getJenisPenjadwalan().equals("KALIBRASI")){
					strukPlanning.setDeskripsiplanning("Jadwal Kalibrasi");
					strukPlanning.setNamaplanning("Jadwal Kalibrasi");
				}
				strukPlanning.setKdalamattujuan(null);
				strukPlanning.setKdasalanggaran(null);
				strukPlanning.setKddokumensk(null);
				strukPlanning.setKdjenisanggaran(null);
				strukPlanning.setKdjenistempat(null);
				strukPlanning.setKdkelompoktransaksi(null);
				strukPlanning.setKdpegawaipjawab(null);
				strukPlanning.setKdpegawaipjawabevaluasi(null);
				strukPlanning.setKdperiodeaccount(null);
				strukPlanning.setKdProfile((short) 0);
				if(CommonUtil.isNotNullOrEmpty(vo.getRuanganTujuan())){
					strukPlanning.setKdruangan(ruanganConverter.transferVOToModel(vo.getRuanganTujuan(),new Ruangan()));
				}
				if(CommonUtil.isNotNullOrEmpty(vo.getRuanganAsal())){
					strukPlanning.setKdruanganasal(ruanganConverter.transferVOToModel(vo.getRuanganAsal(),new Ruangan()));
				}
				strukPlanning.setTglplanning(penjadwalanDetail.getTglPemeliharaan());
				strukPlanning.setTglpegajuan(new Date());
				
				if(CommonUtil.isNotNullOrEmpty(penjadwalanDetail.getRekanan())){
					strukPlanning.setKdrekanan(rekananConverter.transferVOToModel(penjadwalanDetail.getRekanan(), new Rekanan()));
				}
				StatusPekerjaan statusPekerjaan=new StatusPekerjaan();
				statusPekerjaan.setId(3);
				strukPlanning.setStatusPekerjaan(statusPekerjaan);
				strukPlanning=strukPlanningDao.save(strukPlanning);
				
				PlanningPelayanan planningPelayanan=new PlanningPelayanan();
				planningPelayanan.setKdProfile((short) 0);
				planningPelayanan.setStrukOrder(strukOrder);
				planningPelayanan.setTglPlanningAkhir(new Date());
				planningPelayanan.setTglPlanning(vo.getTglOrder());
				planningPelayanan.setQtyProdukRetur(0.0);
				if(CommonUtil.isNotNullOrEmpty(vo.getRegistrasiAset())){
					RegistrasiAset registrasiAset=registrasiAsetDao.findById(vo.getRegistrasiAset().getNoRec());
					planningPelayanan.setRegistrasiAset(registrasiAset);
					if(CommonUtil.isNotNullOrEmpty(registrasiAset.getProduk())){
						planningPelayanan.setProduk(registrasiAset.getProduk());
					}
				}
				planningPelayanan.setTglPelayanan(new Date());
				planningPelayanan.setQtyProdukExec(0.0);
				planningPelayananDao.save(planningPelayanan);
				
				if(penjadwalanDetail.getJenisPenjadwalan().equals("PEMELIHARAAN")){
					savePemeriksaan(strukOrder, planningPelayanan);
				}
			}
		}
		
		Map<String,Object> result=new HashMap<String,Object>();
		
		return result;
	}

	@Override
	public Map<String, Object> getAsetByProduk(Integer produkId) {
		Ruangan r=getRuanganByUserLogin();
		Map<String, Object> result = new HashMap<>();
		List<Map<String,Object>> listAsetRuangan = registrasiAsetDao.getAsetByProduk(r.getId(),produkId);
		result.put("aset", listAsetRuangan);
		return result;
	}

	@Override
	public Ruangan getRuanganTujuan() {
		Ruangan r=ruanganDao.findById(Integer.parseInt((String) this.GetSettingDataFixed("kdRuanganIpsrs")));
		
		return r;
	}

	@Override
	public Map<String, Object> getDetailPermintaan(String noRec) {
		Map<String,Object> data=new HashMap<String,Object>();
		data.put("header", strukOrderDaoCustom.getInformasiPerbaikanHeader(noRec));
		data.put("detail", strukOrderDaoCustom.getInformasiPerbaikanDetail(noRec));
		return data;
	}

	@Override
	public Map<String, Object> getRuanganPerbaikan(){
		Map<String, Object> result = new HashMap<>(); 
		List<Map<String,Object>> ruanganAset = this.psrsPermintaanPerbaikanDao.getRuanganOnAsetMap();
		result.put("ruanganAset", ruanganAset);
		return result;
	}

	@Override
	public Map<String, Object> getProdukPerbaikan(Integer id) {
		Map<String, Object> result = new HashMap<>();
		List<Map<String,Object>> ruanganAset = registrasiAsetDao.getAsetByRuangan(id);
		result.put("ruanganAset", ruanganAset);
		return result;
	}
	
	@Override
	public Map<String, Object> getAsetByProdukAndRuangan(Integer produkId,Integer ruanganId) {
		Map<String, Object> result = new HashMap<>();
		List<Map<String,Object>> listAsetRuangan = registrasiAsetDao.getAsetByProduk(ruanganId,produkId);
		result.put("aset", listAsetRuangan);
		return result;
	}

	@Override
	public Map<String, Object> preAddPerbaikan(String noRec) {
		Map<String,Object> data=new HashMap<>();
		data.put("header", strukOrderDaoCustom.getInformasiPerbaikanHeader(noRec));
		data.put("detail", strukOrderDaoCustom.getInformasiPerbaikanDetail(noRec));
		data.put("teknisi", planningPelayananPetugasDao.getTeknisi(noRec));
		Map<String,Object>tmpData=new HashMap<String,Object>();
		
		//add registrasiasset from jenisProdu
		//by iwankasan
		//date : 01.02.2018
		Map<String, Object> jenisProduk = this.psrsPermintaanPerbaikanDao.getJenisProdukByStrukOrder(noRec);
		data.put("registeraset", this.psrsPermintaanPerbaikanDao.getRegistrasiAssetByJenisProduk((Integer)jenisProduk.get("id"), (Integer)jenisProduk.get("ruanganId")));
	
		data.put("planing", strukPlanningDao.findStrukPlaningAndStrukOrder(noRec).get(0));
		Map<String,Object> dataSelisih=strukOrderDao.getSelisih(noRec);
		if(CommonUtil.isNotNullOrEmpty(dataSelisih.get("tanggalOrder")) && CommonUtil.isNotNullOrEmpty(dataSelisih.get("tglKonfirmasi"))){
			Object dateObject1 =   dataSelisih.get("tanggalOrder");
			Object dateObject2 =  dataSelisih.get("tglKonfirmasi");
			
			String dateStart= dateObject1.toString();
			String dateStop=dateObject2.toString();

			//HH converts hour in 24 hours format (0-23), day calculation
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			
			Date d1 = null;
			Date d2 = null;

			try {
				d1 = format.parse(dateStart);
				d2 = format.parse(dateStop);

				//in milliseconds
				long diff = d2.getTime() - d1.getTime();

				long diffMinutes = diff / (60 * 1000) ;
			

				data.put("selisih", diffMinutes);
				
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return data;
	}

	@Override
	public Map<String, Object> savePerbaikan(PerbaikanVO vo) {
		Pageable topOne = new PageRequest(0, 1);
		StrukOrder strukOrder=strukOrderDao.findByNoRec(vo.getNoRecOrder());
		List<StrukPlanning> strukPlanningList=strukPlanningDao.findByNoRecStrukOrder(vo.getNoRecOrder());
		StrukPlanning strukPlanning=strukPlanningList.get(0);
		strukPlanning.setNamarekanan(vo.getNamaTeknisi());
		strukPlanning.setKeteranganlainnya(vo.getKeteranganRespon());
		
		if(CommonUtil.isNotNullOrEmpty(vo.getRekananSkKontrakDetail())){
			strukPlanning.setRekananSkKontrakDetail(rekananSkKontrakDetailConverter.transferVOToModel(vo.getRekananSkKontrakDetail(), new RekananSkKontrakDetail()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getRekanananSkKontrakVO())){
			strukPlanning.setRekananSkKontrak(rekananSkKontrakConverter.transferVOToModel(vo.getRekanananSkKontrakVO(),new RekananSkKontrak()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getJenisPekerjaan())){
			strukPlanning.setJenisPekerjaan(jenisPekerjaanConverter.transferVOToModel(vo.getJenisPekerjaan(), new JenisPekerjaan()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getStatusPekerjaan())){
			strukPlanning.setStatusPekerjaan(statusPekerjaanConverter.transferVOToModel(vo.getStatusPekerjaan(), new StatusPekerjaan()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getAsalSukuCadang())){
			strukPlanning.setAsalSukuCadang(asalSukuCadangConverter.transferVOToModel(vo.getAsalSukuCadang(), new AsalSukuCadang()));	
		}
		
		for(PlanningPelayananPetugasVO planningPelayananPetugasVO:vo.getTeknisi()){
			PlanningPelayananPetugas planningPelayananPetugas=new PlanningPelayananPetugas();
			planningPelayananPetugas.setPegawai(pegawaiConverter.transferVOToModel(planningPelayananPetugasVO.getPegawai(),new Pegawai()));
			planningPelayananPetugas.setIsPetugasPepJawab((byte) 0);
			planningPelayananPetugas.setTglPelayanan(new Date());
			planningPelayananPetugas.setTglPlanning(new Date());
			planningPelayananPetugas.setStrukOrder(strukOrder);
			if(CommonUtil.isNotNullOrEmpty(planningPelayananPetugasVO.getNoRec())){
				planningPelayananPetugas.setNoRec(planningPelayananPetugasVO.getNoRec());
			}
			planningPelayananPetugasDao.save(planningPelayananPetugas);
		}
		
		PlanningPelayanan planningPelayanan=strukPlanningDao.findPlaningPelayananByStrukOrder(vo.getNoRecOrder()).get(0);
		planningPelayanan.setTglDiperiksa(vo.getTglDiperiksa());
		planningPelayanan.setJenisKerusakan(vo.getJenisKerusakan());
		planningPelayanan.setAnalisaKerusakan(vo.getAnalisaKerusakan());
		planningPelayanan.setKeterangan(vo.getKeterangan());
		planningPelayananDao.save(planningPelayanan);
		
		//add by iwankaan
		//date : 19.01.2018
		//data asset from orderpelayanan
		OrderPelayanan orderPelayanan = this.psrsPermintaanPerbaikanDao.getOrderPelayananByNoRec(vo.getNoOrderPelayan());
		if(CommonUtil.isNotNullOrEmpty(orderPelayanan)) {
			RegistrasiAset registrasiAset=registrasiAsetDao.findById(vo.getRegistrasiAset().getNoRec()); 
			if(CommonUtil.isNotNullOrEmpty(registrasiAset)) {
				orderPelayanan.setRegistrasiAset(registrasiAset);
				if(CommonUtil.isNotNullOrEmpty(registrasiAset.getProduk())) {
					orderPelayanan.setProduk(registrasiAset.getProduk());
					if(CommonUtil.isNotNullOrEmpty(orderPelayanan.getProduk().getSatuanStandar())){
						orderPelayanan.setSatuanStandar(orderPelayanan.getProduk().getSatuanStandar());
					}
				}
			}
		}
		orderPelayananDao.save(orderPelayanan);
		
		Map<String,Object> data=new HashMap<String,Object>();
		return data;
	}

	@Override
	public Map<String, Object> savePemeliharaan(PemeliharaanVO vo) {
		StrukOrder strukOrder=strukOrderDao.findByNoRec(vo.getNoRecOrder());
		strukOrder.setKeteranganLainnya(vo.getKeteranganRespon());
		strukOrderDao.save(strukOrder);
		List<StrukPlanning> strukPlanningList=strukPlanningDao.findByNoRecStrukOrder(vo.getNoRecOrder());
		StrukPlanning strukPlanning=strukPlanningList.get(0);
		strukPlanning.setNamarekanan(vo.getNamaTeknisi());
		
		if(CommonUtil.isNotNullOrEmpty(vo.getRekananSkKontrakDetail())){
			strukPlanning.setRekananSkKontrakDetail(rekananSkKontrakDetailConverter.transferVOToModel(vo.getRekananSkKontrakDetail(), new RekananSkKontrakDetail()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getRekanananSkKontrakVO())){
			strukPlanning.setRekananSkKontrak(rekananSkKontrakConverter.transferVOToModel(vo.getRekanananSkKontrakVO(),new RekananSkKontrak()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getStatusPekerjaan())){
			strukPlanning.setStatusPekerjaan(statusPekerjaanConverter.transferVOToModel(vo.getStatusPekerjaan(), new StatusPekerjaan()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getAsalSukuCadang())){
			strukPlanning.setAsalSukuCadang(asalSukuCadangConverter.transferVOToModel(vo.getAsalSukuCadang(), new AsalSukuCadang()));	
		}
		
		for(PlanningPelayananPetugasVO planningPelayananPetugasVO:vo.getTeknisi()){
			PlanningPelayananPetugas planningPelayananPetugas=new PlanningPelayananPetugas();
			planningPelayananPetugas.setPegawai(pegawaiConverter.transferVOToModel(planningPelayananPetugasVO.getPegawai(),new Pegawai()));
			planningPelayananPetugas.setIsPetugasPepJawab((byte) 0);
			planningPelayananPetugas.setTglPelayanan(new Date());
			planningPelayananPetugas.setTglPlanning(new Date());
			planningPelayananPetugas.setStrukOrder(strukOrder);
			if(CommonUtil.isNotNullOrEmpty(planningPelayananPetugasVO.getNoRec())){
				planningPelayananPetugas.setNoRec(planningPelayananPetugasVO.getNoRec());
			}
			planningPelayananPetugasDao.save(planningPelayananPetugas);
		}
		
		PlanningPelayanan planningPelayanan=strukPlanningDao.findPlaningPelayananByStrukOrder(vo.getNoRecOrder()).get(0);
		planningPelayanan.setTerukurCatuTegangan(vo.getTerukurCatuTegangan());
		planningPelayanan.setTerukurKelembabanRuangan(vo.getTerukurKelembabanRuangan());
		planningPelayanan.setTerukurTemperaturRuangan(vo.getTerukurTemperaturRuangan());
		planningPelayanan.setKebutuhanAlatCatuTegangan(vo.getKebutuhanAlatCatuTegangan());
		planningPelayanan.setKebutuhanAlatKelembabanRuangan(vo.getKebutuhanAlatKelembabanRuangan());
		planningPelayanan.setKebutuhanAlatTemperaturRuangan(vo.getKebutuhanAlatTemperaturRuangan());
		planningPelayanan.setStrukOrder(strukOrder);
		planningPelayananDao.save(planningPelayanan);
		for(PemeriksaanVO pemeriksaanvo:vo.getPemeriksaan()){
			Pemeriksaan p=pemeriksaanDao.findOne(pemeriksaanvo.getNoRec());
			if(CommonUtil.isNotNullOrEmpty(pemeriksaanvo.getPemeriksaanFisik())){
				p.setPemeriksaanFisik(ipsrsPemeriksaanAlatConverter.transferVOToModel(pemeriksaanvo.getPemeriksaanFisik(), new IpsrsPemeriksaanAlat()));
			}
			if(CommonUtil.isNotNullOrEmpty(pemeriksaanvo.getPemeriksaanFungsi())){
				p.setPemeriksaanFungsi(ipsrsPemeriksaanAlatConverter.transferVOToModel(pemeriksaanvo.getPemeriksaanFungsi(), new IpsrsPemeriksaanAlat()));
			}
			pemeriksaanDao.save(p);
		}
		
		Map<String,Object> data=new HashMap<String,Object>();
		return data;
	}

	@Override
	public Map<String, Object> preAddPemeliharaan(String noRec) {
		Map<String,Object> data=new HashMap<>();
		data.put("header", strukOrderDaoCustom.getInformasiPerbaikanHeader(noRec));
		data.put("detail", strukOrderDaoCustom.getInformasiPerbaikanDetail(noRec));
		data.put("teknisi", planningPelayananPetugasDao.getTeknisi(noRec));
		data.put("parameter", strukPlanningDao.findParameterStrukPlaningAndStrukOrder(noRec).get(0));
		data.put("pemeriksaan", pemeriksaanDao.findByStrukOrder(noRec));
		return data;
	}
	
	public void savePemeriksaan(StrukOrder strukOrder,PlanningPelayanan planningPelayanan){
		Integer check = ipsrsPreventiveMaintenanceDao.checkProdukId(planningPelayanan.getProdukId());
		if(CommonUtil.isNotNullOrEmpty(check)){
			List<Map<String, Object>> list = ipsrsPreventiveMaintenanceDao.getBagianAlat(check);
			if(CommonUtil.isNotNullOrEmpty(list)){
				for(Map<String, Object> mapping : list){
					Pemeriksaan pemeriksaan=new Pemeriksaan();
					pemeriksaan.setStrukOrder(strukOrder);
					PengecekanPeralatanMapping pengecekanPeralatanMapping=new PengecekanPeralatanMapping();
					pengecekanPeralatanMapping.setId((Integer) mapping.get("id"));
					pemeriksaan.setPengecekanPeralatanMapping(pengecekanPeralatanMapping);
					pemeriksaanDao.save(pemeriksaan);
				}
			}
		} else{
			List<Map<String, Object>> list = ipsrsPreventiveMaintenanceDao.getBagianAlat();
			if(CommonUtil.isNotNullOrEmpty(list)){
				for(Map<String, Object> mapping : list){
					Pemeriksaan pemeriksaan=new Pemeriksaan();
					pemeriksaan.setStrukOrder(strukOrder);
					PengecekanPeralatanMapping pengecekanPeralatanMapping=new PengecekanPeralatanMapping();
					pengecekanPeralatanMapping.setId((Integer) mapping.get("id"));
					pemeriksaan.setPengecekanPeralatanMapping(pengecekanPeralatanMapping);
					pemeriksaanDao.save(pemeriksaan);
				}
			}
		}
	}

	@Override
	@Transactional(readOnly=false)
	public Map<String, Object> saveSukuCadangLuar(List<SukuCadangLuarVO> listVo) {
		Map<String,Object> data=new HashMap<String,Object>();
		
		PlanningPelayananDbhp planningPelayananDbhp=new PlanningPelayananDbhp();
		for(SukuCadangLuarVO voModel:listVo){
			
			if(CommonUtil.isNotNullOrEmpty(voModel.getProduk())){
				planningPelayananDbhp.setProduk(produkConverter.transferVOToModel(voModel.getProduk(), new Produk()));
				planningPelayananDbhp.setNoRec(voModel.getNoRec()); //add by iwankasan
				planningPelayananDbhp.setHargaNetto(0.0);
				planningPelayananDbhp.setHargaSatuan(0.0);
				if(CommonUtil.isNotNullOrEmpty(voModel.getSatuanStandar())){
					SatuanStandar s=new SatuanStandar();
					s.setId(voModel.getSatuanStandar().getId());
					planningPelayananDbhp.setSatuanStandar(s);
				}
				
				planningPelayananDbhp.setQtyProduk(voModel.getJumlah());
				planningPelayananDbhp.setStrukOrder(strukOrderConverter.transferVOToModel(voModel.getStrukOrder(), new StrukOrder()));
				List<StrukPlanning> listStrukPlanning=strukPlanningDao.findByNoRecStrukOrder(voModel.getStrukOrder().getNoRec());
				planningPelayananDbhp.setTanggalPlanning(new Date());
				if(CommonUtil.isNotNullOrEmpty(listStrukPlanning)){
					planningPelayananDbhp.setStrukPlanning(listStrukPlanning.get(0));
				}
				
			}else{
				Produk p=saveProduk(voModel.getNamaBarang(), voModel.getSatuanStandar());
				planningPelayananDbhp.setNoRec(voModel.getNoRec()); //add by iwankasan
				planningPelayananDbhp.setProduk(p);
				planningPelayananDbhp.setHargaNetto(0.0);
				planningPelayananDbhp.setHargaSatuan(0.0);
				if(CommonUtil.isNotNullOrEmpty(voModel.getSatuanStandar())){
					SatuanStandar s=new SatuanStandar();
					s.setId(voModel.getSatuanStandar().getId());
					planningPelayananDbhp.setSatuanStandar(s);
				}
				
				planningPelayananDbhp.setQtyProduk(voModel.getJumlah());
				planningPelayananDbhp.setStrukOrder(strukOrderConverter.transferVOToModel(voModel.getStrukOrder(), new StrukOrder()));
				List<StrukPlanning> listStrukPlanning=strukPlanningDao.findByNoRecStrukOrder(voModel.getStrukOrder().getNoRec());
				planningPelayananDbhp.setTanggalPlanning(new Date());
				if(CommonUtil.isNotNullOrEmpty(listStrukPlanning)){
					planningPelayananDbhp.setStrukPlanning(listStrukPlanning.get(0));
				}
				
			}
			
			planningPelayananDbhpDao.save(planningPelayananDbhp);
		}
		data.put("id", "-");
		return data;
		
	}
	
	public Produk saveProduk(String namaProduk, SatuanStandarVO satuanStandarVO) {
		Produk produk = new Produk();
		DetailJenisProduk detailJenisProduk = new DetailJenisProduk();
		detailJenisProduk.setId(1318);
		detailJenisProduk.setKdProfile((short) 0);
		produk.setDetailJenisProduk(detailJenisProduk);
		produk.setNamaProduk(namaProduk);
		produk.setNilaiNormal((short) 0);
		produk.setqProduk(1);
		if(CommonUtil.isNotNullOrEmpty(satuanStandarVO)){
			SatuanStandar s=new SatuanStandar();
			s.setId(satuanStandarVO.getId());
			produk.setSatuanStandar(s);
		}	
		produk.setQtyJualTerkecil((double) 0);
		produk.setQtySatuKemasan(0);
		produk.setQtyTerkecil((double) 0);
		produk.setKdProduk(StringUtil.formatNumber(String.valueOf(produkDao.getCount() + 1), 6));
		produk.setKdProdukIntern(StringUtil.formatNumber(String.valueOf(produkDao.getCount() + 1), 6));
		produk.setVerifikasiAnggaran(false);
		Produk produkResult = produkDao.save(produk);
		return produkResult;

	}

	@Override
	public Map<String, Object> getKotrak() {
		Map<String,Object> data=new HashMap<String,Object>();
		data.put("data", rekananSkKontrakDao.findKontrak());
		return data;
	}

	@Override
	public Map<String, Object> getKontrakDetail(String noRec) {
		Map<String,Object> data=new HashMap<String,Object>();
		data.put("data", rekananSkKontrakDao.findKontrakDetail(noRec));
		return data;
	}

	@Override
	public Map<String, Object> getLapPermintaanPerbaikan() { 
		
		Map<String, Object> result=new HashMap<String,Object>();   
		Integer userLogin = loginUserService.getLoginUser().getId();

		//loginUserService.getLoginUser().getId()
		List<Map<String, Object>> data = new ArrayList<>();
		List<Map<String, Object>> permintaanPerbaikanList = this.psrsPermintaanPerbaikanDao.getPermintaanPerbaikanbyGroupPegawai(userLogin);
		
		for(Map<String, Object> dataList : permintaanPerbaikanList) {
			if(CommonUtil.isNotNullOrEmpty(dataList.get("noRec"))){
				try {
					//Map<String,Object> r=strukOrderDaoCustom.findNoKirim((String)dataList.get("noRec"));
					//if(CommonUtil.isNotNullOrEmpty(r.get("noRecKirimProduk"))){
					//	dataList.put("noRecKirimProduk", (String)r.get("noRecKirimProduk"));
					//	dataList.put("noRespon", (String)r.get("noRespon"));
					//}
					dataList.put("asalSukuCadang", this.psrsPermintaanPerbaikanDao.getFindAsalSukuCadang((String)dataList.get("noRec")));
				} catch (Exception e) {
					LOG.debug(e.getMessage());
				}
				
			}
			data.add(dataList);
		}
		result.put("data", data);
		//result.put("totalPages", totalPages);
		//result.put("totalRow", totalRow);
		return result;
		
	}

	@Override
	public Map<String, Object> getLapPermintaanPerbaikanByDate(String startDate, String endDate) {
		Map<String, Object> result = new HashMap<String, Object>();
		Integer userLogin = loginUserService.getLoginUser().getId();
		
		List<Map<String, Object>> data = new ArrayList<>();
		List<Map<String, Object>> permintaanPerbaikanList = this.psrsPermintaanPerbaikanDao.getPermintaanPerbaikanByDate(userLogin, startDate, endDate);
		
		for(Map<String, Object> dataList : permintaanPerbaikanList) {
			if(CommonUtil.isNotNullOrEmpty(dataList.get("noRec"))) {
				try {
					dataList.put("asalSukuCadang", this.psrsPermintaanPerbaikanDao.getFindAsalSukuCadang((String)dataList.get("noRec")));
				} catch (Exception e) {
					LOG.debug(e.getMessage());
				}
				
			}
			data.add(dataList);
		}
		result.put("data", data);
		return result;
	}

	@Override
	public Map<String, Object> getLapPermintaanPerbaikanByNoOrder(String noOrder) {
		//return null;
		Map<String, Object> result = new HashMap<String, Object>();
		Integer userLogin = loginUserService.getLoginUser().getId();
		
		List<Map<String, Object>> data = new ArrayList<>();
		List<Map<String, Object>> permintaanPerbaikanList = this.psrsPermintaanPerbaikanDao.getPermintaanPerbaikanByStrukOrder(userLogin, noOrder);
		
		for(Map<String, Object> dataList:permintaanPerbaikanList) {
			if(CommonUtil.isNotNullOrEmpty(dataList.get("noRec"))) {
				try {
					dataList.put("asalSukuCadang", this.psrsPermintaanPerbaikanDao.getFindAsalSukuCadang((String)dataList.get("noRec")));
				} catch (Exception e) {
					LOG.debug(e.getMessage());
				}
			}
			data.add(dataList);
		}
		result.put("data", data);
		return result;
		
	}

	@Override
	public Map<String, Object> getLapPermintaanPerbaikanByJenisOrder(String jenisOrder, String startDate,
			String endDate) {
		//return null;
		Map<String, Object> result = new HashMap<String, Object>();
		Integer userLogin = loginUserService.getLoginUser().getId();
		
		List<Map<String, Object>> data = new ArrayList<>();
		List<Map<String, Object>> permintaanPerbaikanList = this.psrsPermintaanPerbaikanDao.getPermintaanPerbaikanByKetOrder(userLogin, jenisOrder, startDate, endDate);
		
		for(Map<String, Object> dataList:permintaanPerbaikanList) {
			if(CommonUtil.isNotNullOrEmpty(dataList.get("noRec"))) {
				try {
					dataList.put("asalSukuCadang", this.psrsPermintaanPerbaikanDao.getFindAsalSukuCadang((String)dataList.get("noRec")));
				} catch (Exception e) {
					LOG.debug(e.getMessage());
				}
			}
			data.add(dataList);
		}
		result.put("data", data);
		return result;
		
	}

	@Override
	public Map<String, Object> getOrderSukuCadangbyStrukOrder(String strukOrder) {
		Map<String,Object> data=new HashMap<String,Object>();
		data.put("data", this.psrsPermintaanPerbaikanDao.getOrderSukuCadangbyStrukOrder(strukOrder));
		return data;
	}

	@Override
	public Map<String, Object> getMonitoringPerbaikanByDate(String startDate, String endDate) {
		//return null;
		Map<String, Object> result = new HashMap<String, Object>();
		Integer userLogin = loginUserService.getLoginUser().getId();
		
		List<Map<String, Object>> data = new ArrayList<>();
		List<Map<String, Object>> monitoringList = this.psrsPermintaanPerbaikanDao.getMonitoringPerbaikan(userLogin, startDate, endDate);
		
		for(Map<String, Object> datalist:monitoringList) {
			if(CommonUtil.isNotNullOrEmpty(datalist.get("noRec"))) {
				try {
					datalist.put("statusPekerjaan", this.psrsPermintaanPerbaikanDao.getStatusPekerjaan((String)datalist.get("noRec")));
				} catch (Exception e) {
					LOG.debug(e.getMessage());
				}
			}
			data.add(datalist);
		}
		
		result.put("data", data);
		return result;
				
	}
	
	@Override
	public Map<String, Object> getAssetGedungByJenisAsset(Integer idJenis) {
		Map<String,Object> data=new HashMap<String,Object>();
		data.put("data", this.psrsPermintaanPerbaikanDao.getAssetGedungByJenisAsset(idJenis));
		return data;
	}
	
	@Override
	public Map<String, Object> getAssetNonGedungByJenisAsset(Integer id, Integer idJenis) {
		Map<String,Object> data=new HashMap<String,Object>();
		data.put("data", this.psrsPermintaanPerbaikanDao.getAssetNonGedungByJenisAsset(id, idJenis));
		return data;
	}

	@Override
	public Map<String, Object> getAssetGedungByOrderPelayanan(String noOrderPelayanan) {
		Map<String, Object> data = new HashMap<>();
		data.put("data", this.psrsPermintaanPerbaikanDao.getAssetGedungByOrderPelayanan(noOrderPelayanan));
		
		return data;
	}

	@Override
	public Map<String, Object> getAssetNonGedungByOrderPelayanan(String noOrderPelayanan) {
		Map<String, Object> data = new HashMap<>();
		data.put("data", this.psrsPermintaanPerbaikanDao.getAssetNonGedungByOrderPelayanan(noOrderPelayanan));
		return data;
	}

	@Override
	public Map<String, Object> getRegistrasiAssetByJenisProduk(String noRec) {
		Map<String, Object> data = new HashMap<>();
		Map<String, Object> jenisProduk=this.psrsPermintaanPerbaikanDao.getJenisProdukByStrukOrder(noRec);
		
		data.put("data", this.psrsPermintaanPerbaikanDao.getRegistrasiAssetByJenisProduk((Integer)jenisProduk.get("id"), (Integer)jenisProduk.get("ruanganId")));
		return data;
	}
	
	
	
}
