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
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
|