You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ITSM/.svn/pristine/b5/b5bf6901bc4b7d6cf87733fc594...

241 lines
17 KiB

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