package com.jasamedika.medifirst2000.controller;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import com.jasamedika.medifirst2000.controller.base.IBaseRestController;
import com.jasamedika.medifirst2000.controller.base.LocaleController;
import com.jasamedika.medifirst2000.dao.AnamnesisDao;
import com.jasamedika.medifirst2000.dao.AsesmenGiziAwalDao;
import com.jasamedika.medifirst2000.dao.BillingDao;
import com.jasamedika.medifirst2000.dao.CheckListProsedurKeselamatanPasienDao;
import com.jasamedika.medifirst2000.dao.DiagnosaPasienDao;
import com.jasamedika.medifirst2000.dao.IndekKinerjaDao;
import com.jasamedika.medifirst2000.dao.KebutuhanDasarDao;
import com.jasamedika.medifirst2000.dao.KelasDao;
import com.jasamedika.medifirst2000.dao.LaboratoriumDao;
import com.jasamedika.medifirst2000.dao.MasalahKeperawatanDetailDao;
import com.jasamedika.medifirst2000.dao.ObatGenerikDao;
import com.jasamedika.medifirst2000.dao.PapAlergiDao;
import com.jasamedika.medifirst2000.dao.PapKebutuhanEdukasiDao;
import com.jasamedika.medifirst2000.dao.PapKeluhanUtamaDao;
import com.jasamedika.medifirst2000.dao.PapMataDao;
import com.jasamedika.medifirst2000.dao.PapRiwayatImunisasiDao;
import com.jasamedika.medifirst2000.dao.PapRiwayatKelahiranDao;
import com.jasamedika.medifirst2000.dao.PapSkriningGiziDao;
import com.jasamedika.medifirst2000.dao.PapSkriningGiziDetailDao;
import com.jasamedika.medifirst2000.dao.PapTandaVitalDao;
import com.jasamedika.medifirst2000.dao.PapTumbuhKembangAnakDao;
import com.jasamedika.medifirst2000.dao.PasienDao;
import com.jasamedika.medifirst2000.dao.PasienInstruksiPerjanjianDao;
import com.jasamedika.medifirst2000.dao.PegawaiDao;
import com.jasamedika.medifirst2000.dao.PelayananPasienDao;
import com.jasamedika.medifirst2000.dao.PengkajianAwalNeonatusDao;
import com.jasamedika.medifirst2000.dao.PengkajianAwalPasienRawatJalanDewasaDao;
import com.jasamedika.medifirst2000.dao.ReportingDao;
import com.jasamedika.medifirst2000.dao.RuanganDao;
import com.jasamedika.medifirst2000.dao.SPMRSDao;
import com.jasamedika.medifirst2000.dto.BankDarahDto;
import com.jasamedika.medifirst2000.dto.BarcodelabDto;
import com.jasamedika.medifirst2000.dto.BuktiPenerimaanBarangDto;
import com.jasamedika.medifirst2000.dto.BukuRegisterMasukDto;
import com.jasamedika.medifirst2000.dto.BukuRegisterPelayananDto;
import com.jasamedika.medifirst2000.dto.CheckListProsedurKeselamatanPasienDto;
import com.jasamedika.medifirst2000.dto.CpptDto;
import com.jasamedika.medifirst2000.dto.DetailDto;
import com.jasamedika.medifirst2000.dto.HPSDto;
import com.jasamedika.medifirst2000.dto.HasilLabDto;
import com.jasamedika.medifirst2000.dto.HeadDto;
import com.jasamedika.medifirst2000.dto.HeadKasirDto;
import com.jasamedika.medifirst2000.dto.IndexPenyakitRawatInapDto;
import com.jasamedika.medifirst2000.dto.InstalasiRawatInapDto;
import com.jasamedika.medifirst2000.dto.KartuPengendaliDto;
import com.jasamedika.medifirst2000.dto.KartuPengendaliPasienPulangDto;
import com.jasamedika.medifirst2000.dto.KartuPulangPasienDto;
import com.jasamedika.medifirst2000.dto.KasirDto;
import com.jasamedika.medifirst2000.dto.KlinikMataDto;
import com.jasamedika.medifirst2000.dto.KunjunganPasienJenisDiagnosaDto;
import com.jasamedika.medifirst2000.dto.KunjunganPasienStatusDanJenisPasienDto;
import com.jasamedika.medifirst2000.dto.KunjunganPasienStatusDanJenisPasienDto2;
import com.jasamedika.medifirst2000.dto.KunjunganWilayahDto;
import com.jasamedika.medifirst2000.dto.LaboratoriumDto;
import com.jasamedika.medifirst2000.dto.LampiranSPPHDto;
import com.jasamedika.medifirst2000.dto.MorbiditasMortalitasDto;
import com.jasamedika.medifirst2000.dto.ObatGenerikDto;
import com.jasamedika.medifirst2000.dto.PayRollReportUangMakanDto;
import com.jasamedika.medifirst2000.dto.PengkajianAwalNeonatusDto;
import com.jasamedika.medifirst2000.dto.PengkajianAwalPasienRawatJalanAnakDto;
import com.jasamedika.medifirst2000.dto.PerjanjianPasienDto;
import com.jasamedika.medifirst2000.dto.SensusHarianDto;
import com.jasamedika.medifirst2000.dto.SuratPesananSementaraDto;
import com.jasamedika.medifirst2000.entities.Pasien;
import com.jasamedika.medifirst2000.entities.Pegawai;
import com.jasamedika.medifirst2000.service.IkiDanRemunerasiService;
import com.jasamedika.medifirst2000.service.IndekKinerjaService;
import com.jasamedika.medifirst2000.service.LaundryService;
import com.jasamedika.medifirst2000.service.MonitoringAbsenService;
import com.jasamedika.medifirst2000.service.ObatGenerikService;
import com.jasamedika.medifirst2000.service.PayRollReportingService;
import com.jasamedika.medifirst2000.service.PelayananObatService;
import com.jasamedika.medifirst2000.service.PemusnahanBarangService;
import com.jasamedika.medifirst2000.service.PenanggungJawabPasienService;
import com.jasamedika.medifirst2000.service.PengkajianAwalRawatJalanAnakService;
import com.jasamedika.medifirst2000.service.RegistrasiPelayananPasienService;
import com.jasamedika.medifirst2000.service.RegistrasiPelayananService;
import com.jasamedika.medifirst2000.service.RekrutmenService;
import com.jasamedika.medifirst2000.service.ReportService;
import com.jasamedika.medifirst2000.service.ReportingPelayananRekamMedisService;
import com.jasamedika.medifirst2000.service.ReturRuanganService;
import com.jasamedika.medifirst2000.service.StokProdukGlobalService;
import com.jasamedika.medifirst2000.service.StrukPelayananService;
import com.jasamedika.medifirst2000.service.TagihanRekananService;
import com.jasamedika.medifirst2000.util.Age;
import com.jasamedika.medifirst2000.util.AgeCalculator;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.util.CurrencyUtil;
import com.jasamedika.medifirst2000.util.DateUtil;
import com.jasamedika.medifirst2000.util.IndonesianNumberToWords;
import com.jasamedika.medifirst2000.vo.RegistrasiPelayananVO;

/**
 * Controller class for Registrasi Pasien Business
 * 
 */
