SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[FATISL_STOKMIAD_TRG] ON [dbo].[FATISL] FOR INSERT, UPDATE, DELETE AS  
SET NOCOUNT ON 
DECLARE  
	@FATISLID int, @ESKIFATISLID int,
	@FATID int,    @ESKIFATID int,  
	@ADET float,   @ESKIADET float,  
    @BFIYAT float, @ESKIBFIYAT float, 
	@STOKID int ,  @ESKISTOKID int,  
	@SKTARIHI SMALLDATETIME, 
	@KDV float, @ESKIKDV float, 
	@SATIRIND float, @ESKISATIRIND float, 
	@SATIRIND2 float, @ESKISATIRIND2 float,
	@ESKISKTARIHI SMALLDATETIME,  
	@TUR  int,     
	@FIPTAL int,   
	@DEPOID int,  
	@SUBEID int, 
	@IRSISLID int,
	@TURADI nvarchar(100),
	@INDORAN1 float, 
	@INDORAN2 float, 
	@INDORAN3 float, 
    @EKORAN1 float, 
    @EKORAN2 float, 
    @EKORAN3 float,
    @NFIYAT float, 
    @ESKINFIYAT FLOAT,
    @STOKTURU NVARCHAR(10), 
    @ESKISTOKTURU NVARCHAR(10),
    @SKTKULLANIYOR BIT, 
    @ESKISKTKULLANIYOR BIT 
	
DECLARE @UPDATED_CURSOR CURSOR   

SET @UPDATED_CURSOR = CURSOR FAST_FORWARD FOR  
	SELECT     I.FATISLID, I.FATID, I.STOKID, I.SKTARIHI, I.ADET, I.BFIYAT, I.KDV, I.SATIRIND, I.SATIRIND2, D.FATISLID, D.FATID, D.STOKID, D.SKTARIHI, D.ADET, 
						  D.BFIYAT, D.KDV, D.SATIRIND, D.SATIRIND2, ISNULL(I.IRSISLID, 0) AS IRSISLID
	FROM         INSERTED I FULL OUTER JOIN
						  DELETED D ON I.FATISLID = D.FATISLID 

OPEN @UPDATED_CURSOR 
FETCH NEXT FROM @UPDATED_CURSOR  
INTO @FATISLID, @FATID, @STOKID, @SKTARIHI, @ADET, @BFIYAT, @KDV, @SATIRIND, @SATIRIND2, @ESKIFATISLID, @ESKIFATID, @ESKISTOKID, @ESKISKTARIHI, @ESKIADET, @ESKIBFIYAT, 
     @ESKIKDV, @ESKISATIRIND, @ESKISATIRIND2, @IRSISLID    

