IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SAYIMDONEMDEPOFISIKES]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[SAYIMDONEMDEPOFISIKES]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =================================================================
-- Create date: 19.01.2017
-- Description:	Sayım dönemi çin depo düzeltme depo fişlerini keser.
-- =================================================================
CREATE PROCEDURE [dbo].[SAYIMDONEMDEPOFISIKES] 
	-- Add the parameters for the stored procedure here
	@SUBEID int,
	@DEPOID int,
	@TARIH datetime,
	@USER nvarchar(100) 
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	DECLARE 
	  @FISID int,
	  @TMPSAYIMID int
	
	IF EXISTS (SELECT TOP 1 DEPOFISID FROM DEPOFIS WHERE SUBEID = @SUBEID AND TARIH = @TARIH AND (GDEPOID = @DEPOID OR CDEPOID = @DEPOID) AND ISLEM = 'SAYIM')
	BEGIN
		RAISERROR('Depo için sayın dönemine ait depo fişi daha önce kesilmiş',16,1)
		RETURN 1
	END
	-- Stok sayım fazlası
	SELECT TOP 1 @TMPSAYIMID = SAYIMID 
	FROM 
	(SELECT     TOP 1 SAYIMID
	FROM         VWSAYIM2
	WHERE     (SUBEID = @SUBEID) AND (DEPOID = @DEPOID) AND (TARIH = @TARIH) AND (ISNULL(MIADZORUNLU, 0) = 0) AND (FARKMIKTAR < 0)	  
	UNION ALL
	SELECT     TOP 1 SAYIMID
	FROM         VWSMBSAYIM AS SKTS INNER JOIN
						VWSAYIM2 AS S ON SKTS.SUBEID = S.SUBEID AND SKTS.DEPOID = S.DEPOID AND SKTS.STOKID = S.STOKID AND SKTS.TARIH = S.TARIH
	WHERE     (S.SUBEID = @SUBEID) AND (S.DEPOID = @DEPOID) AND (S.TARIH = @TARIH) AND (S.MIADZORUNLU = 1) AND (ISNULL(SKTS.MIKTAR, 0) - ISNULL(SKTS.SAYIM, 0) < 0)) Q
      
    IF @@ROWCOUNT <> 0 
    BEGIN
        PRINT 'Stok sayım fazlası depo fişi ekleniyor...'
		EXEC SAYACOKU 'DEPOFIS',@FISID OUTPUT	  
		INSERT INTO DEPOFIS([DEPOFISID],[TARIH], [YETKILI], [ISLEM], [ENO], [ACIKLAMA], [SUBEID], [GDEPOID], [TADET], [TTUTAR])
		VALUES (@FISID, @TARIH, @USER, N'SAYIM', CAST(@FISID AS NVARCHAR(20)), N'Stok Sayım Fazlası', @SUBEID, @DEPOID, 0,0)

		IF @@ERROR<>0
		BEGIN
			RAISERROR('Depo fişi eklenemedi.',16,1)
			RETURN 1
		END

		INSERT INTO DEPOFISISL ( DEPOFISID, STOKID, SKTARIHI, BFIYAT, MIKTAR, FBFIYAT, FMIKTAR)
		SELECT     @FISID, STOKID, NULL, 
							CASE WHEN ROUND(FARKMIKTAR, 12) <> 0 THEN FARKTUTAR / FARKMIKTAR ELSE 0 END AS ORTFIYAT, 
							- (1 * FARKMIKTAR) AS FARKMIKTAR, 
							CASE WHEN ROUND(FARKMIKTAR, 12) <> 0 THEN FARKTUTAR / FARKMIKTAR ELSE 0 END AS ORTFIYAT, 
							- (1 * FARKMIKTAR) AS FARKMIKTAR
		FROM         VWSAYIM2
		WHERE     (SUBEID = @SUBEID) AND (DEPOID = @DEPOID) AND (TARIH = @TARIH) AND (ISNULL(MIADZORUNLU, 0) = 0) AND (FARKMIKTAR < 0)	  
		UNION ALL
		SELECT     @FISID, S.STOKID, SKTS.SKTARIHI, 
							CASE WHEN ROUND(FARKMIKTAR, 12) <> 0 THEN FARKTUTAR / FARKMIKTAR ELSE 0 END AS BFIYAT, 
							-1 * (ISNULL(SKTS.MIKTAR, 0) - ISNULL(SKTS.SAYIM, 0)) AS FARKMIKTAR, 
							CASE WHEN ROUND(FARKMIKTAR, 12) <> 0 THEN FARKTUTAR / FARKMIKTAR ELSE 0 END AS BFIYAT, 
							-1 * (ISNULL(SKTS.MIKTAR, 0) - ISNULL(SKTS.SAYIM, 0)) AS FARKMIKTAR
		FROM         VWSMBSAYIM AS SKTS INNER JOIN
							VWSAYIM2 AS S ON SKTS.SUBEID = S.SUBEID AND SKTS.DEPOID = S.DEPOID AND SKTS.STOKID = S.STOKID AND SKTS.TARIH = S.TARIH
		WHERE     (S.SUBEID = @SUBEID) AND (S.DEPOID = @DEPOID) AND (S.TARIH = @TARIH) AND (S.MIADZORUNLU = 1) AND (ISNULL(SKTS.MIKTAR, 0) - ISNULL(SKTS.SAYIM, 0) < 0)	  

		UPDATE DEPOFIS SET TTUTAR = ISNULL(DFIT.TTUTAR, 0), TADET = ISNULL(DFIT.TADET, 0)
		FROM DEPOFIS LEFT OUTER JOIN 
		  (SELECT DEPOFISID, SUM(BFIYAT*MIKTAR) AS TTUTAR, COUNT(*) AS TADET 
		   FROM DEPOFISISL
		   GROUP BY DEPOFISID) DFIT ON DEPOFIS.DEPOFISID = DFIT.DEPOFISID  
		WHERE DEPOFIS.DEPOFISID = @FISID
    END
      
	-- Stok sayım eksiği
	SELECT TOP 1 @TMPSAYIMID = SAYIMID 
	FROM 
	(SELECT     SAYIMID
	 FROM         VWSAYIM2
	 WHERE     (SUBEID = @SUBEID) AND (DEPOID = @DEPOID) AND (TARIH = @TARIH) AND (ISNULL(MIADZORUNLU, 0) = 0) AND (FARKMIKTAR > 0)	  
	 UNION ALL
	 SELECT     SAYIMID
	 FROM         VWSMBSAYIM AS SKTS INNER JOIN
						VWSAYIM2 AS S ON SKTS.SUBEID = S.SUBEID AND SKTS.DEPOID = S.DEPOID AND SKTS.STOKID = S.STOKID AND SKTS.TARIH = S.TARIH
	 WHERE     (S.SUBEID = @SUBEID) AND (S.DEPOID = @DEPOID) AND (S.TARIH = @TARIH) AND (S.MIADZORUNLU = 1) AND (ISNULL(SKTS.MIKTAR, 0) - ISNULL(SKTS.SAYIM, 0) > 0)) Q
      
    IF @@ROWCOUNT <> 0 
    BEGIN
        PRINT 'Stok sayım eksiği depo fişi ekleniyor...'
		EXEC SAYACOKU 'DEPOFIS',@FISID OUTPUT	  
		INSERT INTO DEPOFIS([DEPOFISID],[TARIH], [YETKILI], [ISLEM], [ENO], [ACIKLAMA], [SUBEID], [CDEPOID], [TADET], [TTUTAR])
		VALUES (@FISID, @TARIH, @USER, N'SAYIM', CAST(@FISID AS NVARCHAR(20)), N'Stok Sayım Eksiği', @SUBEID, @DEPOID, 0,0)

		IF @@ERROR<>0
		BEGIN
			RAISERROR('Depo fişi eklenemedi.',16,1)
			RETURN 1
		END

		INSERT INTO DEPOFISISL ( DEPOFISID, STOKID, SKTARIHI, BFIYAT, MIKTAR, FBFIYAT, FMIKTAR)
		SELECT     @FISID, STOKID, NULL, 
							CASE WHEN ROUND(FARKMIKTAR, 12) <> 0 THEN FARKTUTAR / FARKMIKTAR ELSE 0 END AS ORTFIYAT, 
							FARKMIKTAR, 
							CASE WHEN ROUND(FARKMIKTAR, 12) <> 0 THEN FARKTUTAR / FARKMIKTAR ELSE 0 END AS ORTFIYAT, 
							FARKMIKTAR
		FROM         VWSAYIM2
		WHERE     (SUBEID = @SUBEID) AND (DEPOID = @DEPOID) AND (TARIH = @TARIH) AND (ISNULL(MIADZORUNLU, 0) = 0) AND (FARKMIKTAR > 0)	  
		UNION ALL
		SELECT     @FISID, S.STOKID, SKTS.SKTARIHI, 
							CASE WHEN ROUND(FARKMIKTAR, 12) <> 0 THEN FARKTUTAR / FARKMIKTAR ELSE 0 END AS BFIYAT, 
							ISNULL(SKTS.MIKTAR, 0) - ISNULL(SKTS.SAYIM, 0) AS FARKMIKTAR, 
							CASE WHEN ROUND(FARKMIKTAR, 12) <> 0 THEN FARKTUTAR / FARKMIKTAR ELSE 0 END AS BFIYAT, 
							ISNULL(SKTS.MIKTAR, 0) - ISNULL(SKTS.SAYIM, 0) AS FARKMIKTAR
		FROM         VWSMBSAYIM AS SKTS INNER JOIN
							VWSAYIM2 AS S ON SKTS.SUBEID = S.SUBEID AND SKTS.DEPOID = S.DEPOID AND SKTS.STOKID = S.STOKID AND SKTS.TARIH = S.TARIH
		WHERE     (S.SUBEID = @SUBEID) AND (S.DEPOID = @DEPOID) AND (S.TARIH = @TARIH) AND (S.MIADZORUNLU = 1) AND (ISNULL(SKTS.MIKTAR, 0) - ISNULL(SKTS.SAYIM, 0) > 0)	  

		UPDATE DEPOFIS SET TTUTAR = ISNULL(DFIT.TTUTAR, 0), TADET = ISNULL(DFIT.TADET, 0)
		FROM DEPOFIS LEFT OUTER JOIN 
		  (SELECT DEPOFISID, SUM(BFIYAT*MIKTAR) AS TTUTAR, COUNT(*) AS TADET 
		   FROM DEPOFISISL
		   GROUP BY DEPOFISID) DFIT ON DEPOFIS.DEPOFISID = DFIT.DEPOFISID  
		WHERE DEPOFIS.DEPOFISID = @FISID
    END
      
END
GO


