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.

241 lines
17 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

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