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.

337 lines
21 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: StoredProcedure [dbo].[sp_vertragsuebersicht_get_struktur] Script Date: 02.12.2016 09:08:53 ******/
DROP PROCEDURE [dbo].[sp_vertragsuebersicht_get_struktur]
GO
/****** Object: StoredProcedure [dbo].[sp_vertragsuebersicht_get_struktur] Script Date: 02.12.2016 09:08:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE proc [dbo].[sp_vertragsuebersicht_get_struktur]
@vertragstypnr int,
@vertragspartnernr int,
@mitarbeiternr int,
@details int,
@suchstring varchar(255)
as
set nocount on
CREATE TABLE #tmpd(
[vertragselementnr] [int] ,
[bezeichnung] [varchar] (255) null,
[parentid] [int] null,
[Vertragstypnr] [int],
[aktiv] [bit] null,
[vertragselementnrursprung] [int] null,
[basevertragstypnr] [int] null,
[key] [int] IDENTITY(1,1) NOT NULL,
[level] int null,
[loopcnt] int null,
) ON [DEFAULT]
CREATE TABLE #tmpe(
[vertragselementnr] [int] ,
[bezeichnung] [varchar] (255) null,
[parentid] [int] null,
[Vertragstypnr] [int],
[aktiv] [bit] null,
[vertragselementnrursprung] [int] null,
[basevertragstypnr] [int] null,
[key] [int] NOT NULL,
[level] int null,
[loopcnt] int null,
) ON [DEFAULT]
CREATE TABLE #tmps(
[vertragselementnr] [int] ,
[bezeichnung] [varchar] (255) null,
[parentid] [int] null,
[Vertragstypnr] [int],
[aktiv] [bit] null,
[vertragselementnrursprung] [int] null,
[basevertragstypnr] [int] null,
[key] [int] NOT NULL,
[level] int null,
[loopcnt] int null,
) ON [DEFAULT]
declare @vnr int
declare @vtype varchar(255)
declare @tmpid int
declare @tmpid_base int
declare @aktiv bit
declare @tmp int
declare @loop int
declare @keyvalue int
declare @keyvalue1 int
declare @key int
declare @loopcnt int
set @tmpid=-100
set @loopcnt = 0
----------------------------------------------------------------------------------------------------------
-- Struktur nach Partner auslesen / ohne Suchstring - Suchstring berücksichtigt Vertragsinhalt
----------------------------------------------------------------------------------------------------------
Struktur_Nach_Partner:
--if @suchstring<>'' goto suche_mit_searchstring
-- Vertragstypen mit Vertragselementen
insert #tmpd (vertragselementnr, bezeichnung, parentid, vertragstypnr, aktiv) values(0,'Root',null,0,1)
set @loop=0
declare @rootvertragstypnr int, @rootvertragstyp varchar(255)
declare xc cursor for
SELECT DISTINCT dbo.Vertragstyp.Vertragstypnr*-100, dbo.Vertragstyp.Vertragstyp
FROM dbo.Vertragstyp INNER JOIN
dbo.Vertragselement ON dbo.Vertragstyp.Vertragstypnr = dbo.Vertragselement.VertragstypNr
WHERE (dbo.Vertragselement.VertragspartnerNr = @vertragspartnernr) and securitylevelnr in (select SecurityLevelNr from dbo.Get_SecurityLevelTab(@mitarbeiternr))
ORDER BY dbo.Vertragstyp.Vertragstyp
open xc
fetch next from xc into @rootvertragstypnr, @rootvertragstyp
while @@fetch_status=0 begin
-- Vertragselemente mit parentid=0 mit entsprechendem Vertragstyp
insert #tmpd (vertragselementnr, bezeichnung, parentid, vertragstypnr, aktiv) values(@rootvertragstypnr,@rootvertragstyp,0,@rootvertragstypnr,@aktiv)
declare xy cursor for
select Vertragselementnr, parentid, vertragstypnr from vertragselement
where vertragspartnernr=@vertragspartnernr and vertragstypnr*-100=@rootvertragstypnr and parentid=0 and securitylevelnr in (select SecurityLevelNr from dbo.Get_SecurityLevelTab(@mitarbeiternr))
open xy
fetch next from xy into @tmp, @tmpid, @vnr
while @@fetch_status=0 begin
execute dbo.sp_vertragsuebersicht_get_struktur_down @tmp,1, @vnr, @tmpid, @loopcnt
set @loopcnt=@loopcnt+1
fetch next from xy into @tmp, @tmpid, @vnr
end
close xy
deallocate xy
-- Vertragselemente mit Parentid<>0
declare xy cursor for
select Vertragselementnr, parentid, vertragstypnr from vertragselement
where vertragspartnernr=@vertragspartnernr and vertragstypnr*-100=@rootvertragstypnr and parentid<>0 and securitylevelnr in (select SecurityLevelNr from dbo.Get_SecurityLevelTab(@mitarbeiternr))
and vertragselementnr not in (select vertragselementnr from #tmpd)
open xy
fetch next from xy into @tmp, @tmpid, @vnr
while @@fetch_status=0 begin
execute dbo.sp_vertragsuebersicht_get_struktur_down @tmp,1, @vnr, @tmpid, @loopcnt
set @loopcnt=@loopcnt+1
fetch next from xy into @tmp, @tmpid, @vnr
end
close xy
deallocate xy
-- Eindeutige Schlüssel
if @loop>0 begin
--select * from #tmpd
set @keyvalue=(@loop*10000)+100000
set @keyvalue1 = @keyvalue
update #tmpd set vertragselementnr=vertragselementnr+@keyvalue where [vertragselementnrursprung]>0
update #tmpd set parentid=parentid+@keyvalue where [vertragselementnrursprung]>0
select top 1 @keyvalue=vertragselementnr, @key=[key] from #tmpd where [vertragselementnrursprung] is null
update #tmpd set parentid=@keyvalue where parentid not in (select vertragselementnr from #tmpd)
end
update #tmpd set basevertragstypnr=@rootvertragstypnr/-100
set @loop=@loop+1
update #tmpd set parentid=@rootvertragstypnr where parentid=0
insert #tmpe select * from #tmpd
delete from #tmpd
fetch next from xc into @rootvertragstypnr, @rootvertragstyp
end
close xc
deallocate xc
update #tmpe set parentid=0 where parentid=vertragselementnr
update #tmpe set aktiv=1 where aktiv is null
-- update #tmpe set parentid=0 where parentid not in (select vertragselementnr from #tmpe)
update #tmpe set parentid=vertragstypnr where parentid not in (select vertragselementnr from #tmpe)
if @suchstring='' begin
select *, null as Securitylevelnr into #tmpxx from #tmpe order by [key]
update #tmpxx set securitylevelnr = (select securitylevelnr from dbo.vertragselement where dbo.vertragselement.vertragselementnr = #tmpxx.vertragselementnrursprung)
select * from #tmpxx where securitylevelnr in (select SecurityLevelNr from dbo.Get_SecurityLevelTab(@mitarbeiternr)) or [level] is null order by [key]
-- -select * from #tmpe order by [key]
drop table #tmpd
drop table #tmpe
drop table #tmps
drop table #tmpxx
return
end
-------------------------------------------------------------------------------------------
-- Suche mit Searchstring
-------------------------------------------------------------------------------------------
Suche_Mit_Searchstring:
declare @level int
declare @pid int
declare @xx int
declare @xxpid int
declare @cnt int
declare @elementnr int
declare @xxelementnr int
declare @xkey int
declare @xlevel int
declare @xpid int
declare @ykey int
declare xc cursor for
select [key],basevertragstypnr,parentid, level, loopcnt, vertragselementnr from #tmpe where dbo.search_vertragselement([vertragselementnrursprung],@suchstring)=1
open xc
fetch next from xc into @tmp,@vnr,@pid, @level, @loopcnt, @elementnr
while @@fetch_status=0 begin
set @xpid=@pid
insert #tmps select * from #tmpe where [key]=@tmp
while @pid > 0 begin
select @tmp=[key], @pid=parentid from #tmpe where vertragselementnr=@pid
insert #tmps select * from #tmpe where [key]=@tmp
end
declare xx cursor for select [key], parentid, vertragselementnr
from #tmpe where loopcnt = @loopcnt and level>@level
open xx
fetch next from xx into @xx, @xxpid, @xxelementnr
while @@fetch_status = 0 begin
select @cnt=count([key]) from #tmpe where parentid in (select vertragselementnr from #tmpe)
if @cnt > 0 insert #tmps select * from #tmpe where [key]=@xx and @xxelementnr not in (select vertragselementnr from #tmps)
fetch next from xx into @xx, @xxpid, @xxelementnr
end
close xx
deallocate xx
/*
-- insert #tmps select * from #tmpe where (basevertragstypnr=@vnr and [key]<=@tmp and parentid<>@pid) or ([key]=@tmp) and
-- @elementnr not in (select vertragselementnr from #tmps) and parentid > 0
-- order by [key]
insert #tmps select * from #tmpe where loopcnt=@loopcnt
--(basevertragstypnr=@vnr and [key]<=@tmp and parentid<>@pid) or ([key]=@tmp) and
declare xx cursor for select [key], parentid, vertragselementnr
from #tmpe where loopcnt = @loopcnt and level>@level
open xx
fetch next from xx into @xx, @xxpid, @xxelementnr
while @@fetch_status = 0 begin
select @cnt=count([key]) from #tmpe where parentid in (select vertragselementnr from #tmpe)
if @cnt > 0 insert #tmps select * from #tmpe where [key]=@xx and @xxelementnr not in (select vertragselementnr from #tmps)
fetch next from xx into @xx, @xxpid, @xxelementnr
end
close xx
deallocate xx
-- insert #tmps select * from #tmpe where loopcnt = @loopcnt and level > @level and parentid in (select vertragselementnr from #tmps)
fetch next from xc into @tmp,@vnr,@pid, @level, @loopcnt, @elementnr
end
*/
fetch next from xc into @tmp,@vnr,@pid, @level, @loopcnt, @elementnr
end
close xc
deallocate xc
insert #tmps select * from #tmpe where vertragselementnr in (select parentid from #tmps where parentid < 0)
select @cnt=count(*) from #tmps where bezeichnung='Root'
if @cnt<1 begin
insert #tmps (vertragselementnr, bezeichnung, parentid, vertragstypnr, aktiv,[key]) values(0,'Root',null,0,1,999999)
end
--alter table #tmps drop column [key]
--alter table #tmps drop column [LEVEL]
--alter table #tmps drop column [LOOPCNT]
-- select distinct * from #tmps order by [key]
select distinct *, null as Securitylevelnr into #tmpyy from #tmps order by [key]
update #tmpyy set securitylevelnr = (select securitylevelnr from dbo.vertragselement where dbo.vertragselement.vertragselementnr = #tmpyy.vertragselementnrursprung)
select * from #tmpyy where securitylevelnr in (select SecurityLevelNr from dbo.Get_SecurityLevelTab(@mitarbeiternr)) or [level] is null order by [key]
drop table #tmpd
drop table #tmpe
drop table #tmps
drop table #tmpyy
return
GO