IF  EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MEDWEB_RANDEVUKAYIT]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE MEDWEB_RANDEVUKAYIT
go

CREATE PROCEDURE [dbo].[MEDWEB_RANDEVUKAYIT] @SUBEID int, @BOLUMID int, @DRID int, @HKIMLIKID int, 
	                                     @TARIH smalldatetime, @SAAT datetime,  @ACIKLAMA nvarchar(200), @KAYITYERI VARCHAR(50)='MEDWEB'	                                     
AS
BEGIN
    SET NOCOUNT ON
	DECLARE 
	  @Sonuc int,
	  @RSURE int,
	  @HastaAd nvarchar(100),
	  @HastaSoyad nvarchar(100),
	  @HastaTCKimlikNo nvarchar(100),
	  @HastaTel nvarchar(20),
	  @HastaTel2 nvarchar(20), 
	  @HastaDogumTarihi datetime,
	  @HastaCariAnaGrupID int,
	  @RANDEVUID int,
	  @Hasta nvarchar(20),
	  @RandWeb bit,
	  @Izinli bit,
	  @HastaRandevusuVar integer,
	  @CRMSMSBLID int,
	  @SMSIZNI INT,
	  @RANDSIRANO INT=0

	DECLARE @HRANDDATE DATETIME
	DECLARE @HRANDTARIH DATETIME
	DECLARE @GONDERIMZAMANI DATETIME

	SET @HRANDDATE = CONVERT(DATETIME,CONVERT(DATE,@TARIH))
	SET @HRANDTARIH = DATEADD(MINUTE,DATEPART(MINUTE,@SAAT),DATEADD(HOUR,DATEPART(HOUR,@SAAT),@HRANDDATE))
	SET @GONDERIMZAMANI= @HRANDTARIH- CONVERT(DATETIME,ISNULL((SELECT TOP 1 VALUESTR FROM CONFIG WHERE SECTIONSTR='Randevu' AND KEYNAME='Randevu SMS Kaydi Saat Farki'),'02:00:00'))
	  
	  
    IF @TARIH + @SAAT  <= GETDATE()
	BEGIN
	    -- Geçmiş tarihli randevu verilemez
		SET @Sonuc = 1
	    SELECT @Sonuc
	    RETURN
	END
	
	SELECT @RANDEVUID = RANDEVUID FROM HRANDEVU WHERE KIMLIKID = @HKIMLIKID AND RTARIH>=dbo.TARIHAL(GETDATE()) AND BOLUMID=@BOLUMID AND SUBEID=@SUBEID AND RANDDURUMID NOT IN (5,6)
	IF @@ROWCOUNT > 0 
        -- Hastanın aynı bölüme randevusu var	    
		SET @HastaRandevusuVar = 1
	ELSE
	BEGIN		
		SELECT @RANDEVUID = RANDEVUID FROM HRANDEVU WHERE KIMLIKID = @HKIMLIKID AND RTARIH=@TARIH AND RSAAT = @SAAT - 2 AND RANDDURUMID NOT IN (5,6)
		IF @@ROWCOUNT > 0
		    -- -- Hastanın aynı saate randevusu var	
		    SET @HastaRandevusuVar = 2
		ELSE
		    SET @HastaRandevusuVar = 0 
	END
		
	
	IF @HastaRandevusuVar > 0
	BEGIN
	    IF @HastaRandevusuVar = 1
		    SET @Sonuc = 5
		ELSE 
		    SET @Sonuc = 6
	    SELECT @Sonuc
	    RETURN
	END
	
	SELECT @RandevuID = RANDEVUID, @Hasta = HASTA, @RandWeb = WEB, @Izinli = IZINLI
	FROM dbo.RANDEVUGUN (@DRID, @TARIH, default)
	WHERE CAST(SAAT AS datetime) = @SAAT
	
	if @@ROWCOUNT > 0 
	BEGIN      
	    if @RandevuID IS NULL AND @Hasta IS NULL AND @Izinli = 0
	    BEGIN  
	        SELECT @RSURE = RANDEVUDAKIKA FROM TDRKIMLIK WHERE DRID = @DRID
    		
	        SELECT @HastaAd = dbo.HKIMLIK.HADI,
				@HastaSoyad = dbo.HKIMLIK.HSOYADI, 
	               @HastaTCKimlikNo = dbo.HKIMLIK.HTCKIMLIKNO,
	               @HastaTel= ISNULL(HTEL,HCEP),
				@HastaTel2 = ISNULL(HCEP,''),
				@HastaDogumTarihi = HKIMLIK.HDTARIHI,
	               @HastaCariAnaGrupID= VWCARIAGAC.CARIANAGRUPID  
	               FROM dbo.HKIMLIK LEFT OUTER JOIN VWCARIAGAC ON
	               dbo.HKIMLIK.HKCARIID=VWCARIAGAC.CARIID WHERE HKIMLIKID = @HKIMLIKID
			
			IF ISNULL((SELECT VALUESTR FROM CONFIG WHERE SECTIONSTR='Randevu' AND KEYNAME='Randevu sira no otomatik verilsin'),0)=1
			BEGIN
				IF ISNULL((SELECT POLBIRIMID FROM TDRKIMLIK WHERE DRID=@DRID),0)<>0
				BEGIN
					SET @RANDSIRANO = ISNULL((SELECT dbo.RANDEVUNOVER((@SAAT-2),@TARIH,@DRID)),0)	
				END				
			END
    	     
		    EXEC SPREADID2 N'HRANDEVU','', @RANDEVUID OUTPUT	
		    INSERT INTO HRANDEVU (RANDEVUID, KIMLIKID, DRID, BOLUMID, RNEDENID, RTARIH, RSAAT, RSURE, RBTARIH, RANDDURUMID, RACIKLAMA, ADISOYADI, TEL, TEL2, 
							      RTARIHSAAT, KYTARIH, KYKULLANICI, SUBEID, CARIANAGRUPID, WEB, RTCKIMLIKNO, DOGUMTARIHI, RADI, RSOYAD, SIRANO) 
					      VALUES (@RANDEVUID, @HKIMLIKID, @DRID, @BOLUMID, 1, @TARIH, @SAAT - 2, @RSURE, DATEADD(mi,@RSURE,@TARIH+@SAAT) , 1, @ACIKLAMA, @HastaAd+' '+@HastaSoyad, @HastaTel, @HastaTel2,
							      @TARIH + @SAAT, GETDATE(), @KAYITYERI, @SUBEID, @HastaCariAnaGrupID, 1, @HastaTCKimlikNo, @HastaDogumTarihi, @HastaAd, @HastaSoyad, @RANDSIRANO)

						IF (ISNULL((SELECT VALUESTR FROM CONFIG WHERE SECTIONSTR='Randevu' AND KEYNAME='Randevu verilince SMS gonderilsin'),0)=1)
						BEGIN
								   
								   EXEC SPREADID2 N'CRMSMSSBL','',@CRMSMSBLID OUTPUT
								   INSERT INTO CRMSMSSBL (SMSSBLID,FROMSTR,GSMNO,CONTENTSTR,DATESEND,SMSSBLADI,OTOKAYITNO,TUR)
									  VALUES (
									  @CRMSMSBLID,
									  ISNULL((SELECT TOP 1 VALUESTR FROM CONFIG WHERE SECTIONSTR='CRMSMS' AND KEYNAME='Standart Gönderen Adı'),''),
									  ISNULL((SELECT TOP 1 VALUESTR FROM CONFIG WHERE SECTIONSTR='CRMSMS' AND KEYNAME='Standart Gönderen GSMNO'),''),
									  'SAYIN '+@HastaAd+' '+@HastaSoyad+' '+(ISNULL((SELECT BOLUMADI FROM TBOLUM WHERE BOLUMID=@BOLUMID),''))+' BOLUMUNDE '+(ISNULL((SELECT DRADI FROM TDRKIMLIK WHERE DRID=@DRID),''))+' ILE RANDEVU SAATINIZ '+LEFT(CONVERT(VARCHAR, @TARIH, 120),10) + ' ' +CONVERT(VARCHAR(5),@SAAT,108) , 
									  @GONDERIMZAMANI,
									  'Muayene Hatırlatma Mesajı '+@HastaAd+' '+@HastaSoyad,
									  'HRANDEVU-'+CONVERT(VARCHAR,@RANDEVUID),
									   'Muayene')

									INSERT INTO CRMSMS (SMSSBLID,HKIMLIKID,TOGSMNO,SENTRESULT,SENDDATE,HRANDEVUID,HMUAYENEID)
									VALUES (@CRMSMSBLID,@HKIMLIKID,@HastaTel,0,@GONDERIMZAMANI,@RANDEVUID,NULL)
						END 

		    IF @@ERROR = 0
		      SET @Sonuc = 0	
		    ELSE
		      SET @Sonuc = 4
	    END
	    ELSE IF  @Izinli = 1
	        SET @Sonuc = 8
	    ELSE IF @RandevuID IS NOT NULL AND @Hasta <> '----'  
	        -- randevu girilmiş
		    SET @Sonuc = 2
	    ELSE
		    SET @Sonuc = 3
	END 
	ELSE	
	    -- randevu saati çalışma saati dışında
		SET @Sonuc = 7
	
	SELECT @Sonuc
	RETURN
END
GO

IF EXISTS (SELECT [name] FROM [sys].[database_principals] WHERE [type] = N'S' AND [name] = N'mediwebuser')
BEGIN
	BEGIN TRY
		GRANT SELECT ON [dbo].[MEDWEB_RANDEVUKAYIT] TO [mediwebuser]
	END TRY
	BEGIN CATCH
	END CATCH
END
GO
-- 1- Geçmiş tarihli randevu alınmaz, 2 - Randevu Alınmış, 3- Saat randevu alınamaz olarak ayarlı 4- Kayıt Sırasında hata oluştu
-- 5- Hasta için aynı bölumden bir adet randevu alınabilir. 6 - Aynı randevu saati için hastanın randevusu mevcut. 7 - Saat çalışma saatleri dışında
-- 8- Doktor izinli