@RestController
@RequestMapping("/reporting")
public class ReportingController extends LocaleController<RegistrasiPelayananVO>
		implements IBaseRestController<RegistrasiPelayananVO> {
	@Autowired
	private ReportingPelayananRekamMedisService reportingPelayananRekamMedisService;

	@Autowired
	private RuanganDao ruanganDao;

	@Autowired
	private PegawaiDao pegawaiDao;

	@Autowired
	private IndekKinerjaDao indekKinerjaDao;

	@Autowired
	private RekrutmenService rekrutmenService;

	@Autowired
	private PelayananObatService pelayananObatService;

	@Autowired
	private LaundryService laundryService;

	@Autowired
	private PemusnahanBarangService pemusnahanBarangService;

	@Autowired
	private TagihanRekananService tagihanRekananService;

	@Autowired
	private StrukPelayananService strukPelayananService;

	@Autowired
	private ReportingDao reportingDao;

	@Autowired
	private RegistrasiPelayananService registrasiPelayananService;

	@Autowired
	private ObatGenerikDao obatGenerikDao;

	@Autowired
	private PasienDao pasienDao;

	@Autowired
	private PapKeluhanUtamaDao papKeluhanUtamaDao;

	@Autowired
	private PapSkriningGiziDao papSkriningGiziDao;

	@Autowired
	private PapTandaVitalDao papTandaVitalDao;

	@Autowired
	private PasienInstruksiPerjanjianDao pasienInstruksiPerjanjianDao;

	@Autowired
	private SPMRSDao sPMRSDao;

	@Autowired
	private DiagnosaPasienDao diagnosaPasienDao;

	@Autowired
	private PelayananPasienDao pelayananPasienDao;

	@Autowired
	private CheckListProsedurKeselamatanPasienDao checkListProsedurKeselamatanPasienDao;

	@Autowired
	private AsesmenGiziAwalDao asesmenGiziAwalDao;

	@Autowired
	private PapSkriningGiziDetailDao papSkriningGiziDetailDao;

	@Autowired
	private PapTumbuhKembangAnakDao papTumbuhKembangAnakDao;

	@Autowired
	private PapAlergiDao papAlergiDao;

	@Autowired
	private PapMataDao papMataDao;

	@Autowired
	private BillingDao billingDao;

	@Autowired
	private PengkajianAwalNeonatusDao pengkajianAwalNeonatusDao;

	@Autowired
	private ReturRuanganService returRuanganService;

	@Autowired
	private MasalahKeperawatanDetailDao masalahkeperawatanDetailDao;

	@Autowired
	private PengkajianAwalPasienRawatJalanDewasaDao pengkajianAwalPasienRawatJalanDewasaDao;

	@Autowired
	private PapRiwayatKelahiranDao papRiwayatKelahiranDao;

	@Autowired
	private LaboratoriumDao laboratoriumDao;

	@Autowired
	private PapRiwayatImunisasiDao papRiwayatImunisasiDao;

	@Autowired
	private PapKebutuhanEdukasiDao papKebutuhanEdukasiDao;

	@Autowired
	private KebutuhanDasarDao kebutuhanDasarDao;

	@Autowired
	private AnamnesisDao anamansisDao;

	@Autowired
	private PengkajianAwalRawatJalanAnakService pengkajianAwalPasienRawatJalanAnakService;

	@Autowired
	private ObatGenerikService obatGenerikService;

	@Autowired
	private MonitoringAbsenService monitoringAbsenService;

	@Autowired
	private ReportService reportService;

	@Autowired
	private RegistrasiPelayananPasienService registrasiPelayananPasienService;

	@Autowired
	private IndekKinerjaService indekKinerjaService;

	@Autowired
	private PenanggungJawabPasienService penanggungJawabPasienService;

	@Autowired
	private IkiDanRemunerasiService ikiDanRemunerasiService;

	@Autowired
	private PayRollReportingService payRollReportingService;

	@Autowired
	private StokProdukGlobalService stokProdukGlobalService;

	@Autowired
	private KelasDao kelasDao;

	@RequestMapping("/instalasiRawatInap")
	public ModelAndView generateInstalasiRawatInap(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "bulan", required = true) Integer bulan,
			@RequestParam(value = "tahun", required = true) Integer tahun,
			@RequestParam(value = "ruangan", required = true) Integer ruangan,
			@RequestParam(value = "kelas", required = true) Integer kelas) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = formatBulan(bulan).toUpperCase();
		List<InstalasiRawatInapDto> listRawatInapDto = new ArrayList<InstalasiRawatInapDto>();
		List<Object[]> list = reportingPelayananRekamMedisService.findAntrianPasienDiPeriksaByRuanganKelas(ruangan,
				kelas, bulan, tahun);
		InstalasiRawatInapDto dtoBayiBaru = new InstalasiRawatInapDto();
		InstalasiRawatInapDto dtoBayiLama = new InstalasiRawatInapDto();
		InstalasiRawatInapDto dtoBayiJmlh = new InstalasiRawatInapDto();
		InstalasiRawatInapDto dtoAnakBaru = new InstalasiRawatInapDto();
		InstalasiRawatInapDto dtoAnakLama = new InstalasiRawatInapDto();
		InstalasiRawatInapDto dtoAnakJmlh = new InstalasiRawatInapDto();
		InstalasiRawatInapDto dtoIbuBaru = new InstalasiRawatInapDto();
		InstalasiRawatInapDto dtoIbuLama = new InstalasiRawatInapDto();
		InstalasiRawatInapDto dtoIbuJmlh = new InstalasiRawatInapDto();
		dtoBayiBaru.setNo("1");
		dtoBayiBaru.setDeskripsi("Jumlah Pasien");
		dtoBayiBaru.setLevel2("Bayi");
		dtoBayiBaru.setLevel1("Baru");
		dtoBayiLama.setLevel1("Lama");
		dtoBayiJmlh.setLevel1("Total");
		dtoAnakBaru.setLevel2("Anak");
		dtoAnakBaru.setLevel1("Baru");
		dtoAnakLama.setLevel1("Lama");
		dtoAnakJmlh.setLevel1("Total");
		dtoIbuBaru.setLevel2("Ibu");
		dtoIbuBaru.setLevel1("Baru");
		dtoIbuLama.setLevel1("Lama");
		dtoIbuJmlh.setLevel1("Total");
		Long jmlhCountLevel1BayiBaru = 0L;
		Long jmlhCountLevel1BayiLama = 0L;
		Long jmlhCountLevel1AnakBaru = 0L;
		Long jmlhCountLevel1AnakLama = 0L;
		Long jmlhCountLevel1IbuBaru = 0L;
		Long jmlhCountLevel1IbuLama = 0L;
		// Long jmlhCount=0L;
		for (Object[] data : list) {
			// String tanggal=((String) data[1]).split("-")[2];
			String bayiAnakIbu = ((String) data[2]);
			String lamaBaru = ((String) data[3]);
			Long jumlah = ((Long) data[0]);
			Long tempJumlah = jumlah;
			String[] elements = { "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14",
					"15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30",
					"31" };
			if (bayiAnakIbu.equalsIgnoreCase("bayi") && lamaBaru.equalsIgnoreCase("baru")) {
				populateTgl(data, dtoBayiBaru, jumlah, elements);
				jmlhCountLevel1BayiBaru = jmlhCountLevel1BayiBaru + tempJumlah;
				dtoBayiBaru.setJmlhLevel1(jmlhCountLevel1BayiBaru);
			} else if (bayiAnakIbu.equalsIgnoreCase("bayi") && lamaBaru.equalsIgnoreCase("lama")) {
				populateTgl(data, dtoBayiLama, jumlah, elements);
				jmlhCountLevel1BayiLama = jmlhCountLevel1BayiLama + tempJumlah;
				dtoBayiLama.setJmlhLevel1(jmlhCountLevel1BayiLama);
			} else if (bayiAnakIbu.equalsIgnoreCase("anak") && lamaBaru.equalsIgnoreCase("baru")) {
				populateTgl(data, dtoAnakBaru, jumlah, elements);
				jmlhCountLevel1AnakBaru = jmlhCountLevel1AnakBaru + tempJumlah;
				dtoAnakBaru.setJmlhLevel1(jmlhCountLevel1AnakBaru);
			} else if (bayiAnakIbu.equalsIgnoreCase("anak") && lamaBaru.equalsIgnoreCase("lama")) {
				populateTgl(data, dtoAnakLama, jumlah, elements);
				jmlhCountLevel1AnakLama = jmlhCountLevel1AnakLama + tempJumlah;
				dtoAnakLama.setJmlhLevel1(jmlhCountLevel1AnakLama);
			} else if (bayiAnakIbu.equalsIgnoreCase("ibu") && lamaBaru.equalsIgnoreCase("baru")) {
				populateTgl(data, dtoIbuBaru, jumlah, elements);
				jmlhCountLevel1IbuBaru = jmlhCountLevel1IbuBaru + tempJumlah;
				dtoIbuBaru.setJmlhLevel1(jmlhCountLevel1IbuBaru);
			} else if (bayiAnakIbu.equalsIgnoreCase("ibu") && lamaBaru.equalsIgnoreCase("lama")) {
				populateTgl(data, dtoIbuLama, jumlah, elements);
				jmlhCountLevel1IbuLama = jmlhCountLevel1IbuLama + tempJumlah;
				dtoIbuLama.setJmlhLevel1(jmlhCountLevel1IbuLama);
			}
		}
		populateCountJmlh(dtoBayiBaru, dtoBayiLama, dtoBayiJmlh, dtoAnakJmlh, dtoIbuJmlh, dtoAnakBaru, dtoAnakLama,
				dtoIbuBaru, dtoIbuLama);

		listRawatInapDto.add(dtoBayiBaru);
		listRawatInapDto.add(dtoBayiLama);
		listRawatInapDto.add(dtoBayiJmlh);
		listRawatInapDto.add(dtoAnakBaru);
		listRawatInapDto.add(dtoAnakLama);
		listRawatInapDto.add(dtoAnakJmlh);
		listRawatInapDto.add(dtoIbuBaru);
		listRawatInapDto.add(dtoIbuLama);
		listRawatInapDto.add(dtoIbuJmlh);

		// Visit
		List<Object[]> list2 = reportingPelayananRekamMedisService.findSuratPermintaanMasukByRuanganKelas(ruangan,
				kelas, bulan, tahun);

		InstalasiRawatInapDto dtoBayi = new InstalasiRawatInapDto();
		InstalasiRawatInapDto dtoAnak = new InstalasiRawatInapDto();
		InstalasiRawatInapDto dtoIbu = new InstalasiRawatInapDto();
		dtoBayi.setNo("2");
		dtoBayi.setDeskripsi("Visit");
		dtoBayi.setLevel1("Bayi");
		dtoAnak.setLevel1("Anak");
		dtoIbu.setLevel1("Ibu");
		Long jmlhCountLevel1Ibu = 0L;
		Long jmlhCountLevel1Anak = 0L;
		Long jmlhCountLevel1Bayi = 0L;
		for (Object[] data : list2) {
			String tanggal = ((String) data[1]).split("-")[2];
			String bayiAnakIbu = ((String) data[2]);
			Long jumlah = ((Long) data[0]);
			Long tempJumlah = jumlah;
			String[] elements = { "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14",
					"15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30",
					"31" };
			if (bayiAnakIbu.equalsIgnoreCase("bayi")) {
				populateTgl(data, dtoBayi, jumlah, elements);
				jmlhCountLevel1Bayi = jmlhCountLevel1Bayi + tempJumlah;
				dtoBayi.setJmlhLevel1(jmlhCountLevel1IbuLama);
			} else if (bayiAnakIbu.equalsIgnoreCase("anak")) {
				populateTgl(data, dtoAnak, jumlah, elements);
				jmlhCountLevel1Anak = jmlhCountLevel1Anak + tempJumlah;
				dtoAnak.setJmlhLevel1(jmlhCountLevel1Anak);
			} else if (bayiAnakIbu.equalsIgnoreCase("ibu")) {
				populateTgl(data, dtoIbu, jumlah, elements);
				jmlhCountLevel1Ibu = jmlhCountLevel1Ibu + tempJumlah;
				dtoIbu.setJmlhLevel1(jmlhCountLevel1Ibu);
			}
		}

		listRawatInapDto.add(dtoBayi);
		listRawatInapDto.add(dtoAnak);
		listRawatInapDto.add(dtoIbu);

		/*
		 * Konsultasi List<Object[]> list3 =
		 * reportingPelayananRekamMedisService.
		 * findSuratPermintaanMasukByRuanganKelas(ruangan, kelas, bulan, tahun);
		 * 
		 * InstalasiRawatInapDto dtoBayiKonsultasi = new
		 * InstalasiRawatInapDto(); InstalasiRawatInapDto dtoAnakKonsultasi =
		 * new InstalasiRawatInapDto(); InstalasiRawatInapDto dtoIbuKonsultasi =
		 * new InstalasiRawatInapDto(); dtoBayiKonsultasi.setNo("3");
		 * dtoBayiKonsultasi.setDeskripsi("Konsultasi");
		 * dtoBayiKonsultasi.setLevel1("Bayi");
		 * dtoAnakKonsultasi.setLevel1("Anak");
		 * dtoIbuKonsultasi.setLevel1("Ibu");
		 * 
		 * for (Object[] data : list3) { String tanggal=((String)
		 * data[1]).split("-")[2]; String bayiAnakIbu=((String) data[2]); Long
		 * jumlah=((Long) 0L); String[] elements = { "01",
		 * "02","03","04","05","06","07","08","09","10", "11",
		 * "12","13","14","15","16","17","18","19","20", "21",
		 * "22","23","24","25","26","27","28","29","30","31"};
		 * if(bayiAnakIbu.equalsIgnoreCase("bayi")){ populateTgl(data,
		 * dtoBayiKonsultasi, jumlah, elements); }else
		 * if(bayiAnakIbu.equalsIgnoreCase("anak")){ populateTgl(data,
		 * dtoAnakKonsultasi, jumlah, elements); }else
		 * if(bayiAnakIbu.equalsIgnoreCase("ibu")){ populateTgl(data,
		 * dtoIbuKonsultasi, jumlah, elements); } }
		 * 
		 * listRawatInapDto.add(dtoBayiKonsultasi);
		 * listRawatInapDto.add(dtoAnakKonsultasi);
		 * listRawatInapDto.add(dtoIbuKonsultasi);
		 */
		m.addObject("dataSource", listRawatInapDto);
		m.addObject("bulan", monthAllCaplock);
		m.addObject("tahun", String.valueOf(tahun));
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("ruangan", ruanganDao.findOne(ruangan).getNamaRuangan());
		m.addObject("kelas", kelasDao.findOne(kelas).getNamaKelas());
		m.addObject("nama", "Nama Lengkap");
		m.addObject("nip", "123456789");
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/instalasiHarianRawatInap")
	public ModelAndView generateInstalasiHarianRawatInap(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "bulan", required = true) Integer bulan,
			@RequestParam(value = "tahun", required = true) Integer tahun,
			@RequestParam(value = "ruangan", required = true) Integer ruangan,
			@RequestParam(value = "kelas", required = true) Integer kelas) {
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = formatBulan(bulan).toUpperCase();
		List<InstalasiRawatInapDto> listRawatInapDto = new ArrayList<InstalasiRawatInapDto>();

		Object[] object = new Object[] { new Long(0L), new String("2016-10-10"), new String("Dua"),
				new String("Tiga") };
		List<Object[]> list = new ArrayList<Object[]>();
		list.add(object);
		for (Object[] data : list) {
			InstalasiRawatInapDto dto = new InstalasiRawatInapDto();
			dto.setNo("1");
			dto.setDeskripsi("Jumlah Pasien : ");
			dto.setLevel1(Character.toUpperCase(((String) data[2]).charAt(0)) + ((String) data[2]).substring(1));
			dto.setLevel2(Character.toUpperCase(((String) data[3]).charAt(0)) + ((String) data[3]).substring(1));
			dto.setCount1((Long) data[0]);
			dto.setTgl(((String) data[1]).split("-")[2]);
			listRawatInapDto.add(dto);
		}

		m.addObject("dataSource", listRawatInapDto);
		m.addObject("bulan", monthAllCaplock);
		m.addObject("tahun", String.valueOf(tahun));
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("ruangan", ruanganDao.findOne(ruangan).getNamaRuangan());
		m.addObject("kelas", kelasDao.findOne(kelas).getNamaKelas());
		m.addObject("nama", "Nama Lengkap");
		m.addObject("nip", "123456789");
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/pasienPerDiagnosa")
	public ModelAndView generatePasienPerDiagnosa(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "bulan", required = true) Integer bulan,
			@RequestParam(value = "tahun", required = true) Integer tahun,
			@RequestParam(value = "ruangan", required = true) Integer ruangan,
			@RequestParam(value = "kelas", required = true) Integer kelas) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = formatBulan(bulan).toUpperCase();
		List<InstalasiRawatInapDto> listRawatInapDto = new ArrayList<InstalasiRawatInapDto>();

		Object[] object = new Object[] { new Long(0L), new String("2016-10-10"), new String("Dua"),
				new String("Tiga") };
		List<Object[]> list = new ArrayList<Object[]>();
		list.add(object);
		for (Object[] data : list) {
			InstalasiRawatInapDto dto = new InstalasiRawatInapDto();
			dto.setNo("1");
			dto.setDeskripsi("Jumlah Pasien : ");
			dto.setLevel1(Character.toUpperCase(((String) data[2]).charAt(0)) + ((String) data[2]).substring(1));
			dto.setLevel2(Character.toUpperCase(((String) data[3]).charAt(0)) + ((String) data[3]).substring(1));
			dto.setCount1((Long) data[0]);
			dto.setTgl(((String) data[1]).split("-")[2]);
			listRawatInapDto.add(dto);
		}

		m.addObject("dataSource", listRawatInapDto);
		m.addObject("bulan", monthAllCaplock);
		m.addObject("tahun", String.valueOf(tahun));
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("ruangan", ruanganDao.findOne(ruangan).getNamaRuangan());
		m.addObject("kelas", kelasDao.findOne(kelas).getNamaKelas());
		m.addObject("nama", "Nama Lengkap");
		m.addObject("nip", "123456789");
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/pasienPerDokter")
	public ModelAndView generatePasienPerDokter(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "bulan", required = true) Integer bulan,
			@RequestParam(value = "tahun", required = true) Integer tahun,
			@RequestParam(value = "ruangan", required = true) Integer ruangan,
			@RequestParam(value = "kelas", required = true) Integer kelas) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<InstalasiRawatInapDto> listRawatInapDto = new ArrayList<InstalasiRawatInapDto>();

		Object[] object = new Object[] { new Long(0L), new String("2016-10-10"), new String("Dua"),
				new String("Tiga") };
		List<Object[]> list = new ArrayList<Object[]>();
		list.add(object);
		for (Object[] data : list) {
			InstalasiRawatInapDto dto = new InstalasiRawatInapDto();
			dto.setNo("1");
			dto.setDeskripsi("Jumlah Pasien : ");
			dto.setLevel1(Character.toUpperCase(((String) data[2]).charAt(0)) + ((String) data[2]).substring(1));
			dto.setLevel2(Character.toUpperCase(((String) data[3]).charAt(0)) + ((String) data[3]).substring(1));
			dto.setCount1((Long) data[0]);
			dto.setTgl(((String) data[1]).split("-")[2]);
			listRawatInapDto.add(dto);
		}

		m.addObject("dataSource", listRawatInapDto);
		m.addObject("bulan", monthAllCaplock);
		m.addObject("tahun", String.valueOf(tahun));
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("ruangan", ruanganDao.findOne(ruangan).getNamaRuangan());
		m.addObject("kelas", kelasDao.findOne(kelas).getNamaKelas());
		m.addObject("nama", "Nama Lengkap");
		m.addObject("nip", "123456789");
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/morbiditasMortalitasPasien")
	public ModelAndView generateMorbiditasMortalitasPasien(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate,
			@RequestParam(value = "rawat", required = true) Integer rawat) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<MorbiditasMortalitasDto> listDto = new ArrayList<MorbiditasMortalitasDto>();

		List<Object[]> list = reportingPelayananRekamMedisService
				.findAntrianPasienDiPeriksaByPeriodeAndDepartemen(startDate, endDate, rawat);
		for (Object[] data : list) {
			String penyakit = ((String) data[1]);
			String umur = ((String) data[2]);
			String jenisKelamin = ((String) data[3]);
			String statusKeluar = ((String) data[2]);
			Long count = ((Long) data[0]);
			MorbiditasMortalitasDto dto = new MorbiditasMortalitasDto();
			dto.setNoDaftarTerperinci("1");
			dto.setGolongan(penyakit);
			dto.setHr0_28(umur.equals("hr0_28") ? count : 0L);
			dto.setBln1_11(umur.equals("bln1_11") ? count : 0L);
			dto.setThn1_4(umur.equals("thn1_4") ? count : 0L);
			dto.setThn5_14(umur.equals("thn5_14") ? count : 0L);
			dto.setThn15_24(umur.equals("thn15_24") ? count : 0L);
			dto.setThn25_44(umur.equals("thn25_44") ? count : 0L);
			dto.setThn45_64(umur.equals("thn45_64") ? count : 0L);
			dto.setThn65(umur.equals("thn65") ? count : 0L);
			dto.setLakiLaki(jenisKelamin.equals("Laki-Laki") ? count : 0L);
			dto.setPerempuan(jenisKelamin.equals("Perempuan") ? count : 0L);
			dto.setJumlahPasienMeninggal(jenisKelamin.equals("Meninggal") ? count : 0L);
			dto.setJumlahPasienKeluar(!jenisKelamin.equals("Meninggal") ? count : 0L);
			listDto.add(dto);
		}

		m.addObject("dataSource", listDto);
		m.addObject("bulan", monthAllCaplock);
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/indexPenyakitRawatInap")
	public ModelAndView generateIndexPenyakitRawatInap(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "bulan", required = true) Integer bulan,
			@RequestParam(value = "tahun", required = true) Integer tahun) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<IndexPenyakitRawatInapDto> listRawatInapDto = new ArrayList<IndexPenyakitRawatInapDto>();

		List<Object[]> list = reportingPelayananRekamMedisService.findDiagnosaPasienRawatInapAll();
		for (Object[] data : list) {
			IndexPenyakitRawatInapDto dto = new IndexPenyakitRawatInapDto();
			String noCm = (String) data[0];
			String pL = (String) data[1];
			String kodePos = "";
			String penanggung = (String) data[2];
			String bed = (String) data[3];
			Date tglMasuk = (Date) data[4];
			Date tglKeluar = (Date) data[5];
			String vcGes = "";
			String jrJk = "";
			String hasil = "";
			String kateg = "";
			String icd = (String) data[7];
			String dokter = (String) data[8];
			Date tglLahir = (Date) data[9];
			String umur = AgeCalculator.calculateAge2(tglMasuk, tglLahir).toString();
			dto.setNoCm(noCm);
			dto.setpL(pL);
			dto.setKodePos(kodePos);
			dto.setPenanggung(penanggung);
			dto.setBed(bed);
			if (tglMasuk != null)
				dto.setTglMasuk(new SimpleDateFormat("dd-MM-yyyy hh:mm:ss").format(tglMasuk));
			if (tglKeluar != null)
				dto.setTglKeluar(new SimpleDateFormat("dd-MM-yyyy hh:mm:ss").format(tglKeluar));
			dto.setVcGes(vcGes);
			dto.setJrJk(jrJk);
			dto.setKateg(kateg);
			dto.setIcd(icd);
			dto.setDokter(dokter);
			dto.setUmur(umur);
			listRawatInapDto.add(dto);
		}

		m.addObject("dataSource", listRawatInapDto);
		m.addObject("bulan", monthAllCaplock);
		m.addObject("tahun", String.valueOf(tahun));
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("nama", "Nama Lengkap");
		m.addObject("nip", "123456789");
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/indexPenyakitRawatJalan")
	public ModelAndView generateIndexPenyakitRawatJalan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "bulan", required = true) Integer bulan,
			@RequestParam(value = "tahun", required = true) Integer tahun) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<IndexPenyakitRawatInapDto> listRawatInapDto = new ArrayList<IndexPenyakitRawatInapDto>();

		List<Object[]> list = reportingPelayananRekamMedisService.findDiagnosaPasienRawatJalanAll();
		for (Object[] data : list) {
			IndexPenyakitRawatInapDto dto = new IndexPenyakitRawatInapDto();
			String noCm = (String) data[0];
			String pL = (String) data[1];
			String kodePos = "";
			String penanggung = (String) data[2];
			String bed = (String) data[3];
			Date tglMasuk = (Date) data[4];
			Date tglKeluar = (Date) data[5];
			String vcGes = "";
			String jrJk = "";
			String hasil = "";
			String kateg = "";
			String icd = (String) data[7];
			String dokter = (String) data[8];
			Date tglLahir = (Date) data[9];
			String umur = AgeCalculator.calculateAge2(tglMasuk, tglLahir).toString();
			dto.setNoCm(noCm);
			dto.setpL(pL);
			dto.setKodePos(kodePos);
			dto.setPenanggung(penanggung);
			dto.setBed(bed);
			if (tglMasuk != null)
				dto.setTglMasuk(new SimpleDateFormat("dd-MM-yyyy hh:mm:ss").format(tglMasuk));
			if (tglKeluar != null)
				dto.setTglKeluar(new SimpleDateFormat("dd-MM-yyyy hh:mm:ss").format(tglKeluar));
			dto.setVcGes(vcGes);
			dto.setJrJk(jrJk);
			dto.setKateg(kateg);
			dto.setIcd(icd);
			dto.setDokter(dokter);
			dto.setUmur(umur);
			listRawatInapDto.add(dto);
		}

		m.addObject("dataSource", listRawatInapDto);
		m.addObject("bulan", monthAllCaplock);
		m.addObject("tahun", String.valueOf(tahun));
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("nama", "Nama Lengkap");
		m.addObject("nip", "123456789");
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/icdPerPasien")
	public ModelAndView generateIcdPerPasien(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "bulan", required = true) Integer bulan,
			@RequestParam(value = "tahun", required = true) Integer tahun,
			@RequestParam(value = "ruangan", required = true) Integer ruangan,
			@RequestParam(value = "kelas", required = true) Integer kelas) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<InstalasiRawatInapDto> listRawatInapDto = new ArrayList<InstalasiRawatInapDto>();

		Object[] object = new Object[] { new Long(0L), new String("2016-10-10"), new String("Dua"),
				new String("Tiga") };
		List<Object[]> list = new ArrayList<Object[]>();
		list.add(object);
		for (Object[] data : list) {
			InstalasiRawatInapDto dto = new InstalasiRawatInapDto();
			dto.setNo("1");
			dto.setDeskripsi("Jumlah Pasien : ");
			dto.setLevel1(Character.toUpperCase(((String) data[2]).charAt(0)) + ((String) data[2]).substring(1));
			dto.setLevel2(Character.toUpperCase(((String) data[3]).charAt(0)) + ((String) data[3]).substring(1));
			dto.setCount1((Long) data[0]);
			dto.setTgl(((String) data[1]).split("-")[2]);
			listRawatInapDto.add(dto);
		}

		m.addObject("dataSource", listRawatInapDto);
		m.addObject("bulan", monthAllCaplock);
		m.addObject("tahun", String.valueOf(tahun));
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("ruangan", ruanganDao.findOne(ruangan).getNamaRuangan());
		m.addObject("kelas", kelasDao.findOne(kelas).getNamaKelas());
		m.addObject("nama", "Nama Lengkap");
		m.addObject("nip", "123456789");
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/statistikRawatInapBulanan")
	public ModelAndView generateStatistikRawatInapBulanan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "bulan", required = true) Integer bulan,
			@RequestParam(value = "tahun", required = true) Integer tahun,
			@RequestParam(value = "ruangan", required = true) Integer ruangan,
			@RequestParam(value = "kelas", required = true) Integer kelas) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<InstalasiRawatInapDto> listRawatInapDto = new ArrayList<InstalasiRawatInapDto>();

		Object[] object = new Object[] { new Long(0L), new String("2016-10-10"), new String("Dua"),
				new String("Tiga") };
		List<Object[]> list = new ArrayList<Object[]>();
		list.add(object);
		for (Object[] data : list) {
			InstalasiRawatInapDto dto = new InstalasiRawatInapDto();
			dto.setNo("1");
			dto.setDeskripsi("Jumlah Pasien : ");
			dto.setLevel1(Character.toUpperCase(((String) data[2]).charAt(0)) + ((String) data[2]).substring(1));
			dto.setLevel2(Character.toUpperCase(((String) data[3]).charAt(0)) + ((String) data[3]).substring(1));
			dto.setCount1((Long) data[0]);
			dto.setTgl(((String) data[1]).split("-")[2]);
			listRawatInapDto.add(dto);
		}

		m.addObject("dataSource", listRawatInapDto);
		m.addObject("bulan", monthAllCaplock);
		m.addObject("tahun", String.valueOf(tahun));
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("ruangan", ruanganDao.findOne(ruangan).getNamaRuangan());
		m.addObject("kelas", kelasDao.findOne(kelas).getNamaKelas());
		m.addObject("nama", "Nama Lengkap");
		m.addObject("nip", "123456789");
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/statistikRawatInapTahunan")
	public ModelAndView generateStatistikRawatInapTahunan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "bulan", required = true) Integer bulan,
			@RequestParam(value = "tahun", required = true) Integer tahun,
			@RequestParam(value = "ruangan", required = true) Integer ruangan,
			@RequestParam(value = "kelas", required = true) Integer kelas) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<InstalasiRawatInapDto> listRawatInapDto = new ArrayList<InstalasiRawatInapDto>();

		Object[] object = new Object[] { new Long(0L), new String("2016-10-10"), new String("Dua"),
				new String("Tiga") };
		List<Object[]> list = new ArrayList<Object[]>();
		list.add(object);
		for (Object[] data : list) {
			InstalasiRawatInapDto dto = new InstalasiRawatInapDto();
			dto.setNo("1");
			dto.setDeskripsi("Jumlah Pasien : ");
			dto.setLevel1(Character.toUpperCase(((String) data[2]).charAt(0)) + ((String) data[2]).substring(1));
			dto.setLevel2(Character.toUpperCase(((String) data[3]).charAt(0)) + ((String) data[3]).substring(1));
			dto.setCount1((Long) data[0]);
			dto.setTgl(((String) data[1]).split("-")[2]);
			listRawatInapDto.add(dto);
		}

		m.addObject("dataSource", listRawatInapDto);
		m.addObject("bulan", monthAllCaplock);
		m.addObject("tahun", String.valueOf(tahun));
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("ruangan", ruanganDao.findOne(ruangan).getNamaRuangan());
		m.addObject("kelas", kelasDao.findOne(kelas).getNamaKelas());
		m.addObject("nama", "Nama Lengkap");
		m.addObject("nip", "123456789");
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@Override
	public ResponseEntity<Collection<RegistrasiPelayananVO>> getAllVOWithQueryString(HttpServletRequest request,
			Integer page, Integer limit, String sort, String dir) {
		return null;
	}

	@Override
	public ResponseEntity<RegistrasiPelayananVO> getVO(Integer id) {
		return null;
	}

	@Override
	public ResponseEntity<String> addVO(RegistrasiPelayananVO vo) {
		return null;
	}

	@Override
	public ResponseEntity<String> editVO(RegistrasiPelayananVO vo) {
		return null;
	}

	@Override
	public ResponseEntity<String> deleteVO(Integer id) {
		return null;
	}

	@Override
	public ResponseEntity<List<RegistrasiPelayananVO>> getAllVO() {
		return null;
	}

	private void populateTgl(Object[] data, InstalasiRawatInapDto dto, Long jumlah, String[] elements) {
		for (int i = 0; i <= elements.length - 1; i++) {
			if (((String) data[1]).split("-")[2].equalsIgnoreCase(elements[i])) {
				bbbb(dto);
				if (i == 0)
					dto.setCount1(jumlah);
				if (i == 1)
					dto.setCount2(jumlah);
				if (i == 2)
					dto.setCount3(jumlah);
				if (i == 3)
					dto.setCount4(jumlah);
				if (i == 4)
					dto.setCount5(jumlah);
				if (i == 5)
					dto.setCount6(jumlah);
				if (i == 6)
					dto.setCount7(jumlah);
				if (i == 7)
					dto.setCount8(jumlah);
				if (i == 8)
					dto.setCount9(jumlah);
				if (i == 9)
					dto.setCount10(jumlah);
				if (i == 10)
					dto.setCount11(jumlah);
				if (i == 11)
					dto.setCount12(jumlah);
				if (i == 12)
					dto.setCount13(jumlah);
				if (i == 13)
					dto.setCount14(jumlah);
				if (i == 14)
					dto.setCount15(jumlah);
				if (i == 15)
					dto.setCount16(jumlah);
				if (i == 16)
					dto.setCount17(jumlah);
				if (i == 17)
					dto.setCount18(jumlah);
				if (i == 18)
					dto.setCount19(jumlah);
				if (i == 19)
					dto.setCount20(jumlah);
				if (i == 20)
					dto.setCount21(jumlah);
				if (i == 21)
					dto.setCount22(jumlah);
				if (i == 22)
					dto.setCount23(jumlah);
				if (i == 23)
					dto.setCount24(jumlah);
				if (i == 24)
					dto.setCount25(jumlah);
				if (i == 25)
					dto.setCount26(jumlah);
				if (i == 26)
					dto.setCount27(jumlah);
				if (i == 27)
					dto.setCount28(jumlah);
				if (i == 28)
					dto.setCount29(jumlah);
				if (i == 29)
					dto.setCount30(jumlah);
				if (i == 30)
					dto.setCount31(jumlah);
			}
		}
	}

	private void bbbb(InstalasiRawatInapDto dto) {
		dto.setCount1(0L);
		dto.setCount2(0L);
		dto.setCount3(0L);
		dto.setCount4(0L);
		dto.setCount5(0L);
		dto.setCount6(0L);
		dto.setCount7(0L);
		dto.setCount8(0L);
		dto.setCount9(0L);
		dto.setCount10(0L);
		dto.setCount11(0L);
		dto.setCount12(0L);
		dto.setCount13(0L);
		dto.setCount14(0L);
		dto.setCount15(0L);
		dto.setCount16(0L);
		dto.setCount17(0L);
		dto.setCount18(0L);
		dto.setCount19(0L);
		dto.setCount20(0L);
		dto.setCount21(0L);
		dto.setCount22(0L);
		dto.setCount23(0L);
		dto.setCount24(0L);
		dto.setCount25(0L);
		dto.setCount26(0L);
		dto.setCount27(0L);
		dto.setCount28(0L);
		dto.setCount29(0L);
		dto.setCount30(0L);
		dto.setCount31(0L);
	}

	private void populateCountJmlh(InstalasiRawatInapDto dtoBayiBaru, InstalasiRawatInapDto dtoBayiLama,
			InstalasiRawatInapDto dtoBayiJmlh, InstalasiRawatInapDto dtoAnakJmlh, InstalasiRawatInapDto dtoIbuJmlh,
			InstalasiRawatInapDto dtoAnakBaru, InstalasiRawatInapDto dtoAnakLama, InstalasiRawatInapDto dtoIbuBaru,
			InstalasiRawatInapDto dtoIbuLama) {
		dtoBayiJmlh.setCount11(dtoBayiBaru.getCount11() + dtoBayiLama.getCount11());
		dtoAnakJmlh.setCount11(dtoAnakBaru.getCount11() + dtoAnakLama.getCount11());
		// dtoIbuJmlh.setCount11(dtoIbuBaru.getCount11()+dtoIbuLama.getCount11());

		dtoBayiJmlh.setCount29(dtoBayiBaru.getCount29() + dtoBayiLama.getCount29());
		dtoAnakJmlh.setCount29(dtoAnakBaru.getCount29() + dtoAnakLama.getCount29());
		// dtoIbuJmlh.setCount29(dtoIbuBaru.getCount29()+dtoIbuLama.getCount29());
	}

	private String formatBulan(Integer bulan) {
		String bulanString = "";
		switch (bulan) {
		case 1:
			bulanString = "januari";
			break;
		case 2:
			bulanString = "februari";
			break;
		case 3:
			bulanString = "maret";
			break;
		case 4:
			bulanString = "april";
			break;
		case 5:
			bulanString = "mei";
			break;
		case 6:
			bulanString = "juni";
			break;
		case 7:
			bulanString = "juli";
			break;
		case 8:
			bulanString = "agustus";
			break;
		case 9:
			bulanString = "september";
			break;
		case 10:
			bulanString = "oktober";
			break;
		case 11:
			bulanString = "november";
			break;
		case 12:
			bulanString = "desember";
			break;
		}
		return bulanString;
	}

	@RequestMapping("/lapBukuRegisterMasukRi")
	public ModelAndView generateLapBukuRegisterMasukRi(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = false) String startDate,
			@RequestParam(value = "endDate", required = false) String endDate,
			@RequestParam(value = "ruangan", required = false) Integer ruangan) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<BukuRegisterMasukDto> bukuRegisterMasukList = new ArrayList<BukuRegisterMasukDto>();

		List<Object[]> list = reportingPelayananRekamMedisService.findAntrianPasienDiPeriksaByRuanganPeriode(ruangan,
				startDate, endDate);
		for (Object[] data : list) {
			String noPendaftaran = (String) data[0];
			Date tglPendaftaran = (Date) data[1];
			String noCm = (String) data[2];
			String namaPasien = (String) data[3];
			String jenisKelamin = (String) data[4];
			String jenisPasien = (String) data[5];
			String statusPasienRs = (String) data[6];
			String statusPasien = (String) data[7];
			String caraMasuk = (String) data[8];
			String ruanganPerujuk = (String) data[9];
			String statusKeluar = (String) data[10];
			String statusPulang = (String) data[11];
			String kondisiPulang = (String) data[12];
			Date tglKeluar = (Date) data[13];
			String noKamar = (String) data[14];
			String noBed = (String) data[15];
			String kelasPelayanan = (String) data[16];
			String kasusPenyakit = (String) data[17];
			BukuRegisterMasukDto dto = new BukuRegisterMasukDto();
			dto.setCaraMasuk(caraMasuk);
			dto.setJenisKelamin(jenisKelamin);
			dto.setJenisPasien(jenisPasien);
			dto.setKasusPenyakit(kasusPenyakit);
			dto.setKelasPelayanan(kelasPelayanan);
			dto.setKondisiPulang(kondisiPulang);
			dto.setNoKamar(noKamar);
			dto.setNamaPasien(namaPasien);
			dto.setNoBed(noBed);
			dto.setNoCm(noCm);
			dto.setNoPendaftaran(noPendaftaran);
			dto.setRuanganPerujuk(ruanganPerujuk);
			dto.setStatusKeluar(statusKeluar);
			dto.setStatusPasien(statusPasien);
			dto.setStatusPasienRs(statusPasienRs);
			dto.setStatusPulang(statusPulang);
			dto.setTglKeluar(DateUtil.formatDate(tglKeluar));
			dto.setTglPendaftaran(DateUtil.formatDate(tglPendaftaran));
			bukuRegisterMasukList.add(dto);
		}

		m.addObject("dataSource", bukuRegisterMasukList);
		m.addObject("startDate", startDate);
		m.addObject("endDate", endDate);
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		if (CommonUtil.isNotNullOrEmpty(ruangan)) {
			m.addObject("ruangan", ruanganDao.findOne(ruangan).getNamaRuangan());
		}
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapBukuRegisterPelayananRi")
	public ModelAndView generateLapBukuRegisterPelayananRi(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<BukuRegisterPelayananDto> listBukuRegisterPelayananDto = new ArrayList<BukuRegisterPelayananDto>();

		List<Object[]> list = reportingPelayananRekamMedisService.findPelayananPasienByRuanganPeriode(startDate,
				endDate);
		for (Object[] data : list) {
			String noPendaftaran = (String) data[0];
			String noCm = (String) data[1];
			String namaPasien = (String) data[2];
			String jk = (String) data[3];
			String jenisPasien = (String) data[4];
			String kelas = (String) data[5];
			Date tglPelayanan = (Date) data[6];
			String jenisPelayanan = (String) data[7];
			String rk = (String) data[8];
			String namaPelayanan = (String) data[9];
			String asalPelayanan = (String) data[10];
			Double qty = (Double) data[11];
			Double harga = (Double) data[12];
			String hargaCito = (String) data[13];
			String hargaService = (String) data[14];
			String biayaAdministrasi = (String) data[15];
			Double totalBiaya = (Double) data[16];
			Double hutangPenjamin = (Double) data[17];
			Double tanggunganRs = (Double) data[18];
			Double diskon = (Double) data[19];
			String harusBayar = (String) data[20];
			String dokterOperator = (String) data[21];
			String dokterAnastesi = (String) data[22];
			String dokterPendamping = (String) data[23];
			String ruanganPelayanan = (String) data[24];
			String tglBkm = (String) data[25];
			BukuRegisterPelayananDto dto = new BukuRegisterPelayananDto();
			dto.setAsalPelayanan(asalPelayanan);
			dto.setBiayaAdministrasi(biayaAdministrasi);
			dto.setDokterAnastesi(dokterAnastesi);
			dto.setDokterOperator(dokterOperator);
			dto.setDokterPendamping(dokterPendamping);
			dto.setHarga(String.valueOf(harga));
			dto.setHargaCito(hargaCito);
			dto.setHargaService(hargaService);
			dto.setHarusBayar(harusBayar);
			dto.setHutangPenjamin(String.valueOf(hutangPenjamin));
			dto.setTanggunganRs(String.valueOf(tanggunganRs));
			dto.setTotalBiaya(String.valueOf(totalBiaya));
			dto.setDiskon(String.valueOf(diskon));
			dto.setJenisPasien(jenisPasien);
			dto.setJenisPelayanan(jenisPelayanan);
			dto.setJk(jk);
			dto.setKelas(kelas);
			dto.setNamaPasien(namaPasien);
			dto.setNamaPelayanan(namaPelayanan);
			dto.setNoCm(noCm);
			dto.setNoPendaftaran(noPendaftaran);
			dto.setQty(String.valueOf(qty));
			dto.setRk(rk);
			dto.setRuanganPelayanan(ruanganPelayanan);
			dto.setTglBkm(tglBkm);
			dto.setTglPelayanan(DateUtil.formatDate(tglPelayanan));
			listBukuRegisterPelayananDto.add(dto);
		}
		m.addObject("dataSource", listBukuRegisterPelayananDto);
		m.addObject("startDate", startDate);
		m.addObject("endDate", endDate);
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapKunjunganBdsJenisDiagnosa")
	public ModelAndView generateLapKunjunganBdsJenisDiagnosa(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<KunjunganPasienJenisDiagnosaDto> listKunjunganPasienStatusDto = new ArrayList<KunjunganPasienJenisDiagnosaDto>();

		List<Object[]> listStatusPasien = reportingPelayananRekamMedisService.findJenisDiagnosaPasien(startDate,
				endDate);
		for (Object[] data : listStatusPasien) {
			String tglRegistrasi = ((String) data[1]);
			String ruangan = ((String) data[2]);
			String detailJudul = ((String) data[3]);
			String kdDiagnosa = ((String) data[4]);
			String namaDiagnosa = ((String) data[5]);
			String jenisKelamin = ((String) data[6]);
			String judul = ((String) data[7]);
			String noRegistrasi = ((String) data[0]);
			KunjunganPasienJenisDiagnosaDto abc = new KunjunganPasienJenisDiagnosaDto();
			abc.setJudul(judul);
			abc.setNoRegistrasi(noRegistrasi);
			abc.setDetailJudul(detailJudul);
			abc.setKodeDiagnosa(kdDiagnosa);
			abc.setNamaDiagnosa(namaDiagnosa);
			abc.setRuangan(ruangan);
			abc.setTglRegistrasi(tglRegistrasi);
			abc.setJenisKelamin(jenisKelamin);
			listKunjunganPasienStatusDto.add(abc);
		}
		m.addObject("dataSource", listKunjunganPasienStatusDto);
		m.addObject("startDate", startDate);
		m.addObject("endDate", endDate);
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapKunjunganBdsStatusDanJenisOperasi")
	public ModelAndView generateLapKunjunganBdsStatusDanJenisOperasi(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<KunjunganPasienStatusDanJenisPasienDto2> listKunjunganPasienStatusDto = new ArrayList<KunjunganPasienStatusDanJenisPasienDto2>();

		List<Object[]> listStatusPasien = reportingPelayananRekamMedisService
				.findAntrianPasienDiperiksaStatusPasien(startDate, endDate);
		for (Object[] data : listStatusPasien) {
			String tglRegistrasi = ((String) data[1]);
			String ruangan = ((String) data[2]);
			String statusPasien = ((String) data[3]);
			String jenisKelamin = ((String) data[4]);
			String judul = ((String) data[5]);
			String noRegistrasi = ((String) data[0]);
			KunjunganPasienStatusDanJenisPasienDto2 abc = new KunjunganPasienStatusDanJenisPasienDto2();
			abc.setJudul(judul);
			abc.setDetailJudul(statusPasien);
			abc.setNoRegistrasi(noRegistrasi);
			abc.setRuangan(ruangan);
			abc.setTglRegistrasi(tglRegistrasi);
			abc.setJenisKelamin(jenisKelamin);
			listKunjunganPasienStatusDto.add(abc);
		}
		m.addObject("dataSource", listKunjunganPasienStatusDto);
		m.addObject("startDate", startDate);
		m.addObject("endDate", endDate);
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapKunjunganBdsStatusDanJenisPasien")
	public ModelAndView generateLapKunjunganBdsStatusDanJenisPasien(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<KunjunganPasienStatusDanJenisPasienDto2> listKunjunganPasienStatusDanJenisPasienDto = new ArrayList<KunjunganPasienStatusDanJenisPasienDto2>();

		List<Object[]> listStatusPasien = reportingPelayananRekamMedisService
				.findAntrianPasienDiperiksaStatusPasien(startDate, endDate);
		for (Object[] data : listStatusPasien) {
			String tglRegistrasi = ((String) data[1]);
			String ruangan = ((String) data[2]);
			String statusPasien = ((String) data[3]);
			String jenisKelamin = ((String) data[4]);
			String judul = ((String) data[5]);
			String noRegistrasi = ((String) data[0]);
			KunjunganPasienStatusDanJenisPasienDto2 abc = new KunjunganPasienStatusDanJenisPasienDto2();
			abc.setJudul(judul);
			abc.setDetailJudul(statusPasien);
			abc.setNoRegistrasi(noRegistrasi);
			abc.setRuangan(ruangan);
			abc.setTglRegistrasi(tglRegistrasi);
			abc.setJenisKelamin(jenisKelamin);
			listKunjunganPasienStatusDanJenisPasienDto.add(abc);
		}

		List<Object[]> listKelompokPasien = reportingPelayananRekamMedisService
				.findAntrianPasienDiperiksaKelompokPasien(startDate, endDate);
		for (Object[] data : listKelompokPasien) {
			String tglRegistrasi = ((String) data[1]);
			String ruangan = ((String) data[2]);
			String kelompokPasien = ((String) data[3]);
			String jenisKelamin = ((String) data[4]);
			String judul = ((String) data[5]);
			String noRegistrasi = ((String) data[0]);
			KunjunganPasienStatusDanJenisPasienDto2 abc = new KunjunganPasienStatusDanJenisPasienDto2();
			abc.setJudul(judul);
			abc.setDetailJudul(kelompokPasien);
			abc.setNoRegistrasi(noRegistrasi);
			abc.setRuangan(ruangan);
			abc.setTglRegistrasi(tglRegistrasi);
			abc.setJenisKelamin(jenisKelamin);
			listKunjunganPasienStatusDanJenisPasienDto.add(abc);
		}

		m.addObject("dataSource", listKunjunganPasienStatusDanJenisPasienDto);
		m.addObject("startDate", startDate);
		m.addObject("endDate", endDate);
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapKunjunganBdsStatusDanJenisPasien2")
	public ModelAndView generateLapKunjunganBdsStatusDanJenisPasien2(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<KunjunganPasienStatusDanJenisPasienDto> listKunjunganPasienStatusDanJenisPasienDto = new ArrayList<KunjunganPasienStatusDanJenisPasienDto>();

		List<Object[]> list = reportingPelayananRekamMedisService.findAntrianPasienDiperiksaStatusJenisPasien(startDate,
				endDate);
		for (Object[] data : list) {
			KunjunganPasienStatusDanJenisPasienDto umumBaruL = new KunjunganPasienStatusDanJenisPasienDto();
			KunjunganPasienStatusDanJenisPasienDto bpjsBaruL = new KunjunganPasienStatusDanJenisPasienDto();
			KunjunganPasienStatusDanJenisPasienDto umumLamaL = new KunjunganPasienStatusDanJenisPasienDto();
			KunjunganPasienStatusDanJenisPasienDto bpjsLamaL = new KunjunganPasienStatusDanJenisPasienDto();
			KunjunganPasienStatusDanJenisPasienDto umumBaruP = new KunjunganPasienStatusDanJenisPasienDto();
			KunjunganPasienStatusDanJenisPasienDto bpjsBaruP = new KunjunganPasienStatusDanJenisPasienDto();
			KunjunganPasienStatusDanJenisPasienDto umumLamaP = new KunjunganPasienStatusDanJenisPasienDto();
			KunjunganPasienStatusDanJenisPasienDto bpjsLamaP = new KunjunganPasienStatusDanJenisPasienDto();
			String tglRegistrasi = ((String) data[1]);
			String ruangan = ((String) data[2]);
			String statusPasien = ((String) data[3]);
			String jenisKelamin = ((String) data[4]);
			String kelompokPasien = ((String) data[5]);
			Long count = ((Long) data[0]);
			if (jenisKelamin.equalsIgnoreCase("laki-laki") && kelompokPasien.equalsIgnoreCase("umum/pribadi")
					&& statusPasien.equalsIgnoreCase("baru")) {
				umumBaruL.setPeriode(tglRegistrasi);
				umumBaruL.setRuangan(ruangan);
				umumBaruL.setCountUmumL(count);
				umumBaruL.setCountBaruL(count);
				listKunjunganPasienStatusDanJenisPasienDto.add(umumBaruL);
			} else if (jenisKelamin.equalsIgnoreCase("laki-laki") && kelompokPasien.equalsIgnoreCase("umum/pribadi")
					&& statusPasien.equalsIgnoreCase("lama")) {
				umumLamaL.setPeriode(tglRegistrasi);
				umumLamaL.setRuangan(ruangan);
				umumLamaL.setCountUmumL(count);
				umumLamaL.setCountBaruL(count);
				listKunjunganPasienStatusDanJenisPasienDto.add(umumLamaL);
			} else if (jenisKelamin.equalsIgnoreCase("laki-laki")
					&& (kelompokPasien.equalsIgnoreCase("BPJS PBI ")
							|| kelompokPasien.equalsIgnoreCase("BPJS Non PBI "))
					&& statusPasien.equalsIgnoreCase("baru")) {
				bpjsBaruL.setPeriode(tglRegistrasi);
				bpjsBaruL.setRuangan(ruangan);
				bpjsBaruL.setCountUmumL(count);
				bpjsBaruL.setCountBaruL(count);
				listKunjunganPasienStatusDanJenisPasienDto.add(bpjsBaruL);
			} else if (jenisKelamin.equalsIgnoreCase("laki-laki")
					&& (kelompokPasien.equalsIgnoreCase("BPJS PBI ")
							|| kelompokPasien.equalsIgnoreCase("BPJS Non PBI "))
					&& statusPasien.equalsIgnoreCase("baru")) {
				bpjsLamaL.setPeriode(tglRegistrasi);
				bpjsLamaL.setRuangan(ruangan);
				bpjsLamaL.setCountUmumL(count);
				bpjsLamaL.setCountBaruL(count);
				listKunjunganPasienStatusDanJenisPasienDto.add(bpjsLamaL);
			} else if (jenisKelamin.equalsIgnoreCase("perempuan") && kelompokPasien.equalsIgnoreCase("umum/pribadi")
					&& statusPasien.equalsIgnoreCase("baru")) {
				umumBaruP.setPeriode(tglRegistrasi);
				umumBaruP.setRuangan(ruangan);
				umumBaruP.setCountUmumP(count);
				umumBaruP.setCountBaruP(count);
				listKunjunganPasienStatusDanJenisPasienDto.add(umumBaruP);
			} else if (jenisKelamin.equalsIgnoreCase("perempuan") && kelompokPasien.equalsIgnoreCase("umum/pribadi")
					&& statusPasien.equalsIgnoreCase("lama")) {
				umumLamaP.setPeriode(tglRegistrasi);
				umumLamaP.setRuangan(ruangan);
				umumLamaP.setCountUmumP(count);
				umumLamaP.setCountLamaP(count);
				listKunjunganPasienStatusDanJenisPasienDto.add(umumLamaP);
			} else if (jenisKelamin.equalsIgnoreCase("perempuan")
					&& (kelompokPasien.equalsIgnoreCase("BPJS PBI ")
							|| kelompokPasien.equalsIgnoreCase("BPJS Non PBI "))
					&& statusPasien.equalsIgnoreCase("baru")) {
				bpjsBaruP.setPeriode(tglRegistrasi);
				bpjsBaruP.setRuangan(ruangan);
				bpjsBaruP.setCountBpjsP(count);
				bpjsBaruP.setCountBaruP(count);
				listKunjunganPasienStatusDanJenisPasienDto.add(bpjsBaruP);
			} else if (jenisKelamin.equalsIgnoreCase("perempuan")
					&& (kelompokPasien.equalsIgnoreCase("BPJS PBI ")
							|| kelompokPasien.equalsIgnoreCase("BPJS Non PBI "))
					&& statusPasien.equalsIgnoreCase("lama")) {
				bpjsLamaP.setPeriode(tglRegistrasi);
				bpjsLamaP.setRuangan(ruangan);
				bpjsLamaP.setCountBpjsP(count);
				bpjsLamaP.setCountLamaP(count);
				listKunjunganPasienStatusDanJenisPasienDto.add(bpjsLamaP);
			}

		}

		m.addObject("dataSource", listKunjunganPasienStatusDanJenisPasienDto);
		m.addObject("startDate", startDate);
		m.addObject("endDate", endDate);
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapKunjunganBdsStatusDanKasusPenyakitPasien")
	public ModelAndView generateLapKunjunganBdsStatusDanKasusPenyakitPasien(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<KunjunganPasienStatusDanJenisPasienDto2> listKunjunganPasienStatusDanJenisPasienDto = new ArrayList<KunjunganPasienStatusDanJenisPasienDto2>();

		List<Object[]> listStatusPasien = reportingPelayananRekamMedisService
				.findAntrianPasienDiperiksaStatusPasien(startDate, endDate);
		for (Object[] data : listStatusPasien) {
			String tglRegistrasi = ((String) data[1]);
			String ruangan = ((String) data[2]);
			String statusPasien = ((String) data[3]);
			String jenisKelamin = ((String) data[4]);
			String judul = ((String) data[5]);
			String noRegistrasi = ((String) data[0]);
			KunjunganPasienStatusDanJenisPasienDto2 abc = new KunjunganPasienStatusDanJenisPasienDto2();
			abc.setJudul(judul);
			abc.setDetailJudul(statusPasien);
			abc.setNoRegistrasi(noRegistrasi);
			abc.setRuangan(ruangan);
			abc.setTglRegistrasi(tglRegistrasi);
			abc.setJenisKelamin(jenisKelamin);
			listKunjunganPasienStatusDanJenisPasienDto.add(abc);
		}

		List<Object[]> listKasusPenyakit = reportingPelayananRekamMedisService
				.findAntrianPasienDiperiksaKasusPenyakit(startDate, endDate);
		for (Object[] data : listKasusPenyakit) {
			String tglRegistrasi = ((String) data[1]);
			String ruangan = ((String) data[2]);
			String kelompokPasien = ((String) data[3]);
			String jenisKelamin = ((String) data[4]);
			String judul = ((String) data[5]);
			String noRegistrasi = ((String) data[0]);
			KunjunganPasienStatusDanJenisPasienDto2 abc = new KunjunganPasienStatusDanJenisPasienDto2();
			abc.setJudul(judul);
			abc.setDetailJudul(kelompokPasien);
			abc.setNoRegistrasi(noRegistrasi);
			abc.setRuangan(ruangan);
			abc.setTglRegistrasi(tglRegistrasi);
			abc.setJenisKelamin(jenisKelamin);
			listKunjunganPasienStatusDanJenisPasienDto.add(abc);
		}

		m.addObject("dataSource", listKunjunganPasienStatusDanJenisPasienDto);
		m.addObject("startDate", startDate);
		m.addObject("endDate", endDate);
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapKunjunganBdsStatusDanKelas")
	public ModelAndView generateLapKunjunganBdsStatusDanKelas(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<KunjunganPasienStatusDanJenisPasienDto2> listKunjunganPasienStatusDanJenisPasienDto = new ArrayList<KunjunganPasienStatusDanJenisPasienDto2>();

		List<Object[]> listStatusPasien = reportingPelayananRekamMedisService
				.findAntrianPasienDiperiksaStatusPasien(startDate, endDate);
		for (Object[] data : listStatusPasien) {
			String tglRegistrasi = ((String) data[1]);
			String ruangan = ((String) data[2]);
			String statusPasien = ((String) data[3]);
			String jenisKelamin = ((String) data[4]);
			String judul = ((String) data[5]);
			String noRegistrasi = ((String) data[0]);
			KunjunganPasienStatusDanJenisPasienDto2 abc = new KunjunganPasienStatusDanJenisPasienDto2();
			abc.setJudul(judul);
			abc.setDetailJudul(statusPasien);
			abc.setNoRegistrasi(noRegistrasi);
			abc.setRuangan(ruangan);
			abc.setTglRegistrasi(tglRegistrasi);
			abc.setJenisKelamin(jenisKelamin);
			listKunjunganPasienStatusDanJenisPasienDto.add(abc);
		}

		List<Object[]> listKelas = reportingPelayananRekamMedisService.findAntrianPasienDiperiksaKelas(startDate,
				endDate);
		for (Object[] data : listKelas) {
			String tglRegistrasi = ((String) data[1]);
			String ruangan = ((String) data[2]);
			String kelompokPasien = ((String) data[3]);
			String jenisKelamin = ((String) data[4]);
			String judul = ((String) data[5]);
			String noRegistrasi = ((String) data[0]);
			KunjunganPasienStatusDanJenisPasienDto2 abc = new KunjunganPasienStatusDanJenisPasienDto2();
			abc.setJudul(judul);
			abc.setDetailJudul(kelompokPasien);
			abc.setNoRegistrasi(noRegistrasi);
			abc.setRuangan(ruangan);
			abc.setTglRegistrasi(tglRegistrasi);
			abc.setJenisKelamin(jenisKelamin);
			listKunjunganPasienStatusDanJenisPasienDto.add(abc);
		}

		m.addObject("dataSource", listKunjunganPasienStatusDanJenisPasienDto);
		m.addObject("startDate", startDate);
		m.addObject("endDate", endDate);
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapKunjunganBdsStatusDanKondisiPulang")
	public ModelAndView generateLapKunjunganBdsStatusDanKondisiPulang(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<KunjunganPasienStatusDanJenisPasienDto2> listKunjunganPasienStatusDanJenisPasienDto = new ArrayList<KunjunganPasienStatusDanJenisPasienDto2>();

		List<Object[]> listStatusPasien = reportingPelayananRekamMedisService
				.findAntrianPasienDiperiksaStatusPasien(startDate, endDate);
		for (Object[] data : listStatusPasien) {
			String tglRegistrasi = ((String) data[1]);
			String ruangan = ((String) data[2]);
			String statusPasien = ((String) data[3]);
			String jenisKelamin = ((String) data[4]);
			String judul = ((String) data[5]);
			String noRegistrasi = ((String) data[0]);
			KunjunganPasienStatusDanJenisPasienDto2 abc = new KunjunganPasienStatusDanJenisPasienDto2();
			abc.setJudul(judul);
			abc.setDetailJudul(statusPasien);
			abc.setNoRegistrasi(noRegistrasi);
			abc.setRuangan(ruangan);
			abc.setTglRegistrasi(tglRegistrasi);
			abc.setJenisKelamin(jenisKelamin);
			listKunjunganPasienStatusDanJenisPasienDto.add(abc);
		}

		List<Object[]> listKondisiPasien = reportingPelayananRekamMedisService
				.findAntrianPasienDiperiksaKondisiPasien(startDate, endDate);
		for (Object[] data : listKondisiPasien) {
			String tglRegistrasi = ((String) data[1]);
			String ruangan = ((String) data[2]);
			String kelompokPasien = ((String) data[3]);
			String jenisKelamin = ((String) data[4]);
			String judul = ((String) data[5]);
			String noRegistrasi = ((String) data[0]);
			KunjunganPasienStatusDanJenisPasienDto2 abc = new KunjunganPasienStatusDanJenisPasienDto2();
			abc.setJudul(judul);
			abc.setDetailJudul(kelompokPasien);
			abc.setNoRegistrasi(noRegistrasi);
			abc.setRuangan(ruangan);
			abc.setTglRegistrasi(tglRegistrasi);
			abc.setJenisKelamin(jenisKelamin);
			listKunjunganPasienStatusDanJenisPasienDto.add(abc);
		}

		m.addObject("dataSource", listKunjunganPasienStatusDanJenisPasienDto);
		m.addObject("startDate", startDate);
		m.addObject("endDate", endDate);
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapKunjunganBdsStatusDanRujukan")
	public ModelAndView generateLapKunjunganBdsStatusDanRujukan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<KunjunganPasienStatusDanJenisPasienDto2> listKunjunganPasienStatusDanJenisPasienDto = new ArrayList<KunjunganPasienStatusDanJenisPasienDto2>();

		List<Object[]> listStatusPasien = reportingPelayananRekamMedisService
				.findAntrianPasienDiperiksaStatusPasien(startDate, endDate);
		for (Object[] data : listStatusPasien) {
			String tglRegistrasi = ((String) data[1]);
			String ruangan = ((String) data[2]);
			String statusPasien = ((String) data[3]);
			String jenisKelamin = ((String) data[4]);
			String judul = ((String) data[5]);
			String noRegistrasi = ((String) data[0]);
			KunjunganPasienStatusDanJenisPasienDto2 abc = new KunjunganPasienStatusDanJenisPasienDto2();
			abc.setJudul(judul);
			abc.setDetailJudul(statusPasien);
			abc.setNoRegistrasi(noRegistrasi);
			abc.setRuangan(ruangan);
			abc.setTglRegistrasi(tglRegistrasi);
			abc.setJenisKelamin(jenisKelamin);
			listKunjunganPasienStatusDanJenisPasienDto.add(abc);
		}

		List<Object[]> listKondisiPasien = reportingPelayananRekamMedisService
				.findAntrianPasienDiperiksaAsalRujukan(startDate, endDate);
		for (Object[] data : listKondisiPasien) {
			String tglRegistrasi = ((String) data[1]);
			String ruangan = ((String) data[2]);
			String kelompokPasien = ((String) data[3]);
			String jenisKelamin = ((String) data[4]);
			String judul = ((String) data[5]);
			String noRegistrasi = ((String) data[0]);
			KunjunganPasienStatusDanJenisPasienDto2 abc = new KunjunganPasienStatusDanJenisPasienDto2();
			abc.setJudul(judul);
			abc.setDetailJudul(kelompokPasien);
			abc.setNoRegistrasi(noRegistrasi);
			abc.setRuangan(ruangan);
			abc.setTglRegistrasi(tglRegistrasi);
			abc.setJenisKelamin(jenisKelamin);
			listKunjunganPasienStatusDanJenisPasienDto.add(abc);
		}

		m.addObject("dataSource", listKunjunganPasienStatusDanJenisPasienDto);
		m.addObject("startDate", startDate);
		m.addObject("endDate", endDate);
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapKunjunganBdsWilayah")
	public ModelAndView generateLapKunjunganBdsWilayah(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate,
			@RequestParam(value = "ruangan", required = true) Integer ruangan) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();

		List<KunjunganWilayahDto> listKunjunganWilayahDto = new ArrayList<KunjunganWilayahDto>();

		List<Object[]> listStatusPasien = reportingPelayananRekamMedisService.findWilayah(ruangan, startDate, endDate);
		for (Object[] data : listStatusPasien) {
			String tglRegistrasi = ((String) data[1]);
			String wilayah = ((String) data[2]);
			String statusPasien = ((String) data[3]);
			String jenisKelamin = ((String) data[4]);
			String judul = ((String) data[5]);
			String noRegistrasi = ((String) data[0]);
			KunjunganWilayahDto abc = new KunjunganWilayahDto();
			abc.setJudul(judul);
			abc.setDetailJudul(statusPasien);
			abc.setNoRegistrasi(noRegistrasi);
			abc.setTglRegistrasi(tglRegistrasi);
			abc.setJenisKelamin(jenisKelamin);
			abc.setWilayah(wilayah);
			listKunjunganWilayahDto.add(abc);
		}

		m.addObject("dataSource", listKunjunganWilayahDto);
		m.addObject("startDate", startDate);
		m.addObject("endDate", endDate);
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("ruangan", ruanganDao.findOne(ruangan).getNamaRuangan());
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapSensusHarian")
	public ModelAndView generateLapSensusHarian(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = false) String startDate,
			@RequestParam(value = "endDate", required = false) String endDate,
			@RequestParam(value = "ruanganId", required = false) Integer ruanganId) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<SensusHarianDto> listSensusHarianDto = new ArrayList<SensusHarianDto>();

		List<Object[]> listPenderitaMasuk = reportingPelayananRekamMedisService.findPasienMasuk(startDate, endDate,
				ruanganId);
		for (Object[] data : listPenderitaMasuk) {
			String ruangan = ((String) data[0]);
			String noCm = ((String) data[1]);
			String namaPasien = ((String) data[2]);
			String statusKeluar = ((String) data[3]);
			String tglMasuk = ((String) data[4]);
			String tglKeluar = ((String) data[5]);
			String kondisiPasien = ((String) data[6]);
			SensusHarianDto dto = new SensusHarianDto();
			dto.setRuangan(ruangan);
			dto.setNamaPasienPenderitaMasuk(namaPasien);
			dto.setNoCmPenderitaMasuk(noCm);
			if (CommonUtil.isNotNullOrEmpty(tglKeluar) && CommonUtil.isNotNullOrEmpty(tglMasuk)) {
				try {
					DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
					dto.setLamaDirawatPenderitaMasuk(
							AgeCalculator.calculateAge2(df.parse(tglKeluar), df.parse(tglMasuk)).toString());
				} catch (ParseException e) {
					e.printStackTrace();
				}
			}
			dto.setStatusKeluar(statusKeluar);
			dto.setKondisiPasien(kondisiPasien);
			dto.setTglKeluar(tglKeluar);
			dto.setTglMasuk(tglMasuk);
			listSensusHarianDto.add(dto);
		}

		m.addObject("dataSource", listSensusHarianDto);
		m.addObject("startDate", startDate);
		m.addObject("endDate", endDate);
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapHasilLaboratorium")
	public ModelAndView generateDetailLaboratorium(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate,
			@RequestParam(value = "hasilId", required = true) Integer hasilId,
			@RequestParam(value = "departemenId", required = true) Integer departemenId) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<HasilLabDto> listSensusHarianDto = new ArrayList<HasilLabDto>();

		List<Object[]> listPenderitaMasuk = reportingPelayananRekamMedisService.findHasilLaboratorium(hasilId,
				departemenId, startDate, endDate);
		for (Object[] data : listPenderitaMasuk) {
			String a = ((String) data[0]);
			String b = ((String) data[1]);
			String c = ((String) data[2]);
			HasilLabDto dto = new HasilLabDto();
			dto.setAge("12");
			dto.setClinician(a);
			dto.setDate(b);
			dto.setFlag(c);
			dto.setLabNo(a);
			dto.setName(b);
			dto.setPid(c);
			dto.setResult(a);
			dto.setSex(b);
			dto.setSource(c);
			// try {
			// dto.setAge(AgeCalculator.calculateAge2(new
			// SimpleDateFormat().parse(tglKeluar),new
			// SimpleDateFormat().parse(tglMasuk)).toString());
			// } catch (ParseException e) {
			// e.printStackTrace();
			// }
			listSensusHarianDto.add(dto);
		}
		m.addObject("dataSource", listSensusHarianDto);
		m.addObject("startDate", startDate);
		m.addObject("endDate", endDate);
		m.addObject("hasil", "Hasil");
		m.addObject("departemen", "All");
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapObatGenerik")
	public ModelAndView generateLapObatGenerik(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate) {

		List<ObatGenerikDto> listObatGenerikDto = new ArrayList<ObatGenerikDto>();

		List<Object[]> listObatGenerik = obatGenerikService.findListObatGenerik(startDate, endDate);
		for (Object[] data : listObatGenerik) {
			String tglResep = ((String) data[0]);
			String noResep = ((String) data[1]);
			Double jumlah = ((Double) data[2]);
			Double hargaSatuan = ((Double) data[3]);
			Integer produkId = ((Integer) data[4]);
			String noRegistrasi = ((String) data[5]);
			String noCm = ((String) data[6]);
			String namaPasien = ((String) data[7]);
			Date tglLahir = ((Date) data[8]);
			String jenisKelamin = ((String) data[9]);
			String namaRuangan = ((String) data[10]);
			Date tglRegistrasi = ((Date) data[11]);
			String namaGenerik = ((String) data[12]);
			Double subHargaTotal = jumlah * hargaSatuan;
			ObatGenerikDto dto = new ObatGenerikDto();

			dto.setNoResep(noResep);
			dto.setJumlah(jumlah.toString());
			dto.setHargaSatuan(hargaSatuan.toString());
			dto.setKodeProduk(produkId.toString());
			dto.setNoRegistrasi(noRegistrasi);
			dto.setNamaPasien(namaPasien);
			dto.setJenisKelamin(jenisKelamin);
			dto.setNamaRuangan(namaRuangan);
			dto.setNoCm(noCm);
			dto.setTglResep(tglResep);
			dto.setNamaGenerik(namaGenerik);
			dto.setSubHargaTotal(subHargaTotal.toString());
			if (CommonUtil.isNotNullOrEmpty(tglLahir)) {
				Age age = AgeCalculator.calculateAge2(tglRegistrasi, tglLahir);
				if (CommonUtil.isNotNullOrEmpty(age)) {
					dto.setUmur(age.toString());
				}
			}

			listObatGenerikDto.add(dto);
		}
		m.addObject("dataSource", listObatGenerikDto);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapObatPsikotropika")
	public ModelAndView generateLapObatPsikotropika(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate) {

		List<ObatGenerikDto> listObatPsikotropikaDto = new ArrayList<ObatGenerikDto>();

		List<Object[]> listObatPsikotropika = obatGenerikDao.findListObatPsikotropika(startDate, endDate);
		for (Object[] data : listObatPsikotropika) {
			String tglResep = ((String) data[0]);
			String noResep = ((String) data[1]);
			String namaRuangan = ((String) data[2]);
			Double jumlah = ((Double) data[3]);
			String namaGenerik = ((String) data[4]);
			Integer produkId = ((Integer) data[5]);
			String noRegistrasi = ((String) data[6]);
			Date tglRegistrasi = ((Date) data[7]);
			String namaPasien = ((String) data[8]);
			String noCm = ((String) data[9]);
			String jenisKelamin = ((String) data[10]);
			Date tglLahir = ((Date) data[11]);

			ObatGenerikDto dto = new ObatGenerikDto();

			dto.setNoResep(noResep);
			dto.setJumlah(jumlah.toString());
			dto.setKodeProduk(produkId.toString());
			dto.setNoRegistrasi(noRegistrasi);
			dto.setNamaPasien(namaPasien);
			dto.setJenisKelamin(jenisKelamin);
			dto.setNamaRuangan(namaRuangan);
			dto.setNoCm(noCm);
			dto.setTglResep(tglResep);
			dto.setNamaGenerik(namaGenerik);
			if (CommonUtil.isNotNullOrEmpty(tglLahir)) {
				Age age = AgeCalculator.calculateAge2(tglRegistrasi, tglLahir);
				if (CommonUtil.isNotNullOrEmpty(age)) {
					dto.setUmur(age.toString());
				}
			}

			listObatPsikotropikaDto.add(dto);
		}
		m.addObject("dataSource", listObatPsikotropikaDto);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapObatNarkotika")
	public ModelAndView generateLapObatNarkotika(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate) {

		List<ObatGenerikDto> listObatNarkotikaDto = new ArrayList<ObatGenerikDto>();

		List<Object[]> listObatNarkotika = obatGenerikDao.findListObatNarkotika(startDate, endDate);
		for (Object[] data : listObatNarkotika) {
			String tglResep = ((String) data[0]);
			String noResep = ((String) data[1]);
			String namaRuangan = ((String) data[2]);
			Double jumlah = ((Double) data[3]);
			String namaGenerik = ((String) data[4]);
			Integer produkId = ((Integer) data[5]);
			String noRegistrasi = ((String) data[6]);
			Date tglRegistrasi = ((Date) data[7]);
			String namaPasien = ((String) data[8]);
			String noCm = ((String) data[9]);
			String jenisKelamin = ((String) data[10]);
			Date tglLahir = ((Date) data[11]);

			ObatGenerikDto dto = new ObatGenerikDto();

			dto.setNoResep(noResep);
			dto.setJumlah(jumlah.toString());
			dto.setKodeProduk(produkId.toString());
			dto.setNoRegistrasi(noRegistrasi);
			dto.setNamaPasien(namaPasien);
			dto.setJenisKelamin(jenisKelamin);
			dto.setNamaRuangan(namaRuangan);
			dto.setNoCm(noCm);
			dto.setTglResep(tglResep);
			dto.setNamaGenerik(namaGenerik);
			if (CommonUtil.isNotNullOrEmpty(tglLahir)) {
				Age age = AgeCalculator.calculateAge2(tglRegistrasi, tglLahir);
				if (CommonUtil.isNotNullOrEmpty(age)) {
					dto.setUmur(age.toString());
				}
			}

			listObatNarkotikaDto.add(dto);
		}
		m.addObject("dataSource", listObatNarkotikaDto);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapObatAntibiotika")
	public ModelAndView generateLapObatAntibiotika(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate) {

		List<ObatGenerikDto> listObatAntibiotikaDto = new ArrayList<ObatGenerikDto>();

		List<Object[]> listObatAntibiotika = obatGenerikDao.findListObatNarkotika(startDate, endDate);
		for (Object[] data : listObatAntibiotika) {
			String tglResep = ((String) data[0]);
			String noResep = ((String) data[1]);
			String namaRuangan = ((String) data[2]);
			Double jumlah = ((Double) data[3]);
			String namaGenerik = ((String) data[4]);
			Integer produkId = ((Integer) data[5]);
			String noRegistrasi = ((String) data[6]);
			Date tglRegistrasi = ((Date) data[7]);
			String namaPasien = ((String) data[8]);
			String noCm = ((String) data[9]);
			String jenisKelamin = ((String) data[10]);
			Date tglLahir = ((Date) data[11]);

			ObatGenerikDto dto = new ObatGenerikDto();

			dto.setNoResep(noResep);
			dto.setJumlah(jumlah.toString());
			dto.setKodeProduk(produkId.toString());
			dto.setNoRegistrasi(noRegistrasi);
			dto.setNamaPasien(namaPasien);
			dto.setJenisKelamin(jenisKelamin);
			dto.setNamaRuangan(namaRuangan);
			dto.setNoCm(noCm);
			dto.setTglResep(tglResep);
			dto.setNamaGenerik(namaGenerik);
			if (CommonUtil.isNotNullOrEmpty(tglLahir)) {
				Age age = AgeCalculator.calculateAge2(tglRegistrasi, tglLahir);
				if (CommonUtil.isNotNullOrEmpty(age)) {
					dto.setUmur(age.toString());
				}
			}

			listObatAntibiotikaDto.add(dto);
		}
		m.addObject("dataSource", listObatAntibiotikaDto);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapPengkajianAwalRawatJalan")
	public ModelAndView generateLapPengkajian(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noCm", required = true) String noCm,
			@RequestParam(value = "tglInput", required = true) String tglInput) {

		List<PengkajianAwalPasienRawatJalanAnakDto> listPengkajianAwalPasienRawatJalanAnak = new ArrayList<PengkajianAwalPasienRawatJalanAnakDto>();
		DetailDto detailDto1 = new DetailDto();
		DetailDto detailDto2 = new DetailDto();
		DetailDto detailDto3 = new DetailDto();
		DetailDto detailDto4 = new DetailDto();
		DetailDto detailDto5 = new DetailDto();
		DetailDto detailDto6 = new DetailDto();
		DetailDto detailDto7 = new DetailDto();
		DetailDto detailDto8 = new DetailDto();
		DetailDto detailDto9 = new DetailDto();
		DetailDto detailDto10 = new DetailDto();
		DetailDto detailDto11 = new DetailDto();
		DetailDto detailDto12 = new DetailDto();
		DetailDto detailDto13 = new DetailDto();
		DetailDto detailDto14 = new DetailDto();
		DetailDto detailDto15 = new DetailDto();
		DetailDto detailDto16 = new DetailDto();
		DetailDto detailDto17 = new DetailDto();
		DetailDto detailDto18 = new DetailDto();

		PengkajianAwalPasienRawatJalanAnakDto dto = new PengkajianAwalPasienRawatJalanAnakDto();
		List<Map<String, Object>> pasienList = reportingDao.findMapPasienByNoCm(noCm);
		Map<String, Object> pasien = new HashMap<String, Object>();
		int indek = 0;
		for (Map<String, Object> temp : pasienList) {
			indek++;
			if (indek == 1) {
				pasien = temp;
			}
		}
		List<Object[]> papKeluhanUtama = papKeluhanUtamaDao.findPapKeluhanUtamaByNoCmAndTglInput(noCm, tglInput);
		List<Object[]> papAlergi = papAlergiDao.findPapAlergiByNoCmAndTglInput(noCm, tglInput);
		List<Object[]> papRiwayatKelahiran = papRiwayatKelahiranDao.findByNocmAndTglInput(noCm, tglInput);
		List<Object[]> papRiwayatImunisasi = papRiwayatImunisasiDao.findByNoCmAndTglInput(noCm, tglInput);
		List<Object[]> papKebutuhanEdukasi = papKebutuhanEdukasiDao.findByNoCmAndTglInput(noCm, tglInput);
		List<Object[]> papTumbuhKembangAnak = pengkajianAwalPasienRawatJalanDewasaDao
				.findRiwayatTumbuhkembangByNoCm(noCm, tglInput);
		List<Object[]> papRiwayatkeluarga = pengkajianAwalPasienRawatJalanDewasaDao.findRiwayatKeluargaByNoCm(noCm);
		List<Object[]> papRiwayatPsikososial = pengkajianAwalPasienRawatJalanDewasaDao
				.findRiwayatPsikososialByNoCm(noCm, tglInput);
		List<Object[]> papRiwayatKesehatan = pengkajianAwalPasienRawatJalanDewasaDao.findRiwayatKesehatanByNoCm(noCm);
		List<Object[]> masalahkeperawatanDetail = masalahkeperawatanDetailDao.findByNocmAndTglInput(noCm, tglInput);
		List<Object[]> papSkriningGizi = papSkriningGiziDao.findByNoCmAndTglInput(noCm, tglInput);
		List<Object[]> papSkriningGiziDetail = papSkriningGiziDetailDao.findByNoCmAndTglInput(noCm, tglInput);
		// List<Object[]> papTandaVital = papTandaVitalDao.findByNoCm(noCm);
		List<Object[]> asesmenGiziAwal = asesmenGiziAwalDao.findByNoCm(noCm);
		List<Object[]> kebutuhanDasar = kebutuhanDasarDao.findByNoCm(noCm);
		// List<Object[]> anamansis = anamansisDao.findByNoCm(noCm);
		List<Object[]> papCatatan = pengkajianAwalPasienRawatJalanDewasaDao.findCatatanByNoCm(noCm);
		List<Object[]> papStatusFungsional = pengkajianAwalPasienRawatJalanDewasaDao.findStatusFungsionalByNoCm(noCm);
		List<Object[]> papSkriningNyeri = pengkajianAwalPasienRawatJalanDewasaDao
				.findSkriningNyeriByNoCmAndTglInput(noCm, tglInput);

		String keluhanUtama = "";
		String tglmasuk = "";
		String namaRuangan = "";
		for (Object[] data : papKeluhanUtama) {
			keluhanUtama = ((String) data[0]);
			// String tglInput = ((String)data[1]);
			tglmasuk = ((String) data[2]);
			namaRuangan = ((String) data[3]);
		}

		String alergi = "";
		String reaksi = "";
		int alergiId = 0;
		String papalergi = "";
		String ket = "";
		for (Object[] data : papAlergi) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				if ((Integer) data[2] == 1) {
					alergi = ((String) data[0]);
					if (CommonUtil.isNullOrEmpty(alergi)) {
						alergi = "";
					}
					reaksi = ((String) data[1]);
					if (CommonUtil.isNullOrEmpty(reaksi)) {
						reaksi = "";
					}
					alergiId = (Integer) data[2];
					ket = ((String) data[3]);
					papalergi = alergi + ", yaitu " + ket + "   Reaksi " + reaksi;
				} else if ((Integer) data[2] == 2) {
					alergi = ((String) data[0]);
					if (CommonUtil.isNullOrEmpty(alergi)) {
						alergi = "";
					}
					reaksi = ((String) data[1]);
					if (CommonUtil.isNullOrEmpty(reaksi)) {
						reaksi = "";
					}
					alergiId = (Integer) data[2];
					ket = ((String) data[3]);
					papalergi += "\n   " + alergi + ", yaitu " + ket + "   Reaksi " + reaksi;
				}

			}

			else {
				papalergi = "Tidak ada alergi";
			}
		}
		String riwayatKeluarga = "";
		for (Object[] data : papRiwayatkeluarga) {
			riwayatKeluarga = "Ibu : " + ((String) data[0]) + ", Umur : " + ((String) data[1]) + ", Bangsa : "
					+ ((String) data[2]) + ", Kesehatan : " + ((String) data[3]) + "\n   Ayah : " + ((String) data[4])
					+ ", Umur : " + ((String) data[5]) + ", Bangsa : " + ((String) data[6]) + ", Kesehatan : "
					+ ((String) data[7]) + "\n   Anak anak lain : " + ((String) data[8]);
		}

		String riwayatKesehatan = "";
		for (Object[] data : papRiwayatKesehatan) {
			String rawat = "";
			if (((Boolean) data[0]).TRUE) {
				rawat = "Ya";
			}
			String alatImplan = "";
			if (((Boolean) data[1]).TRUE) {
				alatImplan = "Ya";
			}
			String penyakitMayor = "";
			if (((Boolean) data[1]).TRUE) {
				penyakitMayor = "Ya";
			}
			riwayatKesehatan = "Pernah dirawat : " + rawat + "\n   Apakah terpasang alat implant : " + alatImplan
					+ "\n   Apakah ada riwayat dalam keluarga yang memiliki penyakit mayor : " + penyakitMayor;

		}

		String riwayatKelahiran = "";
		for (Object[] data : papRiwayatKelahiran) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				String berat = ((String) data[0]);
				if (CommonUtil.isNullOrEmpty(berat)) {
					berat = "";
				}
				String persalinan = ((String) data[1]);
				if (CommonUtil.isNullOrEmpty(persalinan)) {
					persalinan = "";
				}
				String menangis = ((String) data[2]);
				if (CommonUtil.isNullOrEmpty(menangis)) {
					menangis = "";
				}
				String usiaKehamilan = ((String) data[3]);
				if (CommonUtil.isNullOrEmpty(usiaKehamilan)) {
					usiaKehamilan = "";
				}
				String panjangLahir = ((String) data[4]);
				if (CommonUtil.isNullOrEmpty(panjangLahir)) {
					panjangLahir = "";
				}
				String riwayatKuning = ((String) data[5]);
				if (CommonUtil.isNullOrEmpty(riwayatKuning)) {
					riwayatKuning = "";
				}
				riwayatKelahiran = "Usia Kehamilan : " + usiaKehamilan + " minggu\n   Berat badan lahir : " + berat
						+ " gr\n   Panjang badan lahir : " + panjangLahir + " cm\n   Persalinan : " + persalinan
						+ "\n   Menangis : " + menangis + "\n   Riwayat Kuning : " + riwayatKuning;
			}
		}

		String riwayatImunisasi = "Imunisasi yang diterima : ";
		List<String> listImunisasi = new ArrayList<String>();
		for (Object[] data : papRiwayatImunisasi) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				String imunisasi = ((String) data[1]);
				if (!listImunisasi.contains(imunisasi)) {
					riwayatImunisasi += imunisasi + "  ";
					listImunisasi.add(imunisasi);
				}
			} else {
				riwayatImunisasi = "Tidak Pernah";
			}
		}

		String kebutuhanEdukasi = "";
		String hambatanPembelajaran = "";
		List<String> listHambatan = new ArrayList<String>();
		List<String> listEdukasi = new ArrayList<String>();
		for (Object[] data : papKebutuhanEdukasi) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {

				if (!listHambatan.contains((String) data[1])) {

					String hambatan = ((String) data[1]);
					listHambatan.add(hambatan);
					hambatanPembelajaran += "- " + hambatan + "\n   ";
				}

				else if (!listEdukasi.contains((String) data[0])) {

					String edukasi = ((String) data[0]);
					listEdukasi.add(edukasi);
					kebutuhanEdukasi += "- " + edukasi + "\n   ";
				}
			} else {
				kebutuhanEdukasi = "Tidak ada";
				hambatanPembelajaran = "Tidak ada";
			}
		}

		String tumbuhKembang = "";
		for (Object[] data : papTumbuhKembangAnak) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				String tengkurap = "";
				if (CommonUtil.isNotNullOrEmpty(((Float) data[0]))) {
					tengkurap = ((Float) data[0]).toString();
				}
				String tumbuhGigi = "";
				if (CommonUtil.isNotNullOrEmpty(((Float) data[1]))) {
					tumbuhGigi = ((Float) data[1]).toString();
				}
				String bicara = "";
				if (CommonUtil.isNotNullOrEmpty(((Float) data[2]))) {
					bicara = ((Float) data[2]).toString();
				}
				String duduk = "";
				if (CommonUtil.isNotNullOrEmpty(((Float) data[3]))) {
					duduk = ((Float) data[3]).toString();
				}
				String berdiri = "";
				if (CommonUtil.isNotNullOrEmpty(((Float) data[4]))) {
					berdiri = ((Float) data[4]).toString();
				}
				String berjalan = "";
				if (CommonUtil.isNotNullOrEmpty(((Float) data[5]))) {
					berjalan = ((Float) data[5]).toString();
				}

				tumbuhKembang = "- Tengkurap, usia : " + tengkurap + " tahun\n   - Tumbuh Gigi, usia : " + tumbuhGigi
						+ " tahun\n   - Bicara, usia : " + bicara + " tahun\n   - Usia Duduk, usia : " + duduk
						+ " tahun\n   - Berdiri, usia : " + berdiri + " tahun\n   - Berjalan, usia : " + berjalan
						+ " tahun";
			}

		}

		String riwayatPsikososial = "";
		String hubungan = "";
		String tempatTinggal = "";
		String statusPsikology = "";
		String lain = "";
		List<String> listStatusPsikososial = new ArrayList<String>();
		for (Object[] data : papRiwayatPsikososial) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				Boolean nilai = ((Boolean) data[1]);
				if (nilai.TRUE) {
					if (!listStatusPsikososial.contains((String) data[0])) {
						statusPsikology += "- " + ((String) data[0]) + "\n   ";
						listStatusPsikososial.add(((String) data[0]));
						if (CommonUtil.isNotNullOrEmpty(data[2])) {
							lain = ((String) data[2]);
						}
					}

				}
				tempatTinggal = ((String) data[3]);
				hubungan = ((String) data[4]);
			}
		}
		riwayatPsikososial = "Status Psikologi : \n   " + statusPsikology + "Lainnya : " + lain
				+ "\n   Status Sosial : \n   a. Hubungan pasien dengan anggota keluarga : " + hubungan
				+ "\n   b. Tempat tinggal : " + tempatTinggal;

		String masalahKeperawatan = "";
		int num = 0;
		List<String> masalahKeperawatanList = new ArrayList<String>();
		for (Object[] data : masalahkeperawatanDetail) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {

				String tglDitemukan = ((String) data[0]);
				if (CommonUtil.isNullOrEmpty(tglDitemukan)) {
					tglDitemukan = "";
				}
				String masalah = ((String) data[1]);
				if (CommonUtil.isNullOrEmpty(masalah)) {
					masalah = "";
				}
				String tglteratasi = ((String) data[2]);
				if (CommonUtil.isNullOrEmpty(tglteratasi)) {
					tglteratasi = "";
				}
				if (!masalahKeperawatanList.contains(((String) data[1]))) {
					num++;
					masalahKeperawatan += num + ". " + masalah + ", ditemukan pada tanggal : " + tglDitemukan
							+ " dan teratasi pada tanggal : " + tglteratasi + "\n   ";
					masalahKeperawatanList.add(((String) data[1]));
				}
			}

		}

		String skriningGizi = "";
		String pertanyaanSkriningGizi = "";
		String skor = "";
		int no = 0;
		List<String> listPertanyaan = new ArrayList<String>();
		for (Object[] data : papSkriningGizi) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {

				Float tinggiBadan = ((Float) data[0]);
				Float beratBadan = ((Float) data[1]);
				Float lingkarKepala = ((Float) data[2]);
				Float totalSkor = ((Float) data[3]);
				String pertanyaan = ((String) data[4]);
				Integer nilai = ((Integer) data[5]);
				String jawaban = ((String) data[6]);
				skriningGizi = " Tinggi Badan : " + tinggiBadan + " cm     Berat Badan : " + beratBadan
						+ " kg     Lingkar Kepala : " + lingkarKepala;
				if (!listPertanyaan.contains(((String) data[4]))) {
					no++;
					pertanyaanSkriningGizi += no + ". " + pertanyaan + "\n   Jawaban : " + jawaban + ", Nilai : "
							+ nilai + "\n   ";
					listPertanyaan.add(((String) data[4]));
				}
				skor = totalSkor.toString();
			}
			//
		}

		/*
		 * String tandaVital=""; for(Object[] data: papTandaVital) {
		 * if((CommonUtil.isNotNullOrEmpty(data))) { String kesadaran =
		 * ((String)data[0]);if(CommonUtil.isNullOrEmpty(kesadaran)){kesadaran=
		 * "";} String rasiOksigen =
		 * ((String)data[1]);if(CommonUtil.isNullOrEmpty(rasiOksigen)){
		 * rasiOksigen="";} String gcs =
		 * ((String)data[2]);if(CommonUtil.isNullOrEmpty(gcs)){gcs="";}
		 * tandaVital = "Kesadaran Terganggu : "+kesadaran+
		 * "\n   Rasi Oksigen : "+rasiOksigen+"\n   Gcs : "+gcs; }
		 * 
		 * }
		 */
		String asesmenGizi = "";
		for (Object[] data : asesmenGiziAwal) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				String diet = ((String) data[0]);
				if (CommonUtil.isNullOrEmpty(diet)) {
					diet = "";
				}
				String nilai = ((String) data[1]);
				if (CommonUtil.isNullOrEmpty(nilai)) {
					nilai = "";
				}
				String resiko = ((String) data[2]);
				if (CommonUtil.isNullOrEmpty(resiko)) {
					resiko = "";
				}
				asesmenGizi += "Diet : " + diet + ", dengan resiko : " + resiko + ", dan nilai : " + nilai + "\n   ";
			}

		}
		String kebutuhanDasarPerawat = "";
		for (Object[] data : kebutuhanDasar) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				String polaNafas = ((String) data[0]);
				if (CommonUtil.isNullOrEmpty(polaNafas)) {
					polaNafas = "";
				}
				String cairan = ((String) data[1]);
				if (CommonUtil.isNullOrEmpty(cairan)) {
					cairan = "";
				}
				String neurologi = ((String) data[2]);
				if (CommonUtil.isNullOrEmpty(neurologi)) {
					neurologi = "";
				}
				String nutrisi = ((String) data[3]);
				if (CommonUtil.isNullOrEmpty(nutrisi)) {
					nutrisi = "";
				}
				String defekisasi = ((String) data[4]);
				if (CommonUtil.isNullOrEmpty(defekisasi)) {
					defekisasi = "";
				}
				String urin = ((String) data[5]);
				if (CommonUtil.isNullOrEmpty(urin)) {
					urin = "";
				}
				String intagumen = ((String) data[6]);
				if (CommonUtil.isNullOrEmpty(intagumen)) {
					intagumen = "";
				}
				String aktifitasAnak = ((String) data[7]);
				if (CommonUtil.isNullOrEmpty(aktifitasAnak)) {
					aktifitasAnak = "";
				}
				String kognisi = ((String) data[8]);
				if (CommonUtil.isNullOrEmpty(kognisi)) {
					kognisi = "";
				}
				String tidur = ((String) data[9]);
				if (CommonUtil.isNullOrEmpty(tidur)) {
					tidur = "";
				}
				String konsepDiri = ((String) data[10]);
				if (CommonUtil.isNullOrEmpty(konsepDiri)) {
					konsepDiri = "";
				}
				String peranHubungan = ((String) data[11]);
				if (CommonUtil.isNullOrEmpty(peranHubungan)) {
					peranHubungan = "";
				}
				String koping = ((String) data[12]);
				if (CommonUtil.isNullOrEmpty(koping)) {
					koping = "";
				}
				String nilai = ((String) data[13]);
				if (CommonUtil.isNullOrEmpty(nilai)) {
					nilai = "";
				}
				String persepsiPasien = ((String) data[14]);
				if (CommonUtil.isNullOrEmpty(persepsiPasien)) {
					persepsiPasien = "";
				}
				kebutuhanDasarPerawat = "- Oksigenasi : " + polaNafas + "\n   - Kebutuhan Cairan : " + cairan
						+ "\n   - Neurologi : " + neurologi + "\n   - Kebutuhan Nutrisi : " + nutrisi
						+ "\n   - Eliminasi\n     Defekisasi :   " + defekisasi + "\n     Urin :   " + urin
						+ "\n   - Intagumen : " + intagumen + "\n   - Aktifitas Anak : " + aktifitasAnak
						+ "\n   - Persepsi Kognisi : " + kognisi + "\n   - Tidur Istirahat : " + tidur
						+ "\n   - Konsep Diri : " + konsepDiri + "\n   - Peran Hubungan : " + peranHubungan
						+ "\n   - Koping : " + koping + "\n   - Nilai Nilai : " + nilai + "\n   - Persepsi Pasien : "
						+ persepsiPasien;
			}

		}
		String anamansisData = "";
		String riwayatPenyakitData = "";
		/*
		 * for(Object[] data: anamansis) {
		 * if((CommonUtil.isNotNullOrEmpty(data))) { String anamansisDokter =
		 * ((String)data[0]);if(CommonUtil.isNullOrEmpty(anamansisDokter)){
		 * anamansisDokter="";} String anamansisSuster =
		 * ((String)data[1]);if(CommonUtil.isNullOrEmpty(anamansisDokter)){
		 * anamansisSuster="";} String riwayatPengobatan =
		 * ((String)data[2]);if(CommonUtil.isNullOrEmpty(anamansisDokter)){
		 * riwayatPengobatan="";} String riwayatPenyakit =
		 * ((String)data[3]);if(CommonUtil.isNullOrEmpty(anamansisDokter)){
		 * riwayatPenyakit="";}
		 * 
		 * anamansisData ="Anamnesis Dokter : "+anamansisDokter+
		 * "\n   Anamnesis Suster : "+anamansisSuster; riwayatPenyakitData +=
		 * "\n   Riwayat Penyakit : "+riwayatPenyakit+
		 * ", pengobatan yang diterima "+riwayatPengobatan ; }
		 * 
		 * }
		 */

		String SkriningNyeri = "";
		for (Object[] data : papSkriningNyeri) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				String adaRasaNyeri = ((String) data[0]);
				String lokasiNyeri = ((String) data[1]);
				String frekuensi = ((String) data[2]);
				String durasi = ((String) data[3]);
				String tipeNyeri = ((String) data[4]);
				String karakteristikNyeri = ((String) data[5]);
				String nyeriMempengaruhi = ((String) data[6]);

				SkriningNyeri = "1. Adakah Rasa nyeri : " + adaRasaNyeri + "\n   Lokasi : " + lokasiNyeri
						+ "     Frekuensi : " + frekuensi + "     Durasi : " + durasi
						+ "\n   2.Skor Nyeri : \n   3. Tipe nyeri : " + tipeNyeri + "\n   Karakteristik Nyeri : "
						+ karakteristikNyeri + "\n   5. Nyeri mempengaruhi : " + nyeriMempengaruhi;
			}

		}

		String aktivitas = "";
		String pernahJatuh = "";
		String alatBantu = "";
		for (Object[] data : papStatusFungsional) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				pernahJatuh = ((String) data[0]);
				alatBantu = ((String) data[1]);
				aktivitas = ((String) data[2]);
			}
		}
		String statusFungsional = "1. Aktivitas sehari-hari : " + aktivitas
				+ "\n   2. Risiko Jatuh : \n     a. Apakah pernah jatuh dalam 3 bulan terakhir : " + pernahJatuh
				+ "\n     b. Apakah menggunakan alat bantu (tongkat, kursi roda, dll) : " + alatBantu;

		String catatan = "";
		String lainnya = "";
		for (Object[] data : papCatatan) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				if (((Boolean) data[1]).TRUE) {
					catatan += "- " + ((String) data[0]) + "\n   ";

					if ((CommonUtil.isNullOrEmpty(((String) data[0])))) {
						catatan = "";
					}
					lainnya = "Lainnya : " + ((String) data[2]);
				}
			}
		}

		detailDto1.setDetail("A. KELUHAN UTAMA \n   " + keluhanUtama);
		detailDto2.setDetail("B. ALERGI/REAKSI \n   " + papalergi);
		detailDto3.setDetail("C. RIWAYAT KELAHIRAN\n   " + riwayatKelahiran);
		detailDto4.setDetail("D. RIWAYAT IMUNISASI DASAR\n   " + riwayatImunisasi);
		detailDto13.setDetail("E. RIWAYAT KELUARGA \n   " + riwayatKeluarga);
		detailDto14.setDetail("F. RIWAYAT KESEHATAN \n   " + riwayatKesehatan);
		detailDto5.setDetail("G. RIWAYAT TUMBUH KEMBANG\n   " + tumbuhKembang);//
		detailDto15.setDetail("H. RIWAYAT PSIKOSOSIAL \n   " + riwayatPsikososial);
		detailDto11.setDetail("I. PEMERIKSAAN FISIK \n   " + kebutuhanDasarPerawat);// DATA
																					// KEBUTUHAN
																					// DASAR
																					// SUSTER
		detailDto16.setDetail("J. SKRINING NYERI \n   " + SkriningNyeri);
		detailDto9.setDetail("K. SKRINING GIZI\n   " + skriningGizi + "\n   " + pertanyaanSkriningGizi
				+ "\n   Total Skor : " + skor);
		detailDto17.setDetail("L. STATUS FUNGSIONAL\n   " + statusFungsional);
		detailDto7.setDetail("M. KEBUTUHAN EDUKASI\n   Hambatan Pembelajaran\n   " + hambatanPembelajaran
				+ "\n   Edukasi yang Diperlukan\n   " + kebutuhanEdukasi);
		detailDto8.setDetail("N. MASALAH KEPERAWATAN\n   " + masalahKeperawatan);
		detailDto18.setDetail("O. CATATAN\n   Rujukan : \n   " + catatan + lainnya);

		// detailDto6.setDetail("F. TANDA VITAL\n "+tandaVital);
		detailDto12.setDetail("L. ANAMNESIS \n   " + anamansisData + riwayatPenyakitData);
		detailDto10.setDetail("K. ASESMEN GIZI AWAL \n   " + asesmenGizi);

		dto.setNoCm((String) pasien.get("noCm"));
		dto.setNamaPasien((String) pasien.get("namaPasien"));
		dto.setTglLahir((String) pasien.get("tglLahir"));
		dto.setJenisKelamin((String) pasien.get("jenisKelamin"));
		dto.setTglMasuk(tglmasuk);
		dto.setKeluhanUtama(detailDto1);
		dto.setAlergi(detailDto2);
		dto.setNamaRuangan(namaRuangan);
		dto.setKlinik(namaRuangan);
		dto.setRiwayatKelahiran(detailDto3);
		dto.setRiwayatImunisasiDasar(detailDto4);
		dto.setKebutuhanEdukasi(detailDto7);
		dto.setRiwayatTumbuhKembang(detailDto5);
		dto.setMasalahKeperawatan(detailDto8);
		dto.setSkriningGizi(detailDto9);
		dto.setTandaVital(detailDto6);
		dto.setAsesmenGiziAwal(detailDto10);
		dto.setDataKebutuhanSuster(detailDto11);
		dto.setAnamnesis(detailDto12);
		dto.setRiwayatKeluarga(detailDto13);
		dto.setRiwayatKesehatan(detailDto14);
		dto.setRiwayatPsikososial(detailDto15);
		dto.setSkriningNyeri(detailDto16);
		dto.setStatusFungsional(detailDto17);
		dto.setCatatan(detailDto18);

		listPengkajianAwalPasienRawatJalanAnak.add(dto);
		m.addObject("dataSource", listPengkajianAwalPasienRawatJalanAnak);

		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapPengkajianAwalRawatJalanDewasa")
	public ModelAndView generateLapPengkajianDewasa(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noCm", required = true) String noCm,
			@RequestParam(value = "tglInput", required = true) String tglInput) {

		List<PengkajianAwalPasienRawatJalanAnakDto> listPengkajianAwalPasienRawatJalanDewasa = new ArrayList<PengkajianAwalPasienRawatJalanAnakDto>();
		PengkajianAwalPasienRawatJalanAnakDto dto = new PengkajianAwalPasienRawatJalanAnakDto();
		DetailDto keluhanUtamaData = new DetailDto();
		DetailDto alergiData = new DetailDto();
		DetailDto riwayatKesehatanData = new DetailDto();
		DetailDto riwayatPsikososialData = new DetailDto();
		DetailDto skriningNyeriData = new DetailDto();
		DetailDto skriningGiziData = new DetailDto();
		DetailDto statusFungsionalData = new DetailDto();
		DetailDto kebutuhanEdukasiData = new DetailDto();
		DetailDto masalahKeperawatanData = new DetailDto();
		DetailDto catatan = new DetailDto();
		DetailDto dataKebutuhanDasarSuster = new DetailDto();
		// DetailDto tandaVitalData = new DetailDto();
		// DetailDto asesmenGiziAwalData = new DetailDto();

		Pasien pasien = pasienDao.findPasienByNoCm(noCm);
		List<Object[]> papKeluhanUtama = papKeluhanUtamaDao.findPapKeluhanUtamaByNoCmAndTglInput(noCm, tglInput);
		List<Object[]> papAlergi = papAlergiDao.findPapAlergiByNoCmAndTglInput(noCm, tglInput);
		List<Object[]> papKebutuhanEdukasi = papKebutuhanEdukasiDao.findByNoCmAndTglInput(noCm, tglInput);
		List<Object[]> papRiwayatPsikososial = pengkajianAwalPasienRawatJalanDewasaDao
				.findRiwayatPsikososialByNoCm(noCm, tglInput);
		List<Object[]> papRiwayatKesehatan = pengkajianAwalPasienRawatJalanDewasaDao.findRiwayatKesehatanByNoCm(noCm);
		List<Object[]> masalahkeperawatanDetail = masalahkeperawatanDetailDao.findByNocmAndTglInput(noCm, tglInput);
		List<Object[]> papSkriningGizi = papSkriningGiziDao.findByNoCmAndTglInput(noCm, tglInput);
		List<Object[]> papSkriningGiziDetail = papSkriningGiziDetailDao.findByNoCmAndTglInput(noCm, tglInput);
		// List<Object[]> papTandaVital = papTandaVitalDao.findByNoCm(noCm);
		List<Object[]> kebutuhanDasar = kebutuhanDasarDao.findByNoCm(noCm);
		List<Object[]> papCatatan = pengkajianAwalPasienRawatJalanDewasaDao.findCatatanByNoCm(noCm);
		List<Object[]> papStatusFungsional = pengkajianAwalPasienRawatJalanDewasaDao.findStatusFungsionalByNoCm(noCm);
		List<Object[]> papSkriningNyeri = pengkajianAwalPasienRawatJalanDewasaDao
				.findSkriningNyeriByNoCmAndTglInput(noCm, tglInput);
		List<Object[]> papKesehatanNifas = pengkajianAwalPasienRawatJalanDewasaDao.findRiwayatKesehatanNifas(noCm);

		// List<Object[]> papRiwayatKelahiran =
		// papRiwayatKelahiranDao.findByNocmAndTglInput(noCm,tglInput);
		// List<Object[]> papRiwayatImunisasi =
		// papRiwayatImunisasiDao.findByNoCmAndTglInput(noCm,tglInput);
		// List<Object[]> anamansis = anamansisDao.findByNoCm(noCm);
		// List<Object[]> papTumbuhKembangAnak =
		// pengkajianAwalPasienRawatJalanDewasaDao.findRiwayatTumbuhkembangByNoCm(noCm,tglInput);
		// List<Object[]> papRiwayatkeluarga =
		// pengkajianAwalPasienRawatJalanDewasaDao.findRiwayatKeluargaByNoCm(noCm);
		// List<Object[]> asesmenGiziAwal = asesmenGiziAwalDao.findByNoCm(noCm);

		String keluhanUtama = "";
		String tglmasuk = "";
		String namaRuangan = "";
		for (Object[] data : papKeluhanUtama) {
			keluhanUtama = ((String) data[0]);
			// String tglInput = ((String)data[1]);
			tglmasuk = ((String) data[2]);
			namaRuangan = ((String) data[3]);
		}

		String alergi = "";
		String reaksi = "";
		int alergiId = 0;
		String papalergi = "";
		String ket = "";
		for (Object[] data : papAlergi) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				if ((Integer) data[2] == 1) {
					alergi = ((String) data[0]);
					if (CommonUtil.isNullOrEmpty(alergi)) {
						alergi = "";
					}
					reaksi = ((String) data[1]);
					if (CommonUtil.isNullOrEmpty(reaksi)) {
						reaksi = "";
					}
					alergiId = (Integer) data[2];
					ket = ((String) data[3]);
					papalergi = alergi + ", yaitu " + ket + "   Reaksi " + reaksi;
				} else if ((Integer) data[2] == 2) {
					alergi = ((String) data[0]);
					if (CommonUtil.isNullOrEmpty(alergi)) {
						alergi = "";
					}
					reaksi = ((String) data[1]);
					if (CommonUtil.isNullOrEmpty(reaksi)) {
						reaksi = "";
					}
					alergiId = (Integer) data[2];
					ket = ((String) data[3]);
					papalergi += "\n   " + alergi + ", yaitu " + ket + "   Reaksi " + reaksi;
				}

			}

			else {
				papalergi = "Tidak ada alergi";
			}
		}

		String riwayatKesehatan = "";
		for (Object[] data : papRiwayatKesehatan) {
			String rawat = "";
			if (((Boolean) data[0]).TRUE) {
				rawat = "Ya";
			}
			String alatImplan = "";
			if (((Boolean) data[1]).TRUE) {
				alatImplan = "Ya";
			}
			String penyakitMayor = "";
			if (((Boolean) data[1]).TRUE) {
				penyakitMayor = "Ya";
			}
			riwayatKesehatan = "Pernah dirawat : " + rawat + "\n   Apakah terpasang alat implant : " + alatImplan
					+ "\n   Apakah ada riwayat dalam keluarga yang memiliki penyakit mayor : " + penyakitMayor;

		}
		String kesehatanNifas = "";
		int no = 0;
		for (Object[] data : papKesehatanNifas) {
			String tglPartus = ((String) data[0]);
			String tempatPartus = ((String) data[1]);
			String umurHamil = ((String) data[2]);
			String jenisPersalinan = ((String) data[3]);
			String penolongPersalinan = ((String) data[4]);
			String penyulit = ((String) data[5]);
			String beratBadanLahir = ((String) data[6]);
			String status = ((String) data[7]);
			no++;
			kesehatanNifas += "   RIWAYAT KESEHATAN NIFAS\n   a.Riwayat kehamilan, persalinan dan nifas yang lalu : \n    "
					+ no + ". Tanggal Partus : " + tglPartus + ", Tempat : " + tempatPartus + ", Umur hamil : "
					+ umurHamil + ", Jenis persalinan : " + jenisPersalinan + "\n        Penolong persalinan : "
					+ penolongPersalinan + ", Penyulit : " + penyulit + ", BB lahir : " + beratBadanLahir + ", "
					+ status + "\n";

		}

		String kebutuhanEdukasi = "";
		String hambatanPembelajaran = "";
		List<String> listHambatan = new ArrayList<String>();
		List<String> listEdukasi = new ArrayList<String>();
		for (Object[] data : papKebutuhanEdukasi) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {

				if (!listHambatan.contains((String) data[1])) {

					String hambatan = ((String) data[1]);
					listHambatan.add(hambatan);
					hambatanPembelajaran += "- " + hambatan + "\n   ";
				}

				else if (!listEdukasi.contains((String) data[0])) {

					String edukasi = ((String) data[0]);
					listEdukasi.add(edukasi);
					kebutuhanEdukasi += "- " + edukasi + "\n   ";
				}
			} else {
				kebutuhanEdukasi = "Tidak ada";
				hambatanPembelajaran = "Tidak ada";
			}
		}

		String riwayatPsikososial = "";
		String hubungan = "";
		String tempatTinggal = "";
		String statusPsikology = "";
		String statusMental = "";
		String lain = "";
		List<String> listStatusPsikososial = new ArrayList<String>();
		List<String> listStatusMental = new ArrayList<String>();
		for (Object[] data : papRiwayatPsikososial) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				Boolean nilai = ((Boolean) data[1]);
				Boolean nilaiMental = ((Boolean) data[6]);
				if (nilai.TRUE) {
					if (!listStatusPsikososial.contains((String) data[0])) {
						statusPsikology += "- " + ((String) data[0]) + "\n   ";
						listStatusPsikososial.add(((String) data[0]));

						lain = ((String) data[2]);
					}

				}
				if (nilaiMental.TRUE) {
					if (!listStatusMental.contains((String) data[5])) {

						if (CommonUtil.isNotNullOrEmpty((String) data[5])) {
							statusMental += "- " + ((String) data[5]) + "\n   ";
							listStatusMental.add(((String) data[5]));
						}
					}

				}
				tempatTinggal = ((String) data[3]);
				hubungan = ((String) data[4]);
			}
		}
		riwayatPsikososial = "Status Psikologi : \n   " + statusPsikology + "Lainnya : " + lain
				+ "\n   Status Mental : \n   " + statusMental
				+ " Status Sosial : \n   a. Hubungan pasien dengan anggota keluarga : " + hubungan
				+ "\n   b. Tempat tinggal : " + tempatTinggal;

		String masalahKeperawatan = "";
		int num = 0;
		List<String> masalahKeperawatanList = new ArrayList<String>();
		for (Object[] data : masalahkeperawatanDetail) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {

				String tglDitemukan = ((String) data[0]);
				if (CommonUtil.isNullOrEmpty(tglDitemukan)) {
					tglDitemukan = "";
				}
				String masalah = ((String) data[1]);
				if (CommonUtil.isNullOrEmpty(masalah)) {
					masalah = "";
				}
				String tglteratasi = ((String) data[2]);
				if (CommonUtil.isNullOrEmpty(tglteratasi)) {
					tglteratasi = "";
				}
				if (!masalahKeperawatanList.contains(((String) data[1]))) {
					num++;
					masalahKeperawatan += num + ". " + masalah + ", ditemukan pada tanggal : " + tglDitemukan
							+ " dan teratasi pada tanggal : " + tglteratasi + "\n   ";
					masalahKeperawatanList.add(((String) data[1]));
				}
			}

		}

		String skriningGizi = "";
		String pertanyaanSkriningGizi = "";
		String skor = "";
		int i = 0;
		List<String> listPertanyaan = new ArrayList<String>();
		for (Object[] data : papSkriningGizi) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {

				Float tinggiBadan = ((Float) data[0]);
				Float beratBadan = ((Float) data[1]);
				Float lingkarKepala = ((Float) data[2]);
				Float totalSkor = ((Float) data[3]);
				String pertanyaan = ((String) data[4]);
				Integer nilai = ((Integer) data[5]);
				String jawaban = ((String) data[6]);
				skriningGizi = " Tinggi Badan : " + tinggiBadan + " cm     Berat Badan : " + beratBadan
						+ " kg     Lingkar Kepala : " + lingkarKepala;
				if (!listPertanyaan.contains(((String) data[4]))) {
					i++;
					pertanyaanSkriningGizi += i + ". " + pertanyaan + "\n   Jawaban : " + jawaban + ", Nilai : " + nilai
							+ "\n   ";
					listPertanyaan.add(((String) data[4]));
				}
				skor = totalSkor.toString();
			}

		}

		/*
		 * String tandaVital=""; for(Object[] data: papTandaVital) {
		 * if((CommonUtil.isNotNullOrEmpty(data))) { String kesadaran =
		 * ((String)data[0]);if(CommonUtil.isNullOrEmpty(kesadaran)){kesadaran=
		 * "";} String rasiOksigen =
		 * ((String)data[1]);if(CommonUtil.isNullOrEmpty(rasiOksigen)){
		 * rasiOksigen="";} String gcs =
		 * ((String)data[2]);if(CommonUtil.isNullOrEmpty(gcs)){gcs="";}
		 * tandaVital = "Kesadaran Terganggu : "+kesadaran+
		 * "\n   Rasi Oksigen : "+rasiOksigen+"\n   Gcs : "+gcs; }
		 * 
		 * }
		 */

		String kebutuhanDasarPerawat = "";
		for (Object[] data : kebutuhanDasar) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				String polaNafas = ((String) data[0]);
				if (CommonUtil.isNullOrEmpty(polaNafas)) {
					polaNafas = "";
				}
				String cairan = ((String) data[1]);
				if (CommonUtil.isNullOrEmpty(cairan)) {
					cairan = "";
				}
				String neurologi = ((String) data[2]);
				if (CommonUtil.isNullOrEmpty(neurologi)) {
					neurologi = "";
				}
				String nutrisi = ((String) data[3]);
				if (CommonUtil.isNullOrEmpty(nutrisi)) {
					nutrisi = "";
				}
				String defekisasi = ((String) data[4]);
				if (CommonUtil.isNullOrEmpty(defekisasi)) {
					defekisasi = "";
				}
				String urin = ((String) data[5]);
				if (CommonUtil.isNullOrEmpty(urin)) {
					urin = "";
				}
				String intagumen = ((String) data[6]);
				if (CommonUtil.isNullOrEmpty(intagumen)) {
					intagumen = "";
				}
				String aktifitasAnak = ((String) data[7]);
				if (CommonUtil.isNullOrEmpty(aktifitasAnak)) {
					aktifitasAnak = "";
				}
				String kognisi = ((String) data[8]);
				if (CommonUtil.isNullOrEmpty(kognisi)) {
					kognisi = "";
				}
				String tidur = ((String) data[9]);
				if (CommonUtil.isNullOrEmpty(tidur)) {
					tidur = "";
				}
				String konsepDiri = ((String) data[10]);
				if (CommonUtil.isNullOrEmpty(konsepDiri)) {
					konsepDiri = "";
				}
				String peranHubungan = ((String) data[11]);
				if (CommonUtil.isNullOrEmpty(peranHubungan)) {
					peranHubungan = "";
				}
				String koping = ((String) data[12]);
				if (CommonUtil.isNullOrEmpty(koping)) {
					koping = "";
				}
				String nilai = ((String) data[13]);
				if (CommonUtil.isNullOrEmpty(nilai)) {
					nilai = "";
				}
				String persepsiPasien = ((String) data[14]);
				if (CommonUtil.isNullOrEmpty(persepsiPasien)) {
					persepsiPasien = "";
				}
				kebutuhanDasarPerawat = "- Oksigenasi : " + polaNafas + "\n   - Kebutuhan Cairan : " + cairan
						+ "\n   - Neurologi : " + neurologi + "\n   - Kebutuhan Nutrisi : " + nutrisi
						+ "\n   - Eliminasi\n     Defekisasi :   " + defekisasi + "\n     Urin :   " + urin
						+ "\n   - Intagumen : " + intagumen + "\n   - Aktifitas Anak : " + aktifitasAnak
						+ "\n   - Persepsi Kognisi : " + kognisi + "\n   - Tidur Istirahat : " + tidur
						+ "\n   - Konsep Diri : " + konsepDiri + "\n   - Peran Hubungan : " + peranHubungan
						+ "\n   - Koping : " + koping + "\n   - Nilai Nilai : " + nilai + "\n   - Persepsi Pasien : "
						+ persepsiPasien;
			}

		}

		String SkriningNyeri = "";
		for (Object[] data : papSkriningNyeri) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				String adaRasaNyeri = ((String) data[0]);
				String lokasiNyeri = ((String) data[1]);
				String frekuensi = ((String) data[2]);
				String durasi = ((String) data[3]);
				String tipeNyeri = ((String) data[4]);
				String karakteristikNyeri = ((String) data[5]);
				String nyeriMempengaruhi = ((String) data[6]);

				SkriningNyeri = "1. Adakah Rasa nyeri : " + adaRasaNyeri + "\n   Lokasi : " + lokasiNyeri
						+ "     Frekuensi : " + frekuensi + "     Durasi : " + durasi
						+ "\n   2.Skor Nyeri : \n   3. Tipe nyeri : " + tipeNyeri + "\n   Karakteristik Nyeri : "
						+ karakteristikNyeri + "\n   5. Nyeri mempengaruhi : " + nyeriMempengaruhi;
			}

		}

		String aktivitas = "";
		String pernahJatuh = "";
		String alatBantu = "";
		for (Object[] data : papStatusFungsional) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				pernahJatuh = ((String) data[0]);
				alatBantu = ((String) data[1]);
				aktivitas = ((String) data[2]);
			}
		}
		String statusFungsional = "1. Aktivitas sehari-hari : " + aktivitas
				+ "\n   2. Risiko Jatuh : \n     a. Apakah pernah jatuh dalam 3 bulan terakhir : " + pernahJatuh
				+ "\n     b. Apakah menggunakan alat bantu (tongkat, kursi roda, dll) : " + alatBantu;

		String catatanPapDewasa = "";
		String lainnya = "";
		for (Object[] data : papCatatan) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				if (((Boolean) data[1]).TRUE) {
					catatanPapDewasa += "- " + ((String) data[0]) + "\n   ";

					if ((CommonUtil.isNullOrEmpty(((String) data[0])))) {
						catatanPapDewasa = "";
					}
					lainnya = "Lainnya : " + ((String) data[2]);
				}
			}
		}

		keluhanUtamaData.setDetail("A. KELUHAN UTAMA \n   " + keluhanUtama);
		alergiData.setDetail("B. ALERGI/REAKSI \n   " + papalergi);
		riwayatKesehatanData.setDetail("C. RIWAYAT KESEHATAN \n   " + riwayatKesehatan + "\n" + kesehatanNifas);
		riwayatPsikososialData.setDetail("D. RIWAYAT PSIKOSOSIAL \n   " + riwayatPsikososial);
		dataKebutuhanDasarSuster.setDetail("E. PEMERIKSAAN FISIK \n   " + kebutuhanDasarPerawat);// DATA
																									// KEBUTUHAN
																									// DASAR
																									// SUSTER
		skriningNyeriData.setDetail("F. SKRINING NYERI \n   " + SkriningNyeri);
		skriningGiziData.setDetail("G. SKRINING GIZI\n   " + skriningGizi + "\n   " + pertanyaanSkriningGizi
				+ "\n   Total Skor : " + skor);
		statusFungsionalData.setDetail("H. STATUS FUNGSIONAL\n   " + statusFungsional);
		kebutuhanEdukasiData.setDetail("I. KEBUTUHAN EDUKASI\n   Hambatan Pembelajaran\n   " + hambatanPembelajaran
				+ "\n   Edukasi yang Diperlukan\n   " + kebutuhanEdukasi);
		catatan.setDetail("J. CATATAN\n   Rujukan : \n   " + catatanPapDewasa);
		masalahKeperawatanData.setDetail("K. MASALAH KEPERAWATAN\n   " + masalahKeperawatan);

		dto.setNoCm(pasien.getNoCm());
		dto.setNamaPasien(pasien.getNamaPasien());
		dto.setTglLahir(pasien.getTglLahir().toString());
		dto.setJenisKelamin(pasien.getJenisKelamin().getJenisKelamin());
		dto.setTglMasuk(tglmasuk);
		dto.setKeluhanUtama(keluhanUtamaData);
		dto.setAlergi(alergiData);
		dto.setNamaRuangan(namaRuangan);
		dto.setKlinik(namaRuangan);
		dto.setKebutuhanEdukasi(kebutuhanEdukasiData);
		dto.setMasalahKeperawatan(masalahKeperawatanData);
		dto.setSkriningGizi(skriningGiziData);
		dto.setDataKebutuhanSuster(dataKebutuhanDasarSuster);
		dto.setRiwayatKesehatan(riwayatKesehatanData);
		dto.setRiwayatPsikososial(riwayatPsikososialData);
		dto.setSkriningNyeri(skriningNyeriData);
		dto.setStatusFungsional(statusFungsionalData);
		dto.setCatatan(catatan);

		listPengkajianAwalPasienRawatJalanDewasa.add(dto);
		m.addObject("dataSource", listPengkajianAwalPasienRawatJalanDewasa);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapKlinikMata")
	public ModelAndView generateLapKlinikMata(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,

			@RequestParam(value = "noCm", required = true) String noCm) {

		List<KlinikMataDto> klinikMataDtoList = new ArrayList<KlinikMataDto>();

		KlinikMataDto klinikMataDto = new KlinikMataDto();

		Pasien pasien = pasienDao.findPasienByNoCm(noCm);
		List<Object[]> klinikMata = new ArrayList<Object[]>();// papMataDao.findPapMataByNoCm(noCm);
		String visusMata = "";
		String KoreksiMata = "";
		String kacamataMata = "";
		String tonometriMata = "";
		String aplasnasiMata = "";
		String streak = "";
		String tglInput = "";
		for (Object[] data : klinikMata) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				String visus = ((String) data[0]);
				Boolean nilaiVisus = ((Boolean) data[1]);
				if (nilaiVisus.TRUE) {
					visusMata += "  " + visus;
				}
				String koreksi = ((String) data[2]);
				Boolean nilaiKoreksi = ((Boolean) data[3]);
				if (nilaiKoreksi.TRUE) {
					KoreksiMata += "  " + koreksi;
				}
				String kacamata = ((String) data[4]);
				Boolean nilaiKacamata = ((Boolean) data[5]);
				if (nilaiKacamata.TRUE) {
					kacamataMata += "  " + kacamata;
				}
				String tonometri = ((String) data[6]);
				Boolean nilaiTonometri = ((Boolean) data[7]);
				if (nilaiTonometri.TRUE) {
					tonometriMata += "  " + tonometri;
				}
				String aplasnasi = ((String) data[8]);
				Boolean nilaiAplasnasi = ((Boolean) data[9]);
				if (nilaiAplasnasi.TRUE) {
					aplasnasiMata += "  " + aplasnasi;
				}
				streak = ((String) data[10]);
				tglInput = ((String) data[11]);

			}

		}
		klinikMataDto.setVisus(visusMata);
		klinikMataDto.setKoreksi(KoreksiMata);
		klinikMataDto.setTonometri(tonometriMata);
		klinikMataDto.setAplasnasi(aplasnasiMata);
		klinikMataDto.setKacamata(kacamataMata);
		klinikMataDto.setNoCm(pasien.getNoCm());
		klinikMataDto.setNamaPasien(pasien.getNamaPasien());
		klinikMataDto.setTglLahir(pasien.getTglLahir().toString());
		klinikMataDto.setJenisKelamin(pasien.getJenisKelamin().getJenisKelamin());
		klinikMataDto.setTglMasuk(tglInput);
		klinikMataDto.setStreak(streak);
		klinikMataDtoList.add(klinikMataDto);
		m.addObject("dataSource", klinikMataDtoList);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapPengkajianAwalNeonatus")
	public ModelAndView generateLapPengkajianNeonatus(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noCm", required = true) String noCm,
			@RequestParam(value = "tglInput", required = true) String tglInput) {

		List<PengkajianAwalNeonatusDto> listDetailDto = new ArrayList<PengkajianAwalNeonatusDto>();

		PengkajianAwalNeonatusDto dto = new PengkajianAwalNeonatusDto();

		DetailDto informasi = new DetailDto();
		DetailDto kelahiranTerdahulu = new DetailDto();
		DetailDto alergiData = new DetailDto();
		DetailDto dataKebutuhanDasarSuster = new DetailDto();
		DetailDto kebutuhanEdukasiData = new DetailDto();
		DetailDto masalahKeperawatanData = new DetailDto();
		DetailDto kehamilanSekarang = new DetailDto();
		DetailDto rencanaPulang = new DetailDto();

		List<Object[]> pasien = pasienDao.findByNocm(noCm);
		List<Object[]> papInformasiIbu = pengkajianAwalNeonatusDao.findInformasiIbu(noCm);
		List<Object[]> masalahkeperawatanDetail = masalahkeperawatanDetailDao.findByNocmAndTglInput(noCm, tglInput);
		List<Object[]> kebutuhanDasar = kebutuhanDasarDao.findByNoCm(noCm);
		List<Object[]> papKebutuhanEdukasi = papKebutuhanEdukasiDao.findByNoCmAndTglInput(noCm, tglInput);
		List<Object[]> perencanaanPulang = pengkajianAwalNeonatusDao.findPerencanaanPulang(noCm);

		String namaPasien = "";
		String tglLahirPasien = "";
		String jenisKelaminPasien = "";
		String nocm = "";
		for (Object[] data : pasien) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				nocm = ((String) data[0]);
				namaPasien = ((String) data[1]);
				tglLahirPasien = ((String) data[2]);
				jenisKelaminPasien = ((String) data[3]);

			}
		}

		String namaRuangan = "";
		String nocmIbu = "";
		String tglRegistrasi = "";
		String informasiIbu = "RIWAYAT KELAHIRAN\n\n";
		for (Object[] data : papInformasiIbu) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				String namaIbu = ((String) data[0]);
				Boolean pernahDirawat = ((Boolean) data[1]);
				nocmIbu = ((String) data[2]);
				namaRuangan = ((String) data[3]);
				String tglLahir = ((String) data[4]);
				String kebangsaan = ((String) data[5]);
				String agama = ((String) data[6]);
				String statusPerkawinan = ((String) data[7]);
				String ditolongOleh = ((String) data[8]);
				tglRegistrasi = ((String) data[9]);
				if (pernahDirawat.TRUE) {
					informasiIbu = " Nama : " + namaIbu + "\n  Tanggal Lahir : " + tglLahir + "\n  Bangsa : "
							+ kebangsaan + "\n  Ibu Pernah Dirawat : Ya\n  Agama : " + agama + "\n  No. RM Ibu : "
							+ nocmIbu + "\n  Status Perkawinan : " + statusPerkawinan + "\n  Ruang: " + namaRuangan
							+ "\n  Ditolong Oleh : " + ditolongOleh;
				}

			}

		}
		List<Object[]> papKelahiranTerdahulu = pengkajianAwalNeonatusDao.findByRiwayatKelahiranYangLalu(nocmIbu,
				tglInput);
		List<Object[]> alergiIbu = papAlergiDao.findPapAlergiByNoCm(nocmIbu);
		List<Object[]> riwayatKehamilanSekarang = pengkajianAwalNeonatusDao.findByRiwayatKehamilanYangSekarang(nocmIbu);
		String kelahiranTerhadulu = "";
		int number = 0;
		for (Object[] data : papKelahiranTerdahulu) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				number++;
				String tglTahunKelahiran = ((String) data[0]);
				String jenisKelamin = ((String) data[1]);
				String beratBadan = ((String) data[2]);
				String keadaanLahirBayi = ((String) data[3]);
				String komplikasiKehamilan = ((String) data[4]);
				String penyakit = ((String) data[5]);
				String jenisPersalinan = ((String) data[6]);
				String keteranganLain = ((String) data[7]);
				kelahiranTerhadulu += number + ". Tanggal kelahiran : " + tglTahunKelahiran + ",      Jenis Kelamin : "
						+ jenisKelamin + ",      Berat Badan Lahir : " + beratBadan + "\n  Keadaan Bayi : "
						+ keadaanLahirBayi + ", Komplikasi Kehamilan/Kelahiran yang dialami : " + komplikasiKehamilan
						+ ",\n  Penyakit Ketika Hamil : " + penyakit + ",     Jenis Persalinan : " + jenisPersalinan
						+ "\n  Keterangan : " + keteranganLain + "\n";
			}

		}

		String alergi = "";
		String reaksi = "";
		int alergiId = 0;
		String papalergi = "";
		String ket = "";
		for (Object[] data : alergiIbu) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				if ((Integer) data[2] == 1) {
					alergi = ((String) data[0]);
					if (CommonUtil.isNullOrEmpty(alergi)) {
						alergi = "";
					}
					reaksi = ((String) data[1]);
					if (CommonUtil.isNullOrEmpty(reaksi)) {
						reaksi = "";
					}
					alergiId = (Integer) data[2];
					ket = ((String) data[3]);
					papalergi = alergi + ", yaitu " + ket + "   Reaksi " + reaksi;
				} else if ((Integer) data[2] == 2) {
					alergi = ((String) data[0]);
					if (CommonUtil.isNullOrEmpty(alergi)) {
						alergi = "";
					}
					reaksi = ((String) data[1]);
					if (CommonUtil.isNullOrEmpty(reaksi)) {
						reaksi = "";
					}
					alergiId = (Integer) data[2];
					ket = ((String) data[3]);
					papalergi += "\n" + alergi + ", yaitu " + ket + "   Reaksi " + reaksi;
				}

			}

			else {
				papalergi = "Tidak ada alergi";
			}
		}

		String kebutuhanEdukasi = "";
		String hambatanPembelajaran = "";
		List<String> listHambatan = new ArrayList<String>();
		List<String> listEdukasi = new ArrayList<String>();
		for (Object[] data : papKebutuhanEdukasi) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {

				if (!listHambatan.contains((String) data[1])) {

					String hambatan = ((String) data[1]);
					listHambatan.add(hambatan);
					hambatanPembelajaran += "- " + hambatan + "\n   ";
				}

				else if (!listEdukasi.contains((String) data[0])) {

					String edukasi = ((String) data[0]);
					listEdukasi.add(edukasi);
					kebutuhanEdukasi += "- " + edukasi + "\n   ";
				}
			} else {
				kebutuhanEdukasi = "Tidak ada";
				hambatanPembelajaran = "Tidak ada";
			}
		}

		String masalahKeperawatan = "";
		int num = 0;
		List<String> masalahKeperawatanList = new ArrayList<String>();
		for (Object[] data : masalahkeperawatanDetail) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {

				String tglDitemukan = ((String) data[0]);
				if (CommonUtil.isNullOrEmpty(tglDitemukan)) {
					tglDitemukan = "";
				}
				String masalah = ((String) data[1]);
				if (CommonUtil.isNullOrEmpty(masalah)) {
					masalah = "";
				}
				String tglteratasi = ((String) data[2]);
				if (CommonUtil.isNullOrEmpty(tglteratasi)) {
					tglteratasi = "";
				}
				if (!masalahKeperawatanList.contains(((String) data[1]))) {
					num++;
					masalahKeperawatan += num + ". " + masalah + ", ditemukan pada tanggal : " + tglDitemukan
							+ " dan teratasi pada tanggal : " + tglteratasi + "\n   ";
					masalahKeperawatanList.add(((String) data[1]));
				}
			}

		}

		String kebutuhanDasarPerawat = "";
		for (Object[] data : kebutuhanDasar) {
			if ((CommonUtil.isNotNullOrEmpty(data))) {
				String polaNafas = ((String) data[0]);
				if (CommonUtil.isNullOrEmpty(polaNafas)) {
					polaNafas = "";
				}
				String cairan = ((String) data[1]);
				if (CommonUtil.isNullOrEmpty(cairan)) {
					cairan = "";
				}
				String neurologi = ((String) data[2]);
				if (CommonUtil.isNullOrEmpty(neurologi)) {
					neurologi = "";
				}
				String nutrisi = ((String) data[3]);
				if (CommonUtil.isNullOrEmpty(nutrisi)) {
					nutrisi = "";
				}
				String defekisasi = ((String) data[4]);
				if (CommonUtil.isNullOrEmpty(defekisasi)) {
					defekisasi = "";
				}
				String urin = ((String) data[5]);
				if (CommonUtil.isNullOrEmpty(urin)) {
					urin = "";
				}
				String intagumen = ((String) data[6]);
				if (CommonUtil.isNullOrEmpty(intagumen)) {
					intagumen = "";
				}
				String aktifitasAnak = ((String) data[7]);
				if (CommonUtil.isNullOrEmpty(aktifitasAnak)) {
					aktifitasAnak = "";
				}
				String kognisi = ((String) data[8]);
				if (CommonUtil.isNullOrEmpty(kognisi)) {
					kognisi = "";
				}
				String tidur = ((String) data[9]);
				if (CommonUtil.isNullOrEmpty(tidur)) {
					tidur = "";
				}
				String konsepDiri = ((String) data[10]);
				if (CommonUtil.isNullOrEmpty(konsepDiri)) {
					konsepDiri = "";
				}
				String peranHubungan = ((String) data[11]);
				if (CommonUtil.isNullOrEmpty(peranHubungan)) {
					peranHubungan = "";
				}
				String koping = ((String) data[12]);
				if (CommonUtil.isNullOrEmpty(koping)) {
					koping = "";
				}
				String nilai = ((String) data[13]);
				if (CommonUtil.isNullOrEmpty(nilai)) {
					nilai = "";
				}
				String persepsiPasien = ((String) data[14]);
				if (CommonUtil.isNullOrEmpty(persepsiPasien)) {
					persepsiPasien = "";
				}
				kebutuhanDasarPerawat = "- Oksigenasi : " + polaNafas + "\n   - Kebutuhan Cairan : " + cairan
						+ "\n   - Neurologi : " + neurologi + "\n   - Kebutuhan Nutrisi : " + nutrisi
						+ "\n   - Eliminasi\n     Defekisasi :   " + defekisasi + "\n     Urin :   " + urin
						+ "\n   - Intagumen : " + intagumen + "\n   - Aktifitas Anak : " + aktifitasAnak
						+ "\n   - Persepsi Kognisi : " + kognisi + "\n   - Tidur Istirahat : " + tidur
						+ "\n   - Konsep Diri : " + konsepDiri + "\n   - Peran Hubungan : " + peranHubungan
						+ "\n   - Koping : " + koping + "\n   - Nilai Nilai : " + nilai + "\n   - Persepsi Pasien : "
						+ persepsiPasien;
			}

		}
		String pulang = "";
		for (Object[] data : perencanaanPulang) {
			String penilaian = ((String) data[0]);
			String status = ((String) data[1]);
			String keterangan = ((String) data[2]);
			pulang = "- " + penilaian + " : " + status + ", ket: " + keterangan + "\n";
		}
		String kelainan = "";
		String kehamilanyangSekarang = "";
		List<String> kelainanList = new ArrayList<String>();
		for (Object[] data : riwayatKehamilanSekarang) {
			if (!kelainanList.contains(((String) data[3]))) {
				kelainan += ((String) data[3]) + "\n";
				kelainanList.add(((String) data[3]));
			} // ((String)data[2])
			kehamilanyangSekarang = "GPA : " + ((String) data[0]) + "\nPemeriksaan Antenatal : " + ((String) data[1])
					+ "\n" + ((String) data[2]) + "\nKelainan : " + kelainan + "\nFEOTAL DISTRESS : \n" + " FHR : "
					+ ((String) data[5]) + "\n FH : " + ((String) data[4]) + "\n FHR : " + ((String) data[6])
					+ "\n Lilitan Tali Pusat : " + ((String) data[7]) + "\n Prolabs Umbicilus : " + ((String) data[8])
					+ "\nPARTUS \n Tanggal : " + ((String) data[10]) + "\n Letak : " + ((String) data[11])
					+ "\n Partus : " + ((String) data[9]) + "\nPLACENTA \n Berat : " + ((String) data[16])
					+ "\n Keadaan : " + ((String) data[17]) + "\nTALI PUSAT \n Pembuluh Darah : " + ((String) data[13])
					+ "\n Kelainan : " + ((String) data[18]);

		}
		dataKebutuhanDasarSuster.setDetail("D. PEMERIKSAAN FISIK \n   " + kebutuhanDasarPerawat);// DATA
																									// KEBUTUHAN
																									// DASAR
																									// SUSTER
		kebutuhanEdukasiData.setDetail("F. KEBUTUHAN EDUKASI\n   Hambatan Pembelajaran\n   " + hambatanPembelajaran
				+ "\n   Edukasi yang Diperlukan\n   " + kebutuhanEdukasi);
		masalahKeperawatanData.setDetail("G. MASALAH KEPERAWATAN\n   " + masalahKeperawatan);
		informasi.setDetail("RIWAYAT KELAHIRAN\n A.INFORMASI IBU\n " + informasiIbu);
		kelahiranTerdahulu.setDetail("B. RIWAYAT KELAHIRAN YANG LALU\n  " + kelahiranTerhadulu);
		rencanaPulang.setDetail("H.PERENCANAAN PULANG\n" + pulang);
		kehamilanSekarang.setDetail("C. KEHAMILAN YANG SEKARANG\n" + kehamilanyangSekarang);
		// alergiData.setDetail("ALERGI/REAKSI \n"+papalergi);
		// skriningNyeriData.setDetail("SKRINING NYERI\n"+SkriningNyeri);
		// kebutuhanEdukasiData.setDetail("KEBUTUHAN EDUKASI\nHambatan
		// Pembelajaran\n"+hambatanPembelajaran+"\nEdukasi yang
		// Diperlukan\n"+kebutuhanEdukasi);
		// masalahKeperawatanData.setDetail("MASALAH
		// KEPERAWATAN\n"+masalahKeperawatan);
		// dataKebutuhanDasarSuster.setDetail("DATA KEBUTUHAN DASAR SUSTER
		// \n"+kebutuhanDasarPerawat);
		//
		dto.setInformasiIbu(informasi);
		dto.setKelahiranYangLalu(kelahiranTerdahulu);
		dto.setKebutuhanEdukasi(kebutuhanEdukasiData);
		dto.setMasalahKeperawatan(masalahKeperawatanData);
		dto.setDataKebutuhanDasar(dataKebutuhanDasarSuster);
		dto.setPerencanaanPulang(rencanaPulang);
		dto.setKehamilanSekarang(kehamilanSekarang);

		listDetailDto.add(dto);

		m.addObject("dataSource", listDetailDto);
		m.addObject("noCm", nocm);
		m.addObject("nama", namaPasien);
		m.addObject("tglLahir", tglLahirPasien);
		m.addObject("jenisKelamin", jenisKelaminPasien);
		m.addObject("tglMasuk", tglRegistrasi);
		m.addObject("namaRuangan", namaRuangan);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapLaboratorium")
	public ModelAndView generateLapLaboratorium(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate,
			@RequestParam(value = "departemenId", required = false, defaultValue = "0") int departemenId,
			@RequestParam(value = "produkDetailId", required = false, defaultValue = "0") int produkDetailId) {

		List<LaboratoriumDto> listLabDto = new ArrayList<LaboratoriumDto>();
		List<Object[]> listLaboratorium = new ArrayList<Object[]>();
		if (departemenId == 0 && produkDetailId == 0) {
			listLaboratorium = laboratoriumDao.findListLaboratoriumAll(startDate, endDate);
		} else if (departemenId == 0) {
			listLaboratorium = laboratoriumDao.findListLaboratoriumAllDepartemen(startDate, endDate, produkDetailId);
		} else if (produkDetailId == 0) {
			listLaboratorium = laboratoriumDao.findListLaboratoriumAllTest(startDate, endDate, departemenId);
		} else {
			listLaboratorium = laboratoriumDao.findListLaboratorium(startDate, endDate, departemenId, produkDetailId);

		}
		List<String> listLab = new ArrayList<String>();
		for (Object[] data : listLaboratorium) {
			String tglHasil = ((String) data[0]);
			String noLab = ((String) data[1]);
			String namaPasien = ((String) data[2]);
			Date tglLahir = ((Date) data[3]);
			String jenisKelamin = ((String) data[4]);
			String namaRuangan = ((String) data[5]);
			String petugas = ((String) data[6]);
			String hasil = ((String) data[7]);
			String departemen = ((String) data[8]);
			String namaExternal = ((String) data[9]);
			String kodeExternal = ((String) data[10]);
			String kdProdukIntern = ((String) data[11]);
			Date tglhasil = ((Date) data[12]);
			String flag = ((String) data[13]);
			String noRec = ((String) data[14]);

			if (!listLab.contains(noRec)) {
				listLab.add(noRec);
				LaboratoriumDto dto = new LaboratoriumDto();

				dto.setTglHasil(tglHasil);
				dto.setLabNo(noLab);
				dto.setNamapasien(namaPasien);
				dto.setJenisKelamin(jenisKelamin);
				dto.setRuangan(namaRuangan);
				dto.setPetugas(petugas);
				dto.setResult(hasil);
				dto.setDepartemen(departemen);
				dto.setTest(namaExternal);
				dto.setPid(kodeExternal + "-" + kdProdukIntern);
				dto.setTipeHasil(flag);
				dto.setDateRange(startDate + " TO " + endDate);
				if (CommonUtil.isNotNullOrEmpty(tglLahir)) {
					Age age = AgeCalculator.calculateAge2(tglhasil, tglLahir);
					if (CommonUtil.isNotNullOrEmpty(age)) {
						dto.setUmur(age.toString());
					}
				}

				listLabDto.add(dto);
			}

		}

		m.addObject("dataSource", listLabDto);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapBilling")
	public ModelAndView generateLapBilling(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRegistrasi", required = true) String noRegistrasi,
			@RequestParam(value = "X-AUTH-TOKEN", required = true) String token) {

		HeadKasirDto headKasirDto = reportService.generateBilling(noRegistrasi, token);
		// System.out.println(headKasirDto.getNoCm());
		m.addObject("noCm", headKasirDto.getNoCm());
		m.addObject("noRegistrasi", headKasirDto.getNoRegistrasi());
		m.addObject("namaPasien", headKasirDto.getNamaPasien());
		m.addObject("unit", headKasirDto.getUnit());
		m.addObject("lastRuangan", headKasirDto.getLastRuangan());
		m.addObject("kelasRawat", headKasirDto.getKelasRawat());
		m.addObject("dokter", headKasirDto.getDokter());
		m.addObject("tglMasuk", headKasirDto.getTglMasuk());
		m.addObject("tglPulang", headKasirDto.getTglPulang());
		m.addObject("jenisPasien", headKasirDto.getJenisPasien());
		m.addObject("billing", headKasirDto.getBilling());
		m.addObject("deposit", headKasirDto.getDeposit());
		m.addObject("diskonJasaMedis", headKasirDto.getDiskonJasaMedis());
		m.addObject("diskonUmum", headKasirDto.getDiskonUmum());
		m.addObject("sisaDeposit", headKasirDto.getSisaDeposit());
		m.addObject("harusDibayar", headKasirDto.getHarusDibayar());
		m.addObject("terbilangHarusDibayar", headKasirDto.getTerbilangHarusDibayar());
		m.addObject("nomorCetak", headKasirDto.getNomorCetak());
		m.addObject("dataSource", headKasirDto.getDetails());
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapSPMRS")
	public ModelAndView generateLapSPMRS(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRegistrasi", required = true) String noRegistrasi) {

		List<Map<String, Object>> listSpmrs = new ArrayList<Map<String, Object>>();

		Map<String, Object> spmrs = reportService.generateSPMRS(noRegistrasi);
		listSpmrs.add(spmrs);
		m.addObject("dataSource", listSpmrs);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapCheckListProsedurKeselamatan")
	public ModelAndView generateLapCheckListProsedurKeselamatan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRegistrasi", required = true) String noRegistrasi) {

		List<CheckListProsedurKeselamatanPasienDto> listCheckList = new ArrayList<CheckListProsedurKeselamatanPasienDto>();
		List<Object[]> checkListProsedurKeselamatanPasien = checkListProsedurKeselamatanPasienDao
				.findCheckInByNoRegistrasi(noRegistrasi);
		List<Object[]> listPengobatanKhusus = checkListProsedurKeselamatanPasienDao
				.findListPengobatanKhususByNoRegistrasi(noRegistrasi);
		List<Object[]> listAlatTerpasang = checkListProsedurKeselamatanPasienDao
				.findListAlatTerpasangByNoRegistrasi(noRegistrasi);
		List<Object[]> listSignInPengobatanKhusus = checkListProsedurKeselamatanPasienDao
				.findListSignInPengobatanKhususByNoRegistrasi(noRegistrasi);
		List<Object[]> listSignInKonfirmasi = checkListProsedurKeselamatanPasienDao
				.findListSignInKonfirmasiByNoRegistrasi(noRegistrasi);
		List<Object[]> listSignOutPemeriksaanJaringan = checkListProsedurKeselamatanPasienDao
				.findPemeriksaanJaringanSignOutByNoRegistrasi(noRegistrasi);
		List<Object[]> listSignOutKelengkapanAlkes = checkListProsedurKeselamatanPasienDao
				.findKelengkapanAlkesSignOutByNoRegistrasi(noRegistrasi);
		List<Object[]> listCheckOutPemeriksaan = checkListProsedurKeselamatanPasienDao
				.findListCheckOutPemeriksaanByNoRegistrasi(noRegistrasi);
		List<Object[]> listCheckOutKesadaran = checkListProsedurKeselamatanPasienDao
				.findListCheckOutKesadranByNoRegistrasi(noRegistrasi);
		List<Object[]> listCheckOutKelengkapan = checkListProsedurKeselamatanPasienDao
				.findListCheckOutKelengkapanByNoRegistrasi(noRegistrasi);
		List<Object[]> listCheckOutPemasangan = checkListProsedurKeselamatanPasienDao
				.findListCheckOutPemasanganByNoRegistrasi(noRegistrasi);
		List<Object[]> listDiagnosa = checkListProsedurKeselamatanPasienDao.findDiagnosaByNoRegistrasi(noRegistrasi);
		// checkIn
		int beratBadan = 0;
		String namaPasien = "";
		String noCm = "";
		String tglLahir = "";
		String namaRuangan = "";
		int tinggiBadan = 0;
		String jenisKelamin = "";
		String puasa = "";
		String jenisOperasi = "";
		int minumTerakhir = 0;
		String kesadaran = "";
		String td = "";
		String n = "";
		String rr = "";
		String pengobatanKhusus = "";
		String alatTerpasang = "";

		for (Object[] data : checkListProsedurKeselamatanPasien) {
			if (CommonUtil.isNotNullOrEmpty(data)) {
				if (CommonUtil.isNullOrEmpty((Integer) data[0])) {
					beratBadan = 0;
				} else {
					beratBadan = ((Integer) data[0]);
				}
				namaPasien = ((String) data[1]);
				noCm = ((String) data[2]);
				tglLahir = ((String) data[3]);
				namaRuangan = ((String) data[4]);
				if (CommonUtil.isNullOrEmpty((Integer) data[5])) {
					tinggiBadan = 0;
				} else {
					tinggiBadan = ((Integer) data[5]);
				}
				jenisKelamin = ((String) data[6]);
				puasa = ((String) data[7]);
				jenisOperasi = ((String) data[8]);
				if (CommonUtil.isNullOrEmpty((Integer) data[9])) {
					minumTerakhir = 0;
				} else {
					minumTerakhir = ((Integer) data[9]);
				}
				kesadaran = ((String) data[10]);
				td = ((String) data[11]);
				n = ((String) data[12]);
				rr = ((String) data[13]);
			}

		}
		// Pengobatan Khusus
		for (Object[] data : listPengobatanKhusus) {
			if (CommonUtil.isNotNullOrEmpty(data)) {
				if (((String) data[1]).equals("1")) {
					pengobatanKhusus += "- " + ((String) data[0]) + "\n";
				}
			}
		}

		// Alat Terpasang
		for (Object[] data : listAlatTerpasang) {
			if (CommonUtil.isNotNullOrEmpty(data)) {
				alatTerpasang += "-" + ((String) data[0]) + "\n";
			}
		}

		String checkIn = "CHECK IN\n(Serah terima pasien di ruang persiapan)\nBerat badan : " + beratBadan
				+ " Kg         Tinggi Badan : " + tinggiBadan + " Cm\nJenis Operasi : " + jenisOperasi
				+ "\nPasien Puasa : " + puasa + "\nMakan/minum terakhir : " + minumTerakhir
				+ "\nKeadaan umum pasien\nKesadaran : " + kesadaran + "\nTD : " + td + "    N : " + n + "    rr : " + rr
				+ "\nPengobatan Khusus : \n" + pengobatanKhusus + "Alat yang terpasang pada pasien : \n"
				+ alatTerpasang;

		// Sign in
		String pengobatanKhususSignIn = "";
		String konfirmasi = "";
		for (Object[] data : listSignInPengobatanKhusus) {
			if (CommonUtil.isNotNullOrEmpty(data)) {
				String val = ((String) data[1]);

				if (val.equals("1")) {
					pengobatanKhususSignIn += "- " + ((String) data[0]) + " : Ya\n";
				}
			}
		}
		for (Object[] data : listSignInKonfirmasi) {
			if (CommonUtil.isNotNullOrEmpty(data)) {
				konfirmasi += "- " + ((String) data[0]) + "\n";
			}
		}
		String signIn = "SIGN IN\n(Dilakukan sebelum induksi anestesi)\nKonfirmasi atau Verifikasi\n" + konfirmasi
				+ pengobatanKhususSignIn;

		// Sign Out
		String kelengkapanAlkes = "";
		String pemeriksaanJaringan = "";
		for (Object[] data : listSignOutPemeriksaanJaringan) {
			if (CommonUtil.isNotNullOrEmpty(data)) {
				Boolean status = ((Boolean) data[2]);
				String keterangan = ((String) data[1]);
				String statusPemeriksaan = "";
				if (status.TRUE) {
					statusPemeriksaan = "Ya";
				}
				pemeriksaanJaringan += ((String) data[0]) + " : " + statusPemeriksaan + "\nKet : " + keterangan + "\n";
			}
		}
		Boolean value = false;
		for (Object[] data : listSignOutKelengkapanAlkes) {
			if (CommonUtil.isNotNullOrEmpty(data)) {
				value = ((Boolean) data[0]);
				String keterangan = ((String) data[3]);
				String kelengkapan = ((String) data[2]);
				kelengkapanAlkes += ((String) data[1]) + " : " + kelengkapan + "\nKet : " + keterangan + "\n";
			}
		}
		String val = "";
		if (value.TRUE) {
			val = "Ya";
		}
		String signOut = "SIGN OUT\n(Dilakukan sebelum keluar kamar operasi)\nPerawat bedah membacakan secara verbal tindakan dan alat yang dipasang : "
				+ val + "\nCEK KELENGKAPAN ALKES : \n" + kelengkapanAlkes
				+ "Pemeriksaan jaringan atau cairan tubuh : \n" + pemeriksaanJaringan;

		// CheckOut
		String kesadaranPasien = "";
		String kelengkapanPasien = "";
		String pemeriksaan = "";
		String pemasangan = "";
		String jam = "";
		for (Object[] data : listCheckOutKesadaran) {
			if (CommonUtil.isNotNullOrEmpty(data)) {
				jam = ((String) data[0]);
				if (((Boolean) data[2]).TRUE) {
					kesadaranPasien += "\n" + ((String) data[1]);
				}
			}
		}

		for (Object[] data : listCheckOutKesadaran) {
			if (CommonUtil.isNotNullOrEmpty(data)) {
				jam = ((String) data[0]);
				if (((Boolean) data[2]).TRUE) {
					kesadaranPasien += "\n" + ((String) data[1]);
				}
			}

		}
		for (Object[] data : listCheckOutKelengkapan) {
			if (CommonUtil.isNotNullOrEmpty(data)) {
				if (((String) data[1]).equals("Ya")) {
					kelengkapanPasien += "\n" + ((String) data[0]);
				}
			}

		}

		for (Object[] data : listCheckOutPemeriksaan) {
			if (CommonUtil.isNotNullOrEmpty(data)) {
				if (((String) data[1]).equals("Ya")) {
					pemeriksaan += "\n" + ((String) data[0]);
				}
			}

		}

		for (Object[] data : listCheckOutPemasangan) {
			if (CommonUtil.isNotNullOrEmpty(data)) {
				if (((String) data[1]).equals("Ya")) {
					pemasangan += "\n" + ((String) data[0]);
				}
			}

		}

		String checkOut = "CHECK OUT\n(Serah terima pasien di ruang pemulihan/Pasca anestesi)\nJam : " + jam
				+ "\nKeadaan Umum Pasien\nKesadaran : " + kesadaranPasien + "\nKelengkapan : " + kelengkapanPasien
				+ "\nPemeriksaan : " + pemeriksaan + "\nPemasangan : " + pemasangan;

		CheckListProsedurKeselamatanPasienDto dto = new CheckListProsedurKeselamatanPasienDto();
		dto.setNamaPasien(namaPasien);
		dto.setNoCm(noCm);
		dto.setTglLahir(tglLahir);
		dto.setNamaRuangan(namaRuangan);
		dto.setJenisKelamin(jenisKelamin);
		dto.setCheckIn(checkIn);
		dto.setSignIn(signIn);
		dto.setCheckOut(checkOut);
		dto.setSignOut(signOut);

		listCheckList.add(dto);

		m.addObject("dataSource", listCheckList);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapKwitansi")
	public ModelAndView generateKwitansi(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "page", required = false, defaultValue = "0") Integer page,
			@RequestParam(value = "take", required = false, defaultValue = "100") Integer limit,
			@RequestParam(value = "sort", required = false, defaultValue = "noSbm") String sort,
			@RequestParam(value = "dir", required = false, defaultValue = "asc") String dir,
			@RequestParam(value = "noRec", required = false) String noRec,
			@RequestParam(value = "noSbm", required = false) String noSbm) {

		// KwitansiDto kwitansiDto = reportService.generateKwitansi(noKwitansi);
		Map<String, Object> result = tagihanRekananService.getDetailKwitansi(page, limit, sort, dir, noRec, noSbm);

		m.addObject("dataSource", result.get("result"));
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapKwitansiNoRegistrasi")
	public ModelAndView generateKwitansiNoRegistrasi(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "page", required = false, defaultValue = "0") Integer page,
			@RequestParam(value = "take", required = false, defaultValue = "100") Integer limit,
			@RequestParam(value = "sort", required = false, defaultValue = "noRegistrasi") String sort,
			@RequestParam(value = "dir", required = false, defaultValue = "asc") String dir,
			@RequestParam(value = "noRec", required = false) String noRec,
			@RequestParam(value = "noSbm", required = false) String noSbm,
			@RequestParam(value = "noRegistrasi", required = false) String noRegistrasi) {

		// KwitansiDto kwitansiDto = reportService.generateKwitansi(noKwitansi);
		Map<String, Object> result = tagihanRekananService.getDetailKwitansiNoRegistrasi(page, limit, sort, dir, noRec,
				noSbm, noRegistrasi);

		m.addObject("dataSource", result.get("result"));
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapKartuPemberitahuanPasienPulang")
	public ModelAndView generateKartuPemberitahuanPasienPulang(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRegistrasi", required = true) String noRegistrasi) {

		KartuPengendaliPasienPulangDto dto = new KartuPengendaliPasienPulangDto();
		List<KartuPengendaliPasienPulangDto> dataSource = new ArrayList<KartuPengendaliPasienPulangDto>();
		List<Object[]> pasienPulang = diagnosaPasienDao.findDiagnosaPasien(noRegistrasi);
		List<String> listDiagnosa = new ArrayList<String>();
		String diagnosa = "";
		for (Object[] data : pasienPulang) {
			String noReg = ((String) data[0]);
			String noCm = ((String) data[1]);
			String ruangan = ((String) data[2]);
			String namaPasien = ((String) data[3]);
			if (!listDiagnosa.contains(((String) data[4]))) {

				String diagnosis = ((String) data[4]);
				if (listDiagnosa.size() > 0) {
					diagnosis = ", " + ((String) data[4]);
				}
				diagnosa += diagnosis;
				listDiagnosa.add((String) data[4]);
			}
			String tglMasuk = ((String) data[5]);
			String tglKeluar = ((String) data[6]);
			String dokter = ((String) data[7]);
			dto.setNoRegistrasi(noReg);
			dto.setNoCm(noCm);
			dto.setRuangan(ruangan);
			dto.setNamaPasien(namaPasien);
			dto.setDiagnosaAkhir(diagnosa);
			dto.setTglMasuk(tglMasuk);
			dto.setTglKeluar(tglKeluar);
			dto.setDokter(dokter);
		}
		dataSource.add(dto);
		m.addObject("dataSource", dataSource);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapBarcodeNoLab")
	public ModelAndView generateBarcodeNoLab(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noLab", required = true) String noLab) {

		List<BarcodelabDto> dataSource = new ArrayList<BarcodelabDto>();
		BarcodelabDto dto = new BarcodelabDto();
		String barcode1 = "000000019020";
		String barcode2 = "000000019110";
		List<Object[]> dataLab = laboratoriumDao.findListNoLab(noLab);
		List<String> listData = new ArrayList<String>();

		String keterangan = "L0000000190-20 Urin";
		String detail = "00000320/Andri/2016-12-04/Laboratorium Patologi Klinik";
		String pemeriksaan = "";
		String nomorLab = "";
		// for(Object[] data:dataLab)
		// {
		// String noCm = ((String)data[1]);
		// String namaPasien = ((String)data[2]);
		// String tglLahir = ((String)data[3]);
		// String bahanSample = ((String)data[4]);
		// String kdBahanSample = ((String)data[5]);
		// String namaRuangan = ((String)data[6]);
		// String hasilPemeriksaan = ((String)data[7]);
		// pemeriksaan +=hasilPemeriksaan+", ";
		// nomorLab = noLab.replaceAll("[^\\d]", "");
		// if(!listData.contains(kdBahanSample))
		// {
		// listData.add(kdBahanSample);
		// keterangan= noLab+"-"+kdBahanSample+" "+bahanSample;
		// detail =
		// noCm+"/"+namaPasien+"/"+tglLahir+"/"+namaRuangan+"/"+pemeriksaan;
		// dto.setBarcode(nomorLab+kdBahanSample);
		// dto.setKeterangan(keterangan);
		// dto.setDetail(detail);
		// dataSource.add(dto);
		// }
		// }
		dto.setBarcode(nomorLab);
		dto.setKeterangan(keterangan);
		dto.setDetail(detail);
		dataSource.add(dto);
		String keterangan1 = "L0000000191-10 Serum";
		String detail1 = "00000321/Tirani/2016-12-01/Laboratorium Patologi Klinik";
		// dto.setBarcode(nomorLab);
		// dto.setKeterangan(keterangan1);
		// dto.setDetail(detail1);
		// dataSource.add(dto);
		m.addObject("dataSource", dataSource);
		m.addObject("barcode1", barcode1);
		m.addObject("barcode2", barcode2);
		m.addObject("keterangan1", keterangan1);
		m.addObject("detail1", detail1);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapPerjanjianPasien")
	public ModelAndView generatePerjanjianPasien(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noCm", required = true) String noCm,
			@RequestParam(value = "dokterId", required = true) Integer dokterId) {

		List<Object[]> pasien = pasienInstruksiPerjanjianDao.checkInstruksiPerjanjianByNocm(noCm);

		PerjanjianPasienDto dto = new PerjanjianPasienDto();
		List<PerjanjianPasienDto> listPerjanjianPasienDto = new ArrayList<PerjanjianPasienDto>();
		String nocm = "";
		for (Object[] data : pasien) {
			nocm = ((String) data[0]);

		}
		List<Object[]> papInstruksiPerjanjian = pasienInstruksiPerjanjianDao.findInstruksiPerjanjian(nocm, dokterId);
		for (Object[] data : papInstruksiPerjanjian) {
			dto.setNamaPasien(((String) data[0]));
			dto.setNoCm(((String) data[1]));
			dto.setTglPerjanjian(((String) data[2]));
			dto.setJamKunjungan(((String) data[3]));
			dto.setSpesialis("-");
			dto.setPoliklinik(((String) data[4]));
			dto.setDokter(((String) data[5]));
			dto.setKeteranganLainnya(((String) data[6]));
		}
		listPerjanjianPasienDto.add(dto);
		m.addObject("dataSource", listPerjanjianPasienDto);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapBankDarah")
	public ModelAndView generateBankDarah(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noOrder", required = true) String noOrder) {
		List<Object[]> pasien = pelayananPasienDao.getByStrukOrderNoOrder(noOrder);
		BankDarahDto dto = new BankDarahDto();
		List<BankDarahDto> listBankDarahDto = new ArrayList<BankDarahDto>();

		for (Object[] data : pasien) {
			if (CommonUtil.isNotNullOrEmpty(data[0])) {
				dto.setVolume(((Double) data[0]).toString());
			}
			dto.setNoKantung(((String) data[1]));
			dto.setNamaRuangan(((String) data[2]));
			dto.setNoSelang(((String) data[3]));
			dto.setTglExp(((String) data[4]));
			dto.setNamaPasien(((String) data[5]));
			dto.setNoCm(((String) data[6]));
			dto.setTglLahir(((String) data[7]));
			dto.setStok(((String) data[8]));
			dto.setNamaProduk(((String) data[9]));
		}
		listBankDarahDto.add(dto);
		m.addObject("dataSource", listBankDarahDto);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapKartuPasienPulang")
	public ModelAndView generateKartuPasienPulang(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRegistrasi", required = true) String noRegistrasi,
			@RequestParam(value = "X-AUTH-TOKEN", required = true) String token) {

		KartuPulangPasienDto kartuPulangPasienDto = reportService.generateKartuPasienPulang(noRegistrasi, token);

		List<KartuPulangPasienDto> listKartuPasien = new ArrayList<KartuPulangPasienDto>();
		listKartuPasien.add(kartuPulangPasienDto);

		Map<String, Object> resultPageMap = registrasiPelayananService.getDataPelayananDarah("0000001161");
		for (Map.Entry entry : resultPageMap.entrySet()) {
			System.out.println("key : " + entry.getKey() + "\n value : " + entry.getValue() + "\n");
		}

		m.addObject("dataSource", listKartuPasien);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapRekapPendapatanHarianPoliklinik")
	public ModelAndView generateRekapPendapatanHarianPoliklinik(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRegistrasi", required = true) String noRegistrasi,
			@RequestParam(value = "X-AUTH-TOKEN", required = true) String token) {

		KartuPulangPasienDto kartuPulangPasienDto = reportService.generateKartuPasienPulang(noRegistrasi, token);

		List<KartuPulangPasienDto> listKartuPasien = new ArrayList<KartuPulangPasienDto>();
		listKartuPasien.add(kartuPulangPasienDto);

		m.addObject("dataSource", listKartuPasien);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapHasilPemeriksaanLab")
	public ModelAndView generateHasilPemeriksaan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noLab", required = true) String noLab) {

		List<BarcodelabDto> dataSource = new ArrayList<BarcodelabDto>();
		List<BarcodelabDto> listHasil = new ArrayList<BarcodelabDto>();
		List<Object[]> dataLab = laboratoriumDao.findListNoLab(noLab);
		String noCm = "";
		String dokter = "";
		String namaPasien = "";
		String tglLahir = "";
		String kdBahanSample = "";
		String keterangan = "";
		for (Object[] data : dataLab) {
			noCm = ((String) data[1]);
			namaPasien = ((String) data[2]);
			tglLahir = ((String) data[3]);
			String bahanSample = ((String) data[4]);
			kdBahanSample = ((String) data[5]);
			String namaRuangan = ((String) data[6]);
			String hasilPemeriksaan = ((String) data[7]);
			String nilaiNormal = ((String) data[8]);
			keterangan = ((String) data[9]);
			String satuanStandar = ((String) data[11]);
			String hasil = ((String) data[10]);
			String ket = ((String) data[12]);
			BarcodelabDto dto = new BarcodelabDto();
			dto.setNilaiNormal(nilaiNormal);
			dto.setHasilPemeriksaan(hasilPemeriksaan);
			dto.setSatuan(satuanStandar);
			dto.setHasil(hasil);
			dto.setKeterangan(ket);
			dataSource.add(dto);
		}
		m.addObject("dataSource", dataSource);
		m.addObject("namaPasien", namaPasien);
		m.addObject("noCm", noCm);
		m.addObject("sampleNo", kdBahanSample);
		m.addObject("analystLab", dokter);
		m.addObject("tglLahir", tglLahir);
		m.addObject("keterangan", keterangan);
		m.addObject("format", "pdf");
		return m;
	}

	@RequestMapping("/lapKartuPengendali")
	public ModelAndView generateKartuPengendali(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRec", required = true) String noRec) {

		KartuPengendaliDto kartuPengendaliDto = reportService.generateKartuPengendali(noRec);

		m.addObject("dataSource", kartuPengendaliDto.getKartuPengendaliDetail());
		m.addObject("total", kartuPengendaliDto.getKartuPengendaliHeader().getTotal() != null
				? kartuPengendaliDto.getKartuPengendaliHeader().getTotal().toString() : "");
		m.addObject("ppn", kartuPengendaliDto.getKartuPengendaliHeader().getPpn() != null
				? kartuPengendaliDto.getKartuPengendaliHeader().getPpn().toString() : "");
		m.addObject("subTotal", kartuPengendaliDto.getKartuPengendaliHeader().getSubTotal() != null
				? kartuPengendaliDto.getKartuPengendaliHeader().getSubTotal().toString() : "");
		m.addObject("namaPengendali", kartuPengendaliDto.getKartuPengendaliHeader().getNamaPengendali());
		m.addObject("noUsulan", kartuPengendaliDto.getKartuPengendaliHeader().getNoUsulan());
		m.addObject("tanggalUsulan", kartuPengendaliDto.getKartuPengendaliHeader().getTanggalUsulan() != null
				? kartuPengendaliDto.getKartuPengendaliHeader().getTanggalUsulan().toString() : "");
		m.addObject("paketPengadaan", kartuPengendaliDto.getKartuPengendaliHeader().getPaketPengadaan());
		m.addObject("tanggalDibutuhkan", kartuPengendaliDto.getKartuPengendaliHeader().getTanggalDibutuhkan() != null
				? kartuPengendaliDto.getKartuPengendaliHeader().getTanggalDibutuhkan().toString() : "");
		m.addObject("asalProduk", kartuPengendaliDto.getKartuPengendaliHeader().getAsalProduk());
		m.addObject("kodeMataAnggaran", kartuPengendaliDto.getKartuPengendaliHeader().getKodeMataAnggaran() != null
				? kartuPengendaliDto.getKartuPengendaliHeader().getKodeMataAnggaran().toString() : "");
		m.addObject("jenisDirektur", kartuPengendaliDto.getJenisDirektur());
		m.addObject("jenisPengendali", kartuPengendaliDto.getJenisPengendali());
		m.addObject("namaLengkapPpk", kartuPengendaliDto.getPpk().getNamaLengkap());
		m.addObject("nipPpk", kartuPengendaliDto.getPpk().getNip());
		m.addObject("namaLengkapPengendali", kartuPengendaliDto.getPengendali().getNamaLengkap());
		m.addObject("nipPengendali", kartuPengendaliDto.getPengendali().getNip());
		m.addObject("namaLengkapDirkeuangan", kartuPengendaliDto.getDirekturKeuangan().getNamaLengkap());
		m.addObject("nipDirKeuangan", kartuPengendaliDto.getDirekturKeuangan().getNip());
		m.addObject("namaLengkapDirTerkait", kartuPengendaliDto.getDirekturTerkait().getNamaLengkap());
		m.addObject("nipDirTerkait", kartuPengendaliDto.getDirekturTerkait().getNip());
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapHPS")
	public ModelAndView generateHps(ModelAndView m, @RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRec", required = true) String noRec) {

		HPSDto hPSDto = reportService.generateHPS(noRec);
		String tahun = new SimpleDateFormat("yyyy").format(hPSDto.getKartuPengendaliHeader().getTahun()).toString();
		m.addObject("dataSource", hPSDto.getKartuPengendaliDetail());
		m.addObject("total", hPSDto.getKartuPengendaliHeader().getTotal() != null
				? hPSDto.getKartuPengendaliHeader().getTotal().toString() : "");
		m.addObject("ppn", hPSDto.getKartuPengendaliHeader().getPpn() != null
				? hPSDto.getKartuPengendaliHeader().getPpn().toString() : "");
		m.addObject("tahun", tahun);
		m.addObject("title", hPSDto.getKartuPengendaliHeader().getTitle());
		m.addObject("paketPengadaan", hPSDto.getKartuPengendaliHeader().getPaketPengadaan());
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapRincianBiayaSementara")
	public ModelAndView generateLapBiayaSementara(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRegistrasi", required = true) String noRegistrasi,
			@RequestParam(value = "X-AUTH-TOKEN", required = true) String token) {

		HeadKasirDto headKasirDto = reportService.generateBilling(noRegistrasi, token);
		System.out.println(headKasirDto.getNoCm());
		m.addObject("noCm", headKasirDto.getNoCm());
		m.addObject("noRegistrasi", headKasirDto.getNoRegistrasi());
		m.addObject("namaPasien", headKasirDto.getNamaPasien());
		m.addObject("unit", headKasirDto.getUnit());
		m.addObject("lastRuangan", headKasirDto.getLastRuangan());
		m.addObject("kelasRawat", headKasirDto.getKelasRawat());
		m.addObject("dokter", headKasirDto.getDokter());
		m.addObject("tglMasuk", headKasirDto.getTglMasuk());
		m.addObject("tglPulang", headKasirDto.getTglPulang());
		m.addObject("jenisPasien", headKasirDto.getJenisPasien());
		m.addObject("billing", headKasirDto.getBilling());
		m.addObject("deposit", headKasirDto.getDeposit());
		m.addObject("diskonJasaMedis", headKasirDto.getDiskonJasaMedis());
		m.addObject("diskonUmum", headKasirDto.getDiskonUmum());
		m.addObject("sisaDeposit", headKasirDto.getSisaDeposit());
		m.addObject("harusDibayar", headKasirDto.getHarusDibayar());
		m.addObject("terbilangHarusDibayar", headKasirDto.getTerbilangHarusDibayar());
		m.addObject("nomorCetak", headKasirDto.getNomorCetak());
		m.addObject("dataSource", headKasirDto.getDetails());
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapCppt")
	public ModelAndView generateCppt(ModelAndView m, @RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noCm", required = true) String noCm,
			@RequestParam(value = "tglRegistrasi", required = true) String tglRegistrasi) {

		List<CpptDto> dataSource = new ArrayList<CpptDto>();

		List<Object[]> dataSoap = reportingDao.findCppt(noCm, tglRegistrasi);

		String namaPasien = "";
		String tglLahir = "";
		String jenisKelamin = "";
		String ruang = "";
		for (Object[] data : dataSoap) {
			CpptDto dto = new CpptDto();
			dto.setS(((String) data[0]));
			dto.setO(((String) data[1]));
			dto.setA(((String) data[2]));
			dto.setP(((String) data[3]));
			dto.setTglInput(((String) data[4]));
			namaPasien = ((String) data[6]);
			tglLahir = ((String) data[7]);
			jenisKelamin = ((String) data[9]);
			ruang = ((String) data[10]);
			dto.setNamaPegawai(((String) data[11]));
			dataSource.add(dto);
		}
		m.addObject("dataSource", dataSource);
		m.addObject("namaPasien", namaPasien);
		m.addObject("tglLahir", tglLahir);
		m.addObject("jenisKelamin", jenisKelamin);
		m.addObject("noCm", noCm);
		m.addObject("ruangan", ruang);
		m.addObject("format", "pdf");
		return m;
	}

	@RequestMapping("/lapResume")
	public ModelAndView generateResume(ModelAndView m, @RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noCm", required = true) String noCm,
			@RequestParam(value = "tglRegistrasi", required = true) String tglRegistrasi) {
		// Short.parseShort("0")
		List<Map<String, Object>> list = registrasiPelayananService.findPealyananRawatJalanByNoCmAndTglregistrasi(null,
				noCm, tglRegistrasi);
		List<Map<String, Object>> pasienList = reportingDao.findMapPasienByNoCm(noCm);

		Map<String, Object> pasien = new HashMap<String, Object>();
		int indek = 0;
		for (Map<String, Object> temp : pasienList) {
			indek++;
			if (indek == 1) {
				pasien = temp;
			}
		}
		list.add(pasien);
		String umur = AgeCalculator.calculateAge2(new Date(), (Date) pasien.get("tanggalLahir")).toString();
		m.addObject("dataSource", list);
		m.addObject("namaPasien", pasien.get("namaPasien"));
		m.addObject("namaBelakang", pasien.get("namaBelakang"));
		m.addObject("tglLahir", pasien.get("tglLahir"));
		m.addObject("jenisKelamin", pasien.get("jenisKelamin"));
		m.addObject("noCm", noCm);
		m.addObject("kecamatan", pasien.get("kecamatan"));
		m.addObject("kelurahan", pasien.get("kelurahan"));
		m.addObject("rtRw", pasien.get("rtRw"));
		m.addObject("hp", pasien.get("hp"));
		m.addObject("alamatLengkap", pasien.get("alamatLengkap"));
		m.addObject("kota", pasien.get("kota"));
		m.addObject("noTelepon", pasien.get("noTelepon"));
		m.addObject("tempatLahir", pasien.get("tempatLahir"));

		m.addObject("agama", pasien.get("agama"));
		m.addObject("kebangsaan", pasien.get("kebangsaan"));
		m.addObject("pekerjaan", pasien.get("pekerjaan"));
		m.addObject("identitas", pasien.get("identitas"));

		m.addObject("statusperkawinan", pasien.get("statusperkawinan"));
		m.addObject("umur", umur);
		m.addObject("format", "pdf");
		return m;
	}

	@RequestMapping("/lapSPS")
	public ModelAndView generateSPS(ModelAndView m, @RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRecKartuPengendaliId", required = true) String noRecKartuPengendaliId,
			@RequestParam(value = "supplierId", required = true) Integer supplierId) {

		SuratPesananSementaraDto sPSDto = reportService.generateSPS(noRecKartuPengendaliId, supplierId);
		m.addObject("dataSource", sPSDto.getDetailProduk());
		m.addObject("total", sPSDto.getTotal().getTotal() != null ? sPSDto.getTotal().getTotal().toString() : "");
		m.addObject("ppn", sPSDto.getTotal().getPpn() != null ? sPSDto.getTotal().getPpn().toString() : "");
		m.addObject("subTotal",
				sPSDto.getTotal().getSubTotal() != null ? sPSDto.getTotal().getSubTotal().toString() : "");
		m.addObject("namaRekanan", sPSDto.getSupplier().getNamaRekanan());
		m.addObject("alamatLengkap", sPSDto.getSupplier().getAlamatLengkap());
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapLampiranSPPH")
	public ModelAndView generateLampiranSPPH(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRec", required = true) String noRec) {

		LampiranSPPHDto dto = reportService.generateLampiranSPPH(noRec);
		String noUsulan = dto.getKartuPengendaliHeader().getNoUsulan() != null
				? dto.getKartuPengendaliHeader().getNoUsulan() : "";
		String namaPengendali = dto.getKartuPengendaliHeader().getNamaPengendali() != null
				? dto.getKartuPengendaliHeader().getNamaPengendali() : "";
		Date tgl = dto.getKartuPengendaliHeader().getTanggalUsulan();
		String tahun = tgl != null ? new SimpleDateFormat("yyyy").format(tgl).toString() : "";
		String tanggal = tgl != null ? new SimpleDateFormat("dd-MM-yyyy").format(tgl).toString() : "";
		String pengadaan = dto.getPengadaan().getNamaPengadaan();
		m.addObject("dataSource", dto.getKartuPengendaliDetail());
		m.addObject("total", dto.getKartuPengendaliHeader().getTotal() != null
				? dto.getKartuPengendaliHeader().getTotal().toString() : "");
		m.addObject("ppn", dto.getKartuPengendaliHeader().getPpn() != null
				? dto.getKartuPengendaliHeader().getPpn().toString() : "");
		m.addObject("subTotal", dto.getKartuPengendaliHeader().getSubTotal() != null
				? dto.getKartuPengendaliHeader().getSubTotal().toString() : "");
		m.addObject("tanggalUsulan", tanggal);
		m.addObject("tahun", tahun);
		m.addObject("pengadaan", pengadaan);
		m.addObject("namaPengendali", namaPengendali);
		m.addObject("noUsulan", noUsulan);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapSPPHBarangUmum")
	public ModelAndView generateSPPHBarangUmum(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRec", required = true) String noRec) {

		LampiranSPPHDto dto = reportService.generateLampiranSPPH(noRec);
		String noUsulan = dto.getKartuPengendaliHeader().getNoUsulan() != null
				? dto.getKartuPengendaliHeader().getNoUsulan() : "";
		String namaPengendali = dto.getKartuPengendaliHeader().getNamaPengendali() != null
				? dto.getKartuPengendaliHeader().getNamaPengendali() : "";
		Date tgl = dto.getKartuPengendaliHeader().getTanggalUsulan();
		String tahun = tgl != null ? new SimpleDateFormat("yyyy").format(tgl).toString() : "";
		String tanggal = tgl != null ? new SimpleDateFormat("dd-MM-yyyy").format(tgl).toString() : "";
		String pengadaan = dto.getPengadaan().getNamaPengadaan();
		m.addObject("dataSource", dto.getKartuPengendaliDetail());
		m.addObject("total", dto.getKartuPengendaliHeader().getTotal() != null
				? dto.getKartuPengendaliHeader().getTotal().toString() : "");
		m.addObject("tanggal", tanggal);
		m.addObject("tahun", tahun);
		m.addObject("pengadaan", pengadaan);
		m.addObject("noUsulan", noUsulan);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapSPPHBarangMedis")
	public ModelAndView generateSPPHBarangMedis(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRec", required = true) String noRec) {

		LampiranSPPHDto dto = reportService.generateLampiranSPPH(noRec);
		String noUsulan = dto.getKartuPengendaliHeader().getNoUsulan() != null
				? dto.getKartuPengendaliHeader().getNoUsulan() : "";
		String namaPengendali = dto.getKartuPengendaliHeader().getNamaPengendali() != null
				? dto.getKartuPengendaliHeader().getNamaPengendali() : "";
		Date tgl = dto.getKartuPengendaliHeader().getTanggalUsulan();
		String tahun = tgl != null ? new SimpleDateFormat("yyyy").format(tgl).toString() : "";
		String tanggal = tgl != null ? new SimpleDateFormat("dd-MM-yyyy").format(tgl).toString() : "";
		String pengadaan = dto.getPengadaan().getNamaPengadaan();
		m.addObject("dataSource", dto.getKartuPengendaliDetail());
		m.addObject("total", dto.getKartuPengendaliHeader().getTotal() != null
				? dto.getKartuPengendaliHeader().getTotal().toString() : "");
		m.addObject("tanggal", tanggal);
		m.addObject("tahun", tahun);
		m.addObject("pengadaan", pengadaan);
		m.addObject("noUsulan", noUsulan);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapSPPHPekerjaan")
	public ModelAndView generateSPPHPekerjaan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRec", required = true) String noRec) {

		LampiranSPPHDto dto = reportService.generateLampiranSPPH(noRec);
		String noUsulan = dto.getKartuPengendaliHeader().getNoUsulan() != null
				? dto.getKartuPengendaliHeader().getNoUsulan() : "";
		String namaPengendali = dto.getKartuPengendaliHeader().getNamaPengendali() != null
				? dto.getKartuPengendaliHeader().getNamaPengendali() : "";
		Date tgl = dto.getKartuPengendaliHeader().getTanggalUsulan();
		String tahun = tgl != null ? new SimpleDateFormat("yyyy").format(tgl).toString() : "";
		String tanggal = tgl != null ? new SimpleDateFormat("dd-MM-yyyy").format(tgl).toString() : "";
		String pengadaan = dto.getPengadaan().getNamaPengadaan();
		m.addObject("dataSource", dto.getKartuPengendaliDetail());
		m.addObject("total", dto.getKartuPengendaliHeader().getTotal() != null
				? dto.getKartuPengendaliHeader().getTotal().toString() : "");
		m.addObject("tanggal", tanggal);
		m.addObject("tahun", tahun);
		m.addObject("pengadaan", pengadaan);
		m.addObject("noUsulan", noUsulan);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapKunjunganBdsRuanganJenisPasienStatus")
	public ModelAndView generateLapKunjunganBdsRuanganStatusDanJenisPasien(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate) {
		Map<String, Object> map = new HashMap<String, Object>();
		String month = (formatBulan(Integer.valueOf(new SimpleDateFormat("MM").format(new Date()))));
		String monthFirstCaplock = Character.toString(month.charAt(0)).toUpperCase() + month.substring(1);
		String monthAllCaplock = month.toUpperCase();
		List<KunjunganPasienStatusDanJenisPasienDto2> listKunjunganPasienStatusDanJenisPasienDto = new ArrayList<KunjunganPasienStatusDanJenisPasienDto2>();

		List<Object[]> listStatusPasien = reportingPelayananRekamMedisService
				.findAntrianPasienDiperiksaStatusPasien(startDate, endDate);
		for (Object[] data : listStatusPasien) {
			String tglRegistrasi = ((String) data[1]);
			String ruangan = ((String) data[2]);
			String statusPasien = ((String) data[3]);
			String jenisKelamin = ((String) data[4]);
			String judul = ((String) data[5]);
			String noRegistrasi = ((String) data[0]);
			KunjunganPasienStatusDanJenisPasienDto2 abc = new KunjunganPasienStatusDanJenisPasienDto2();
			abc.setJudul(judul);
			abc.setDetailJudul(statusPasien);
			abc.setNoRegistrasi(noRegistrasi);
			abc.setRuangan(ruangan);
			abc.setTglRegistrasi(tglRegistrasi);
			abc.setJenisKelamin(jenisKelamin);
			listKunjunganPasienStatusDanJenisPasienDto.add(abc);
		}

		List<Object[]> listKelompokPasien = reportingPelayananRekamMedisService
				.findAntrianPasienDiperiksaKelompokPasien(startDate, endDate);
		for (Object[] data : listKelompokPasien) {
			String tglRegistrasi = ((String) data[1]);
			String ruangan = ((String) data[2]);
			String kelompokPasien = ((String) data[3]);
			String jenisKelamin = ((String) data[4]);
			String judul = ((String) data[5]);
			String noRegistrasi = ((String) data[0]);
			KunjunganPasienStatusDanJenisPasienDto2 abc = new KunjunganPasienStatusDanJenisPasienDto2();
			abc.setJudul(judul);
			abc.setDetailJudul(kelompokPasien);
			abc.setNoRegistrasi(noRegistrasi);
			abc.setRuangan(ruangan);
			abc.setTglRegistrasi(tglRegistrasi);
			abc.setJenisKelamin(jenisKelamin);
			listKunjunganPasienStatusDanJenisPasienDto.add(abc);
		}

		m.addObject("dataSource", listKunjunganPasienStatusDanJenisPasienDto);
		m.addObject("startDate", startDate);
		m.addObject("endDate", endDate);
		m.addObject("tanggalReport", (new SimpleDateFormat("dd").format(new Date())) + " " + monthFirstCaplock + " "
				+ (new SimpleDateFormat("YYYY").format(new Date())));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapBuktiPenerimaanBarang")
	public ModelAndView generateBuktiPenerimaanBarang(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRec", required = false) String noRec) {

		BuktiPenerimaanBarangDto buktiPenerimaanBarangDto = reportService.generateBuktiPenerimaan(noRec);
		m.addObject("dataSource", buktiPenerimaanBarangDto.getDetail());
		m.addObject("total", buktiPenerimaanBarangDto.getTotal().toString());
		m.addObject("ygMenyerahkan", buktiPenerimaanBarangDto.getYangMennyerahkan());
		m.addObject("nipYgMenyerahkan", buktiPenerimaanBarangDto.getNipYangMennyerahkan());
		m.addObject("nipYgMengetahui", buktiPenerimaanBarangDto.getNipMengetahui());
		m.addObject("ygMenerima", buktiPenerimaanBarangDto.getYangMenerima());
		m.addObject("mengetahui", buktiPenerimaanBarangDto.getMengetahui());
		m.addObject("nipYgMenerima", buktiPenerimaanBarangDto.getNipYangMenerima());
		m.addObject("tglDokumen", buktiPenerimaanBarangDto.getHeader().getTanggalDokumen());
		m.addObject("noSpk", buktiPenerimaanBarangDto.getHeader().getNoSpk());
		m.addObject("noKontrak", buktiPenerimaanBarangDto.getHeader().getNoKontrak());
		m.addObject("tglKontrak", buktiPenerimaanBarangDto.getHeader().getTanggalKontrak());
		m.addObject("noDokumen", buktiPenerimaanBarangDto.getHeader().getNoDokumen());
		m.addObject("gudang", buktiPenerimaanBarangDto.getHeader().getGudang());
		m.addObject("ppn", buktiPenerimaanBarangDto.getHeader().getPpn().toString());
		m.addObject("keterangan", buktiPenerimaanBarangDto.getHeader().getKeterangan());
		m.addObject("diskon", buktiPenerimaanBarangDto.getHeader().getDiskon().toString());
		m.addObject("sumberDana", buktiPenerimaanBarangDto.getHeader().getSumberDana());
		m.addObject("noPesanan", buktiPenerimaanBarangDto.getHeader().getNoPesanan());
		m.addObject("tglSpk", buktiPenerimaanBarangDto.getHeader().getTanggalSpk());
		m.addObject("namaSupplier", buktiPenerimaanBarangDto.getHeader().getNamaSupplier());
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapBuktiPengeluaranBarang")
	public ModelAndView generateBuktiPengeluaranBarang(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRec", required = false) String noRec) {

		BuktiPenerimaanBarangDto buktiPenerimaanBarangDto = reportService.generateBuktiPengeluaranBarang(noRec);
		m.addObject("dataSource", buktiPenerimaanBarangDto.getDetail());
		m.addObject("total", buktiPenerimaanBarangDto.getTotal().toString());
		m.addObject("ygMenyerahkan", buktiPenerimaanBarangDto.getYangMennyerahkan());
		m.addObject("nipYgMenyerahkan", buktiPenerimaanBarangDto.getNipYangMennyerahkan());
		m.addObject("nipYgMengetahui", buktiPenerimaanBarangDto.getNipMengetahui());
		m.addObject("ygMenerima", buktiPenerimaanBarangDto.getYangMenerima());
		m.addObject("mengetahui", buktiPenerimaanBarangDto.getMengetahui());
		m.addObject("nipYgMenerima", buktiPenerimaanBarangDto.getNipYangMenerima());
		m.addObject("tglDokumen", buktiPenerimaanBarangDto.getHeader().getTanggalDokumen());
		m.addObject("noDokumen", buktiPenerimaanBarangDto.getHeader().getNoDokumen());
		m.addObject("dariGudang", buktiPenerimaanBarangDto.getHeader().getDariGudang());
		m.addObject("gudangMeminta", buktiPenerimaanBarangDto.getHeader().getGudangMeminta());
		m.addObject("keterangan", buktiPenerimaanBarangDto.getHeader().getKeteranganOrder());
		m.addObject("sumberDana", buktiPenerimaanBarangDto.getHeader().getSumberDana());
		m.addObject("noPermintaan", buktiPenerimaanBarangDto.getHeader().getNoPermintaan());
		m.addObject("tglPermintaan", buktiPenerimaanBarangDto.getHeader().getTanggalPermintaan());
		m.addObject("namaSupplier", buktiPenerimaanBarangDto.getHeader().getNamaSupplier());
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapQRCode")
	public ModelAndView generateQRCode(ModelAndView m, @RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRec", required = false) String noRec) {

		HeadDto dto = reportService.generateQRCode(noRec);
		m.addObject("dataSource", dto.getHeader());

		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapQRCodeAset")
	public ModelAndView generateQRCodeAset(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRec", required = false) String noRec) {

		HeadDto dto = reportService.generateQRCodeAset(noRec);
		m.addObject("dataSource", dto.getHeader());

		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapRekapIKI")
	public ModelAndView generateRekapIKI(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "ruanganId", required = false) Integer ruanganId,
			@RequestParam(value = "periode", required = false) String periode) {

		Map<String, Object> result = indekKinerjaService.rekapIKI(ruanganId, periode);
		Map<String, Object> dirut = reportingDao.findDataDirut();
		Map<String, Object> kepalaRuangan = reportingDao.findDataKA(ruanganId);

		String[] bulanArray = DateUtil.INDONESIAN_MONTH;
		String[] splitData = periode.split("-");
		String bulan = bulanArray[Integer.parseInt(splitData[1].replace("0", "")) - 1];

		m.addObject("dataSource", result.get("listIKI"));
		m.addObject("bulan", bulan + " " + Integer.parseInt(splitData[0]));
		m.addObject("unitKerja", result.get("unitKerja"));
		m.addObject("total", result.get("jumlah").toString());
		m.addObject("dirut", dirut.get("nama"));
		m.addObject("nipDirut", dirut.get("nip"));
		m.addObject("ka", kepalaRuangan.get("namaPegawai"));
		m.addObject("nipKa", kepalaRuangan.get("nip"));
		m.addObject("kaUnit", kepalaRuangan.get("namaRuangan"));

		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapMonitoringAbsensi")
	public ModelAndView generateMonitoringAbsensi(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "idPegawai", required = false) Integer idPegawai,
			@RequestParam(value = "startDate", required = false) String startDate,
			@RequestParam(value = "endDate", required = false) String endDate) {

		Map<String, Object> kehadiran = monitoringAbsenService.jumlahKehadiran(null, null, idPegawai, startDate,
				endDate);
		Map<String, Object> temp = ((List<Map<String, Object>>) kehadiran.get("listkehadiran")).get(0);
		m.addObject("dataSource", kehadiran.get("listkehadiran"));
		m.addObject("namaPegawai", temp.get("nama"));
		m.addObject("unitKerja", temp.get("namaRuangan"));
		m.addObject("nip", temp.get("nip"));
		m.addObject("jabatan", temp.get("jabatanInternal"));
		m.addObject("startDate", startDate);
		m.addObject("idFinger", temp.get("idFinger"));
		m.addObject("endDate", endDate);
		m.addObject("jmlterlambat", ((Long) kehadiran.get("jumlahTerlambat")).toString());
		m.addObject("jmlPulangAwal", ((Long) kehadiran.get("jumlahPulangAwal")).toString());
		m.addObject("jmljamEfektif", ((Long) kehadiran.get("jumlahJamEfektif")).toString());

		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapSlipPenghasilan")
	public ModelAndView generateSlipPenghasilan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "idPegawai", required = false) Integer idPegawai,
			@RequestParam(value = "periode", required = false) String periode) {
		Map<String, Object> result = reportService.generateSlipPenghasilan(idPegawai, periode);
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		list.add(result);
		m.addObject("dataSource", list);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapRekapitulasiKehadiran")
	public ModelAndView generatelapRekapitulasiKehadiran(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "idRuangan", required = false) Integer idRuangan,
			@RequestParam(value = "startDate", required = false) String startDate,
			@RequestParam(value = "endDate", required = false) String endDate) {
		List<Map<String, Object>> result = reportService.generateLapRekapitulasiKehadiran(idRuangan, startDate,
				endDate);

		m.addObject("dataSource", result);
		m.addObject("unitKerja", result.get(0).get("unitKerja"));
		m.addObject("bulan", startDate + " sd " + endDate);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapRekapitulasiStokRuangan")
	public ModelAndView generatelapRekapitulasiStokRuangan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "kelompokProdukId", required = false) Integer kelompokProdukId,
			@RequestParam(value = "jenisProdukId", required = false) Integer jenisProdukId,
			@RequestParam(value = "ruanganId", required = false) Integer ruanganId,
			@RequestParam(value = "produkId", required = false) Integer produkId,
			@RequestParam(value = "asalProdukId", required = false) Integer asalProdukId) {

		Map<String, Object> result = stokProdukGlobalService.cetakListStok(kelompokProdukId, produkId, asalProdukId,
				ruanganId, jenisProdukId);
		Map<String, Object> header = (Map<String, Object>) result.get("header");
		m.addObject("dataSource", result.get("data"));
		m.addObject("produk", header.get("produk"));
		m.addObject("kelompokProduk", header.get("kelompokProduk"));
		m.addObject("asalProduk", header.get("asalProduk"));
		m.addObject("ruangan", header.get("ruangan"));
		m.addObject("jenisProduk", header.get("jenisProduk"));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapDataStokRuangan")
	public ModelAndView generatelapDataStokRuangan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "kelompokProdukId", required = false) Integer kelompokProdukId,
			@RequestParam(value = "jenisProdukId", required = false) Integer jenisProdukId,
			@RequestParam(value = "ruanganId", required = false) Integer ruanganId,
			@RequestParam(value = "produkId", required = false) Integer produkId,
			@RequestParam(value = "asalProdukId", required = false) Integer asalProdukId,
			@RequestParam(value = "noTerima", required = false) String noTerima) {

		Map<String, Object> result = stokProdukGlobalService.cetakListStokDetail(kelompokProdukId, produkId,
				asalProdukId, ruanganId, noTerima, jenisProdukId);
		Map<String, Object> header = (Map<String, Object>) result.get("header");
		m.addObject("dataSource", result.get("data"));
		m.addObject("produk", header.get("produk"));
		m.addObject("kelompokProduk", header.get("kelompokProduk"));
		m.addObject("asalProduk", header.get("asalProduk"));
		m.addObject("ruangan", header.get("ruangan"));
		m.addObject("jenisProduk", header.get("jenisProduk"));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapPemakaianBarangHabisPakai")
	public ModelAndView generatelapPemakaianBarangHabisPakai(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "kelompokProdukId", required = false) Integer kelompokProdukId,
			@RequestParam(value = "jenisProdukId", required = false) Integer jenisProdukId,
			@RequestParam(value = "dateStart", required = false) String dateStart,
			@RequestParam(value = "produkId", required = false) Integer produkId,
			@RequestParam(value = "dateEnd", required = false) String dateEnd) {

		Map<String, Object> result = strukPelayananService.cetakListPemakaian(dateStart, dateEnd, kelompokProdukId,
				jenisProdukId, produkId);

		Map<String, Object> header = (Map<String, Object>) result.get("header");
		String periode = "";
		periode = header.get("tanggalAwal") == null ? "" : (String) header.get("tanggalAwal");
		periode = periode + (header.get("tanggalAhir") == null ? "" : " s.d " + (String) header.get("tanggalAhir"));
		m.addObject("dataSource", result.get("data"));
		m.addObject("produk", header.get("produk"));
		m.addObject("kelompokProduk", header.get("kelompokProduk"));
		m.addObject("periode", periode);
		m.addObject("ruangan", header.get("ruangan"));
		m.addObject("jenisProduk", header.get("jenisProduk"));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapPemusnahanBarang")
	public ModelAndView generateLapPemusnahanBarang(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "kelompokProdukId", required = false) Integer kelompokProdukId,
			@RequestParam(value = "jenisProdukId", required = false) Integer jenisProdukId,
			@RequestParam(value = "produkId", required = false) Integer produkId,
			@RequestParam(value = "dateStart", required = false) String dateStart,
			@RequestParam(value = "dateEnd", required = false) String dateEnd) {

		Map<String, Object> result = pemusnahanBarangService.cetakListPemusnahanBarang(dateStart, dateEnd,
				kelompokProdukId, jenisProdukId, produkId);

		Map<String, Object> header = (Map<String, Object>) result.get("header");
		String periode = header.get("tanggalAwal") == null ? "" : (String) header.get("tanggalAwal");
		periode = periode + (header.get("tanggalAhir") == null ? "" : " sd " + (String) header.get("tanggalAhir"));
		m.addObject("dataSource", result.get("data"));
		m.addObject("produk", header.get("produk"));
		m.addObject("kelompokProduk", header.get("kelompokProduk"));
		m.addObject("periode", periode);
		m.addObject("ruangan", header.get("ruangan"));
		m.addObject("jenisProduk", header.get("jenisProduk"));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapDaftarReturBarangRuangan")
	public ModelAndView generateLapDaftarReturBarangRuangan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "tanggalAwal", required = false) String tanggalAwal,
			@RequestParam(value = "tanggalAhir", required = false) String tanggalAhir,
			@RequestParam(value = "kelompokProdukId", required = false) Integer kelompokProdukId,
			@RequestParam(value = "jenisProdukId", required = false) Integer jenisProdukId,
			@RequestParam(value = "produkId", required = false) Integer produkId) {

		Map<String, Object> result = returRuanganService.cetkReturPengirimanBarang(tanggalAwal, tanggalAhir,
				kelompokProdukId, jenisProdukId, produkId);

		Map<String, Object> header = (Map<String, Object>) result.get("header");
		String periode = header.get("tanggalAwal") == null ? "" : (String) header.get("tanggalAwal");
		periode = periode + (header.get("tanggalAhir") == null ? "" : " sd " + (String) header.get("tanggalAhir"));
		m.addObject("dataSource", result.get("data"));
		m.addObject("produk", header.get("produk"));
		m.addObject("kelompokProduk", header.get("kelompokProduk"));
		m.addObject("periode", periode);
		m.addObject("ruangan", header.get("ruangan"));
		m.addObject("jenisProduk", header.get("jenisProduk"));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapDaftarReturBarangSupplier")
	public ModelAndView generateLapDaftarReturBarangSupplier(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "tanggalAwal", required = false) String tanggalAwal,
			@RequestParam(value = "tanggalAhir", required = false) String tanggalAhir,
			@RequestParam(value = "produkId", required = false) Integer produkId,
			@RequestParam(value = "jenisProdukId", required = false) Integer jenisProdukId,
			@RequestParam(value = "kelompokProdukId", required = false) Integer kelompokProdukId,
			@RequestParam(value = "supplierId", required = false) Integer supplierId) {

		Map<String, Object> result = strukPelayananService.cetakListReturSupplier(tanggalAwal, tanggalAhir, produkId,
				jenisProdukId, kelompokProdukId, supplierId);

		Map<String, Object> header = (Map<String, Object>) result.get("header");
		String periode = header.get("tanggalAwal") == null ? "" : (String) header.get("tanggalAwal");
		periode = periode + (header.get("tanggalAhir") == null ? "" : " sd " + (String) header.get("tanggalAhir"));
		m.addObject("dataSource", result.get("data"));
		m.addObject("produk", header.get("produk"));
		m.addObject("kelompokProduk", header.get("kelompokProduk"));
		m.addObject("periode", periode);
		m.addObject("ruangan", header.get("ruangan"));
		m.addObject("jenisProduk", header.get("jenisProduk"));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapSasaranMutuPoliklinikRawatJalan")
	public ModelAndView generateLapSasaranMutuPoliklinikRawatJalan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = false) String startDate,
			@RequestParam(value = "endDate", required = false) String endDate,
			@RequestParam(value = "ruanganId", required = false) Integer ruanganId,
			@RequestParam(value = "dokterId", required = false) Integer dokterId) {

		Map<String, Object> result = reportService.generateSasaranMutuPoliklinik(startDate, endDate, ruanganId,
				dokterId);

		m.addObject("dataSource", result.get("data"));
		m.addObject("tanggal", result.get("tanggal"));

		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	/* belum ada service nya */
	@RequestMapping("/lapKartuPiutangPerusahaan")
	public ModelAndView generateLapKartuPiutangPerusahaan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = false) String startDate,
			@RequestParam(value = "endDate", required = false) String endDate,
			@RequestParam(value = "ruanganId", required = false) Integer ruanganId,
			@RequestParam(value = "dokterId", required = false) Integer dokterId) {

		Map<String, Object> result = reportService.generateSasaranMutuPoliklinik(startDate, endDate, ruanganId,
				dokterId);
		// m.addObject(result);
		m.addObject("dataSource", result.get("data"));
		m.addObject("tanggal", result.get("tanggal"));

		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapSuratPernyataan")
	public ModelAndView generateLapAgingSchedulePiutang(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRegistrasi", required = true) String noRegistrasi) {

		Map<String, Object> result = penanggungJawabPasienService.ambilSuratPernyataanPerNoRegistrasi(noRegistrasi);
		Map<String, Object> penanggungJawab = new HashMap<String, Object>();
		String alamatPj = "";
		String alamatRelasi = "";
		String alamatPasien = "";
		Map<String, Object> relasi = new HashMap<String, Object>();

		for (Map<String, Object> data : (List<Map<String, Object>>) result.get("penanggungJawab")) {
			String ttLahir = "";
			if (CommonUtil.isNotNullOrEmpty(data.get("keterangan"))) {
				ttLahir = data.get("tempatLahir") != null ? (String) data.get("tempatLahir")
						: "" + data.get("tglLahir") != null ? ", " + (String) data.get("tglLahir") : "";
				if (((String) data.get("keterangan")).equals("Penanggungjawab")) {
					alamatPj = (data.get("alamatLengkap") != null ? "Jln " + (String) data.get("alamatLengkap") : "")
							+ (data.get("desaKelurahan") != null ? ", Kelurahan " + (String) data.get("desaKelurahan")
									: "")
							+ (data.get("rtrw") != null ? ", RT/RW " + (String) data.get("rtrw") : "")
							+ (data.get("kecamatan") != null ? ", Kecamatan " + (String) data.get("kecamatan") : "")
							+ (data.get("kotaKabupaten") != null ? ", Kota/Kab " + (String) data.get("kotaKabupaten")
									: "")
							+ (data.get("propinsi") != null ? ", Provinsi " + (String) data.get("propinsi") : "");

					penanggungJawab = data;
					penanggungJawab.put("ttLahir", ttLahir);
				} else if (((String) data.get("keterangan")).equals("Relasi")) {
					alamatRelasi = (data.get("alamatLengkap") != null ? "Jln " + (String) data.get("alamatLengkap")
							: "")
							+ (data.get("desaKelurahan") != null ? ", Kelurahan " + (String) data.get("desaKelurahan")
									: "")
							+ (data.get("rtrw") != null ? ", RT/RW " + (String) data.get("rtrw") : "")
							+ (data.get("kecamatan") != null ? ", Kecamatan " + (String) data.get("kecamatan") : "")
							+ (data.get("kotaKabupaten") != null ? ", Kota/Kab " + (String) data.get("kotaKabupaten")
									: "")
							+ (data.get("propinsi") != null ? ", Provinsi " + (String) data.get("propinsi") : "");
					relasi = data;
					relasi.put("ttLahir", ttLahir);
				}
			}
		}

		// pasien
		Map<String, Object> pasien = (Map<String, Object>) result.get("pasien");
		String ttLahirPasien = pasien.get("tempatLahir") != null ? (String) pasien.get("tempatLahir")
				: "" + pasien.get("tglLahir") != null ? ", " + (String) pasien.get("tglLahir") : "";
		// alamatPasien
		Map<String, Object> mapAlamatPasien = (Map<String, Object>) result.get("alamatPasien");
		alamatPasien = (mapAlamatPasien.get("alamatLengkap") != null
				? "Jln " + (String) mapAlamatPasien.get("alamatLengkap") : "")
				+ (mapAlamatPasien.get("desaKelurahan") != null
						? ", Kelurahan " + (String) mapAlamatPasien.get("desaKelurahan") : "")
				+ (mapAlamatPasien.get("rtrw") != null ? ", RT/RW " + (String) mapAlamatPasien.get("rtrw") : "")
				+ (mapAlamatPasien.get("kecamatan") != null ? ", Kecamatan " + (String) mapAlamatPasien.get("kecamatan")
						: "")
				+ (mapAlamatPasien.get("kotaKabupaten") != null
						? ", Kota/Kab " + (String) mapAlamatPasien.get("kotaKabupaten") : "")
				+ (mapAlamatPasien.get("propinsi") != null ? ", Provinsi " + (String) mapAlamatPasien.get("propinsi")
						: "");

		// Biaya
		Map<String, Object> biaya = (Map<String, Object>) result.get("strukPelayanan");

		// Verifikator
		for (Map<String, Object> data : (List<Map<String, Object>>) result.get("verifikator")) {
			m.addObject("jabatan" + data.get("id"), data.get("jabatan"));
			m.addObject("namaLengkap" + data.get("id"), data.get("namaLengkap"));
			m.addObject("nip" + data.get("id"), data.get("NIP"));
		}

		m.addObject("dataSource", result.get("penanggungJawab"));
		// penanggungJawab
		m.addObject("ttLahirPJ", penanggungJawab.get("ttLahir"));
		m.addObject("alamatPJ", alamatPj);
		m.addObject("namaPJ", penanggungJawab.get("namaLengkap"));
		m.addObject("nomorKTPPJ", penanggungJawab.get("noIdentitas"));
		m.addObject("noTelpPJ", penanggungJawab.get("telpon"));
		// pasien
		m.addObject("namapasien", pasien.get("namaPasien"));
		m.addObject("noCm", pasien.get("noCm"));
		m.addObject("ttLahirPasien", ttLahirPasien);
		m.addObject("alamatPasien", alamatPasien);
		m.addObject("hubKeluargaPasien", penanggungJawab.get("hubunganKeluarga"));
		// relasi
		m.addObject("namaRelasi", relasi.get("namaLengkap"));
		m.addObject("ttLahirRelasi", relasi.get("ttLahir"));
		m.addObject("alamatRelasi", alamatRelasi);
		m.addObject("noTelpRelasi", relasi.get("telpon"));
		m.addObject("hubKeluargaRelasi", relasi.get("hubunganKeluarga"));

		m.addObject("jumlahBiaya", biaya.get("jumlahBiaya"));
		m.addObject("telahDibayar", biaya.get("telahDibayar"));
		m.addObject("sisaYangBelumDibayar", biaya.get("sisaYangBelumDibayar"));
		BigDecimal sisaYangBelumDibayar = biaya.get("sisaYangBelumDibayar") != null
				? (BigDecimal) biaya.get("sisaYangBelumDibayar") : BigDecimal.valueOf(0.0);
		String terbilang = IndonesianNumberToWords.convert(sisaYangBelumDibayar.longValue());
		m.addObject("terbilang", StringUtils.capitalize(terbilang));

		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapResepApotek")
	public ModelAndView generateLapResepApotek(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noOrder", required = true) String noOrder) {

		Map<String, Object> result = pelayananObatService.getOrderPelayanan3(noOrder);
		List<Map<String, Object>> orders = (List<Map<String, Object>>) result.get("orders");
		List<Map<String, Object>> dataSources = new ArrayList<Map<String, Object>>();
		Map<String, Object> strukOrder = new HashMap<String, Object>();
		for (Map<String, Object> data : orders) {
			Map<String, Object> order = new HashMap<String, Object>();
			order.put("namaProduk", ((Map<String, Object>) data.get("produk")).get("namaProduk"));
			order.put("keteranganPakai", ((Map<String, Object>) data.get("keteranganPakai")).get("name"));
			if (CommonUtil.isNotNullOrEmpty(data.get("jumlah"))) {
				order.put("jumlah", ((Double) data.get("jumlah")).toString());
			}
			strukOrder = (Map<String, Object>) data.get("strukOrder");
			Map<String, Object> nocm = (Map<String, Object>) strukOrder.get("noCm");
			order.put("namaPasien", ((Map<String, Object>) strukOrder.get("noCm")).get("namaPasien"));
			dataSources.add(order);
		}
		m.addObject("dataSource", dataSources);

		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapKwitansiResep")
	public ModelAndView generateLapKwitansiResep(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noOrder", required = true) String noOrder) {

		Map<String, Object> result = pelayananObatService.getOrderPelayanan3(noOrder);
		List<Map<String, Object>> orders = (List<Map<String, Object>>) result.get("orders");
		List<Map<String, Object>> dataSources = new ArrayList<Map<String, Object>>();
		Map<String, Object> strukOrder = new HashMap<String, Object>();
		Map<String, Object> nocm = new HashMap<String, Object>();
		Double total = 0.0;
		for (Map<String, Object> data : orders) {
			Double hargaJual = 0.0;
			Double jumlah = 0.0;
			Map<String, Object> order = new HashMap<String, Object>();
			if (CommonUtil.isNotNullOrEmpty(data.get("jumlah"))) {
				jumlah = (Double) data.get("jumlah");
			}
			if (CommonUtil.isNotNullOrEmpty(data.get("hargaJual"))) {
				hargaJual = (Double) data.get("hargaJual");
			}
			total += (jumlah * hargaJual);
			strukOrder = (Map<String, Object>) data.get("strukOrder");
			String qty = jumlah.toString();
			order.put("jumlah", "" + qty.substring(0, qty.length() - 2));
			order.put("namaProduk", ((Map<String, Object>) data.get("produk")).get("namaProduk"));
			dataSources.add(order);
			nocm = (Map<String, Object>) strukOrder.get("noCm");
		}
		Map<String, Object> ruangan = (Map<String, Object>) strukOrder.get("ruangan");
		String terbilang = IndonesianNumberToWords.convert(total.longValue());

		m.addObject("dataSource", dataSources);
		m.addObject("noKwitansi", noOrder);
		m.addObject("total", CurrencyUtil.getPriceInINA(total));
		m.addObject("terbilang", StringUtils.capitalize(terbilang));
		m.addObject("noRM", nocm.get("noCm"));
		m.addObject("namaPasien", nocm.get("namaPasien"));
		m.addObject("namaRuangan", ruangan.get("namaRuangan"));
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapDataUangMakanPegawai")
	public ModelAndView generateLapDataInventarisRuangan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "detailPegawai", required = true) Integer detailPegawai,
			@RequestParam(value = "periode", required = true) String periode) {

		List<PayRollReportUangMakanDto> result = payRollReportingService.reportUangMakan(detailPegawai, periode);
		List<Map<String, Object>> listPegawai = new ArrayList<Map<String, Object>>();

		for (int i = 0; i < result.size(); i++) {
			PayRollReportUangMakanDto dto = result.get(i);
			listPegawai = dto.getListPegawai();
			m.addObject("bulanHeader", dto.getBulanHeader());
			m.addObject("aktifitasBulanHeader", dto.getAktifitasBulanHeader());
			m.addObject("namaDirekturMedikKeperawatan", dto.getNamaDirekturMedikKeperawatan());
			m.addObject("nipDirekturMedikKeperawatan", dto.getNipDirekturMedikKeperawatan());
			m.addObject("namaDirekturKeuangan", dto.getNamaDirekturKeuangan());
			m.addObject("nipDirekturKeuangan", dto.getNipDirekturKeuangan());
			m.addObject("namaKepalaBagianSdm", dto.getNamaKepalaBagianSdm());
			m.addObject("nipKepalaBagianSdm", dto.getNipKepalaBagianSdm());
			m.addObject("terbilang", "");
		}
		m.addObject("dataSource", listPegawai);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapKwitansiDeposit")
	public ModelAndView generateLapKwitansiDeposit(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noSBM", required = true) String noSBM) {

		Map<String, Object> result = reportingDao.findPembayaranDeposit(noSBM);

		List<Map<String, Object>> listResult = new ArrayList<Map<String, Object>>();

		if (CommonUtil.isNotNullOrEmpty(result)) {
			if (CommonUtil.isNullOrEmpty(result.get("pembayar"))) {
				result.put("pembayar", result.get("namaPasien"));
			}
			Double total = 0.0;
			if (CommonUtil.isNotNullOrEmpty(result.get("totalDibayar"))) {
				total = (Double) result.get("totalDibayar");
				result.put("totalDibayar", CurrencyUtil.getPriceInINA((Double) result.get("totalDibayar")));
			}

			String terbilang = IndonesianNumberToWords.convert(total.longValue());

			result.put("terbilang", StringUtils.capitalize(terbilang));
			listResult.add(result);

		}
		m.addObject("dataSource", listResult);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapKwitansiCicilan")
	public ModelAndView generateLapKwitansiCicilan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noSBM", required = true) String noSBM) {

		Map<String, Object> result = reportingDao.findPembayaranCicilan(noSBM);

		List<Map<String, Object>> listResult = new ArrayList<Map<String, Object>>();// piutangAwal

		if (CommonUtil.isNotNullOrEmpty(result)) {
			if (CommonUtil.isNullOrEmpty(result.get("pembayar"))) {
				result.put("pembayar", result.get("namaPasien"));
			}
			if (CommonUtil.isNotNullOrEmpty(result.get("piutangAwal"))) {
				Double piutangAwal = ((BigDecimal) result.get("piutangAwal")).doubleValue();
				result.put("piutangAwal", CurrencyUtil.getPriceInINA(piutangAwal));
			}
			if (CommonUtil.isNotNullOrEmpty(result.get("totalCicilan"))) {
				Double totalCicilan = ((BigDecimal) result.get("totalCicilan")).doubleValue();
				result.put("totalCicilan", CurrencyUtil.getPriceInINA(totalCicilan));
			}
			if (CommonUtil.isNotNullOrEmpty(result.get("sisaPiutang"))) {
				Double sisaPiutang = ((BigDecimal) result.get("sisaPiutang")).doubleValue();
				result.put("sisaPiutang", CurrencyUtil.getPriceInINA(sisaPiutang));
			}
			Double total = 0.0;
			if (CommonUtil.isNotNullOrEmpty(result.get("totalDibayar"))) {
				total = (Double) result.get("totalDibayar");
				result.put("totalDibayar", CurrencyUtil.getPriceInINA((Double) result.get("totalDibayar")));
			}

			String terbilang = IndonesianNumberToWords.convert(total.longValue());

			result.put("terbilang", StringUtils.capitalize(terbilang));
			listResult.add(result);

		}
		m.addObject("dataSource", listResult);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapBuktiKas")
	public ModelAndView generateBuktiKas(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noStruk", required = true) String noStruk) {
		List<Map<String, Object>> listResult = new ArrayList<Map<String, Object>>();
		Map<String, Object> result = reportingPelayananRekamMedisService.reportBukuKas(noStruk);
		if (CommonUtil.isNotNullOrEmpty(result)) {
			listResult.add(result);
		}
		m.addObject("dataSource", listResult);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapKwitansiUmum")
	public ModelAndView generateKwitansiUmum(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noSbm", required = true) String noSbm) {
		List<Map<String, Object>> listResult = new ArrayList<Map<String, Object>>();
		Map<String, Object> result = reportingPelayananRekamMedisService.reportKwitansiUmum(noSbm);
		if (CommonUtil.isNotNullOrEmpty(result)) {
			listResult.add(result);
		}
		m.addObject("dataSource", listResult);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapKwitansiPengeluaran")
	public ModelAndView generateKwitansiPengeluaran(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noSbk", required = true) String noSbk) {
		List<Map<String, Object>> listResult = new ArrayList<Map<String, Object>>();
		Map<String, Object> result = reportingPelayananRekamMedisService.reportKwitansiPengeluaran(noSbk);
		if (CommonUtil.isNotNullOrEmpty(result)) {
			listResult.add(result);
		}
		m.addObject("dataSource", listResult);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapStrukLaundry")
	public ModelAndView generateStrukLaundry(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRecStrukPelayanan", required = true) String noRecStrukPelayanan) {
		List<Map<String, Object>> listResult = new ArrayList<Map<String, Object>>();
		Map<String, Object> result = laundryService.getStrukOrderExternal(noRecStrukPelayanan);

		m.addObject("dataSource", result.get("produkLinens"));

		m.addObject("tglOrder", result.get("tglOrder"));
		m.addObject("noOrder", result.get("noOrder"));
		if (CommonUtil.isNotNullOrEmpty(result.get("grantTotal"))) {
			m.addObject("grantTotal", CurrencyUtil.getPriceInINA((Double) result.get("grantTotal")));
		}
		m.addObject("namaPelanggan", result.get("namaPelanggan"));
		m.addObject("telepon", result.get("telepon"));
		m.addObject("statusBayar", result.get("statusBayar"));
		m.addObject("alamat", result.get("alamat"));
		m.addObject("petugas", result.get("petugas"));

		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapPengkajianAwalNeonatusRawatJalan")
	public ModelAndView generatePengkajianAwalNeonatusRawatJalan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "kdPap", required = false) String kdPap,
			@RequestParam(value = "noRec", required = false) String noRec) {
		List<Map<String, Object>> listResult = new ArrayList<Map<String, Object>>();
		Map<String, Object> pasien = reportingDao.findPasienByNoRegistrasi(noRec);
		Map<String, Object> result = reportService.pengkajianAwalNeonatusRawatJalan(kdPap, noRec);
		result.putAll(pasien);
		listResult.add(result);

		m.addObject("dataSource", listResult);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapPengkajianAwalNeonatusRawatInap")
	public ModelAndView generatePengkajianAwalNeonatusRawatInap(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "kdPap", required = false) String kdPap,
			@RequestParam(value = "noRec", required = false) String noRec) {
		List<Map<String, Object>> listResult = new ArrayList<Map<String, Object>>();
		Map<String, Object> pasien = reportingDao.findPasienByNoRegistrasi(noRec);
		Map<String, Object> result = reportService.pengkajianAwalNeonatusRawatInap(kdPap, noRec);
		result.putAll(pasien);
		listResult.add(result);

		m.addObject("dataSource", listResult);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapPengkajianAwalAnakRawatJalan")
	public ModelAndView generatePengkajianAwalAnakRawatJalan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "kdPap", required = false) String kdPap,
			@RequestParam(value = "noRec", required = false) String noRec) {
		List<Map<String, Object>> listResult = new ArrayList<Map<String, Object>>();
		Map<String, Object> pasien = reportingDao.findPasienByNoRegistrasi(noRec);
		Map<String, Object> result = reportService.pengkajianAwalAnakRawatJalan(kdPap, noRec);
		result.putAll(pasien);
		listResult.add(result);

		m.addObject("dataSource", listResult);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}
		return m;
	}

	@RequestMapping("/lapPengkajianAwalDewasaRawatJalan")
	public ModelAndView generatePengkajianAwalDewasaRawatJalan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "kdPap", required = false) String kdPap,
			@RequestParam(value = "noRec", required = false) String noRec) {
		List<Map<String, Object>> listResult = new ArrayList<Map<String, Object>>();
		Map<String, Object> pasien = reportingDao.findPasienByNoRegistrasi(noRec);
		Map<String, Object> result = reportService.pengkajianAwalDewasaRawatJalan(kdPap, noRec);
		result.putAll(pasien);
		listResult.add(result);

		m.addObject("dataSource", listResult);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapPengkajianAwalAnakRawatInap")
	public ModelAndView generatePengkajianAwalAnakRawatInap(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "kdPap", required = false) String kdPap,
			@RequestParam(value = "noRec", required = false) String noRec) {
		List<Map<String, Object>> listResult = new ArrayList<Map<String, Object>>();
		Map<String, Object> pasien = reportingDao.findPasienByNoRegistrasi(noRec);
		Map<String, Object> result = reportService.pengkajianAwalAnakRawatInap(kdPap, noRec);
		result.putAll(pasien);
		listResult.add(result);

		m.addObject("dataSource", listResult);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapResumeMedis")
	public ModelAndView generatePengkajianAwalDewasaRawatJalan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRec", required = false) String noRec) {
		List<Map<String, Object>> listResult = new ArrayList<Map<String, Object>>();
		Map<String, Object> pasien = reportingDao.findPasienByNoRegistrasi(noRec);
		String umur = AgeCalculator
				.calculateAge2((Date) pasien.get("tanggalRegistrasi"), (Date) pasien.get("tanggalLahir")).toString();
		Map<String, Object> result = reportService.resumeMedis(noRec);
		if (CommonUtil.isNotNullOrEmpty(result)) {
			result.putAll(pasien);
			result.put("umur", umur);
		}
		listResult.add(result);

		m.addObject("dataSource", listResult);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapDaftarHadir")
	public ModelAndView generateDaftarHadir(ModelAndView m,
			@RequestParam(value = "noRecStrukPlanning", required = true) String noRecStrukPlanning,
			@RequestParam(value = "jenisTestId", required = true) Integer jenisTestId,
			@RequestParam(value = "format", required = false) String format) {
		Map<String, Object> result = rekrutmenService.getDaftarHadirRekrutmen(noRecStrukPlanning, jenisTestId);

		m.addObject("dataSource", result.get("pelamars"));
		m.addObject("ruangan", result.get("ruangan"));
		m.addObject("tanggal", result.get("tanggal"));
		m.addObject("jenisTest", result.get("jenisTest"));

		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapBuktiPelayanan")
	public ModelAndView generateLapBuktiPelayanan(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRegistrasi", required = true) String noRegistrasi,
			@RequestParam(value = "X-AUTH-TOKEN", required = true) String token) {

		List<String> list = reportingDao.findNoRecAntrian(noRegistrasi);
		List<KasirDto> listKasir = new ArrayList<KasirDto>();
		if (CommonUtil.isNotNullOrEmpty(list)) {
			Map<String, Object> pasien = reportingDao.findPasienByNoRegistrasi(list.get(0));
			List<String> diagnosa = reportingDao.findDiagnosisUtama(list.get(0));
			String umur = AgeCalculator
					.calculateAge2((Date) pasien.get("tanggalRegistrasi"), (Date) pasien.get("tanggalLahir"))
					.toString();
			if (CommonUtil.isNotNullOrEmpty(diagnosa)) {
				m.addObject("diagnosa", diagnosa.get(0));
			}
			m.addObject("umur", umur);
			m.addObject("tipe", pasien.get("tipe"));
			m.addObject("rujukan", pasien.get("rujukan"));
			m.addObject("kamar", pasien.get("kamar"));
			m.addObject("jenisKelamin", ((String) pasien.get("jenisKelamin")).substring(0, 1));
			m.addObject("noCm", pasien.get("noCm"));
			m.addObject("noRegistrasi", noRegistrasi);
			m.addObject("namaPasien", pasien.get("namaPasien"));
			m.addObject("kelasRawat", pasien.get("namaKelas"));
			m.addObject("unit", pasien.get("ruanganLast"));
			m.addObject("lastRuangan", pasien.get("ruanganLast"));
			m.addObject("tglMasuk", pasien.get("tglRegistrasi"));
			m.addObject("tglPulang", pasien.get("tglKeluar"));
			m.addObject("jenisPasien", pasien.get("tglKeluar"));
			m.addObject("dokter", pasien.get("dokter"));

		}
		HeadKasirDto headKasirDto = reportService.generateBilling(noRegistrasi, token);
		if (CommonUtil.isNullOrEmpty(headKasirDto)) {
			headKasirDto = new HeadKasirDto();
			if (CommonUtil.isNullOrEmpty(headKasirDto.getDetails())) {
				KasirDto kasirDto = new KasirDto();
				listKasir.add(kasirDto);
				headKasirDto.setDetails(listKasir);
			}
		} else {
			if (CommonUtil.isNullOrEmpty(headKasirDto.getDetails())) {
				KasirDto kasirDto = new KasirDto();
				headKasirDto.getDetails().add(kasirDto);
			}
		}
		m.addObject("dataSource", headKasirDto.getDetails());
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapTracer")
	public ModelAndView generateLapTracer(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRegistrasi", required = true) String noRegistrasi) {

		Map<String, Object> result = reportService.tracer(noRegistrasi);
		List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
		data.add(result);
		m.addObject("dataSource", data);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/labelPasien")
	public ModelAndView generateLabelPasien(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noCm", required = true) String noRegistrasi,
			@RequestParam(value = "qty", required = true) Integer qty) {

		Map<String, Object> result = reportService.labelPasien(noRegistrasi);
		List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
		for (int i = 0; i < qty; i++) {
			data.add(result);
		}
		m.addObject("dataSource", data);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapGeneralConsent")
	public ModelAndView generatelapGeneralConsent(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRegistrasi", required = true) String noRegistrasi) {

		Map<String, Object> result = reportService.labelPasien(noRegistrasi);
		List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
		data.add(result);
		m.addObject("dataSource", data);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapRingkasanKeluarMasuk")
	public ModelAndView generateLapRingkasanKeluarMasuk(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRegistrasi", required = true) String noRegistrasi) {

		Map<String, Object> result = reportService.ringkasanKeluarMasuk(noRegistrasi);
		List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();

		data.add(result);
		m.addObject("dataSource", data);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapRekapIndeksKehadiran")
	public ModelAndView generateLapRekapitulasiKehadiran(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "periode", required = true) String periode) {

		List<Map<String, Object>> result = reportService.generateLapRekapitulasiIndexKehadiran(periode);
		String[] bulanArray = DateUtil.INDONESIAN_MONTH;
		String[] splitData = periode.split("-");
		String bulan = bulanArray[Integer.parseInt(splitData[1].replace("0", "")) - 1];

		m.addObject("dataSource", result);
		m.addObject("periode", bulan);
		m.addObject("format", "pdf");

		return m;
	}

	@RequestMapping("/lapRekapALLIKI")
	public ModelAndView generateAllRekapIKI(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "periode", required = false) String periode) {

		Map<String, Object> result = indekKinerjaService.rekapIKI(null, periode);
		Map<String, Object> dirut = reportingDao.findDataDirut();

		String[] bulanArray = DateUtil.INDONESIAN_MONTH;
		String[] splitData = periode.split("-");
		String bulan = bulanArray[Integer.parseInt(splitData[1].replace("0", "")) - 1];

		m.addObject("dataSource", result.get("listIKI"));
		m.addObject("bulan", bulan + " " + Integer.parseInt(splitData[0]));
		// m.addObject("unitKerja", result.get("unitKerja"));
		m.addObject("total", result.get("jumlah").toString());
		m.addObject("dirut", dirut.get("nama"));
		m.addObject("nipDirut", dirut.get("nip"));

		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapCapaianKinerja")
	public ModelAndView generateAllRlapCapaianKinerja(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "date", required = true) String date,
			@RequestParam(value = "idAtasan", required = false) Integer idAtasan) {

		List<Map<String, Object>> result = indekKinerjaService.findUraianTugasByTanggal(date);
		Pegawai pegawaiLoggedIn = indekKinerjaService.getPegawaiByUserLogin();
		Map<String, Object> pegawai = pegawaiDao.findPegawaiById(pegawaiLoggedIn.getId());
		if (CommonUtil.isNullOrEmpty(result)) {
			Map<String, Object> data = new HashMap<String, Object>();
			result.add(pegawai);
		}

		Map<String, Object> atasan = pegawaiDao.findPegawaiById(idAtasan);
		m.addObject("dataSource", result);
		m.addObject("tanggal", date);
		m.addObject("unitKerja", pegawai.get("namaRuangan"));
		m.addObject("jabatan", pegawai.get("jabatanInternal"));
		m.addObject("nip", pegawaiLoggedIn.getNipPns());
		m.addObject("namaLengkap", pegawaiLoggedIn.getNamaLengkap());
		m.addObject("jabatanAtasan", atasan.get("jabatanInternal"));
		m.addObject("atasan", atasan.get("nama"));
		m.addObject("nipAtasan", atasan.get("nipPns"));

		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	@RequestMapping("/lapLogbookPegawai")
	public ModelAndView generateLapLogbookPegawai(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "periode", required = true) String periode,
			@RequestParam(value = "idPegawai", required = false) Integer idPegawai) {
		Date start = DateUtil.startMonth(periode);
		Date end = DateUtil.endMonth(periode);

		Pegawai pegawaiLoggedIn = indekKinerjaService.getPegawaiByUserLogin();
		Map<String, Object> pegawai = pegawaiDao.findPegawaiById(pegawaiLoggedIn.getId());
		List<Map<String, Object>> result = indekKinerjaDao.findTindakanByIdPegawaiAndPeriod(start, end,
				pegawaiLoggedIn.getId(), indekKinerjaService.splitIdProdukAdministrasi());
		if (CommonUtil.isNullOrEmpty(result)) {
			Map<String, Object> data = new HashMap<String, Object>();
			result.add(pegawai);
		}
		String[] bulanArray = DateUtil.INDONESIAN_MONTH;
		String[] splitData = periode.split("-");
		String bulan = "";
		if (CommonUtil.isNotNullOrEmpty(Integer.parseInt(splitData[1].replace("0", "")) - 1)) {
			bulan = bulanArray[Integer.parseInt(splitData[1].replace("0", "")) - 1];
		}
		Map<String, Object> atasan = pegawaiDao.findPegawaiById(idPegawai);
		m.addObject("dataSource", result);
		m.addObject("periode", bulan);
		m.addObject("unitKerja", pegawai.get("namaRuangan"));
		m.addObject("jabatan", pegawai.get("jabatanInternal"));
		m.addObject("nip", pegawaiLoggedIn.getNipPns());
		m.addObject("nama", pegawaiLoggedIn.getNamaLengkap());
		m.addObject("jabatanAtasan", atasan.get("jabatanInternal"));
		m.addObject("atasan", atasan.get("nama"));
		m.addObject("nipAtasan", atasan.get("nipPns"));
		m.addObject("total", indekKinerjaDao.findTotalTindakanPerMonth(pegawaiLoggedIn.getId(), start, end,
				indekKinerjaService.splitIdProdukAdministrasi()));

		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}

		return m;
	}

	// @RequestMapping("/lapPermohonanCuti")
	// public ModelAndView generateAllRlapCapaianKinerja(ModelAndView m,
	// @RequestParam(value = "format", required = false) String format,
	// @RequestParam(value = "noRecPlanning", required = true) String
	// noRecPlanning,
	// @RequestParam(value = "idAtasan1", required = false) Integer idAtasan1,
	// @RequestParam(value = "idAtasan2", required = false) Integer idAtasan2) {
	//
	// List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
	// Map<String, Object> data =
	// reportService.generateLapPermohonanCuti(noRecPlanning, idAtasan1,
	// idAtasan2, 0);
	// result.add(data);
	// m.addObject("dataSource", result);
	// m.addObject("format", "pdf");
	//
	// if (format != null && !format.isEmpty()) {
	// m.addObject("format", format);
	// }
	// return m;
	// }

	// @RequestMapping("/lapSuratIzinCuti")
	// public ModelAndView generateSuratIzinCuti(ModelAndView m,
	// @RequestParam(value = "format", required = false) String format,
	// @RequestParam(value = "noRecPlanning", required = true) String
	// noRecPlanning,
	// @RequestParam(value = "jabatanAtasanId", required = true) Integer
	// jabatanAtasanId) {
	//
	// List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
	// Map<String, Object> data =
	// reportService.generateLapSuratIzinCuti(noRecPlanning, jabatanAtasanId);
	// result.add(data);
	// m.addObject("dataSource", result);
	// m.addObject("format", "pdf");
	//
	// if (format != null && !format.isEmpty()) {
	// m.addObject("format", format);
	// }
	// return m;
	// }

	@RequestMapping("/lapSuratIzin")
	public ModelAndView generateSuratIzin(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "noRecPlanning", required = true) String noRecPlanning) {

		/*
		 * List<Map<String, Object>> result = new ArrayList<Map<String,
		 * Object>>(); Map<String, Object> data =
		 * reportService.generateLapSuratIzinCuti(noRecPlanning);
		 * result.add(data); m.addObject("dataSource", result);
		 * m.addObject("format", "pdf");
		 * 
		 * if (format != null && !format.isEmpty()) { m.addObject("format",
		 * format); }
		 */
		return m;
	}

	@RequestMapping("/lapPelayananPasien")
	public ModelAndView generateLapPelayananPasien(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate,
			@RequestParam(value = "idRuangan", required = false) Integer idRuangan,
			@RequestParam(value = "idjenisPasien", required = false) Integer idjenisPasien) {
		String id = reportingDao.findIdJenisProdukKarcis();
		Map<String, Object> result = reportService.generateLapPelayanan(startDate, endDate, null, idRuangan,
				idjenisPasien);
		List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>();
		datas = (List<Map<String, Object>>) result.get("listData");
		// just to make sure the datasource is not null
		if (CommonUtil.isNullOrEmpty(datas)) {
			datas.add(result);
		}
		//
		m.addObject("dataSource", datas);
		m.addObject("totalAll", result.get("totalAll"));
		m.addObject("tglPelayanan", startDate + " s/d " + endDate);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}
		return m;
	}

	@RequestMapping("/lapPelayananPasienByDokter")
	public ModelAndView generateLapPelayananPasienKarcisDailyByDokter(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate,
			@RequestParam(value = "idRuangan", required = false) Integer idRuangan,
			@RequestParam(value = "idjenisPasien", required = false) Integer idjenisPasien,
			@RequestParam(value = "idDokter", required = true) Integer idDokter) {
		String id = reportingDao.findIdJenisProdukKarcis();
		Map<String, Object> result = reportService.generateLapPelayananByDokter(startDate, endDate, Integer.valueOf(id),
				idRuangan, idjenisPasien, idDokter);
		// just to make sure the datasource is not null
		List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>();
		datas = (List<Map<String, Object>>) result.get("listData");
		if (CommonUtil.isNullOrEmpty(datas)) {
			datas.add(result);
		}
		//
		m.addObject("dataSource", datas);
		m.addObject("totalAll", result.get("totalAll"));
		m.addObject("tglPelayanan", startDate + " s/d " + endDate);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}
		return m;
	}

	@RequestMapping("/lapPelayananPasienKarcis")
	public ModelAndView generateLapPelayananPasienKarcisDaily(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate,
			@RequestParam(value = "idRuangan", required = false) Integer idRuangan,
			@RequestParam(value = "idjenisPasien", required = false) Integer idjenisPasien) {
		String id = reportingDao.findIdJenisProdukKarcis();
		Map<String, Object> result = reportService.generateLapPelayanan(startDate, endDate, Integer.valueOf(id),
				idRuangan, idjenisPasien);
		// just to make sure the datasource is not null
		List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>();
		datas = (List<Map<String, Object>>) result.get("listData");
		if (CommonUtil.isNullOrEmpty(datas)) {
			datas.add(result);
		}
		//
		m.addObject("dataSource", datas);
		m.addObject("totalAll", result.get("totalAll"));
		m.addObject("tglPelayanan", startDate + " s/d " + endDate);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}
		return m;
	}

	@RequestMapping("/lapPelayananPasienByAllDokter")
	public ModelAndView generateLapPelayananPasienKarcisDailyByAllDokter(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate,
			@RequestParam(value = "idRuangan", required = false) Integer idRuangan,
			@RequestParam(value = "idjenisPasien", required = false) Integer idjenisPasien) {
		String id = reportingDao.findIdJenisProdukKarcis();
		Map<String, Object> result = reportService.generateLapPelayananByDokter(startDate, endDate, Integer.valueOf(id),
				idRuangan, idjenisPasien, null);
		// just to make sure the datasource is not null
		List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>();
		datas = (List<Map<String, Object>>) result.get("listData");
		if (CommonUtil.isNullOrEmpty(datas)) {
			datas.add(result);
		}
		//
		m.addObject("dataSource", datas);
		m.addObject("totalAll", result.get("totalAll"));
		m.addObject("tglPelayanan", startDate + " s/d " + endDate);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}
		return m;
	}

	@RequestMapping("/lapPelayananPasienByDokterWithKarcis")
	public ModelAndView generateLapPelayananPasienByAllDokter(ModelAndView m,
			@RequestParam(value = "format", required = false) String format,
			@RequestParam(value = "startDate", required = true) String startDate,
			@RequestParam(value = "endDate", required = true) String endDate,
			@RequestParam(value = "idRuangan", required = false) Integer idRuangan,
			@RequestParam(value = "idjenisPasien", required = false) Integer idjenisPasien,
			@RequestParam(value = "idDokter", required = false) Integer idDokter,
			@RequestParam(value = "idDepartemen", required = false) Integer idDepartemen) {
		Map<String, Object> result = reportService.generateLapPelayananByDokterWithKarcis(startDate, endDate, null,
				idRuangan, idjenisPasien, idDokter, idDepartemen);

		// just to make sure the datasource is not null
		List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>();
		datas = (List<Map<String, Object>>) result.get("listData");
		if (CommonUtil.isNullOrEmpty(datas)) {
			datas.add(result);
		}
		//
		m.addObject("dataSource", datas);
		m.addObject("totalKarcis", result.get("totalKarcis"));
		m.addObject("totalKonsul", result.get("totalKonsul"));
		m.addObject("totalTindakan", result.get("totalTindakan"));
		m.addObject("totalSubTotal", result.get("totalSubTotal"));
		m.addObject("totalDiskon", result.get("totalDiskon"));
		m.addObject("totalEmbos", result.get("totalEmbos"));
		m.addObject("periode", startDate + " s/d " + endDate);
		m.addObject("format", "pdf");

		if (format != null && !format.isEmpty()) {
			m.addObject("format", format);
		}
		return m;
	}
}
