USE [Vertragsverwaltung_20160404] GO /****** Object: StoredProcedure [dbo].[sp_mittelfristplanung_berechnung] Script Date: 02.12.2016 09:08:53 ******/ DROP PROCEDURE [dbo].[sp_mittelfristplanung_berechnung] GO /****** Object: StoredProcedure [dbo].[sp_mittelfristplanung_berechnung] Script Date: 02.12.2016 09:08:55 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[sp_mittelfristplanung_berechnung] @datumvon datetime, @datumbis datetime, @mitarbeiternr int, @ereignisnr int AS print 'Ereignis ---> ' + str(@ereignisnr) -- Deklarationen declare @tmptabl1 varchar(255) declare @workdate datetime declare @enddate datetime declare @year int declare @dd datetime set @dd='1900-01-01' -- VE-Elemente declare @datum datetime declare @veendedatum datetime declare @start datetime declare @ende datetime declare @mutdat datetime declare @aktiv int declare @periode int declare @betrag float declare @inklmwst int declare @vertragselementnr int declare @gekuendigtper datetime --**************************************************************************************************************************** -- Temporäre Tabelle --**************************************************************************************************************************** set @tmptabl1 = str(@mitarbeiternr) while left(@tmptabl1,1)=' ' begin set @tmptabl1=right(@tmptabl1,len(@tmptabl1)-1) end set @tmptabl1 = 'dbo.tmp_mfp_' + @tmptabl1 --**************************************************************************************************************************** -- Vertragselement auslesen --**************************************************************************************************************************** select @datum=datum, @start=start, @ende=ende, @mutdat=mutiert_am, @aktiv=aktiv, @periode=periodizitaetnr, @betrag=betrag,@inklmwst=InklMwSt, @vertragselementnr=Vertragselementnr from dbo.vertragsereignis where dbo.vertragsereignis.ereignisnr=@ereignisnr select @veendedatum = dbo.vertragselement.vertragsablauf, @gekuendigtper=dbo.Vertragselement.Gekuendigt_per from dbo. Vertragselement where Vertragselementnr=@vertragselementnr --**************************************************************************************************************************** -- Einmalige Ereignisse --**************************************************************************************************************************** if @periode=15 or @periode = 0 begin -- Vertragselement mit Gekündigt_per-Datum if @gekuendigtper <=@dd begin -- Aktiv und VE-Datum in der Selektionsperiode -> verwenden if @aktiv=1 and @datum >= @datumvon and @datum <= @datumbis begin set @year = YEAR(@datum) execute dbo.sp_mittelfristplanung_addvalue @year,@betrag, @inklmwst, @ereignisnr, @tmptabl1 end -- Inaktiv nach nach der Selektionsperiode, -> verwenden if @aktiv=0 and @mutdat > @datumbis begin set @year = YEAR(@datum) execute dbo.sp_mittelfristplanung_addvalue @year,@betrag, @inklmwst,@ereignisnr, @tmptabl1 end end else begin -- Aktiv und VE-Datum in der Selektionsperiode -> verwenden if @aktiv=1 and @datum <= @gekuendigtper and @datum >= @datumvon and @datum <=@datumbis begin set @year = YEAR(@datum) execute dbo.sp_mittelfristplanung_addvalue @year,@betrag, @inklmwst, @ereignisnr, @tmptabl1 end -- Inaktiv nach nach der Selektionsperiode, -> verwenden if @aktiv=0 and @mutdat > @gekuendigtper and @mutdat >=@datumvon and @mutdat <= @datumbis begin set @year = YEAR(@datum) execute dbo.sp_mittelfristplanung_addvalue @year,@betrag, @inklmwst,@ereignisnr, @tmptabl1 end end return end --**************************************************************************************************************************** -- Aktive Ereignisse --**************************************************************************************************************************** if @periode <> 15 and @aktiv=1 begin set @workdate=@start if @ende = @dd set @ende = @datumbis if @veendedatum > @dd and @veendedatum<@ende set @ende=@veendedatum if @gekuendigtper <= @dd begin while @workdate <= @ende begin if @workdate >= @datumvon and @workdate <= @datumbis begin set @year=YEAR(@workdate) execute dbo.sp_mittelfristplanung_addvalue @year,@betrag, @inklmwst, @ereignisnr, @tmptabl1 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) end end else begin while @workdate <= @gekuendigtper begin if @workdate >= @datumvon and @workdate <= @datumbis begin set @year=YEAR(@workdate) execute dbo.sp_mittelfristplanung_addvalue @year,@betrag, @inklmwst, @ereignisnr, @tmptabl1 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) end end end --**************************************************************************************************************************** -- Inaktive Ereignisse --**************************************************************************************************************************** if @periode <> 15 and @aktiv=0 begin set @workdate=@start if @ende <=@dd set @ende = @datumbis if @workdate <= @dd begin while @workdate <= @mutdat begin if @workdate >= @datumvon and @workdate <= @datumbis begin set @year=YEAR(@workdate) execute dbo.sp_mittelfristplanung_addvalue @year,@betrag, @inklmwst, @ereignisnr, @tmptabl1 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) end end else begin while @workdate <= @gekuendigtper begin if @workdate >= @datumvon and @workdate <= @datumbis begin set @year=YEAR(@workdate) execute dbo.sp_mittelfristplanung_addvalue @year,@betrag, @inklmwst, @ereignisnr, @tmptabl1 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) end end end GO