WHILE @@FETCH_STATUS = 0  
BEGIN  
  IF @IRSISLID  = 0  
  BEGIN 

  --	 INSERT INTO LOG (TARIH,ICERIK1) VALUES(GETDATE(),'01'+STR(@FATISLID))  
  --	 INSERT INTO LOG (TARIH,ICERIK1) VALUES(GETDATE(),'00'+STR(@ESKIFATISLID))  
   SELECT @SUBEID = SUBEID, @TUR = TUR, @DEPOID = DEPOID, @FIPTAL = ISNULL(FIPTAL,0), @TURADI = TURADI, @INDORAN1 = INDORAN1, @INDORAN2 = INDORAN2, @INDORAN3 = INDORAN3, 
          @EKORAN1 = EKORAN1, @EKORAN2 = EKORAN2, @EKORAN3 = EKORAN3
   FROM FATURA WHERE FATID = ISNULL(@FATID, @ESKIFATID) 	   
   IF @FIPTAL = 0 AND @DEPOID IS NOT NULL  
   BEGIN 
      IF @BFIYAT IS NULL SET @BFIYAT = 0 
      IF @ESKIBFIYAT IS NULL SET @ESKIBFIYAT = 0 
      IF @KDV IS NULL SET @KDV = 0 
      IF @ESKIKDV IS NULL SET @ESKIKDV = 0 
      IF @SATIRIND IS NULL SET @SATIRIND = 0 
      IF @ESKISATIRIND IS NULL SET @ESKISATIRIND = 0 
      IF @SATIRIND2 IS NULL SET @SATIRIND2 = 0 
      IF @ESKISATIRIND2 IS NULL SET @ESKISATIRIND2 = 0 
      
      SET @NFIYAT =  		      
		  CASE WHEN @TURADI = 'PERAKENDE' THEN 100.0/(100.0+@KDV) ELSE 1.00 END * @BFIYAT * 
		  (100 - @SATIRIND)/ 100 * (100 - @SATIRIND2) / 100 * (100 - @INDORAN1) / 100 * (100 + @EKORAN1) / 100 * 
		  (100 - @INDORAN2)/ 100 * (100 + @EKORAN2) / 100 * (100 - @INDORAN3) / 100 * (100 + @EKORAN3) / 100 
          
      SET @ESKINFIYAT =  		      
		  CASE WHEN @TURADI = 'PERAKENDE' THEN 100.0/(100.0+@ESKIKDV) ELSE 1.00 END * @ESKIBFIYAT * 
		  (100 - @ESKISATIRIND)/ 100 * (100 - @ESKISATIRIND2) / 100 * (100 - @INDORAN1) / 100 * (100 + @EKORAN1) / 100 * 
		  (100 - @INDORAN2)/ 100 * (100 + @EKORAN2) / 100 * (100 - @INDORAN3) / 100 * (100 + @EKORAN3) / 100 
		  
	 IF @ESKISTOKID IS NOT NULL 
	 BEGIN
	   SELECT @ESKISTOKTURU = STOK.TURU, @ESKISKTKULLANIYOR =  MIADZORUNLU  
	   FROM STOK INNER JOIN STOKGRUP ON STOK.GRUP = STOKGRUP.KODU 
	   WHERE STOKID = @ESKISTOKID
	 END ELSE
	 BEGIN
	   SET @ESKISTOKTURU = ''
	   SET @ESKISKTKULLANIYOR = 0
	 END 
	   	  
     IF ISNULL(@ESKISTOKID, 0) = ISNULL(@STOKID, 0)
	 BEGIN
		SET @STOKTURU = @ESKISTOKTURU
		SET @SKTKULLANIYOR = @ESKISKTKULLANIYOR
	 END
	 ELSE
	 IF @STOKID IS NOT NULL 
	 BEGIN
	   SELECT @STOKTURU = STOK.TURU, @SKTKULLANIYOR =  MIADZORUNLU  
	   FROM STOK INNER JOIN STOKGRUP ON STOK.GRUP = STOKGRUP.KODU 
	   WHERE STOKID = @STOKID
	 END ELSE
	 BEGIN
	   SET @STOKTURU = ''
	   SET @SKTKULLANIYOR = 0
	 END 
	 
     IF @ESKIFATISLID IS NOT NULL AND @FATISLID IS NULL AND @ESKISTOKTURU <> 'HIZMET' -- DELETE NEDENI ILE DUSULECEK  
	 BEGIN
	    IF @ESKISKTARIHI IS NOT NULL AND @ESKISKTKULLANIYOR = 0
	      SET @ESKISKTARIHI = NULL 
	      
		IF EXISTS(SELECT * FROM STOKMIADBAKIYE
				  WHERE SUBEID = @SUBEID AND DEPOID = @DEPOID AND STOKID = @ESKISTOKID AND ISNULL(SKTARIHI,'01.01.1900') = ISNULL(@ESKISKTARIHI,'01.01.1900'))  
		  UPDATE STOKMIADBAKIYE SET MIKTAR = MIKTAR - @TUR * @ESKIADET, 
	      TUTAR = TUTAR - @TUR * @ESKIADET * ISNULL(@ESKINFIYAT, 0),
	      HASTASIZMIKTAR = HASTASIZMIKTAR - @TUR * @ESKIADET 
		  WHERE SUBEID = @SUBEID AND DEPOID = @DEPOID AND STOKID = @ESKISTOKID AND ISNULL(SKTARIHI,'01.01.1900') = ISNULL(@ESKISKTARIHI,'01.01.1900')
		ELSE   
		  INSERT INTO STOKMIADBAKIYE (SUBEID, DEPOID, STOKID, SKTARIHI, MIKTAR, TUTAR, HASTASIZMIKTAR) 
		  VALUES(@SUBEID, @DEPOID, @ESKISTOKID, @ESKISKTARIHI,-1 * @TUR * @ESKIADET, - @TUR * @ESKIADET * ISNULL(@ESKINFIYAT, 0),-1 * @TUR * @ESKIADET)  
	  END
	  
	  IF @FATISLID IS NOT NULL AND @ESKIFATISLID IS NULL  AND @STOKTURU <> 'HIZMET' -- INSERT NEDENI ILE EKLENECEK  
	  BEGIN
	    IF @SKTARIHI IS NOT NULL AND @SKTKULLANIYOR = 0
	      SET @SKTARIHI = NULL 
	      
		IF EXISTS(SELECT * FROM STOKMIADBAKIYE               
				  WHERE SUBEID = @SUBEID AND DEPOID = @DEPOID AND STOKID = @STOKID AND ISNULL(SKTARIHI,'01.01.1900') = ISNULL(@SKTARIHI,'01.01.1900')) 
		  UPDATE STOKMIADBAKIYE 
          SET MIKTAR = MIKTAR + @TUR * @ADET,
          TUTAR = TUTAR + @TUR * @ADET * ISNULL(@NFIYAT, 0),
          HASTASIZMIKTAR = HASTASIZMIKTAR + @TUR * @ADET 
		  WHERE SUBEID = @SUBEID AND DEPOID = @DEPOID AND STOKID = @STOKID AND ISNULL(SKTARIHI,'01.01.1900') = ISNULL(@SKTARIHI,'01.01.1900') 
		ELSE   
		  INSERT INTO STOKMIADBAKIYE (SUBEID, DEPOID, STOKID, SKTARIHI, MIKTAR, TUTAR,HASTASIZMIKTAR) 
		  VALUES(@SUBEID, @DEPOID, @STOKID, @SKTARIHI, @TUR * @ADET, @TUR * @ADET * ISNULL(@NFIYAT, 0), @TUR * @ADET)  
	  END 
	  
	  IF @ESKIFATISLID IS NOT NULL AND @FATISLID IS NOT NULL -- UPDATE NEDENI ILE GUNCELLENECEK
	  BEGIN   
		-- BAKİYE SKTARIH LERİ DÜZELTİLİYOR... 
		IF @ESKISKTARIHI IS NOT NULL AND (@ESKISTOKTURU = 'HIZMET' OR @ESKISKTKULLANIYOR = 0)
		  SET @ESKISKTARIHI = NULL 
		IF @SKTARIHI IS NOT NULL AND (@STOKTURU = 'HIZMET' OR @SKTKULLANIYOR = 0)
		  SET @SKTARIHI = NULL 
	    
		IF @STOKID <> @ESKISTOKID OR ISNULL(@SKTARIHI,'01.01.1900') <> ISNULL(@ESKISKTARIHI,'01.01.1900')
		BEGIN
		  -- Eskisinden düş
			IF @ESKISTOKTURU <> 'HIZMET' 
			BEGIN
				IF EXISTS (SELECT * FROM STOKMIADBAKIYE
							WHERE SUBEID = @SUBEID AND DEPOID = @DEPOID AND STOKID = @ESKISTOKID AND ISNULL(SKTARIHI,'01.01.1900') = ISNULL(@ESKISKTARIHI,'01.01.1900'))  
				  UPDATE STOKMIADBAKIYE 
				  SET MIKTAR = MIKTAR - @TUR * @ESKIADET, 
				  TUTAR = TUTAR - @TUR * @ESKIADET * ISNULL(@ESKINFIYAT, 0),
				  HASTASIZMIKTAR = HASTASIZMIKTAR - @TUR * @ESKIADET  
				  WHERE SUBEID = @SUBEID AND DEPOID = @DEPOID AND STOKID = @ESKISTOKID AND ISNULL(SKTARIHI,'01.01.1900') = ISNULL(@ESKISKTARIHI,'01.01.1900')
				ELSE  
				  INSERT INTO STOKMIADBAKIYE (SUBEID, DEPOID, STOKID, SKTARIHI, MIKTAR, TUTAR, HASTASIZMIKTAR) 
				  VALUES(@SUBEID, @DEPOID, @ESKISTOKID, @ESKISKTARIHI,-1 * @TUR * @ESKIADET, - @TUR * @ESKIADET * ISNULL(@ESKINFIYAT, 0),-1 * @TUR * @ESKIADET)  
           END 
		  
		  -- Yenisine Ekle
			IF @STOKTURU <> 'HIZMET'
            BEGIN
				IF EXISTS(SELECT * FROM STOKMIADBAKIYE               
						  WHERE SUBEID = @SUBEID AND DEPOID = @DEPOID AND STOKID = @STOKID AND ISNULL(SKTARIHI,'01.01.1900') = ISNULL(@SKTARIHI,'01.01.1900'))  
				  UPDATE STOKMIADBAKIYE 
				  SET MIKTAR = MIKTAR + @TUR * @ADET, 
				  TUTAR = TUTAR + @TUR * @ADET * ISNULL(@NFIYAT, 0),
				  HASTASIZMIKTAR = HASTASIZMIKTAR + @TUR * @ADET  
				  WHERE SUBEID = @SUBEID AND DEPOID = @DEPOID AND STOKID = @STOKID AND ISNULL(SKTARIHI,'01.01.1900') = ISNULL(@SKTARIHI,'01.01.1900')  
				ELSE  
				  INSERT INTO STOKMIADBAKIYE (SUBEID, DEPOID, STOKID, SKTARIHI, MIKTAR, TUTAR, HASTASIZMIKTAR) 
				  VALUES(@SUBEID, @DEPOID, @STOKID, @SKTARIHI, @TUR * @ADET, @TUR * @ADET * ISNULL(@NFIYAT, 0),@TUR * @ADET)  
            END 
		 
		END ELSE
		IF @ADET <> @ESKIADET AND @STOKTURU <> 'HIZMET'
		BEGIN
			IF EXISTS(SELECT * FROM STOKMIADBAKIYE
			          WHERE SUBEID = @SUBEID AND DEPOID = @DEPOID AND STOKID = @ESKISTOKID     AND ISNULL(SKTARIHI,'01.01.1900') = ISNULL(@ESKISKTARIHI,'01.01.1900'))  
			  UPDATE STOKMIADBAKIYE 
              SET MIKTAR = MIKTAR + @TUR * (@ADET -@ESKIADET),
              TUTAR = TUTAR + @TUR * (@ADET * ISNULL(@NFIYAT, 0) - @ESKIADET * ISNULL(@ESKINFIYAT, 0)),
              HASTASIZMIKTAR = HASTASIZMIKTAR + @TUR * (@ADET -@ESKIADET)  
              WHERE SUBEID = @SUBEID AND DEPOID = @DEPOID AND STOKID = @ESKISTOKID AND ISNULL(SKTARIHI,'01.01.1900') = ISNULL(@ESKISKTARIHI,'01.01.1900')  
			ELSE  
			  INSERT INTO STOKMIADBAKIYE (SUBEID, DEPOID,STOKID,SKTARIHI,MIKTAR,TUTAR, HASTASIZMIKTAR) 
              VALUES(@SUBEID, @DEPOID, @ESKISTOKID, @ESKISKTARIHI, @TUR * (@ADET - @ESKIADET), @TUR * (@ADET * ISNULL(@NFIYAT, 0) - @ESKIADET * ISNULL(@ESKINFIYAT, 0)), @TUR * (@ADET - @ESKIADET)) 
		END
	  END  
   END --IF @FIPTAL = 0 AND @DEPOID IS NOT NULL THEN
  END  
  FETCH NEXT FROM @UPDATED_CURSOR  
  INTO @FATISLID, @FATID, @STOKID, @SKTARIHI, @ADET, @BFIYAT, @KDV, @SATIRIND, @SATIRIND2, @ESKIFATISLID, @ESKIFATID, @ESKISTOKID, @ESKISKTARIHI, @ESKIADET, @ESKIBFIYAT, 
       @ESKIKDV, @ESKISATIRIND, @ESKISATIRIND2, @IRSISLID    
END

CLOSE @UPDATED_CURSOR 
DEALLOCATE @UPDATED_CURSOR 
