USP_MERGETASK_CONSTITUENTEDUCATION
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SOURCEID | uniqueidentifier | IN | |
@TARGETID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@PRIMARYCRITERIA | int | IN | |
@DELETEDUPES | bit | IN | |
@MERGEEDUCATIONALINVOLVEMENT | bit | IN | |
@DELETEEDUCATIONALINVOLVEMENTDUPES | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_MERGETASK_CONSTITUENTEDUCATION
(
@SOURCEID uniqueidentifier,
@TARGETID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@PRIMARYCRITERIA int = 0,
@DELETEDUPES bit = 0,
@MERGEEDUCATIONALINVOLVEMENT bit = 0,
@DELETEEDUCATIONALINVOLVEMENTDUPES bit = 0
)
as
set nocount on;
declare @CHANGEDATE datetime = getdate();
--Store the primary education record id's for later access
declare @SOURCEPRIMARYID as uniqueidentifier;
select @SOURCEPRIMARYID = ID
from dbo.EDUCATIONALHISTORY
where CONSTITUENTID = @SOURCEID and ISPRIMARYRECORD = 1;
declare @TARGETPRIMARYID as uniqueidentifier;
select @TARGETPRIMARYID = ID
from dbo.EDUCATIONALHISTORY
where CONSTITUENTID = @TARGETID and ISPRIMARYRECORD = 1;
--Wipe the primary record indicators before the merge
--to keep from violating any constraints
update dbo.EDUCATIONALHISTORY
set ISPRIMARYRECORD = 0, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
where CONSTITUENTID = @SOURCEID or CONSTITUENTID = @TARGETID;
--move all of the source constit's education records over to
--the target constit
if @DELETEDUPES = 0
update dbo.EDUCATIONALHISTORY
set CONSTITUENTID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
where CONSTITUENTID = @SOURCEID
else
--Omit duplicate educational records if the @DELETEDUPES
--flag is set
update dbo.EDUCATIONALHISTORY
set CONSTITUENTID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
where CONSTITUENTID = @SOURCEID
and ID not in
(
select a.ID
from dbo.EDUCATIONALHISTORY a
inner join dbo.EDUCATIONALHISTORY b
on a.EDUCATIONALINSTITUTIONID = b.EDUCATIONALINSTITUTIONID
--and (a.EDUCATIONALHISTORYTYPECODEID = b.EDUCATIONALHISTORYTYPECODEID or (a.EDUCATIONALHISTORYTYPECODEID is null and b.EDUCATIONALHISTORYTYPECODEID is null))
and (a.CONSTITUENCYSTATUS = b.CONSTITUENCYSTATUS or (a.CONSTITUENCYSTATUS is null and b.CONSTITUENCYSTATUS is null))
--and (a.EDUCATIONALDEGREECODEID = b.EDUCATIONALDEGREECODEID or (a.EDUCATIONALDEGREECODEID is null and b.EDUCATIONALDEGREECODEID is null))
and ( a.ACADEMICCATALOGPROGRAMID = b.ACADEMICCATALOGPROGRAMID or (a.ACADEMICCATALOGPROGRAMID is null and b.ACADEMICCATALOGPROGRAMID is null) )
and ( a.EDUCATIONALPROGRAMCODEID = b.EDUCATIONALPROGRAMCODEID or (a.EDUCATIONALPROGRAMCODEID is null and b.EDUCATIONALPROGRAMCODEID is null) )
and ( a.ACADEMICCATALOGDEGREEID = b.ACADEMICCATALOGDEGREEID or (a.ACADEMICCATALOGDEGREEID is null and b.ACADEMICCATALOGDEGREEID is null) )
and ( a.EDUCATIONALDEGREECODEID = b.EDUCATIONALDEGREECODEID or (a.EDUCATIONALDEGREECODEID is null and b.EDUCATIONALDEGREECODEID is null) )
and a.STARTDATE = b.STARTDATE
and a.ENDDATE = b.ENDDATE
and a.CLASSOF = b.CLASSOF
where a.CONSTITUENTID = @SOURCEID
and b.CONSTITUENTID = @TARGETID
)
--select the primary educational record
if @PRIMARYCRITERIA = 0 and @TARGETPRIMARYID is not null
begin
-- The target's original primary education record
-- is assured of being associated with the target
-- so simply reset it's primary indicator.
update dbo.EDUCATIONALHISTORY
set ISPRIMARYRECORD = 1, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
where ID = @TARGETPRIMARYID
end
else
begin
-- The target had no primary education record,
-- or we are preserving the source's primary
-- education record
if @SOURCEPRIMARYID is null
begin
-- If the source had no primary education record then
-- attempt to reset the target's primary record indicator
update dbo.EDUCATIONALHISTORY
set ISPRIMARYRECORD = 1, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
where ID = @TARGETPRIMARYID
end
else
begin
-- Otherwise, the source had a primary educational record
if @DELETEDUPES = 0
begin
-- If we are not deleting duplicate education info
-- then we can be assured the source's primary
-- education info is associated with the target, so
-- simply reset its primary indicator
update dbo.EDUCATIONALHISTORY
set ISPRIMARYRECORD = 1, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
where ID = @SOURCEPRIMARYID
end
else
begin
declare @TEMPID uniqueidentifier;
select @TEMPID = CONSTITUENTID
from dbo.EDUCATIONALHISTORY
where ID = @SOURCEPRIMARYID;
if @TEMPID = @TARGETID
begin
-- If the source primary education is now associated
-- with the target, then reset its primary indicator
update dbo.EDUCATIONALHISTORY
set ISPRIMARYRECORD = 1, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
where ID = @SOURCEPRIMARYID;
end
else
begin
-- Otherwise, the source's primary education was
-- not associated with the target b/c it is a
-- duplicate of one of the target's education records.
-- In this scenario, the target's education record that
-- is a duplicate of the source's primary education
-- should be set as the target's primary education.
set @TEMPID = null;
select @TEMPID = b.ID
from dbo.EDUCATIONALHISTORY a
inner join dbo.EDUCATIONALHISTORY b
on a.EDUCATIONALINSTITUTIONID = b.EDUCATIONALINSTITUTIONID
--and (a.EDUCATIONALHISTORYTYPECODEID = b.EDUCATIONALHISTORYTYPECODEID or (a.EDUCATIONALHISTORYTYPECODEID is null and b.EDUCATIONALHISTORYTYPECODEID is null))
and (a.CONSTITUENCYSTATUS = b.CONSTITUENCYSTATUS or (a.CONSTITUENCYSTATUS is null and b.CONSTITUENCYSTATUS is null))
--and (a.EDUCATIONALDEGREECODEID = b.EDUCATIONALDEGREECODEID or (a.EDUCATIONALDEGREECODEID is null and b.EDUCATIONALDEGREECODEID is null))
and ( a.ACADEMICCATALOGPROGRAMID = b.ACADEMICCATALOGPROGRAMID or (a.ACADEMICCATALOGPROGRAMID is null and b.ACADEMICCATALOGPROGRAMID is null) )
and ( a.EDUCATIONALPROGRAMCODEID = b.EDUCATIONALPROGRAMCODEID or (a.EDUCATIONALPROGRAMCODEID is null and b.EDUCATIONALPROGRAMCODEID is null) )
and ( a.ACADEMICCATALOGDEGREEID = b.ACADEMICCATALOGDEGREEID or (a.ACADEMICCATALOGDEGREEID is null and b.ACADEMICCATALOGDEGREEID is null) )
and ( a.EDUCATIONALDEGREECODEID = b.EDUCATIONALDEGREECODEID or (a.EDUCATIONALDEGREECODEID is null and b.EDUCATIONALDEGREECODEID is null) )
and a.STARTDATE = b.STARTDATE
and a.ENDDATE = b.ENDDATE
and a.CLASSOF = b.CLASSOF
where a.ID = @SOURCEPRIMARYID
and b.CONSTITUENTID = @TARGETID;
if @TEMPID is not null
begin
update dbo.EDUCATIONALHISTORY
set ISPRIMARYRECORD = 1, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
where ID = @TEMPID;
end
else
begin
-- If no match was found then reset the primary
-- indicator on the target's original primary
-- record
update dbo.EDUCATIONALHISTORY
set ISPRIMARYRECORD = 1, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
where ID = @TARGETPRIMARYID
end
end
end
end
end
if @MERGEEDUCATIONALINVOLVEMENT = 1
begin
if @DELETEEDUCATIONALINVOLVEMENTDUPES = 0
begin
update dbo.EDUCATIONALINVOLVEMENT
set CONSTITUENTID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
where CONSTITUENTID = @SOURCEID
end
else
begin
update dbo.EDUCATIONALINVOLVEMENT
set CONSTITUENTID = @TARGETID, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CHANGEDATE
where CONSTITUENTID = @SOURCEID
and ID not in
(
select EDUCATIONALINVOLVEMENTSOURCE.ID
from dbo.EDUCATIONALINVOLVEMENT EDUCATIONALINVOLVEMENTSOURCE
inner join dbo.EDUCATIONALINVOLVEMENT EDUCATIONALINVOLVEMENTTARGET
on EDUCATIONALINVOLVEMENTSOURCE.EDUCATIONALINVOLVEMENTTYPECODEID = EDUCATIONALINVOLVEMENTTARGET.EDUCATIONALINVOLVEMENTTYPECODEID
and EDUCATIONALINVOLVEMENTSOURCE.EDUCATIONALINVOLVEMENTNAMEID = EDUCATIONALINVOLVEMENTTARGET.EDUCATIONALINVOLVEMENTNAMEID
and EDUCATIONALINVOLVEMENTSOURCE.DATEFROM = EDUCATIONALINVOLVEMENTTARGET.DATEFROM
and EDUCATIONALINVOLVEMENTSOURCE.DATETO = EDUCATIONALINVOLVEMENTTARGET.DATETO
and (EDUCATIONALINVOLVEMENTSOURCE.EDUCATIONALINSTITUTIONID = EDUCATIONALINVOLVEMENTTARGET.EDUCATIONALINSTITUTIONID
or (EDUCATIONALINVOLVEMENTSOURCE.EDUCATIONALINSTITUTIONID is null and EDUCATIONALINVOLVEMENTTARGET.EDUCATIONALINSTITUTIONID is null))
and EDUCATIONALINVOLVEMENTSOURCE.COMMENT = EDUCATIONALINVOLVEMENTTARGET.COMMENT
and (EDUCATIONALINVOLVEMENTSOURCE.EDUCATIONALINVOLVEMENTAWARDCODEID = EDUCATIONALINVOLVEMENTTARGET.EDUCATIONALINVOLVEMENTAWARDCODEID
or (EDUCATIONALINVOLVEMENTSOURCE.EDUCATIONALINVOLVEMENTAWARDCODEID is null and EDUCATIONALINVOLVEMENTTARGET.EDUCATIONALINVOLVEMENTAWARDCODEID is null))
where EDUCATIONALINVOLVEMENTSOURCE.CONSTITUENTID = @SOURCEID
and EDUCATIONALINVOLVEMENTTARGET.CONSTITUENTID = @TARGETID
)
end
end
return 0;