
if exists (select * from sys.procedures where name='KdvOraniDegistir')
drop proc KdvOraniDegistir
go
-------------------------------------------------------------------------------------

CREATE   proc [dbo].[KdvOraniDegistir] @Kod nvarchar(max), @FiyatDegistir bit , @Skdv float,@Akdv float
as    
   -------  exec KdvOraniDegistir   '''1001'',''10101'',''101010'',''1020125'',''11'',''121''', 0,'1','8' 
IF (@Skdv  is not null) or (@Akdv is not null)
BEGIN	
	BEGIN TRANSACTION    
	BEGIN TRY    
	declare @i int    
	declare @FKdvAdi nvarchar(5)    
	declare @SqlTextSF varchar(max)  -- nvarchar karakter boyutu kısıtlı gelebilir.  
	declare @SqlTextD  varchar(max)
	 SET @SqlTextSF =  'UPDATE sf SET sf.SatisKdv=sk.SatisKdv from StokFiyat sf,STOKKARTI sk where sf.Kodu = sk.Kodu AND sk.Kodu in ('+@Kod+')';
	 exec(@SqlTextSF); 

	 IF (@Skdv  is not null)
	 BEGIN
		 set @i=1  
		 set @SqlTextSF=''  
		 while @i<21
		 begin  
			set @FKdvAdi='F'+convert(varchar,@i)+'Kdv'    
			set @SqlTextSF =@SqlTextSF+Char(13)+ ' update StokFiyat SET  F'+convert(varchar,@i)+'FiyatH=(case when '+convert(varchar,@FiyatDegistir)+' = 1 then ' +    
			'F'+convert(varchar,@i)+'FiyatH  else (F'+convert(varchar,@i)+'FiyatH*(100 +SatisKdv)/(100+'''+convert(varchar,@Skdv)+    
			''')) end  ), F'+convert(varchar,@i)+'Fiyat = (case when F'+convert(varchar,@i)+'Kdv=''H'' then F'+convert(varchar,@i)+'FiyatH ELSE ( F'+convert(varchar,@i)+'FiyatH*(100+'''+convert(varchar,@Skdv)+''')/100) END) WHERE Kodu in ('+@Kod+'); '    

			set @i=@i+1  
		 end 
	 END
  
	 --update STOKKARTI SET AlisKdv=@Skdv ,SatisKdv=@Skdv WHERE Kodu in (@Kod)
	 --update StokFiyat SET SatisKdv = @Skdv WHERE Kodu in (@Kod);
	SET @SqlTextD = '';
    IF (@Akdv is not null)
	BEGIN
		set @SqlTextD =' update STOKKARTI SET AlisKdv='''+convert(varchar,@Akdv)+'''  WHERE Kodu in ('+@Kod+'); '+Char(13);  
    END;

    IF (@Skdv  is not null) 
	BEGIN
	    set @SqlTextD = @SqlTextD + ' update STOKKARTI SET SatisKdv='''+convert(varchar,@Skdv)+''' WHERE Kodu in ('+@Kod+'); '+Char(13);  
 		set @SqlTextD = @SqlTextD + ' update StokFiyat SET SatisKdv='''+convert(varchar,@Skdv)+'''  WHERE Kodu in ('+@Kod+');';      
    END
	--select  @SqlText   
	exec(@SqlTextSF) 
	exec(@SqlTextD) 

	 update s       
	   set s.F1Fiyat = f.F1Fiyat,s.F1Kdv = f.F1Kdv,s.F1DovizKodu = f.F1DovizKodu,      
		 s.F2Fiyat = f.F2Fiyat,s.F2Kdv = f.F2Kdv,s.F2DovizKodu = f.F2DovizKodu,      
		 s.F3Fiyat = f.F3Fiyat,s.F3Kdv = f.F3Kdv,s.F3DovizKodu = f.F3DovizKodu,      
		 s.F4Fiyat = f.F4Fiyat,s.F4Kdv = f.F4Kdv,s.F4DovizKodu = f.F4DovizKodu      
	 from  STOKKARTI s,StokFiyat f       
	 where  s.Kodu = f.Kodu;

	COMMIT    
	END TRY    
	BEGIN CATCH    
	ROLLBACK    
	END CATCH    
END    
go