USP_ACCOUNTINGELEMENTRELATIONSHIPS_SAVE
Saves accounting element relationships.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ACCOUNTINGELEMENTRELATIONSHIPID | uniqueidentifier | IN | |
@BASEELEMENTSTRUCTUREID | uniqueidentifier | IN | |
@RESTRICTION | tinyint | IN | |
@ACCOUNTSTRUCTURE | xml | IN | |
@ACCOUNTQUERYID | uniqueidentifier | IN | |
@SELECTEDACCOUNTS | xml | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_ACCOUNTINGELEMENTRELATIONSHIPS_SAVE
(
@ACCOUNTINGELEMENTRELATIONSHIPID uniqueidentifier,
@BASEELEMENTSTRUCTUREID uniqueidentifier,
@RESTRICTION tinyint,
@ACCOUNTSTRUCTURE xml,
@ACCOUNTQUERYID uniqueidentifier,
@SELECTEDACCOUNTS xml,
@CHANGEAGENTID uniqueidentifier,
@CURRENTDATE datetime
)
with execute as owner
as
begin
declare @BASEELEMENTSELECTEDELEMENTS xml
declare @BASEELEMENTCOLUMN tinyint
declare @BASEELEMENTTYPECODE tinyint
declare @BASEELEMENTQUERYID uniqueidentifier
select @BASEELEMENTSELECTEDELEMENTS = ACCOUNTSTRUCTUREXML.[ACTSTR].query('(SELECTEDELEMENTS)'),
@BASEELEMENTCOLUMN = ACCOUNTSTRUCTUREXML.[ACTSTR].value('(SEGMENTCOLUMN)[1]', 'tinyint'),
@BASEELEMENTTYPECODE = ACCOUNTSTRUCTUREXML.[ACTSTR].value('(ELEMENTTYPECODE)[1]', 'tinyint'),
@BASEELEMENTQUERYID = ACCOUNTSTRUCTUREXML.[ACTSTR].value('(QUERYID)[1]', 'uniqueidentifier')
from @ACCOUNTSTRUCTURE.nodes('ACCOUNTSTRUCTURE/ITEM') as ACCOUNTSTRUCTUREXML([ACTSTR])
where ACCOUNTSTRUCTUREXML.[ACTSTR].value('(ID)[1]', 'uniqueidentifier') = @BASEELEMENTSTRUCTUREID
declare @SEQUENCE int, @MAXSEQUENCE int, @USEACCOUNTS bit;
select @SEQUENCE = min(SEGMENTCOLUMN), @MAXSEQUENCE = max(SEGMENTCOLUMN) from dbo.PDACCOUNTSTRUCTURE
delete from dbo.ACCOUNTINGELEMENTRELATIONSHIPQUERYPARAMETER where ACCOUNTINGELEMENTRELATIONSHIPID = @ACCOUNTINGELEMENTRELATIONSHIPID
delete from dbo.ACCOUNTINGELEMENTRELATIONSHIPELEMENTPARAMETER where ACCOUNTINGELEMENTRELATIONSHIPID = @ACCOUNTINGELEMENTRELATIONSHIPID
delete from dbo.ACCOUNTINGELEMENTRELATIONSHIPDETAIL where ACCOUNTINGELEMENTRELATIONSHIPID = @ACCOUNTINGELEMENTRELATIONSHIPID
create table #BASEELEMENTS (DATAELEMENTID uniqueidentifier)
insert into #BASEELEMENTS
select distinct T1.c.value('(ID)[1]', 'uniqueidentifier') as BASEELEMENTID
from @BASEELEMENTSELECTEDELEMENTS.nodes('SELECTEDELEMENTS/ITEM') T1(c)
insert into dbo.ACCOUNTINGELEMENTRELATIONSHIPELEMENTPARAMETER(ACCOUNTINGELEMENTRELATIONSHIPID, DATAELEMENTID, PDACCOUNTSTRUCTUREID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select distinct @ACCOUNTINGELEMENTRELATIONSHIPID, DATAELEMENTID, @BASEELEMENTSTRUCTUREID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from #BASEELEMENTS
if @BASEELEMENTQUERYID is not null
begin
if (select count(distinct ID) from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@BASEELEMENTQUERYID)) = 0
begin
raiserror('ERR_BASEELEMENTSELECTEDELEMENTS_QUERY_VALUE_REQUIRED',13,1);
return 1;
end
insert into #BASEELEMENTS(DATAELEMENTID)
select distinct QUERY.ID
from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@BASEELEMENTQUERYID) QUERY
inner join dbo.PDACCOUNTSEGMENTVALUE PDASV on QUERY.ID = PDASV.ID
where PDASV.PDACCOUNTSTRUCTUREID = @BASEELEMENTSTRUCTUREID
insert into dbo.ACCOUNTINGELEMENTRELATIONSHIPQUERYPARAMETER(ACCOUNTINGELEMENTRELATIONSHIPID, QUERYID, PDACCOUNTSTRUCTUREID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values(@ACCOUNTINGELEMENTRELATIONSHIPID, @BASEELEMENTQUERYID, @BASEELEMENTSTRUCTUREID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
end
if (select count(*) from #BASEELEMENTS) = 0
begin
raiserror('ERR_BASEELEMENTSELECTEDELEMENTS_REQUIRED',13,1);
return 1;
end
if @BASEELEMENTTYPECODE = 1
set @USEACCOUNTS = 0
else
begin
create table #ACCOUNTS (ACCOUNTID uniqueidentifier)
insert into #ACCOUNTS (ACCOUNTID)
select distinct T2.c.value('(ID)[1]', 'uniqueidentifier')
from @SELECTEDACCOUNTS.nodes('SELECTEDELEMENTS/ITEM') T2(c)
insert into dbo.ACCOUNTINGELEMENTRELATIONSHIPELEMENTPARAMETER(ACCOUNTINGELEMENTRELATIONSHIPID, ACCOUNTID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select distinct @ACCOUNTINGELEMENTRELATIONSHIPID, ACCOUNTID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from #ACCOUNTS
if @ACCOUNTQUERYID is not null
begin
if (select count(distinct ID) from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@ACCOUNTQUERYID)) = 0
begin
raiserror('ERR_BASEELEMENTSELECTEDELEMENTS_QUERY_VALUE_REQUIRED',13,1);
return 1;
end
insert into #ACCOUNTS (ACCOUNTID)
select distinct ID
from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@ACCOUNTQUERYID)
insert into dbo.ACCOUNTINGELEMENTRELATIONSHIPQUERYPARAMETER(ACCOUNTINGELEMENTRELATIONSHIPID, QUERYID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values(@ACCOUNTINGELEMENTRELATIONSHIPID, @ACCOUNTQUERYID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
end
if (select count(1) from #ACCOUNTS) > 0
begin
set @USEACCOUNTS = 1
insert into dbo.ACCOUNTINGELEMENTRELATIONSHIPDETAIL(ACCOUNTINGELEMENTRELATIONSHIPID, BASEELEMENTID, RESTRICTIONCODE, ACCOUNTID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,
DATAELEMENT1ID, DATAELEMENT2ID, DATAELEMENT3ID, DATAELEMENT4ID, DATAELEMENT5ID, DATAELEMENT6ID, DATAELEMENT7ID, DATAELEMENT8ID, DATAELEMENT9ID, DATAELEMENT10ID,
DATAELEMENT11ID, DATAELEMENT12ID, DATAELEMENT13ID, DATAELEMENT14ID, DATAELEMENT15ID, DATAELEMENT16ID, DATAELEMENT17ID, DATAELEMENT18ID, DATAELEMENT19ID, DATAELEMENT20ID,
DATAELEMENT21ID, DATAELEMENT22ID, DATAELEMENT23ID, DATAELEMENT24ID, DATAELEMENT25ID, DATAELEMENT26ID, DATAELEMENT27ID, DATAELEMENT28ID, DATAELEMENT29ID, DATAELEMENT30ID)
select distinct @ACCOUNTINGELEMENTRELATIONSHIPID,
BASEELEMENTID,
@RESTRICTION,
GLACCOUNT.ID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
case @BASEELEMENTCOLUMN when 1 then BASEELEMENTID else DATAELEMENT1ID end, case @BASEELEMENTCOLUMN when 2 then BASEELEMENTID else DATAELEMENT2ID end, case @BASEELEMENTCOLUMN when 3 then BASEELEMENTID else DATAELEMENT3ID end, case @BASEELEMENTCOLUMN when 4 then BASEELEMENTID else DATAELEMENT4ID end, case @BASEELEMENTCOLUMN when 5 then BASEELEMENTID else DATAELEMENT5ID end,
case @BASEELEMENTCOLUMN when 6 then BASEELEMENTID else DATAELEMENT6ID end, case @BASEELEMENTCOLUMN when 7 then BASEELEMENTID else DATAELEMENT7ID end, case @BASEELEMENTCOLUMN when 8 then BASEELEMENTID else DATAELEMENT8ID end, case @BASEELEMENTCOLUMN when 9 then BASEELEMENTID else DATAELEMENT9ID end, case @BASEELEMENTCOLUMN when 10 then BASEELEMENTID else DATAELEMENT10ID end,
case @BASEELEMENTCOLUMN when 11 then BASEELEMENTID else DATAELEMENT11ID end, case @BASEELEMENTCOLUMN when 12 then BASEELEMENTID else DATAELEMENT12ID end, case @BASEELEMENTCOLUMN when 13 then BASEELEMENTID else DATAELEMENT13ID end, case @BASEELEMENTCOLUMN when 14 then BASEELEMENTID else DATAELEMENT14ID end, case @BASEELEMENTCOLUMN when 15 then BASEELEMENTID else DATAELEMENT15ID end,
case @BASEELEMENTCOLUMN when 16 then BASEELEMENTID else DATAELEMENT16ID end, case @BASEELEMENTCOLUMN when 17 then BASEELEMENTID else DATAELEMENT17ID end, case @BASEELEMENTCOLUMN when 18 then BASEELEMENTID else DATAELEMENT18ID end, case @BASEELEMENTCOLUMN when 19 then BASEELEMENTID else DATAELEMENT19ID end, case @BASEELEMENTCOLUMN when 20 then BASEELEMENTID else DATAELEMENT20ID end,
case @BASEELEMENTCOLUMN when 21 then BASEELEMENTID else DATAELEMENT21ID end, case @BASEELEMENTCOLUMN when 22 then BASEELEMENTID else DATAELEMENT22ID end, case @BASEELEMENTCOLUMN when 23 then BASEELEMENTID else DATAELEMENT23ID end, case @BASEELEMENTCOLUMN when 24 then BASEELEMENTID else DATAELEMENT24ID end, case @BASEELEMENTCOLUMN when 25 then BASEELEMENTID else DATAELEMENT25ID end,
case @BASEELEMENTCOLUMN when 26 then BASEELEMENTID else DATAELEMENT26ID end, case @BASEELEMENTCOLUMN when 27 then BASEELEMENTID else DATAELEMENT27ID end, case @BASEELEMENTCOLUMN when 28 then BASEELEMENTID else DATAELEMENT28ID end, case @BASEELEMENTCOLUMN when 29 then BASEELEMENTID else DATAELEMENT29ID end, case @BASEELEMENTCOLUMN when 30 then BASEELEMENTID else DATAELEMENT30ID end
from
(select distinct DATAELEMENTID as BASEELEMENTID
from #BASEELEMENTS) as a
cross join
(select distinct ACCOUNTID
from #ACCOUNTS) as b
inner join dbo.GLACCOUNT on b.ACCOUNTID = GLACCOUNT.ID
end
else
set @USEACCOUNTS = 0
drop table #ACCOUNTS
end
create table #DATAELEMENTS (DATAELEMENTID uniqueidentifier)
while @SEQUENCE <= @MAXSEQUENCE
begin
if @SEQUENCE <> @BASEELEMENTCOLUMN
begin
declare @SQL nvarchar(max)
declare @SELECTEDELEMENTS xml
declare @ELEMENTTYPECODE tinyint
declare @QUERYID uniqueidentifier
declare @STRUCTUREID uniqueidentifier
select @SELECTEDELEMENTS = ACCOUNTSTRUCTUREXML.[ACTSTR].query('(SELECTEDELEMENTS)'),
@ELEMENTTYPECODE = ACCOUNTSTRUCTUREXML.[ACTSTR].value('(ELEMENTTYPECODE)[1]', 'tinyint'),
@QUERYID = ACCOUNTSTRUCTUREXML.[ACTSTR].value('(QUERYID)[1]', 'uniqueidentifier'),
@STRUCTUREID = ACCOUNTSTRUCTUREXML.[ACTSTR].value('(ID)[1]', 'uniqueidentifier')
from @ACCOUNTSTRUCTURE.nodes('ACCOUNTSTRUCTURE/ITEM') as ACCOUNTSTRUCTUREXML([ACTSTR])
where ACCOUNTSTRUCTUREXML.[ACTSTR].value('(SEGMENTCOLUMN)[1]', 'tinyint') = @SEQUENCE
insert into #DATAELEMENTS(DATAELEMENTID)
select distinct T2.c.value('(ID)[1]', 'uniqueidentifier')
from @SELECTEDELEMENTS.nodes('SELECTEDELEMENTS/ITEM') T2(c)
insert into dbo.ACCOUNTINGELEMENTRELATIONSHIPELEMENTPARAMETER(ACCOUNTINGELEMENTRELATIONSHIPID, DATAELEMENTID, PDACCOUNTSTRUCTUREID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select distinct @ACCOUNTINGELEMENTRELATIONSHIPID, DATAELEMENTID, @STRUCTUREID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from #DATAELEMENTS
if @QUERYID is not null
begin
if (select count(distinct ID) from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@QUERYID)) = 0
begin
raiserror('ERR_BASEELEMENTSELECTEDELEMENTS_QUERY_VALUE_REQUIRED',13,1);
return 1;
end
insert into #DATAELEMENTS(DATAELEMENTID)
select distinct QUERY.ID
from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@QUERYID) QUERY
inner join dbo.PDACCOUNTSEGMENTVALUE PDASV on QUERY.ID = PDASV.ID
where PDASV.PDACCOUNTSTRUCTUREID = @STRUCTUREID
insert into dbo.ACCOUNTINGELEMENTRELATIONSHIPQUERYPARAMETER(ACCOUNTINGELEMENTRELATIONSHIPID, QUERYID, PDACCOUNTSTRUCTUREID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values(@ACCOUNTINGELEMENTRELATIONSHIPID, @QUERYID, @STRUCTUREID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
end
if (@USEACCOUNTS = 0 or @ELEMENTTYPECODE = 2) and ((select count(*) from #DATAELEMENTS) > 0)
begin
set @SQL = N'insert into dbo.ACCOUNTINGELEMENTRELATIONSHIPDETAIL(ACCOUNTINGELEMENTRELATIONSHIPID, BASEELEMENTID, RESTRICTIONCODE, DATAELEMENT' + cast(@BASEELEMENTCOLUMN as nvarchar(2)) + 'ID, DATAELEMENT' + cast(@SEQUENCE as nvarchar(2)) + 'ID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select distinct @ACCOUNTINGELEMENTRELATIONSHIPID,
BASEELEMENTID,
@RESTRICTION,
BASEELEMENTID,
SELECTEDELEMENTID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
(select distinct DATAELEMENTID as BASEELEMENTID
from #BASEELEMENTS) as a
cross join
(select distinct DATAELEMENTID as SELECTEDELEMENTID
from #DATAELEMENTS) as b';
exec sp_executesql @SQL, N'@ACCOUNTINGELEMENTRELATIONSHIPID uniqueidentifier, @RESTRICTION tinyint, @CHANGEAGENTID uniqueidentifier, @CURRENTDATE datetime',
@ACCOUNTINGELEMENTRELATIONSHIPID = @ACCOUNTINGELEMENTRELATIONSHIPID, @RESTRICTION = @RESTRICTION, @CHANGEAGENTID = @CHANGEAGENTID, @CURRENTDATE = @CURRENTDATE;
end
delete from #DATAELEMENTS
end
set @SEQUENCE = @SEQUENCE + 1
end
drop table #DATAELEMENTS
drop table #BASEELEMENTS
if (select count(*) from dbo.ACCOUNTINGELEMENTRELATIONSHIPDETAIL where ACCOUNTINGELEMENTRELATIONSHIPID = @ACCOUNTINGELEMENTRELATIONSHIPID) = 0
begin
raiserror('ERR_SELECTEDELEMENTS_REQUIRED',13,1);
return 1;
end
end