USE [Vertragsverwaltung_20160404] GO /****** Object: UserDefinedFunction [dbo].[Check_Generate_Activity] Script Date: 02.12.2016 09:08:53 ******/ DROP FUNCTION [dbo].[Check_Generate_Activity] GO /****** Object: UserDefinedFunction [dbo].[Check_Generate_Activity] Script Date: 02.12.2016 09:08:55 ******/ SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER OFF GO CREATE FUNCTION [dbo].[Check_Generate_Activity] (@startdatum datetime, @enddatum datetime, @steuerdatum datetime, @vorlauf int, @periode int, @generate int, @kuendigungsfristnr int, @kuendigung int, @fnkt int, @einmalig int) Returns varchar(25) AS BEGIN declare @workdate datetime declare @result varchar(15) declare @eom int declare @eomdate datetime declare @dd varchar(2) declare @mm varchar(2) declare @yy varchar(4) set @eom=0 set @result=0 --------------------------------------------------------------------------------------------------------------------------- --Initialisierung - Datum / Zeit-Sync --------------------------------------------------------------------------------------------------------------------------- set @startdatum = FLOOR( CAST( @startdatum AS FLOAT ) ) set @enddatum = FLOOR( CAST( @enddatum AS FLOAT ) ) set @steuerdatum = FLOOR( CAST( @steuerdatum AS FLOAT ) ) set @eomdate=DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@startdatum)+1,0)) set @eomdate = FLOOR( CAST( @eomdate AS FLOAT ) ) --if @enddatum < '01.01.1901' set @enddatum = '31.12.2099' if @enddatum < '01.01.1901' set @enddatum = '31.12.2099'--------------------------------------------------------------------------------------------------------------------------- --Einmalige Ereignisse --------------------------------------------------------------------------------------------------------------------------- if @einmalig = 1 begin if @periode=15 begin set @result='' set @workdate = @startdatum if @kuendigung=1 begin if @kuendigungsfristnr=1 set @workdate=dateadd(mm,-1,@startdatum) if @kuendigungsfristnr=2 set @workdate=dateadd(mm,-2,@startdatum) if @kuendigungsfristnr=3 set @workdate=dateadd(mm,-3,@startdatum) if @kuendigungsfristnr=4 set @workdate=dateadd(mm,-6,@startdatum) if @kuendigungsfristnr=5 set @workdate=dateadd(mm,-9,@startdatum) if @kuendigungsfristnr=6 set @workdate=dateadd(mm,-12,@startdatum) set @workdate=FLOOR( CAST( @workdate AS FLOAT ) ) end set @workdate=dateadd(dd,@vorlauf*-1,@workdate) if @steuerdatum=floor(cast(@workdate as float)) begin set @result='1' if @fnkt=1 begin set @dd=ltrim(str(day(@startdatum))) while len(@dd)<2 begin set @dd='0'+@dd end set @mm=ltrim(str(month(@startdatum))) while len(@mm)<2 begin set @mm='0'+@mm end set @result=@dd+'.'+@mm+'.'+ltrim(str(year(@startdatum))) end --if @fnkt=1 set @result=@startdatum end end return @result end --------------------------------------------------------------------------------------------------------------------------- --Startdatum auf EOM prüfen --------------------------------------------------------------------------------------------------------------------------- if @eomdate=@startdatum begin set @eom=1 end if @generate=0 begin set @result='' return @result end --------------------------------------------------------------------------------------------------------------------------- --Vorlaufzeit in Tagen vom Startdatum abziehen. Wenn dieses nach dem aktuellen Tagesdatum liegt, keine Aktivität generieren --------------------------------------------------------------------------------------------------------------------------- if @startdatum='01.01.1900' begin set @result='' return @result end set @workdate=@startdatum if @kuendigung=1 begin if @kuendigungsfristnr=1 set @workdate=dateadd(mm,-1,@startdatum) if @kuendigungsfristnr=2 set @workdate=dateadd(mm,-2,@startdatum) if @kuendigungsfristnr=3 set @workdate=dateadd(mm,-3,@startdatum) if @kuendigungsfristnr=4 set @workdate=dateadd(mm,-6,@startdatum) if @kuendigungsfristnr=5 set @workdate=dateadd(mm,-9,@startdatum) if @kuendigungsfristnr=6 set @workdate=dateadd(mm,-12,@startdatum) end set @workdate=dateadd(dd,@vorlauf*-1,@workdate) if @workdate > @steuerdatum begin set @result='' return @result end --------------------------------------------------------------------------------------------------------------------------- -- Berechnung -- 1=einmalig,2=täglich,3=wöchentlich,4=monatlich,5=zwei-monatlich,6=vierteljährlich,7=halbjährlich,8=jählrich --------------------------------------------------------------------------------------------------------------------------- declare @dd1 int declare @dd2 int set @dd1=datepart(dd,@startdatum) --Print @workdate declare @tmpdate datetime declare @ok int set @ok=0 while @workdate < @enddatum begin if month(@workdate)=2 and day(@startdatum)>28 and @vorlauf>0 begin set @tmpdate=dateadd(dd,(day(@startdatum)-28)*-1,@workdate) if @tmpdate=@steuerdatum set @ok=1 end if @workdate=@steuerdatum begin set @ok=1 end if @ok=1 begin set @result='1' --------------------------------------------------------------------------------------------------------------------------- --Berechnung des Kündigungstermins --------------------------------------------------------------------------------------------------------------------------- if @fnkt=1 begin --set @workdate=dateadd(d,@vorlauf,@workdate) if @kuendigungsfristnr=1 set @workdate=dateadd(mm,1,@workdate) if @kuendigungsfristnr=2 set @workdate=dateadd(mm,2,@workdate) if @kuendigungsfristnr=3 set @workdate=dateadd(mm,3,@workdate) if @kuendigungsfristnr=4 set @workdate=dateadd(mm,6,@workdate) if @kuendigungsfristnr=5 set @workdate=dateadd(mm,9,@workdate) if @kuendigungsfristnr=6 set @workdate=dateadd(mm,12,@workdate) if @eom=1 begin set @workdate=DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@workdate)+1,0)) set @workdate = FLOOR( CAST( @workdate AS FLOAT ) ) set @dd=ltrim(str(day(@workdate))) while len(@dd)<2 begin set @dd='0'+@dd end set @mm=ltrim(str(month(@workdate))) while len(@mm)<2 begin set @mm='0'+@mm end set @result=@dd+'.'+@mm+'.'+ltrim(str(year(@workdate))) -- set @result=@workdate end else begin set @workdate = FLOOR( CAST( @workdate AS FLOAT ) ) -- Datumsberechung zur Datumsausgabe - Termin (28. - 31.) set @dd2=datepart(dd,@workdate) if @dd1>=28 begin if @dd2 < @dd1 begin set @workdate=dateadd(dd,@dd1-@dd2,@workdate) end end set @dd=ltrim(str(day(@workdate))) while len(@dd)<2 begin set @dd='0'+@dd end set @mm=ltrim(str(month(@workdate))) while len(@mm)<2 begin set @mm='0'+@mm end set @result=@dd+'.'+@mm+'.'+ltrim(str(year(@workdate))) --set @result=@workdate end end else begin if @kuendigungsfristnr=1 set @workdate=dateadd(mm,1,@workdate) if @kuendigungsfristnr=2 set @workdate=dateadd(mm,2,@workdate) if @kuendigungsfristnr=3 set @workdate=dateadd(mm,3,@workdate) if @kuendigungsfristnr=4 set @workdate=dateadd(mm,6,@workdate) if @kuendigungsfristnr=5 set @workdate=dateadd(mm,9,@workdate) if @kuendigungsfristnr=6 set @workdate=dateadd(mm,12,@workdate) if @workdate > @enddatum begin set @result='' return @result end end return @result break end if @workdate > @steuerdatum begin set @result='' return @result break end if @periode = 10 set @workdate=dateadd(dd,1,@workdate) if @periode = 11 set @workdate=dateadd(ww,1,@workdate) if @periode = 12 set @workdate=dateadd(mm,1,@workdate) if @periode =13 set @workdate=dateadd(mm,2,@workdate) if @periode = 16 set @workdate=dateadd(qq,1,@workdate) if @periode = 14 set @workdate=dateadd(qq,2,@workdate) if @periode =9 set @workdate=dateadd(yy,1,@workdate) --if @periode = 9 set @workdate=dateadd(mm,1,@workdate) end set @result='' return @result end GO