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

CREATE PROCEDURE [dbo].[OZELISLEMHESAPLA1] @HDOSYAID int
AS
BEGIN
	SET NOCOUNT ON;

	DECLARE 
		@VHDOSYAID int,
		@VHDTEKLIF bit,
		@VOZELTUTAR float,
		@VOZELINDTUTAR float,
		@VGIROZELTUTAR float,
		@VGIROZELINDTUTAR float,
		@VFARKOZELTUTAR float,
		@VFARKOZELINDTUTAR float,
		@HDOSYACARIID int,
		@TEDAVITURU nvarchar(1),
		@CARIANAGRUPID int,
		@CARIGRUPID int,
		@BOLUMID int,
		@DRID int,
		@HDDOVIZKODU nvarchar(5),
		@ATLAITEMID int,
		@KDV int,
		@UITEMID int,
		@SIRANO int,
		@TARIFEID int,
		@PAKETVAR bit,
		@OZELISLEMINDYAP bit,
		@SUBEID int,
		@HDTARIH datetime

	DECLARE @HDOSYA_CURSOR CURSOR

	IF ISNULL(@HDOSYAID,0)=0 
	   SET @HDOSYA_CURSOR=CURSOR FOR SELECT HDOSYAID,HDTEKLIF FROM HDOSYA (nolock) WHERE HDKAPALI=0 ORDER BY HDOSYAID
	ELSE
	   SET @HDOSYA_CURSOR=CURSOR FOR SELECT HDOSYAID,HDTEKLIF FROM HDOSYA (nolock) WHERE HDOSYAID=@HDOSYAID AND HDKAPALI=0

	OPEN @HDOSYA_CURSOR
	FETCH NEXT FROM @HDOSYA_CURSOR INTO @VHDOSYAID,@VHDTEKLIF
	WHILE(@@FETCH_STATUS = 0)
	BEGIN
		IF @VHDTEKLIF IS NULL SET @VHDTEKLIF=0
		SELECT  @HDOSYACARIID = HKCARIID,
				@TEDAVITURU = MDLTEDAVITURU,
				@BOLUMID = BOLUMID,
				@DRID = DRID,
				@HDDOVIZKODU = DOVIZKODU,
				@SUBEID = SUBEID,
				@HDTARIH = HDTARIH,
				@PAKETVAR = CASE WHEN (KRMPAKETVAR = 1 OR SGPAKETVAR = 1) THEN 1 ELSE 0 END,
				@OZELISLEMINDYAP = ISNULL((SELECT TOP 1 VALUESTR FROM CONFIG WITH(NOLOCK) WHERE SECTIONSTR='Genel Ayarlar' AND PROGNAME='MEDISOFT' AND KEYNAME= CONVERT(VARCHAR,HDOSYA.SUBEID)+' Numarali Subede Özel işlem tutarlarına işlem kaparatak ödeme alma ekranından indirim yapılabilsin'),'')
		FROM HDOSYA (nolock) 
		WHERE HDOSYAID=@VHDOSYAID

		
	    
		SELECT  @CARIANAGRUPID = CARIGRUP.CARIANAGRUPID, 
		        @CARIGRUPID = CARI.CARIGRUPID, 
		        @TARIFEID = CASE WHEN KURUMTARIFE.TARIFEID IS NOT NULL THEN KURUMTARIFE.TARIFEID ELSE CARI.TARIFEID END 
		FROM CARI (nolock) INNER JOIN 
		     CARIGRUP (nolock) ON CARI.CARIGRUPID = CARIGRUP.CARIGRUPID LEFT OUTER JOIN
		     KURUMTARIFE (nolock) ON CARI.CARIID = KURUMTARIFE.KURUMID AND KURUMTARIFE.SUBEID = @SUBEID AND 
		                    BASLAMATARIH <= @HDTARIH AND BITISTARIH >= @HDTARIH AND 
		                    BASLAMASAAT <= '10:00' AND BITISSAAT >= '10:00' AND HAFTASONU = 0
		WHERE   CARI.CARIID = @HDOSYACARIID
		
		IF @@ROWCOUNT > 1
		BEGIN
		  RAISERROR('Hesap dosyasının kurumu için şube bazında birden fazla tarife tanımı yapılmış!',16,1)
		  RETURN 1
		END
			    				
        SELECT @ATLAITEMID=ITEMID 
        FROM TITEMHDOSYA 
		WHERE SUBEID = @SUBEID AND 
		      TEDAVITURU=@TEDAVITURU AND 
		      (CARIANAGRUPID=@CARIANAGRUPID OR 
		       CARIGRUPID=@CARIGRUPID OR 
		       TARIFEID=@TARIFEID) AND 
		      (PAKETVAR IS NULL OR PAKETVAR=@PAKETVAR)
		
		IF @@ROWCOUNT > 1 
		BEGIN
		  RAISERROR('Hesap dosyası için birden fazla hesap dosyası bazlı işlem tutarı tanımı yapılmış!',16,1)
		  RETURN 2
		END
			    				
		SELECT @KDV=CAST(KDVORANI AS INTEGER) 
		FROM TITEM WHERE 
		ITEMID=@ATLAITEMID
       
	    /*IF @OZELISLEMINDYAP IS NULL OR  @OZELISLEMINDYAP NOT IN (0,1)  SET @OZELISLEMINDYAP=0*/

	    IF @OZELISLEMINDYAP = 1
		BEGIN
			SELECT @VOZELTUTAR = ISNULL(SUM(OTOOZELISLEMTUTAR),0) /*, @VOZELINDTUTAR = ISNULL(SUM(OTOOZELISLEMINDTUTAR),0)*/ FROM HESAPISL 
			WHERE HDOSYAID=@VHDOSYAID AND IPTAL=0 AND ONAYLI = 1 AND 
			  ITEMID <>@ATLAITEMID  AND KYKULLANICI<>'TRG'
		END
		ELSE
		BEGIN
			SELECT @VOZELTUTAR = ISNULL(SUM(OTOOZELISLEMTUTAR),0), @VOZELINDTUTAR = ISNULL(SUM(OTOOZELISLEMINDTUTAR),0) FROM HESAPISL 
			WHERE HDOSYAID=@VHDOSYAID AND IPTAL=0 AND ONAYLI = 1 AND 
			  ITEMID <>@ATLAITEMID  AND KYKULLANICI<>'TRG'
		END

			 
	    SELECT @VGIROZELTUTAR = ISNULL(SUM(OZELTUTAR),0), @VGIROZELINDTUTAR = ISNULL(SUM(OZELINDTUTAR),0)
        FROM HESAPISL 
        WHERE ITEMID=@ATLAITEMID AND HDOSYAID=@VHDOSYAID AND IPTAL=0 AND ONAYLI=1 AND KYKULLANICI='TRG'
        
        IF @VOZELTUTAR IS NULL SET @VOZELTUTAR = 0
        IF @VOZELINDTUTAR IS NULL SET @VOZELINDTUTAR = 0
        
        IF @VGIROZELTUTAR IS NULL SET @VGIROZELTUTAR = 0
        IF @VGIROZELINDTUTAR IS NULL SET @VGIROZELINDTUTAR = 0
        
        SET @VFARKOZELTUTAR = @VOZELTUTAR - @VGIROZELTUTAR
        SET @VFARKOZELINDTUTAR = @VOZELINDTUTAR - @VGIROZELINDTUTAR
        
        BEGIN TRANSACTION

		IF  @VFARKOZELTUTAR <> 0 OR @VFARKOZELINDTUTAR <> 0 
		BEGIN
			IF @VOZELTUTAR = 0
			BEGIN
			  --DELETE FROM HESAPISL 
			  UPDATE HESAPISL SET IPTAL = 1 
			  WHERE ITEMID=@ATLAITEMID AND HDOSYAID=@VHDOSYAID AND IPTAL=0 AND ONAYLI=1 AND OZELODENDI=0 AND OZELHFATISLID IS NULL AND KILITLI=0 AND HESAPISL.KYKULLANICI='TRG'
			END
			ELSE
			IF @VOZELTUTAR > 0
			BEGIN 
				IF NOT EXISTS(SELECT ITEMID 
							  FROM HESAPISL 
							  WHERE ITEMID=@ATLAITEMID AND HDOSYAID=@VHDOSYAID AND 
									IPTAL=0 AND ONAYLI=1 AND OZELODENDI=0 AND OZELHFATISLID IS NULL AND KILITLI=0 AND KYKULLANICI='TRG')
				BEGIN
					IF (@VFARKOZELTUTAR > 0 OR @VFARKOZELINDTUTAR > 0) AND (@VFARKOZELTUTAR - @VFARKOZELINDTUTAR >= 0)
					BEGIN
						SELECT @SIRANO=SIRANO FROM SAYACLAR WHERE TABLENAME='HESAPISL' 
						UPDATE SAYACLAR SET SIRANO=@SIRANO + 1 WHERE TABLENAME='HESAPISL' 
							
						INSERT INTO HESAPISL 
						(TEKLIF,HESAPISLID,MDLKAYDET,SNKAYDET,HSTKDVORAN,KRMKDVORAN,TABLOTIPI,HDOSYAID,ITEMID,ADET,ITARIH,SGTARIH,KYTARIH,KYKULLANICI,ISTBOLUMID,UYGBOLUMID,ISTDRID,DOVIZKODU,FIYAT,OZELTUTAR,OZELINDTUTAR,
						 IPTAL,ONAYLI,KILITLI,SGPAKETEDAHIL,HSTPAKETEDAHIL,KRMPAKETEDAHIL,SGPAKETDURUMUID,HSTPAKETDURUMUID,KRMPAKETDURUMUID)
						VALUES
						(@VHDTEKLIF,@SIRANO,0,0,@KDV,@KDV,3,@VHDOSYAID,@ATLAITEMID,1,GETDATE(),GETDATE(),GETDATE(),'TRG',@BOLUMID,@BOLUMID,@DRID,@HDDOVIZKODU,@VFARKOZELTUTAR,@VFARKOZELTUTAR,@VFARKOZELINDTUTAR,
						 0,1,0,0,0,0,2,2,2)
					END
				END
				ELSE 
				BEGIN
						UPDATE HESAPISL 
						SET TEKLIF=@VHDTEKLIF,MDLKAYDET=0,HSTKDVORAN=@KDV,
						    FIYAT=CASE WHEN OZELTUTAR + @VFARKOZELTUTAR > 0 THEN OZELTUTAR + @VFARKOZELTUTAR ELSE 0 END,
						    OZELTUTAR=CASE WHEN OZELTUTAR + @VFARKOZELTUTAR > 0 THEN OZELTUTAR + @VFARKOZELTUTAR ELSE 0 END,
						    OZELINDTUTAR=CASE WHEN OZELINDTUTAR + @VFARKOZELINDTUTAR > 0 THEN OZELINDTUTAR + @VFARKOZELINDTUTAR ELSE 0 END,
							SGPAKETDURUMUID=2,HSTPAKETDURUMUID=2,KRMPAKETDURUMUID=2,SGPAKETEDAHIL=0,HSTPAKETEDAHIL=0,KRMPAKETEDAHIL=0
						WHERE ITEMID=@ATLAITEMID AND HDOSYAID=@VHDOSYAID AND 
							  IPTAL=0 AND ONAYLI=1 AND OZELODENDI=0 AND OZELHFATISLID IS NULL AND KILITLI=0 AND HESAPISL.KYKULLANICI='TRG'
				END
			END
		END
		
		COMMIT 
     
		FETCH NEXT FROM @HDOSYA_CURSOR  INTO @VHDOSYAID,@VHDTEKLIF 

	END
	IF Cursor_Status('variable', '@HDOSYA_CURSOR')<>-1 
	   CLOSE @HDOSYA_CURSOR
	DEALLOCATE @HDOSYA_CURSOR
END


GO


