SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

IF OBJECT_ID ('TRGHTETKIK_UPDATE', 'TR') IS NOT NULL
  DROP TRIGGER TRGHTETKIK_UPDATE
GO

CREATE TRIGGER [TRGHTETKIK_UPDATE] ON [dbo].[HTETKIK] 
FOR UPDATE
AS
SET NOCOUNT ON
DECLARE
	@HTETKIKID int,
	@DURUM int, 
	@SONUCTARIH datetime,
	@CIHAZID int,
	@STOKID int,
	@ADET int,
	@SUBEID int,
	@SUBEKODU nvarchar(10),
	@ESKIHTETKIKID int, 
	@ESKIDURUM int,
 	@ESKISONUCTARIH datetime,
	@ESKICIHAZID int,
	@ISLEM nvarchar(10),
	@GDEPOID int,
	@CDEPOID int,
	@TARIH datetime,
	@SFIYAT float,
	@YETKILI nvarchar(15),
	@ACIKLAMA nvarchar(200),
	@ISLREFID int,
	@HDOSYAID int,
	@UYGBOLUMID int,
	@REUSE bit,
    @SKTARIHI datetime,
    @KAREKODID int,
    @DFHDOSYAID int,
    @STOKBARKODID int,
	@RC int

DECLARE @UPDATED_CURSOR CURSOR 

SET @UPDATED_CURSOR = CURSOR FAST_FORWARD FOR
SELECT I.HTETKIKID, I.DURUM, I.SONUCTARIH, I.CIHAZID, I.HESAPISLID, I.SGKULLANICI,
       D.HTETKIKID, D.DURUM, D.SONUCTARIH, D.CIHAZID
FROM INSERTED I INNER JOIN 
     DELETED D ON I.HTETKIKID = D.HTETKIKID

OPEN @UPDATED_CURSOR

FETCH NEXT 
FROM @UPDATED_CURSOR 
INTO @HTETKIKID, @DURUM, @SONUCTARIH, @CIHAZID, @ISLREFID, @YETKILI, 
     @ESKIHTETKIKID, @ESKIDURUM, @ESKISONUCTARIH, @ESKICIHAZID
WHILE @@FETCH_STATUS = 0
BEGIN
  IF (@ESKIDURUM <> 2 AND @DURUM = 2 AND @CIHAZID IS NOT NULL) OR
     (@ESKIDURUM = 2 AND @DURUM <> 2 AND @ESKICIHAZID IS NOT NULL) OR
     (@ESKIDURUM = 2 AND @DURUM = 2 AND ISNULL(@CIHAZID,0) <> ISNULL(@ESKICIHAZID,0))
  BEGIN
    -- Depo fişi kesme veya iptal yapılmalı mı?
    SELECT @STOKID = IT.STOKID, @ADET = HI.ADET, @HDOSYAID = HI.HDOSYAID, @SUBEID = HD.SUBEID, 
           @SUBEKODU = SB.SUBEKODU, @CDEPOID = USBLM.DEPOID, @UYGBOLUMID = UYGBOLUMID
    FROM HESAPISL HI INNER JOIN
	 TITEM IT ON HI.ITEMID = IT.ITEMID INNER JOIN 
	 HDOSYA HD ON HI.HDOSYAID = HD.HDOSYAID INNER JOIN 
	 SUBELER SB ON HD.SUBEID = SB.SUBEID INNER JOIN
	 SUBEBOLUM USBLM ON HD.SUBEID = USBLM.SUBEID AND HI.UYGBOLUMID = USBLM.BOLUMID
    WHERE HESAPISLID = @ISLREFID
    IF @@ROWCOUNT = 0 
      RETURN
    IF @STOKID IS NULL 
      RETURN
  END
    
  IF (@ESKIDURUM <> 2 AND @DURUM = 2 AND @CIHAZID IS NOT NULL) OR 
     (@ESKIDURUM = 2 AND @DURUM = 2 AND @CIHAZID IS NOT NULL AND ISNULL(@CIHAZID,0) <> ISNULL(@ESKICIHAZID,0))
  BEGIN
    -- Depo fişi kesiliyor
    SET @ISLEM = 'TÜKETİM'
    
    IF @SONUCTARIH IS NULL 
      SET @TARIH = dbo.TARIHAL(GETDATE())
    ELSE
      SET @TARIH = dbo.TARIHAL(@SONUCTARIH)

    SET @GDEPOID = NULL
    SET @SFIYAT = 0
    SET @ACIKLAMA = CAST(@HDOSYAID AS nvarchar(20)) + ' no''lu hasta hesap dosyası'
    SET @REUSE = 0
    SET @SKTARIHI = NULL
    SET @KAREKODID = NULL
    SET @DFHDOSYAID = NULL
    SET @STOKBARKODID = NULL
    SET @RC = 0
   
    EXECUTE @RC = DEPOFISIKES @ISLEM ,@STOKID, @SUBEID, @SUBEKODU, @GDEPOID, @CDEPOID, @TARIH, @UYGBOLUMID, @REUSE, @ADET, @SFIYAT,
			      @YETKILI, @ACIKLAMA, @ISLREFID, @CIHAZID, @SKTARIHI, @KAREKODID, @STOKBARKODID, @DFHDOSYAID
    IF @RC <> 0 
      RETURN
	END
  
  IF (@ESKIDURUM = 2 AND @DURUM <> 2 AND @ESKICIHAZID IS NOT NULL) OR 
     (@ESKIDURUM = 2 AND @DURUM = 2 AND @ESKICIHAZID IS NOT NULL AND ISNULL(@CIHAZID,0) <> ISNULL(@ESKICIHAZID,0))
  BEGIN
    -- Depo fişi iptal ediliyor
    SET @ISLEM = 'TÜKETİM'
    
    IF @ESKISONUCTARIH IS NULL 
      SET @TARIH = dbo.TARIHAL(GETDATE())
    ELSE
      SET @TARIH = dbo.TARIHAL(@ESKISONUCTARIH)

    SET @GDEPOID = NULL
    SET @SFIYAT = 0
    SET @ACIKLAMA = CAST(@HDOSYAID AS nvarchar(20)) + ' no''lu hasta hesap dosyası'
    SET @REUSE = 0
    SET @RC = 0
       
    EXECUTE @RC = DEPOFISISLSIL @ISLEM ,@STOKID, @SUBEID, @SUBEKODU, @GDEPOID, @CDEPOID, @TARIH, @UYGBOLUMID, @REUSE, @ADET, @SFIYAT,
									@YETKILI, @ACIKLAMA, @ISLREFID, @ESKICIHAZID, @SKTARIHI
    IF @RC <> 0 
      RETURN
  END
  
  FETCH NEXT 
  FROM @UPDATED_CURSOR 
  INTO @HTETKIKID, @DURUM, @SONUCTARIH, @CIHAZID, @ISLREFID, @YETKILI, 
       @ESKIHTETKIKID, @ESKIDURUM, @ESKISONUCTARIH, @ESKICIHAZID
END

CLOSE @UPDATED_CURSOR
DEALLOCATE @UPDATED_CURSOR

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

