DROP PROCEDURE IF EXISTS regonline.infoAntrian;

DELIMITER //
CREATE DEFINER=`root`@`localhost` PROCEDURE `regonline`.`infoAntrian`(IN `PNOMOR` CHAR(50), IN `PTANGGAL` DATE, IN `PDOKTER` CHAR(50), IN `PPOLI` CHAR(50), IN `PJAM` CHAR(50))
BEGIN
	DECLARE Vnamadokter CHAR(250);
	DECLARE Vjampraktek CHAR(100);
	DECLARE Vaturankoutahfis INT(11); # Jika Nilai 1, Maka Kouta yang digunakan adalah dari jadwal di HFIS
	DECLARE Vpasienlamatopoli INT(11); # 0 = Default Semua Antrian Mendapatkan Antrian Loket Admisi, 1 = Pasien Lama Langsung Ke Poli (Dapat Antrian Poli)
	DECLARE Vaturanantrian INT(11); # 0 = Berdasarkan Ruangan, 1 = Berdasarkan Jadwal HFIS
	DECLARE Vlimitall, Vkoutajkn, Vkoutanonjkn, Vjmlantrianjkn, Vjmlantriannonjkn INT(11);

	SET @namadokter='-';
	SET @jampraktek='00:00 - 00:00';
	SET @limitall = 0;
	SET @koutajkn = 0;
	SET @koutanonjkn = 0;
	SET @jmlantrianjkn = 0;
	SET @jmlantriannonjkn = 0;
	SET @estimasiadmisi = 0;
	SET @estimasipoli = 0;
	SET @estimasihfis = 0;
	
	SELECT IF(COUNT(*) > 0, 1, 0) INTO Vaturankoutahfis
	FROM aplikasi.properti_config pc WHERE pc.ID = '900305' AND pc.VALUE = 'TRUE';

	SELECT IF(COUNT(*) > 0, 1, 0) INTO Vpasienlamatopoli
	FROM aplikasi.properti_config pc WHERE pc.ID = '900315' AND pc.VALUE = 'TRUE';

	SELECT IF(COUNT(*) > 0, 1, 0) INTO Vaturanantrian
	FROM aplikasi.properti_config pc WHERE pc.ID = '900316' AND pc.VALUE = 'TRUE';
	
	SELECT @limitall:=l.LIMIT_DAFTAR INTO Vlimitall
	FROM master.penjamin_ruangan r, regonline.link_ruangan l
	WHERE l.ID = r.RUANGAN_RS AND r.PENJAMIN = 2 AND r.RUANGAN_PENJAMIN = PPOLI AND r.STATUS=1 ORDER BY r.ID DESC LIMIT 1;
	
	IF(Vaturankoutahfis > 0) THEN
		SELECT 
			@namadokter:= j.NM_DOKTER, @jampraktek:= j.JAM, @koutajkn:= j.KOUTA_JKN, @koutanonjkn:= j.KOUTA_NON_JKN
		INTO Vnamadokter, Vjampraktek, Vkoutajkn, Vkoutanonjkn
		FROM jadwal_dokter_hfis j WHERE j.KD_DOKTER = PDOKTER AND j.KD_SUB_SPESIALIS = PPOLI AND NM_HARI = CONCAT(
				CASE DAYOFWEEK(PTANGGAL)
					WHEN 1 THEN 'MINGGU'
					WHEN 2 THEN 'SENIN'
					WHEN 3 THEN 'SELASA'
					WHEN 4 THEN 'RABU'
					WHEN 5 THEN 'KAMIS'
					WHEN 6 THEN 'JUMAT'
					WHEN 7 THEN 'SABTU'
				END
			) AND j.`STATUS`=1 AND j.JAM = PJAM ORDER BY j.ID LIMIT 1;
	ELSE
		SELECT 
			@namadokter:= j.NM_DOKTER, @jampraktek:= j.JAM, @koutajkn:= j.KOUTA_JKN, @koutanonjkn:= j.KOUTA_NON_JKN
		INTO Vnamadokter, Vjampraktek, Vkoutajkn, Vkoutanonjkn
		FROM jadwal_dokter_hfis j WHERE j.KD_DOKTER = PDOKTER AND j.KD_SUB_SPESIALIS = PPOLI AND NM_HARI = CONCAT(
				CASE DAYOFWEEK(PTANGGAL)
					WHEN 1 THEN 'MINGGU'
					WHEN 2 THEN 'SENIN'
					WHEN 3 THEN 'SELASA'
					WHEN 4 THEN 'RABU'
					WHEN 5 THEN 'KAMIS'
					WHEN 6 THEN 'JUMAT'
					WHEN 7 THEN 'SABTU'
				END
			) AND j.`STATUS`=1 ORDER BY j.ID LIMIT 1;
	END IF;
	SELECT @jmlantrianjkn:= SUM(IF(CARABAYAR=2,1,0)) JML_JKN
	, @jmlantriannonjkn:= SUM(IF(CARABAYAR=2,0,1)) JML_NON_JKN 
	INTO Vjmlantrianjkn, Vjmlantriannonjkn
	FROM regonline.reservasi a WHERE a.TANGGALKUNJUNGAN = PTANGGAL AND a.POLI_BPJS=PPOLI AND STATUS IN (99,1,2) ORDER BY ID DESC LIMIT 1;
	
	SELECT
		r.ID kodebooking, r.POS_ANTRIAN posantrian, IF(r.CARABAYAR='2','JKN','NON JKN') jenispasien, r.NO_KARTU_BPJS nomorkartu, r.NIK nik, r.CONTACT nohp, r.POLI kodepolirs, lr.DESKRIPSI namapolirs, r.POLI_BPJS kodepoli, p.NMPOLI namapoli
		, if(r.JENIS = 1, '0','1') pasienbaru, r.NORM norm, IF(psn.NAMA IS NULL, r.NAMA, psn.NAMA) nama, r.TANGGALKUNJUNGAN tanggalperiksa, r.DOKTER kodedokter, @namadokter namadokter, date_format(STR_TO_DATE(CONCAT(r.JAM_PELAYANAN,':00'),'%H:%i:%s'),'%H:%i') jampraktek, @jampraktek jampraktekdpjp, r.JENIS_KUNJUNGAN jeniskunjungan
		, if(r.NO_REF_BPJS IS NULL,'',r.NO_REF_BPJS) nomorreferensi, CONCAT(r.POS_ANTRIAN, IF(r.CARABAYAR='2','2','1'),'-',LPAD(r.`NO`,3,'0')) nomorantrean, r.`NO` angkaantrean
		, r.ANTRIAN_POLI antreanpoli
		, r.POS_ANTRIAN posantrian
		, CONCAT(r.POS_ANTRIAN, IF(r.CARABAYAR='2','2','1'),'-', IF(Vpasienlamatopoli = 1 , IF(Vaturanantrian = 1 , IF(r.JENIS = 1 , r.NOMOR_ANTRIAN, r.NO) , IF(r.JENIS = 1, r.ANTRIAN_POLI, r.NO) ), r.NO)) nomorantrean_2
		, IF(Vpasienlamatopoli = 1 , IF(Vaturanantrian = 1 , IF(r.JENIS = 1 , r.NOMOR_ANTRIAN, r.NO) , IF(r.JENIS = 1, r.ANTRIAN_POLI, r.NO) ), r.NO) angkaantrean_2
		, @estimasiadmisi := ROUND(UNIX_TIMESTAMP(date_format(CONCAT(r.TANGGALKUNJUNGAN,' ', r.JAM),'%Y-%m-%d %H:%i:00')) * 1000,0) estimasidilayaniadmisi
		, @estimasipoli := ROUND(UNIX_TIMESTAMP(date_format(CONCAT(r.TANGGALKUNJUNGAN,' ', r.JAM_PELAYANAN),'%Y-%m-%d %H:%i:00')) * 1000,0) estimasidilayani
		, @estimasihfis := ROUND(UNIX_TIMESTAMP(date_format(CONCAT(r.TANGGALKUNJUNGAN,' ', r.ESTIMASI_PELAYANAN),'%Y-%m-%d %H:%i:00')) * 1000,0) estimasidilayanidokterhfis
		, CONCAT(IF(date_format(STR_TO_DATE(CONCAT(r.JAM_PELAYANAN,':00'),'%H:%i:%s'),'%H:00') > '11:00',
			'12:00 - 15:00'
				, IF(date_format(STR_TO_DATE(CONCAT(r.JAM_PELAYANAN,':00'),'%H:%i:%s'),'%H:00') > '09:00',
					'10:00 - 12:00'
						, IF(date_format(STR_TO_DATE(CONCAT(r.JAM_PELAYANAN,':00'),'%H:%i:%s'),'%H:00') > '07:00',
							'08:00 - 10:00'
								, '08:00 - 10:00'
								)
							)
						)
					) estimasijampelayanan
		, date_format(STR_TO_DATE(CONCAT(r.ESTIMASI_PELAYANAN,':00'),'%H:%i:%s'),'%H:%i') estimasijampelayanandokter
		, ROUND((@koutajkn -  @jmlantrianjkn),0) sisakuotajkn
		, @koutajkn kuotajkn
		, ROUND((@koutanonjkn -  @jmlantriannonjkn),0) sisakuotanonjkn
		, @koutanonjkn kuotanonjkn
		, IF(Vpasienlamatopoli = 1, IF(Vaturanantrian = 1, IF(r.JENIS = 1, @estimasihfis, @estimasiadmisi), IF(r.JENIS = 1, @estimasipoli, @estimasiadmisi)), @estimasiadmisi) estimasidilayani_2
	FROM reservasi r
	LEFT JOIN poli_bpjs p ON p.KDSUBSPESIALIS = r.POLI_BPJS
	LEFT JOIN link_ruangan lr ON lr.ID = r.POLI
	LEFT JOIN master.pasien psn ON psn.NORM = r.NORM
	WHERE r.ID = PNOMOR;
END//
DELIMITER ;