USP_DATAFORMTEMPLATE_ADD_PURPOSEANDDESIGNATION
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@INITIALPARENTDESIGNATIONID | uniqueidentifier | IN | |
@PARENTDESIGNATIONID | uniqueidentifier | IN | |
@PURPOSEID | uniqueidentifier | IN | |
@DESIGNATIONLOOKUPID | nvarchar(450) | IN | |
@DESIGNATIONVANITYNAME | nvarchar(512) | IN | |
@DESIGNATIONREPORT1CODEID | uniqueidentifier | IN | |
@DESIGNATIONREPORT2CODEID | uniqueidentifier | IN | |
@VSECATEGORYID | uniqueidentifier | IN | |
@CAMPAIGNID | uniqueidentifier | IN | |
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN | |
@DESIGNATIONUSECODEID | uniqueidentifier | IN | |
@VSESUBCATEGORYID | uniqueidentifier | IN | |
@ISREVENUEDESIGNATION | bit | IN | |
@PURPOSENAME | nvarchar(100) | IN | |
@PURPOSEDESCRIPTION | nvarchar(255) | IN | |
@PURPOSECATEGORYCODEID | uniqueidentifier | IN | |
@PURPOSETYPEID | uniqueidentifier | IN | |
@STEWARDSHIPPACKAGEPROCESSID | uniqueidentifier | IN | |
@ADMINISTRATORID | uniqueidentifier | IN | |
@PURPOSELOOKUPID | nvarchar(100) | IN | |
@PURPOSEDESIGNATIONREPORT1CODEID | uniqueidentifier | IN | |
@PURPOSEDESIGNATIONREPORT2CODEID | uniqueidentifier | IN | |
@SITEID | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@PURPOSEVANITYNAME | nvarchar(512) | IN | |
@TIMEPERIODCODE | tinyint | IN | |
@ISENDOWED | bit | IN | |
@ISFULLYFUNDED | bit | IN | |
@ISINCOMETOPRINCIPAL | bit | IN | |
@INCOMETOPRINCIPALPERCENT | decimal(5, 2) | IN | |
@STATEMENTWORDING | nvarchar(1024) | IN | |
@ENDOWMENTMINAMOUNT | money | IN | |
@ENDOWMENTTARGETDATE | date | IN | |
@ENDOWMENTMINAMOUNTDATEMET | date | IN | |
@PURPOSELOCATION | tinyint | IN | |
@SYSTEMSEGMENTMAPPINGS | xml | IN | |
@ISSYSTEMGENERATEDDESIGNATION | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_PURPOSEANDDESIGNATION (
@ID uniqueidentifier = null output
,@CHANGEAGENTID uniqueidentifier = null
,@INITIALPARENTDESIGNATIONID uniqueidentifier
,@PARENTDESIGNATIONID uniqueidentifier = null
,@PURPOSEID uniqueidentifier = null
,@DESIGNATIONLOOKUPID nvarchar(450) = null
,@DESIGNATIONVANITYNAME nvarchar(512) = null
,@DESIGNATIONREPORT1CODEID uniqueidentifier = null
,@DESIGNATIONREPORT2CODEID uniqueidentifier = null
,@VSECATEGORYID uniqueidentifier = null
,@CAMPAIGNID uniqueidentifier = null
,@STARTDATE datetime = null
,@ENDDATE datetime = null
,@DESIGNATIONUSECODEID uniqueidentifier = null
,@VSESUBCATEGORYID uniqueidentifier = null
,@ISREVENUEDESIGNATION bit = 0
,@PURPOSENAME nvarchar(100) = ''
,@PURPOSEDESCRIPTION nvarchar(255) = ''
,@PURPOSECATEGORYCODEID uniqueidentifier = null
,@PURPOSETYPEID uniqueidentifier = null
,@STEWARDSHIPPACKAGEPROCESSID uniqueidentifier = null
,@ADMINISTRATORID uniqueidentifier = null
,@PURPOSELOOKUPID nvarchar(100) = null
,@PURPOSEDESIGNATIONREPORT1CODEID uniqueidentifier = null
,@PURPOSEDESIGNATIONREPORT2CODEID uniqueidentifier = null
,@SITEID uniqueidentifier = null
,@CURRENTAPPUSERID uniqueidentifier
,@PURPOSEVANITYNAME nvarchar(512) = ''
,@TIMEPERIODCODE tinyint = null
,@ISENDOWED bit = null
,@ISFULLYFUNDED bit = null
,@ISINCOMETOPRINCIPAL bit = null
,@INCOMETOPRINCIPALPERCENT decimal(5, 2) = null
,@STATEMENTWORDING nvarchar(1024) = null
,@ENDOWMENTMINAMOUNT money = 0
,@ENDOWMENTTARGETDATE date = null
,@ENDOWMENTMINAMOUNTDATEMET date = null
,@PURPOSELOCATION tinyint = 0
,@SYSTEMSEGMENTMAPPINGS xml = null
,@ISSYSTEMGENERATEDDESIGNATION bit = 0
)
as
begin
set nocount on;
declare @CURRENTDATE datetime;
declare @ISACTIVE bit = 1;
declare @EXISTINGPURPOSE bit = 0;
if @PURPOSEID is not null
set @EXISTINGPURPOSE = 1;
if @ID is null
set @ID = newid();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
set @ISSYSTEMGENERATEDDESIGNATION = coalesce(@ISSYSTEMGENERATEDDESIGNATION, 0);
set @CURRENTDATE = getdate();
begin try
if @EXISTINGPURPOSE = 0
begin
exec dbo.USP_DATAFORMTEMPLATE_ADD_DESIGNATIONLEVEL @ID = @PURPOSEID output
,@CHANGEAGENTID = @CHANGEAGENTID
,@NAME = @PURPOSENAME
,@DESCRIPTION = @PURPOSEDESCRIPTION
,@DESIGNATIONLEVELCATEGORYCODEID = @PURPOSECATEGORYCODEID
,@DESIGNATIONLEVELTYPEID = @PURPOSETYPEID
,@STEWARDSHIPPACKAGEPROCESSID = @STEWARDSHIPPACKAGEPROCESSID
,@ADMINISTRATORID = @ADMINISTRATORID
,@LOOKUPID = @PURPOSELOOKUPID
,@DESIGNATIONREPORTCODE1ID = @PURPOSEDESIGNATIONREPORT1CODEID
,@DESIGNATIONREPORTCODE2ID = @PURPOSEDESIGNATIONREPORT2CODEID
,@SITEID = @SITEID
,@CURRENTAPPUSERID = @CURRENTAPPUSERID
,@VANITYNAME = @PURPOSEVANITYNAME
,@TIMEPERIODCODE = @TIMEPERIODCODE
,@ISENDOWED = @ISENDOWED
,@ISFULLYFUNDED = @ISFULLYFUNDED
,@ISINCOMETOPRINCIPAL = @ISINCOMETOPRINCIPAL
,@INCOMETOPRINCIPALPERCENT = @INCOMETOPRINCIPALPERCENT
,@STATEMENTWORDING = @STATEMENTWORDING
,@ENDOWMENTMINAMOUNT = @ENDOWMENTMINAMOUNT
,@ENDOWMENTTARGETDATE = @ENDOWMENTTARGETDATE
,@ENDOWMENTMINAMOUNTDATEMET = @ENDOWMENTMINAMOUNTDATEMET
end
declare @DESIGNATIONLEVEL1ID uniqueidentifier;
declare @DESIGNATIONLEVEL2ID uniqueidentifier;
declare @DESIGNATIONLEVEL3ID uniqueidentifier;
declare @DESIGNATIONLEVEL4ID uniqueidentifier;
declare @DESIGNATIONLEVEL5ID uniqueidentifier;
if @PARENTDESIGNATIONID is not null
select @DESIGNATIONLEVEL1ID = DESIGNATIONLEVEL1ID
,@DESIGNATIONLEVEL2ID = DESIGNATIONLEVEL2ID
,@DESIGNATIONLEVEL3ID = DESIGNATIONLEVEL3ID
,@DESIGNATIONLEVEL4ID = DESIGNATIONLEVEL4ID
,@DESIGNATIONLEVEL5ID = DESIGNATIONLEVEL5ID
from dbo.DESIGNATION
where DESIGNATION.ID = @PARENTDESIGNATIONID;
if @DESIGNATIONVANITYNAME is null
set @DESIGNATIONVANITYNAME = '';
if @DESIGNATIONLEVEL1ID is null
set @DESIGNATIONLEVEL1ID = @PURPOSEID
else
if @DESIGNATIONLEVEL2ID is null
set @DESIGNATIONLEVEL2ID = @PURPOSEID
else
if @DESIGNATIONLEVEL3ID is null
set @DESIGNATIONLEVEL3ID = @PURPOSEID
else
if @DESIGNATIONLEVEL4ID is null
set @DESIGNATIONLEVEL4ID = @PURPOSEID
else
if @DESIGNATIONLEVEL5ID is null
set @DESIGNATIONLEVEL5ID = @PURPOSEID
else
raiserror (
'ERR_INVALIDDESIGNATIONLEVEL'
,13
,1
);
if len(@DESIGNATIONVANITYNAME) = 0
raiserror (
'ERR_VANITYNAME_REQUIRED'
,13
,1
);
declare @BASECURRENCYID uniqueidentifier;
select @BASECURRENCYID = BASECURRENCYID
from dbo.DESIGNATIONLEVEL
where ID = @PURPOSEID
if @ISSYSTEMGENERATEDDESIGNATION = 0
begin
insert into dbo.DESIGNATION (
ID
,DESIGNATIONLEVEL1ID
,DESIGNATIONLEVEL2ID
,DESIGNATIONLEVEL3ID
,DESIGNATIONLEVEL4ID
,DESIGNATIONLEVEL5ID
,USERID
,VANITYNAME
,DESIGNATIONREPORT1CODEID
,DESIGNATIONREPORT2CODEID
,VSECATEGORYID
,STARTDATE
,ENDDATE
,DESIGNATIONUSECODEID
,VSESUBCATEGORYID
,ADDEDBYID
,CHANGEDBYID
,DATEADDED
,DATECHANGED
,ISREVENUEDESIGNATION
,BASECURRENCYID
,ISACTIVE
)
values (
@ID
,@DESIGNATIONLEVEL1ID
,@DESIGNATIONLEVEL2ID
,@DESIGNATIONLEVEL3ID
,@DESIGNATIONLEVEL4ID
,@DESIGNATIONLEVEL5ID
,@DESIGNATIONLOOKUPID
,@DESIGNATIONVANITYNAME
,@DESIGNATIONREPORT1CODEID
,@DESIGNATIONREPORT2CODEID
,@VSECATEGORYID
,@STARTDATE
,@ENDDATE
,@DESIGNATIONUSECODEID
,@VSESUBCATEGORYID
,@CHANGEAGENTID
,@CHANGEAGENTID
,@CURRENTDATE
,@CURRENTDATE
,@ISREVENUEDESIGNATION
,@BASECURRENCYID
,@ISACTIVE
);
if @CAMPAIGNID is not null
insert into dbo.DESIGNATIONCAMPAIGN (
ID
,DESIGNATIONID
,CAMPAIGNID
,ADDEDBYID
,CHANGEDBYID
,DATEADDED
,DATECHANGED
)
values (
newid()
,@ID
,@CAMPAIGNID
,@CHANGEAGENTID
,@CHANGEAGENTID
,@CURRENTDATE
,@CURRENTDATE
);
end
else
begin
--changed constraint to allow system generated active designations, so the following should not be necessary
--if exists (
-- select top 1 1
-- from dbo.DESIGNATIONLEVEL
-- where ISACCEPTINGFUNDS = 0
-- and ID in (
-- @DESIGNATIONLEVEL1ID
-- ,@DESIGNATIONLEVEL2ID
-- ,@DESIGNATIONLEVEL3ID
-- ,@DESIGNATIONLEVEL4ID
-- ,@DESIGNATIONLEVEL5ID
-- )
-- )
-- set @ISACTIVE = 0
insert into dbo.DESIGNATION (
ID
,DESIGNATIONLEVEL1ID
,DESIGNATIONLEVEL2ID
,DESIGNATIONLEVEL3ID
,DESIGNATIONLEVEL4ID
,DESIGNATIONLEVEL5ID
,USERID
,VANITYNAME
,DESIGNATIONREPORT1CODEID
,DESIGNATIONREPORT2CODEID
,VSECATEGORYID
,STARTDATE
,ENDDATE
,DESIGNATIONUSECODEID
,VSESUBCATEGORYID
,ADDEDBYID
,CHANGEDBYID
,DATEADDED
,DATECHANGED
,ISREVENUEDESIGNATION
,BASECURRENCYID
,SYSTEMGENERATED
,ISACTIVE
)
values (
@ID
,@DESIGNATIONLEVEL1ID
,@DESIGNATIONLEVEL2ID
,@DESIGNATIONLEVEL3ID
,@DESIGNATIONLEVEL4ID
,@DESIGNATIONLEVEL5ID
,cast(@ID as nvarchar(512))
,'System Generated Designation'
,null
,null
,null
,null
,null
,null
,null
,@CHANGEAGENTID
,@CHANGEAGENTID
,@CURRENTDATE
,@CURRENTDATE
,0
,@BASECURRENCYID
,1
,@ISACTIVE
);
end
declare @DESIGNATIONHASGLMAPPING bit = 0;
declare @PURPOSEHASGLMAPPING bit = 0;
declare @DESIGNATIONTABLEID uniqueidentifier = '2B1E041E-8FA3-4301-A5DB-E6531E9C3CED';
declare @PURPOSETABLEID uniqueidentifier = '4C4A084F-597C-4CDE-BFB6-F1730397A01A';
declare @DEFAULT_GUID uniqueidentifier = '99999999-9999-9999-9999-999999999999';
declare @EMPTYGUID uniqueidentifier = '00000000-0000-0000-0000-000000000000';
declare @FROMTASKGUID uniqueidentifier = '00000000-0000-0000-0000-000000000001';
declare @FROMPURPOSESEARCHGUID uniqueidentifier = '00000000-0000-0000-0000-000000000002';
if @SYSTEMSEGMENTMAPPINGS is not null
begin
if @ISSYSTEMGENERATEDDESIGNATION = 0
and exists (
select top 1 1
from dbo.PDACCOUNTSTRUCTURE STRUCT
where STRUCT.PDACCOUNTSYSTEMID in (
select T1.ID
from dbo.UFN_PDACCOUNTSYSTEM_GETSYSTEMIDSFORUSER(@CURRENTAPPUSERID) T1
)
and (
STRUCT.PDACCOUNTTABLESAVAILABLEFORSEGMENTID = '2B1E041E-8FA3-4301-A5DB-E6531E9C3CED'
or (
(
select count(PDACCOUNTTABLESAVAILABLEFORSEGMENT.TABLEID)
from dbo.PDCOMPOSITESEGMENT
inner join dbo.PDCOMPOSITESEGMENTTABLELIST on PDCOMPOSITESEGMENT.ID = PDCOMPOSITESEGMENTTABLELIST.PDCOMPOSITESEGMENTID
inner join dbo.PDACCOUNTTABLESAVAILABLEFORSEGMENT on PDCOMPOSITESEGMENTTABLELIST.PDACCOUNTTABLESAVAILABLEFORSEGMENTID = PDACCOUNTTABLESAVAILABLEFORSEGMENT.ID
where PDCOMPOSITESEGMENT.ID = STRUCT.PDACCOUNTTABLESAVAILABLEFORSEGMENTID
and PDACCOUNTTABLESAVAILABLEFORSEGMENT.TABLEID in (
'AEBA8FD5-42B6-4D37-93EB-8916BEC1385A'
,'13BD89C4-47B3-48FF-9044-4F07D0D0664D'
)
) = 1
and exists (
select top 1 1
from dbo.PDCOMPOSITESEGMENT
inner join dbo.PDCOMPOSITESEGMENTTABLELIST on PDCOMPOSITESEGMENT.ID = PDCOMPOSITESEGMENTTABLELIST.PDCOMPOSITESEGMENTID
inner join dbo.PDACCOUNTTABLESAVAILABLEFORSEGMENT on PDCOMPOSITESEGMENTTABLELIST.PDACCOUNTTABLESAVAILABLEFORSEGMENTID = PDACCOUNTTABLESAVAILABLEFORSEGMENT.ID
where PDCOMPOSITESEGMENT.ID = STRUCT.PDACCOUNTTABLESAVAILABLEFORSEGMENTID
and PDACCOUNTTABLESAVAILABLEFORSEGMENT.TABLEID = 'AEBA8FD5-42B6-4D37-93EB-8916BEC1385A'
)
)
)
)
set @DESIGNATIONHASGLMAPPING = 1
if @EXISTINGPURPOSE = 0
and exists (
select top 1 1
from dbo.PDACCOUNTSTRUCTURE STRUCT
where STRUCT.PDACCOUNTSYSTEMID in (
select T1.ID
from dbo.UFN_PDACCOUNTSYSTEM_GETSYSTEMIDSFORUSER(@CURRENTAPPUSERID) T1
)
and (
STRUCT.PDACCOUNTTABLESAVAILABLEFORSEGMENTID = '4C4A084F-597C-4CDE-BFB6-F1730397A01A'
or (
(
select count(PDACCOUNTTABLESAVAILABLEFORSEGMENT.TABLEID)
from dbo.PDCOMPOSITESEGMENT
inner join dbo.PDCOMPOSITESEGMENTTABLELIST on PDCOMPOSITESEGMENT.ID = PDCOMPOSITESEGMENTTABLELIST.PDCOMPOSITESEGMENTID
inner join dbo.PDACCOUNTTABLESAVAILABLEFORSEGMENT on PDCOMPOSITESEGMENTTABLELIST.PDACCOUNTTABLESAVAILABLEFORSEGMENTID = PDACCOUNTTABLESAVAILABLEFORSEGMENT.ID
where PDCOMPOSITESEGMENT.ID = STRUCT.PDACCOUNTTABLESAVAILABLEFORSEGMENTID
and PDACCOUNTTABLESAVAILABLEFORSEGMENT.TABLEID in (
'AEBA8FD5-42B6-4D37-93EB-8916BEC1385A'
,'13BD89C4-47B3-48FF-9044-4F07D0D0664D'
)
) = 1
and exists (
select top 1 1
from dbo.PDCOMPOSITESEGMENT
inner join dbo.PDCOMPOSITESEGMENTTABLELIST on PDCOMPOSITESEGMENT.ID = PDCOMPOSITESEGMENTTABLELIST.PDCOMPOSITESEGMENTID
inner join dbo.PDACCOUNTTABLESAVAILABLEFORSEGMENT on PDCOMPOSITESEGMENTTABLELIST.PDACCOUNTTABLESAVAILABLEFORSEGMENTID = PDACCOUNTTABLESAVAILABLEFORSEGMENT.ID
where PDCOMPOSITESEGMENT.ID = STRUCT.PDACCOUNTTABLESAVAILABLEFORSEGMENTID
and PDACCOUNTTABLESAVAILABLEFORSEGMENT.TABLEID = '13BD89C4-47B3-48FF-9044-4F07D0D0664D'
)
)
)
)
set @PURPOSEHASGLMAPPING = 1
end
if @DESIGNATIONHASGLMAPPING = 0
and @PURPOSEHASGLMAPPING = 0
set @SYSTEMSEGMENTMAPPINGS = null
if @SYSTEMSEGMENTMAPPINGS is not null
begin
/* Insert/Update the simple mappings for all GL systems */
merge dbo.PDACCOUNTSEGMENTMAPPING as Target
using (
select case
when T.c.value('(PDACCOUNTTABLESAVAILABLEFORSEGMENTID)[1]', 'uniqueidentifier') = @DESIGNATIONTABLEID
then @ID
else @PURPOSEID
end LONGDESCRIPTIONID
,T.c.value('(PDACCOUNTSTRUCTUREID)[1]', 'uniqueidentifier') as PDACCOUNTSTRUCTUREID
,T.c.value('(PDACCOUNTSEGMENTVALUEID)[1]', 'uniqueidentifier') as PDACCOUNTSEGMENTVALUEID
,@CURRENTDATE as CURRENTDATE
,@CHANGEAGENTID as CHANGEAGENTID
from @SYSTEMSEGMENTMAPPINGS.nodes('/SYSTEMSEGMENTMAPPINGS/ITEM/SEGMENTMAPPINGS/ITEM') T(c)
) as Source
on (Target.LongDescriptionID = Source.LongDescriptionID)
when matched
then
update
set Target.PDACCOUNTSEGMENTVALUEID = Source.PDACCOUNTSEGMENTVALUEID
,Target.CHANGEDBYID = Source.CHANGEAGENTID
,Target.DATECHANGED = Source.CURRENTDATE
when not matched by Target
then
insert (
PDACCOUNTSTRUCTUREID
,LONGDESCRIPTIONID
,PDACCOUNTSEGMENTVALUEID
,ISDEFAULT
,ADDEDBYID
,CHANGEDBYID
,DATEADDED
,DATECHANGED
)
values (
Source.PDACCOUNTSTRUCTUREID
,Source.LONGDESCRIPTIONID
,Source.PDACCOUNTSEGMENTVALUEID
,0
,Source.CHANGEAGENTID
,Source.CHANGEAGENTID
,Source.CURRENTDATE
,Source.CURRENTDATE
);
/* Insert/Update composite segments segment values for all account systems */
declare @TMAPPINGS as table (
ID uniqueidentifier primary key
,ID1 uniqueidentifier
,ID2 uniqueidentifier
,ID3 uniqueidentifier
,ID4 uniqueidentifier
,MAPPINGNAME nvarchar(50)
,PDACCOUNTSEGMENTVALUEID uniqueidentifier
,PDCOMPOSITESEGMENTID uniqueidentifier
,PDACCOUNTSTRUCTUREID uniqueidentifier
);
insert into @TMAPPINGS (
ID
,MAPPINGNAME
,PDCOMPOSITESEGMENTID
,PDACCOUNTSTRUCTUREID
,PDACCOUNTSEGMENTVALUEID
,ID1
,ID2
,ID3
,ID4
)
select newid()
,c.value('(MAPPINGNAME)[1]', 'nvarchar(50)') as MAPPINGNAME
,c.value('(../../PDCOMPOSITESEGMENTID)[1]', 'uniqueidentifier') as PDCOMPOSITESEGMENTID
,c.value('../../PDACCOUNTSTRUCTUREID[1]', 'uniqueidentifier') as PDACCOUNTSTRUCTUREID
,c.value('(PDACCOUNTSEGMENTVALUEID)[1]', 'uniqueidentifier') as PDACCOUNTSEGMENTVALUEID
,case COALESCE(T.c.value('(../../TABLE1ID)[1]', 'uniqueidentifier'), @EMPTYGUID)
when @EMPTYGUID
then null
when @DESIGNATIONTABLEID
then @ID
when @PURPOSETABLEID
then @PURPOSEID
else case
when T.c.value('(../../TABLE1SHOWSIMPLE)[1]', 'bit') = 1
then T.c.value('(TABLE1SIMPLEVALUE)[1]', 'uniqueidentifier')
else T.c.value('(TABLE1SEARCHVALUE)[1]', 'uniqueidentifier')
end
end ID1
,case COALESCE(T.c.value('(../../TABLE2ID)[1]', 'uniqueidentifier'), @EMPTYGUID)
when @EMPTYGUID
then null
when @DESIGNATIONTABLEID
then @ID
when @PURPOSETABLEID
then @PURPOSEID
else case
when T.c.value('(../../TABLE2SHOWSIMPLE)[1]', 'bit') = 1
then T.c.value('(TABLE2SIMPLEVALUE)[1]', 'uniqueidentifier')
else T.c.value('(TABLE2SEARCHVALUE)[1]', 'uniqueidentifier')
end
end ID2
,case COALESCE(T.c.value('(../../TABLE3ID)[1]', 'uniqueidentifier'), @EMPTYGUID)
when @EMPTYGUID
then null
when @DESIGNATIONTABLEID
then @ID
when @PURPOSETABLEID
then @PURPOSEID
else case
when T.c.value('(../../TABLE3SHOWSIMPLE)[1]', 'bit') = 1
then T.c.value('(TABLE3SIMPLEVALUE)[1]', 'uniqueidentifier')
else T.c.value('(TABLE3SEARCHVALUE)[1]', 'uniqueidentifier')
end
end ID3
,case COALESCE(T.c.value('(../../TABLE4ID)[1]', 'uniqueidentifier'), @EMPTYGUID)
when @EMPTYGUID
then null
when @DESIGNATIONTABLEID
then @ID
when @PURPOSETABLEID
then @PURPOSEID
else case
when T.c.value('(../../TABLE4SHOWSIMPLE)[1]', 'bit') = 1
then T.c.value('(TABLE4SIMPLEVALUE)[1]', 'uniqueidentifier')
else T.c.value('(TABLE4SEARCHVALUE)[1]', 'uniqueidentifier')
end
end ID4
from @SYSTEMSEGMENTMAPPINGS.nodes('/SYSTEMSEGMENTMAPPINGS/ITEM/COMPOSITESEGMENTMAPPINGS/ITEM/COMPOSITESEGMENTVALUES/ITEM') T(c)
merge dbo.PDCOMPOSITESEGMENTMAPPING as target
using (
select ID
,MAPPINGNAME
,PDCOMPOSITESEGMENTID
,PDACCOUNTSTRUCTUREID
,PDACCOUNTSEGMENTVALUEID
,ID1
,ID2
,ID3
,ID4
from @TMAPPINGS
) as source
on (target.ID = source.ID)
when matched
then
update
set target.[NAME] = source.MAPPINGNAME
,target.PDACCOUNTSEGMENTVALUEID = source.PDACCOUNTSEGMENTVALUEID
,target.CHANGEDBYID = @CHANGEAGENTID
,target.DATECHANGED = @CURRENTDATE
,target.COMPOSITESEGMENTKEY = ''
when not matched by target
then
insert (
ID
,[NAME]
,PDACCOUNTSEGMENTVALUEID
,PDCOMPOSITESEGMENTID
,PDACCOUNTSTRUCTUREID
,ADDEDBYID
,CHANGEDBYID
,DATEADDED
,DATECHANGED
)
values (
source.ID
,source.MAPPINGNAME
,source.PDACCOUNTSEGMENTVALUEID
,source.PDCOMPOSITESEGMENTID
,source.PDACCOUNTSTRUCTUREID
,@CHANGEAGENTID
,@CHANGEAGENTID
,@CURRENTDATE
,@CURRENTDATE
);
/* we must delete and re-add all entries because it attempts to validate uniqueness, and if we didn't delete them we would have a timing issue */
delete
from dbo.PDCOMPOSITESEGMENTMAPPINGENTRY
from dbo.PDCOMPOSITESEGMENTMAPPINGENTRY ENTRIES
inner join @TMAPPINGS NEWROWS on ENTRIES.PDCOMPOSITESEGMENTMAPPINGID = NEWROWS.ID
/* Insert/Update composite segments other table values for all account systems */
merge dbo.PDCOMPOSITESEGMENTMAPPINGENTRY as target
using (
select distinct MAPPINGID
,CSTL.ID as TABLELISTID
,LONGDESCRIPTIONID
,case
when LONGDESCRIPTIONID = @DEFAULT_GUID
then 1
else 0
end as ISDEFAULT
from (
select ID as MAPPINGID
,CAST(SUBSTRING(COL, 3, 1) as int) as SEQUENCE
,LDID as LONGDESCRIPTIONID
,PDCOMPOSITESEGMENTID
from (
select ID
,ID1
,ID2
,ID3
,ID4
,PDCOMPOSITESEGMENTID
from @TMAPPINGS
) p
UNPIVOT(LDID for COL in (
ID1
,ID2
,ID3
,ID4
)) as unpvt
) as unpvt
inner join dbo.PDCOMPOSITESEGMENTTABLELIST as CSTL on unpvt.SEQUENCE = CSTL.SEQUENCE
and CSTL.PDCOMPOSITESEGMENTID = unpvt.PDCOMPOSITESEGMENTID
) as source
on (
target.PDCOMPOSITESEGMENTMAPPINGID = source.MAPPINGID
and target.PDCOMPOSITESEGMENTTABLELISTID = source.TABLELISTID
)
when matched
and not source.LONGDESCRIPTIONID is null
then
update
set target.LONGDESCRIPTIONID = source.LONGDESCRIPTIONID
,target.ISDEFAULT = source.ISDEFAULT
,target.CHANGEDBYID = @CHANGEAGENTID
,target.DATECHANGED = @CURRENTDATE
when not matched by target
and not source.LONGDESCRIPTIONID is null
then
insert (
ID
,PDCOMPOSITESEGMENTMAPPINGID
,PDCOMPOSITESEGMENTTABLELISTID
,LONGDESCRIPTIONID
,ISDEFAULT
,ADDEDBYID
,CHANGEDBYID
,DATEADDED
,DATECHANGED
)
values (
newid()
,source.MAPPINGID
,source.TABLELISTID
,source.LONGDESCRIPTIONID
,source.ISDEFAULT
,@CHANGEAGENTID
,@CHANGEAGENTID
,@CURRENTDATE
,@CURRENTDATE
);
end
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
if @INITIALPARENTDESIGNATIONID=@FROMPURPOSESEARCHGUID
set @ID = @PURPOSEID;
return 0
end