SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO

ALTER PROCEDURE [dbo].[DEPOFISIKES] 
@ISLEM AS NVARCHAR(10),
@STOKID AS INT,
@SUBEID AS INT,
@SKODU AS NVARCHAR(10),
@GDEPOID AS INT,
@CDEPOID AS INT,
@TARIH AS DATETIME,
@BOLUMID AS INT,
@REUSE AS BIT,
@ADET AS FLOAT,
@SFIYAT AS FLOAT,
@YETKILI AS NVARCHAR(15),
@ACIKLAMA AS NVARCHAR(200),
@ISLREFID AS INT,
@CIHAZID AS INT,
@SKTARIHI AS DATETIME,
@ITSID AS INT,
@STOKBARKODID INT,
@HDOSYAID INT

AS
SET NOCOUNT ON
SET ANSI_WARNINGS OFF
DECLARE 
  @FISID AS INT,
  @ISLID AS INT,
  @SSONALISF AS FLOAT,
  @SBIRIM AS NVARCHAR(10),
  @DEPOFISISLID AS INT

-- REUSE MALZEME İSE BU İŞLERLE HİÇ UĞRAŞMAYALIM 
IF  @REUSE=1
  RETURN

IF NOT EXISTS (SELECT STOKID FROM STOK WHERE STOKID = @STOKID)
BEGIN
   RAISERROR('Stok kartı bulunamadı',16,1)
   RETURN 1
END

IF (@ISLEM='ÇIKIŞ') OR (@ISLEM='TRANSFER') OR (@ISLEM='ÜRETİM') 
IF NOT EXISTS (SELECT DEPOID FROM DEPO WHERE DEPOID = @GDEPOID)
BEGIN
   RAISERROR('Giriş depo kartı bulunamadı',16,1)
   RETURN 2
END

IF (@ISLEM='ÇIKIŞ') OR (@ISLEM='TRANSFER') OR (@ISLEM='TÜKETİM')  OR (@ISLEM='ZAYİ') 
IF NOT EXISTS (SELECT DEPOID FROM DEPO WHERE DEPOID = @CDEPOID)
BEGIN
   RAISERROR('Çıkış depo kartı bulunamadı',16,1)
   RETURN 2
END

IF ((@ISLEM='ÇIKIŞ') OR (@ISLEM='TRANSFER'))  AND (@GDEPOID=@CDEPOID) 
  RETURN 

DECLARE @STR AS NVARCHAR(100)
IF (ISNULL(@CDEPOID,0)=0) AND (ISNULL(@GDEPOID,0)=0)
BEGIN
   SET @STR=@YETKILI+' Depo seçilmeden depo fişi kesilemez.'
   RAISERROR(@STR,16,1)
   RETURN 3
END

-- ARTIK SON ALIS FİYATLARINI BULUP YAZIYORUZ FİŞ TUTARLARINA
--12420 DEN SONRAKİ FİŞLER

SELECT TOP 1 @SSONALISF=NFIYAT,@SBIRIM=SBIRIMI FROM VWSTOKSONALIS (NOLOCK)
WHERE STOKID=@STOKID 
ORDER BY TARIH DESC 

IF @@ROWCOUNT=0
BEGIN
  SET @SSONALISF = 0
  SELECT @SBIRIM=BIRIM FROM STOK (NOLOCK) WHERE STOKID=@STOKID 
END

SELECT @FISID = DEPOFISID 
FROM DEPOFIS 
WHERE TARIH = @TARIH AND ISLEM = @ISLEM AND 
      GSKODU = @SKODU AND CSKODU = @SKODU AND
      (GDEPOID = @GDEPOID OR (GDEPOID IS NULL AND @GDEPOID IS NULL)) AND 
      (CDEPOID = @CDEPOID OR (CDEPOID IS NULL AND @CDEPOID IS NULL)) AND 
      ACIKLAMA = 'Otomatik Depo İşlemi~'

IF @@ROWCOUNT=0  --FIS EKLEYELIM
BEGIN
  EXEC SAYACOKU 'DEPOFIS',@FISID OUTPUT
  INSERT INTO DEPOFIS([DEPOFISID],[TARIH], [YETKILI], [ISLEM], [ENO], [ACIKLAMA], [SUBEID], [GSKODU], [CSKODU], [GDEPOID], [CDEPOID], [TADET], [TTUTAR])
                            VALUES (@FISID,@TARIH,@YETKILI,@ISLEM,CAST(@FISID AS NVARCHAR(10)),'Otomatik Depo İşlemi~',@SUBEID,@SKODU,@SKODU,@GDEPOID,@CDEPOID,0,0)
  IF @@ERROR<>0 
  BEGIN
    RAISERROR('Depo fişi eklenemedi.',16,1)
    RETURN 5
  END
END
ELSE
BEGIN
  SELECT @DEPOFISISLID = DEPOFISISLID FROM DEPOFISISL WHERE DEPOFISID=@FISID AND ISLREFID=@ISLREFID AND MIKTAR>0 AND HDOSYAID =@HDOSYAID
  IF @@ROWCOUNT > 0
  BEGIN
    IF (@ISLEM='ÇIKIŞ') OR (@ISLEM='TRANSFER') 
    BEGIN
      UPDATE DEPOFISISL 
      SET MIKTAR = MIKTAR + @ADET, [FMIKTAR]= [FMIKTAR] + @ADET 
      WHERE DEPOFISISLID = @DEPOFISISLID
      GOTO SON
    END
    ELSE
    BEGIN
      RAISERROR('Stok için depo fişi satırı daha önceden oluşturulmuş.',16,1)
      RETURN 4
    END
  END
END

--SIMDI SATIRI EKLEYELIM
--  EXEC SAYACOKU 'DEPOFISISL',@ISLID  OUTPUT
INSERT INTO DEPOFISISL(/*[DEPOFISISLID],*/ [DEPOFISID], [STOKID], [MIKTAR], [BFIYAT],[SFIYAT],[FBFIYAT],[FBIRIM],[FMIKTAR],[YETKILI],[ACIKLAMA],[ISLREFID],[CIHAZID],[SKTARIHI],[STOKBARKODID],[HDOSYAID])
VALUES (/*@ISLID,*/@FISID,@STOKID,@ADET,@SSONALISF,@SFIYAT,@SSONALISF,@SBIRIM,@ADET,@YETKILI,@ACIKLAMA,@ISLREFID,@CIHAZID,@SKTARIHI,@STOKBARKODID,@HDOSYAID)

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

IF (@ISLEM='ÇIKIŞ') OR (@ISLEM='TRANSFER') 
BEGIN
  SET @DEPOFISISLID = SCOPE_IDENTITY()
  IF @ITSID IS NOT NULL
    UPDATE ITS SET DDEPOFISISLID = @DEPOFISISLID WHERE ITSID = @ITSID AND DBILDIRIMID IS NULL AND DDEPOFISISLID IS NULL
END
  
SON:
UPDATE DEPOFIS SET TADET = (ISL.ADET) , TTUTAR=(ISL.TUTAR) 
FROM DEPOFIS INNER JOIN (SELECT DEPOFISID,COUNT(*) AS ADET, SUM(MIKTAR*BFIYAT) AS TUTAR FROM DEPOFISISL WHERE DEPOFISID=@FISID GROUP BY DEPOFISID) AS ISL 
  ON ISL.DEPOFISID=DEPOFIS.DEPOFISID 
WHERE DEPOFIS.DEPOFISID=@FISID


GO


