CREATE OR ALTER PROCEDURE StokBul(@Barkodu nvarchar(50),@OnliTeraziMiktar float,@FormAdi nvarchar(50))
AS
BEGIN
	DECLARE @l_Barkod nvarchar(50);
	DECLARE @Miktar   float = 1;  
    DECLARE @Carpan   float = 0;  
	DECLARE @BarkodDurum int;
	DECLARE @Olcu nvarchar(10);	
	DECLARE @ButonBlog nvarchar(10);
	DECLARE @ButonGelen nvarchar(10);
    --   exec StokBul '3*btnG1R!B6',1723
	--   exec StokBul '3.5*952',0	
	   
	IF CHARINDEX('R!B',@Barkodu) > 0
	BEGIN	
		IF CHARINDEX('*',@Barkodu) > 0
		BEGIN		
			IF @FormAdi = 'Ranros'
			BEGIN
				SET @Carpan = CAST(SUBSTRING(@Barkodu,1,CHARINDEX('*',@Barkodu) -1) as float);
				SET @Miktar = @Carpan;
				SET @ButonBlog = SUBSTRING(@Barkodu,CHARINDEX('*',@Barkodu) + 1,LEN(@Barkodu)); 
				SET @l_Barkod  = @ButonBlog;
				SET @ButonBlog = SUBSTRING(@ButonBlog,1,CHARINDEX('R!B',@ButonBlog) -1)
				SET @ButonGelen = SUBSTRING(@l_Barkod,CHARINDEX('R!B',@l_Barkod) + 3,LEN(@l_Barkod)); 
			
				SELECT @l_Barkod = ButonDegeri 
					FROM Buton 
					WHERE ButonNo = @ButonGelen
					AND FormAdi = @FormAdi 
					AND ButonAdi like @ButonBlog+'%';
			END
			ELSE
			BEGIN
				SET @Carpan = CAST(SUBSTRING(@Barkodu,1,CHARINDEX('*',@Barkodu) -1) as float);
				SET @Miktar = @Carpan;

				SET @ButonGelen = SUBSTRING(@Barkodu,CHARINDEX('R!B',@Barkodu) + 3,LEN(@Barkodu))			
			
				SELECT @l_Barkod = ButonDegeri 
					FROM Buton 
					WHERE ButonNo = @ButonGelen
					AND FormAdi = @FormAdi;				   
			END;
		END
		ELSE
		BEGIN	
			IF @FormAdi = 'Ranros'
			BEGIN
				SET @ButonBlog = @Barkodu;
				SET @l_Barkod  = @ButonBlog;
				SET @ButonBlog = SUBSTRING(@ButonBlog,1,CHARINDEX('R!B',@ButonBlog) -1)
				SET @ButonGelen = SUBSTRING(@l_Barkod,CHARINDEX('R!B',@l_Barkod) + 3,LEN(@l_Barkod)); 

				SELECT @l_Barkod = ButonDegeri 
					FROM Buton 
					WHERE ButonNo = @ButonGelen 
					AND FormAdi = @FormAdi
					AND ButonAdi like @ButonBlog+'%';	
			
				IF @OnliTeraziMiktar > 0
					SET @Miktar  = @OnliTeraziMiktar
				ELSE
					SET @Miktar = 1;
			END
			ELSE
			BEGIN
				SET @ButonGelen = SUBSTRING(@Barkodu,CHARINDEX('R!B',@Barkodu) + 3,LEN(@Barkodu))			
			
				SELECT @l_Barkod = ButonDegeri 
					FROM Buton 
					WHERE ButonNo = @ButonGelen
					AND FormAdi = @FormAdi;		
			
				IF @OnliTeraziMiktar > 0
					SET @Miktar  = @OnliTeraziMiktar
				ELSE
					SET @Miktar = 1;
			END;
		END;		
	END
	ELSE
	BEGIN
		IF CHARINDEX('*',@Barkodu) > 0
		BEGIN		
			SET @Carpan = CAST(SUBSTRING(@Barkodu,1,CHARINDEX('*',@Barkodu) -1) as float);
			SET @Miktar = @Carpan;
			SET @l_Barkod = SUBSTRING(@Barkodu,CHARINDEX('*',@Barkodu) + 1,LEN(@Barkodu));		
		END
		ELSE
		BEGIN	
			SET @l_Barkod = @Barkodu;
			IF @OnliTeraziMiktar > 0
				SET @Miktar  = @OnliTeraziMiktar
			ELSE
				SET @Miktar = 1;						
		END;
	END;

	IF (Select COUNT(*) from StokBarkodlari where Barkodu = @l_Barkod) = 0
	BEGIN			
		SET @BarkodDurum = 0;
	END
	ELSE
		SET @BarkodDurum = 1; -- Barkod direkt bulunan kayıtlar için 1 kullanılır

	IF @BarkodDurum = 0
	BEGIN	
		IF LEN(@l_Barkod) = 13
		BEGIN						
			IF (Select COUNT(*) from StokBarkodlari where Barkodu = SUBSTRING(@l_Barkod,1,7)) = 0
			BEGIN 
				SET @BarkodDurum = 0;
			END
			ELSE
			BEGIN
				SET @BarkodDurum = 2; -- Barkodu 13 olup tartılı veya adetli olan kayıtlar için 2 kullanılır;
			END;
		END
		ELSE
			SET @BarkodDurum = 0;
	END;

	IF @BarkodDurum = 1 
	BEGIN		
		SELECT @Olcu = sk.Olcu
			FROM STOKKARTI sk,
				StokBarkodlari sb
			WHERE sk.StokNo = sb.StokNo 
			AND sb.Barkodu = @l_Barkod;
		
		IF @Olcu = 'Tartili' AND @OnliTeraziMiktar = 0
		BEGIN
			SELECT 1 HataDurum,'TERAZİDE ÜRÜN YOKTUR..!' HataMesaj;
		END
		ELSE
		BEGIN					
			IF @Olcu <> 'Tartili' and @OnliTeraziMiktar > 0 and (@Carpan = 0 or @Carpan is null) 
			BEGIN
				SET @Miktar = 1;	
				SET @BarkodDurum = 1;
			END;

		   IF @OnliTeraziMiktar > 0 AND CHARINDEX('*',@Barkodu) > 0 AND @Olcu = 'Tartili'
			BEGIN
				SELECT 1 HataDurum,'TARTIDA ÜRÜiN VARDIR." * (ÇARPI) " KULLANAMAZSINIZ..!' HataMesaj;
				SET @BarkodDurum = 0;
			END

			IF @BarkodDurum = 1
			BEGIN
				SELECT 0 HataDurum,sk.*,sb.Barkodu SBBarkodu,sb.Birim SBBirim,sb.AnaBirim SBAnaBirim,sb.Carpani SBCarpani,@Miktar Miktar 
				FROM STOKKARTI sk,
					StokBarkodlari sb
				WHERE sk.StokNo = sb.StokNo 
				AND sb.Barkodu = @l_Barkod;			   
			END;
		END;
	END
	ELSE IF @BarkodDurum = 2		
	BEGIN	
		SELECT @Olcu = sk.Olcu
			FROM STOKKARTI sk,
				StokBarkodlari sb
			WHERE sk.StokNo = sb.StokNo 
			AND sb.Barkodu = SUBSTRING(@l_Barkod,1,7);

		IF @Olcu not in ('Adetli','Tartili')
		BEGIN
			SELECT 1 HataDurum,'OKUTULAN STOK KARTININ ÖLÇÜ BİLGİSİNİ KONTROL EDİNİZ..!' HataMesaj;
		END
		ELSE
		BEGIN		  
			IF @Olcu = 'Adetli'
				SET @Miktar = CAST(SUBSTRING(@l_Barkod,8,5) as float)
			ELSE
				SET @Miktar = CAST(SUBSTRING(@l_Barkod,8,5) as float) / 1000;

			SELECT 0 HataDurum,sk.*,sb.Barkodu SBBarkodu,sb.Birim SBBirim,sb.AnaBirim SBAnaBirim,sb.Carpani SBCarpani,@Miktar Miktar 
				FROM STOKKARTI sk,
					StokBarkodlari sb
				WHERE sk.StokNo = sb.StokNo 
				AND sb.Barkodu = SUBSTRING(@l_Barkod,1,7);
		END
	END
	ELSE
		SELECT 2 HataDurum,'OKUTULAN BARKODA AİT STOK KARTI BULUNAMADI..!' HataMesaj;
END;


--   exec StokBul '3.5*952',0
