SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[DEPOFIS_STOKMIAD_TRG] ON [dbo].[DEPOFIS] FOR UPDATE AS
 SET NOCOUNT ON
 IF UPDATE(SUBEID) OR UPDATE(GDEPOID) OR UPDATE(CDEPOID)
 BEGIN
	 DECLARE 
		@SUBEID    int, @ESKISUBEID    int,  
		@DEPOFISID int, @ESKIDEPOFISID int,  
		@GDEPOID   int, @ESKIGDEPOID   int, 
		@CDEPOID   int, @ESKICDEPOID   int, 
	  	@DEPOFISISLID int, @STOKID int, 
	  	@SKTARIHI SMALLDATETIME,  
		@MIKTAR float, @BFIYAT float,
		@HASTASIZMIKTAR float,
		@GHDOSYAID int,
		@CHDOSYAID int,
		@GANADEPO bit,
		@CANADEPO bit,
		@ESKIGANADEPO bit,
		@ESKICANADEPO bit 
	  
	 DECLARE @UPDATED_CURSOR CURSOR  
	 DECLARE @ISL_CURSOR CURSOR  
	  
	 SET @UPDATED_CURSOR = CURSOR FAST_FORWARD FOR 
 		SELECT  
        I.SUBEID, I.DEPOFISID, I.GDEPOID, I.CDEPOID, 
 		D.SUBEID, D.DEPOFISID, D.GDEPOID, D.CDEPOID 
 		FROM INSERTED I INNER JOIN  
 			 DELETED  D ON I.DEPOFISID = D.DEPOFISID  

	  
	 OPEN @UPDATED_CURSOR 
	 FETCH NEXT FROM @UPDATED_CURSOR  
	 INTO @SUBEID,@DEPOFISID,@GDEPOID,@CDEPOID,@ESKISUBEID,@ESKIDEPOFISID,@ESKIGDEPOID,@ESKICDEPOID 
	 WHILE @@FETCH_STATUS = 0 
	 BEGIN 
		
	 IF @ESKIGDEPOID IS NOT NULL 
	   SELECT @ESKIGANADEPO = DEPO.ANADEPO FROM DEPO WHERE DEPOID = @ESKIGDEPOID
	 ELSE
	   SET @ESKIGANADEPO = 0 
	   	  
     IF ISNULL(@ESKIGDEPOID, 0) = ISNULL(@GDEPOID, 0)
		SET @GANADEPO = @ESKIGANADEPO
	 ELSE
	 IF @GDEPOID IS NOT NULL 
	   SELECT @GANADEPO = DEPO.ANADEPO FROM DEPO WHERE DEPOID = @GDEPOID
	   
	 IF @ESKICDEPOID IS NOT NULL 
	   SELECT @ESKICANADEPO = DEPO.ANADEPO FROM DEPO WHERE DEPOID = @ESKICDEPOID
	 ELSE
	   SET @ESKICANADEPO = 0 
	   	  
     IF ISNULL(@ESKICDEPOID, 0) = ISNULL(@CDEPOID, 0)
		SET @CANADEPO = @ESKICANADEPO
	 ELSE
	 IF @CDEPOID IS NOT NULL 
	   SELECT @CANADEPO = DEPO.ANADEPO FROM DEPO WHERE DEPOID = @CDEPOID
			 
	  IF (@DEPOFISID IS NOT NULL) AND (@ESKIDEPOFISID IS NOT NULL) --AND (UPDATE(SUBEID) OR UPDATE(GDEPOID) OR UPDATE(CDEPOID)) 
	  BEGIN 
 		SET @ISL_CURSOR = CURSOR FAST_FORWARD FOR 
			SELECT     DEPOFISISL.DEPOFISISLID, DEPOFISISL.STOKID, CASE WHEN ISNULL(MIADZORUNLU, 0) = 1 THEN DEPOFISISL.SKTARIHI ELSE NULL END AS SKTARIHI, 
								  DEPOFISISL.MIKTAR, DEPOFISISL.BFIYAT, DEPOFISISL.CHDOSYAID, DEPOFISISL.GHDOSYAID
			FROM         DEPOFISISL INNER JOIN
								  STOK ON DEPOFISISL.STOKID = STOK.STOKID INNER JOIN
								  STOKGRUP ON STOK.GRUP = STOKGRUP.KODU
			WHERE     (DEPOFISISL.DEPOFISID = @DEPOFISID)
			
 		OPEN @ISL_CURSOR 
 		FETCH NEXT FROM @ISL_CURSOR  
 		INTO @DEPOFISISLID, @STOKID, @SKTARIHI, @MIKTAR, @BFIYAT, @CHDOSYAID 
 		WHILE @@FETCH_STATUS = 0 
 		BEGIN  
		   --eski halinden geri cekiyoruz 
		   IF @ESKIGDEPOID IS NOT NULL AND (UPDATE(SUBEID) OR UPDATE(GDEPOID)) 
		   BEGIN 
			 IF EXISTS(SELECT STOKMIADBAKIYEID FROM STOKMIADBAKIYE                
			           WHERE SUBEID=@ESKISUBEID AND DEPOID=@ESKIGDEPOID AND STOKID=@STOKID AND  ISNULL(SKTARIHI,'01.01.1900')=ISNULL(@SKTARIHI,'01.01.1900')) 
 			  UPDATE STOKMIADBAKIYE 
 			  SET MIKTAR = MIKTAR - @MIKTAR, 
		      TUTAR = TUTAR - @MIKTAR * ISNULL(@BFIYAT, 0),
		      HASTASIZMIKTAR = HASTASIZMIKTAR - CASE WHEN ISNULL(@GHDOSYAID, 0)=0 THEN @MIKTAR ELSE 0 END 
 			  WHERE SUBEID=@ESKISUBEID AND DEPOID=@ESKIGDEPOID 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(@ESKISUBEID, @ESKIGDEPOID, @STOKID, @SKTARIHI,  -@MIKTAR, - @MIKTAR * ISNULL(@BFIYAT, 0), CASE WHEN ISNULL(@GHDOSYAID, 0)=0 THEN -@MIKTAR ELSE 0 END) 
		   END   
		   IF @ESKICDEPOID IS NOT NULL AND (UPDATE(SUBEID) OR UPDATE(CDEPOID)) 
		   BEGIN 
			 IF EXISTS(SELECT STOKMIADBAKIYEID FROM STOKMIADBAKIYE                
			           WHERE SUBEID=@ESKISUBEID AND DEPOID=@ESKICDEPOID AND STOKID=@STOKID AND  ISNULL(SKTARIHI,'01.01.1900')=ISNULL(@SKTARIHI,'01.01.1900')) 
 			  UPDATE STOKMIADBAKIYE 
 			  SET MIKTAR = MIKTAR + @MIKTAR,
		          TUTAR = TUTAR + @MIKTAR * ISNULL(@BFIYAT, 0),
		          HASTASIZMIKTAR = HASTASIZMIKTAR + CASE WHEN ISNULL(@CHDOSYAID, 0)=0 THEN @MIKTAR ELSE 0 END   
 			  WHERE SUBEID=@ESKISUBEID AND DEPOID=@ESKICDEPOID 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(@ESKISUBEID, @ESKICDEPOID, @STOKID, @SKTARIHI, @MIKTAR, @MIKTAR * ISNULL(@BFIYAT, 0), CASE WHEN ISNULL(@CHDOSYAID, 0)=0 THEN @MIKTAR ELSE 0 END) 
		   END 
		   --yeni halini getiriyoruz 
		   IF @GDEPOID IS NOT NULL AND (UPDATE(SUBEID) OR UPDATE(GDEPOID))  
		   BEGIN 
			 IF EXISTS(SELECT STOKMIADBAKIYEID FROM STOKMIADBAKIYE                
			           WHERE SUBEID=@SUBEID AND DEPOID=@GDEPOID AND STOKID=@STOKID AND  ISNULL(SKTARIHI,'01.01.1900')=ISNULL(@SKTARIHI,'01.01.1900')) 
 			  UPDATE STOKMIADBAKIYE 
 			  SET MIKTAR = MIKTAR + @MIKTAR,
		          TUTAR = TUTAR + @MIKTAR * ISNULL(@BFIYAT, 0),
		          HASTASIZMIKTAR = HASTASIZMIKTAR + CASE WHEN ISNULL(@GHDOSYAID, 0)=0 THEN @MIKTAR ELSE 0 END  
 			  WHERE SUBEID=@SUBEID AND DEPOID=@GDEPOID 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, @GDEPOID, @STOKID,  @SKTARIHI, @MIKTAR, @MIKTAR * ISNULL(@BFIYAT, 0), CASE WHEN ISNULL(@GHDOSYAID, 0)=0 THEN @MIKTAR ELSE 0 END) 
		   END  
		   IF @CDEPOID IS NOT NULL AND (UPDATE(SUBEID) OR UPDATE(CDEPOID))  
		   BEGIN 
			 IF EXISTS(SELECT STOKMIADBAKIYEID FROM STOKMIADBAKIYE                
			           WHERE SUBEID=@SUBEID AND DEPOID=@CDEPOID AND STOKID=@STOKID AND  ISNULL(SKTARIHI,'01.01.1900')=ISNULL(@SKTARIHI,'01.01.1900')) 
 			  UPDATE STOKMIADBAKIYE 
 			  SET MIKTAR = MIKTAR - @MIKTAR, 
		      TUTAR = TUTAR - @MIKTAR * ISNULL(@BFIYAT, 0),
		      HASTASIZMIKTAR = HASTASIZMIKTAR - CASE WHEN ISNULL(@CHDOSYAID, 0)=0 THEN @MIKTAR ELSE 0 END
 			  WHERE SUBEID=@SUBEID AND DEPOID=@CDEPOID 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, @CDEPOID, @STOKID,  @SKTARIHI, -@MIKTAR, - @MIKTAR * ISNULL(@BFIYAT, 0), CASE WHEN ISNULL(@CHDOSYAID, 0)=0 THEN -@MIKTAR ELSE 0 END) 
		   END  
	  
		   FETCH NEXT FROM @ISL_CURSOR INTO @DEPOFISISLID, @STOKID, @SKTARIHI, @MIKTAR, @BFIYAT, @CHDOSYAID, @GHDOSYAID
		END 
		CLOSE @ISL_CURSOR 
		DEALLOCATE @ISL_CURSOR 
	  
	  END 
	  FETCH NEXT FROM @UPDATED_CURSOR  
	  INTO @SUBEID,@DEPOFISID,@GDEPOID,@CDEPOID,@ESKISUBEID,@ESKIDEPOFISID,@ESKIGDEPOID,@ESKICDEPOID 
	 END 
	  
	 CLOSE @UPDATED_CURSOR 
	 DEALLOCATE @UPDATED_CURSOR 
 END
GO


