
ALTER PROCEDURE [dbo].[DEPOFISISLSIL] 
	@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,
	@STOKBARKODID AS INT,
	@HDOSYAID INT
AS

SET NOCOUNT ON
SET ANSI_WARNINGS OFF
DECLARE 
  @FISID AS INT,
  @FISTARIH AS DateTime,
  @ISLID AS INT,
  @SSONALISF AS FLOAT,
  @SBIRIM AS NVARCHAR(10),
  @TMP_CANADEPOID AS INT,
  @TMP_GANADEPOID AS INT,
  @SONSAYIMTARIH AS DateTime

-- REUSE MALZEME İSE BU İŞLERLE HİÇ UĞRAŞMAYALIM 
IF  (@ISLREFID IS NOT NULL AND @ISLREFID<>0) AND
EXISTS (SELECT HESAPISLID FROM HESAPISL WHERE HESAPISLID = @ISLREFID AND REUSE=1)
RETURN 1

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 3
END

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

SELECT @FISID = DEPOFISISL.DEPOFISID, @FISTARIH = DEPOFIS.TARIH, @ISLID = DEPOFISISLID 
FROM DEPOFISISL INNER JOIN DEPOFIS ON DEPOFISISL.DEPOFISID = DEPOFIS.DEPOFISID 
WHERE ISLEM=@ISLEM AND ISLREFID = @ISLREFID AND (CIHAZID = @CIHAZID OR (CIHAZID IS NULL AND @CIHAZID IS NULL))

SET @SONSAYIMTARIH = NULL
SELECT @SONSAYIMTARIH = MAX(TARIH) FROM SAYIMDONEM WHERE SUBEID = @SUBEID AND DEPOID IN (ISNULL(@GDEPOID, 0), ISNULL(@CDEPOID, 0)) AND KAPANDI = 1

IF @@ROWCOUNT=1 AND @FISTARIH >= ISNULL(@SONSAYIMTARIH, CAST('19000101' AS DATETIME)) -- SON SAYIM SONRASI FİŞ SATIRI
BEGIN
  --PRINT 'YENİ İPTAL SATIR GÜNCELLEMESİ'
  --PARAMETRE AKTİFSE ACIKLAMADA HER SEFERİNDE DEĞİŞSİN 'Stok hareket açıklamasına özel yer kodu eklensin'
  UPDATE DEPOFISISL SET MIKTAR = MIKTAR - @ADET,FMIKTAR = FMIKTAR - @ADET,ACIKLAMA=@ACIKLAMA  WHERE DEPOFISISLID = @ISLID

END
ELSE
BEGIN
   -- ESKİDEN GİRİLMİŞ İLAÇ VE MALZEMELER VEYA CİHAZ TÜKETİMİ
   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  --FİŞ YOK
   BEGIN
     -- PRINT 'YENİ İPTAL FİŞİ EKLENİYOR'
     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 4
     END
   END
   ELSE
   BEGIN
     IF EXISTS (SELECT DEPOFISID FROM DEPOFISISL WHERE DEPOFISID=@FISID AND ISLREFID=@ISLREFID AND MIKTAR=0)
     BEGIN
       RAISERROR('Stok için depo fişi satırı daha önceden oluşturulmuş.',16,1)
       RETURN 6
     END
   END
   
   --SIMDI SATIRI EKLEYELIM
   
   SELECT TOP 1 @SSONALISF=NFIYAT,@SBIRIM=SBIRIMI FROM QETS_STOKSONALIS
   WHERE STOKID=@STOKID 
   ORDER BY TARIH DESC 

   --  EXEC SAYACOKU 'DEPOFISISL',@ISLID  OUTPUT
     -- PRINT 'YENİ İPTAL SATIRI EKLENİYOR'
     INSERT INTO DEPOFISISL(/*[DEPOFISISLID],*/ [DEPOFISID], [STOKID], [MIKTAR], [BFIYAT],[SFIYAT],[FBIRIM],[FMIKTAR],[FBFIYAT],[YETKILI],[ACIKLAMA],[ISLREFID],[CIHAZID],[SKTARIHI],[STOKBARKODID],CHDOSYAID)
     VALUES (/*@ISLID,*/@FISID,@STOKID,-1*@ADET,@SSONALISF,@SFIYAT,@SBIRIM,-1*@ADET,@SSONALISF,@YETKILI,@ACIKLAMA,@ISLREFID,@CIHAZID,@SKTARIHI,@STOKBARKODID,@HDOSYAID)
     IF @@ERROR<>0 
     BEGIN
       RAISERROR('Depo fişi satırı eklenemedi.',16,1)
       RETURN 5
     END
END

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


