USP_MATCHFINDER_UPDATECONSTITUENT

Synchronizes a constituent record with data from the MatchFinder Online service.

Parameters

Parameter Parameter Type Mode Description
@APPUSERID uniqueidentifier IN
@CONSTITUENTID uniqueidentifier IN
@UPDATEORGNAME bit IN
@NEWORGNAME nvarchar(100) IN
@UPDATEADDRESS bit IN
@NEWADDRESSBLOCK nvarchar(150) IN
@NEWCITY nvarchar(50) IN
@NEWSTATEID uniqueidentifier IN
@NEWCOUNTRYID uniqueidentifier IN
@NEWPOSTCODE nvarchar(12) IN
@UPDATEPHONE bit IN
@NEWPHONE nvarchar(100) IN
@UPDATEFAX bit IN
@NEWFAX nvarchar(100) IN
@UPDATEWEBADDRESS bit IN
@NEWWEBADDRESS nvarchar(2047) IN
@UPDATEALIAS bit IN
@NEWALIAS nvarchar(100) IN
@UPDATEINDUSTRY bit IN
@NEWINDUSTRY nvarchar(100) IN
@UPDATEMATCHINGFACTOR bit IN
@NEWMATCHINGFACTOR decimal(5, 2) IN
@UPDATEMINMATCHPERGIFT bit IN
@NEWMINMATCHPERGIFT money IN
@UPDATEMAXMATCHPERGIFT bit IN
@NEWMAXMATCHPERGIFT money IN
@UPDATEMAXMATCHTOTAL bit IN
@NEWMAXMATCHTOTAL money IN
@UPDATEMAXMATCHANNUAL bit IN
@NEWMAXMATCHANNUAL money IN
@UPDATEMATCHNOTES bit IN
@NEWMATCHNOTES nvarchar(max) IN
@CREATENEWCONTACT bit IN
@UPDATECONTACT bit IN
@CONTACTLINKID uniqueidentifier IN
@UPDATECONTACTNAME bit IN
@CONTACTFIRSTNAME nvarchar(50) IN
@CONTACTMIDDLENAME nvarchar(50) IN
@CONTACTKEYNAME nvarchar(50) IN
@UPDATECONTACTEMAIL bit IN
@NEWCONTACTEMAIL nvarchar(100) IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN

Definition

Copy


            CREATE procedure dbo.USP_MATCHFINDER_UPDATECONSTITUENT
            (
                @APPUSERID uniqueidentifier,
                @CONSTITUENTID uniqueidentifier,

                @UPDATEORGNAME bit,
                @NEWORGNAME nvarchar(100),

                @UPDATEADDRESS bit,
                @NEWADDRESSBLOCK nvarchar(150),
                @NEWCITY nvarchar(50), 
                @NEWSTATEID uniqueidentifier,
                @NEWCOUNTRYID uniqueidentifier,
                @NEWPOSTCODE nvarchar(12),

                @UPDATEPHONE bit,
                @NEWPHONE nvarchar(100),

                @UPDATEFAX bit,
                @NEWFAX nvarchar(100),

                @UPDATEWEBADDRESS bit,
                @NEWWEBADDRESS nvarchar(2047),

                @UPDATEALIAS bit,
                @NEWALIAS nvarchar(100),

                @UPDATEINDUSTRY bit,
                @NEWINDUSTRY nvarchar(100),

                @UPDATEMATCHINGFACTOR bit,
                @NEWMATCHINGFACTOR decimal(5,2),

                @UPDATEMINMATCHPERGIFT bit,
                @NEWMINMATCHPERGIFT money,

                @UPDATEMAXMATCHPERGIFT bit,
                @NEWMAXMATCHPERGIFT money,

                @UPDATEMAXMATCHTOTAL bit,
                @NEWMAXMATCHTOTAL money,

                @UPDATEMAXMATCHANNUAL bit,
                @NEWMAXMATCHANNUAL money,

                @UPDATEMATCHNOTES bit,
                @NEWMATCHNOTES nvarchar(max),

                @CREATENEWCONTACT bit,
                @UPDATECONTACT bit,
                @CONTACTLINKID uniqueidentifier,

                @UPDATECONTACTNAME bit,
                @CONTACTFIRSTNAME nvarchar(50),
                @CONTACTMIDDLENAME nvarchar(50),
                @CONTACTKEYNAME nvarchar(50),

                @UPDATECONTACTEMAIL bit,
                @NEWCONTACTEMAIL nvarchar(100),

                @CHANGEAGENTID uniqueidentifier,
                @CHANGEDATE datetime
            )    
            as
            set nocount on;

            if @CHANGEAGENTID is null
                exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

            if @CHANGEDATE is null
                set @CHANGEDATE = getdate();

            begin try
                declare @SEQUENCE int;

                declare @ADDRESSTYPECODEID uniqueidentifier;
                declare @PHONETYPECODEID uniqueidentifier;
                declare @FAXTYPECODEID uniqueidentifier;
                declare @CONTACTTYPECODEID uniqueidentifier;
                declare @CONTACTRELATIONSHIPTYPECODEID uniqueidentifier; 
                declare @CONTACTRECIPROCALRELATIONSHIPTYPECODEID uniqueidentifier;
                declare @CONTACTEMAILADDRESSTYPECODEID uniqueidentifier;
                declare @ALIASTYPECODEID uniqueidentifier;
                declare @MATCHINGGIFTCONDITIONTYPECODEID uniqueidentifier;
                declare @INFOSOURCECODEID uniqueidentifier;

                exec dbo.USP_MATCHFINDER_LOADCONFIG 1, @ADDRESSTYPECODEID output, 1, @PHONETYPECODEID output, 1, @FAXTYPECODEID output
                                                    1, @CONTACTTYPECODEID output, 1, @CONTACTRELATIONSHIPTYPECODEID output
                                                    1, @CONTACTRECIPROCALRELATIONSHIPTYPECODEID output, 1, @CONTACTEMAILADDRESSTYPECODEID output
                                                    0, @ALIASTYPECODEID output, 1, @MATCHINGGIFTCONDITIONTYPECODEID output, @INFOSOURCECODEID output


                --JamesWill 05/19/2008 CR300867-051608 Added a "Do Not Update Contact" to the UI which is defined to be true when "Create New Contact" and "Update Contact" are both false. So do not try to 

                --update the contact name or email when neither create new contact or update contact are set.

                if @CREATENEWCONTACT = 0 and @UPDATECONTACT = 0
                    select @UPDATECONTACTNAME = 0, @UPDATECONTACTEMAIL = 0;

                if @UPDATEORGNAME = 1
                begin
                    update dbo.CONSTITUENT
                        set KEYNAME = @NEWORGNAME,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CHANGEDATE
                    where CONSTITUENT.ID = @CONSTITUENTID
                end

                if @UPDATEADDRESS = 1
                begin
                    if @NEWSTATEID = '00000000-0000-0000-0000-000000000000'
                        set @NEWSTATEID = null;

                    declare @ADDRESSID uniqueidentifier;
                    select top 1
                        @ADDRESSID = ADDRESS.ID
                    from dbo.ADDRESS
                    where ADDRESS.CONSTITUENTID = @CONSTITUENTID
                        and ADDRESS.ADDRESSTYPECODEID = @ADDRESSTYPECODEID
                    order by ADDRESS.ISPRIMARY desc, ADDRESS.CITY, ADDRESS.ADDRESSBLOCK

                    if not @ADDRESSID is null
                        update dbo.ADDRESS
                            set COUNTRYID = @NEWCOUNTRYID,
                                STATEID = @NEWSTATEID,
                                ADDRESSBLOCK = @NEWADDRESSBLOCK,
                                CITY = @NEWCITY,
                                POSTCODE = @NEWPOSTCODE,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CHANGEDATE
                        where ADDRESS.ID = @ADDRESSID;
                    else
                    begin
                        declare @PRIMARYADDRESS bit
                        set @PRIMARYADDRESS = case when dbo.UFN_ADDRESS_PRIMARYCOUNT(@CONSTITUENTID) = 0 then 1 else 0 end

                        select @SEQUENCE = coalesce(max(SEQUENCE), 0) from dbo.ADDRESS where ADDRESS.CONSTITUENTID = @CONSTITUENTID;
                        set @SEQUENCE = @SEQUENCE + 1;
                        set @ADDRESSID = newid();

                        insert into dbo.ADDRESS(ID, CONSTITUENTID, ADDRESSTYPECODEID, COUNTRYID, STATEID, ADDRESSBLOCK, CITY, POSTCODE, ISPRIMARY, SEQUENCE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            values(@ADDRESSID, @CONSTITUENTID, @ADDRESSTYPECODEID, @NEWCOUNTRYID, @NEWSTATEID, @NEWADDRESSBLOCK, @NEWCITY, @NEWPOSTCODE, @PRIMARYADDRESS, @SEQUENCE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
                    end    

                    update dbo.ADDRESSVALIDATIONUPDATE
                    set INFOSOURCECODEID = @INFOSOURCECODEID,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CHANGEDATE
                    where ID = @ADDRESSID

                    if @@ROWCOUNT = 0
                        insert into dbo.ADDRESSVALIDATIONUPDATE(ID, INFOSOURCECODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                        values(@ADDRESSID, @INFOSOURCECODEID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

                end

                if @UPDATEPHONE = 1
                begin
                    declare @PHONEID uniqueidentifier;
                    select top 1 
                        @PHONEID = ID
                    from dbo.PHONE
                    where PHONE.CONSTITUENTID = @CONSTITUENTID
                        and PHONE.PHONETYPECODEID = @PHONETYPECODEID;

                    if not @NEWPHONE is null and len(@NEWPHONE) > 0 
                    begin
                        if not @PHONEID is null
                            update dbo.PHONE
                                set NUMBER = @NEWPHONE,
                                    INFOSOURCECODEID = @INFOSOURCECODEID,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CHANGEDATE
                            where ID = @PHONEID
                        else
                        begin
                            declare @PRIMARYPHONE bit
                            set @PRIMARYPHONE = case when dbo.UFN_PHONE_PRIMARYCOUNT(@CONSTITUENTID) = 0 then 1 else 0 end

                            select @SEQUENCE = coalesce(max(SEQUENCE), 0) from dbo.PHONE where PHONE.CONSTITUENTID = @CONSTITUENTID;
                            set @SEQUENCE = @SEQUENCE + 1;

                            insert into dbo.PHONE(CONSTITUENTID, PHONETYPECODEID, NUMBER, ISPRIMARY, SEQUENCE, INFOSOURCECODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                                values(@CONSTITUENTID, @PHONETYPECODEID, @NEWPHONE, @PRIMARYPHONE, @SEQUENCE, @INFOSOURCECODEID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);    
                        end
                    end
                    else
                    begin
                        --JamesWill 01/02/2008 CR290548-122407 Don't try to update empty phone numbers: delete them

                        if not @PHONEID is null
                            exec dbo.USP_PHONE_DELETEBYID_WITHCHANGEAGENTID @PHONEID, @CHANGEAGENTID;
                    end
                end

                if @UPDATEFAX = 1
                begin
                    declare @FAXID uniqueidentifier;
                    select top 1 
                        @FAXID = ID
                    from dbo.PHONE
                    where PHONE.CONSTITUENTID = @CONSTITUENTID
                        and PHONE.PHONETYPECODEID = @FAXTYPECODEID;

                    if not @NEWFAX is null and len(@NEWFAX) > 0
                    begin
                        if not @FAXID is null
                            update dbo.PHONE
                                set NUMBER = @NEWFAX,
                                    INFOSOURCECODEID = @INFOSOURCECODEID,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CHANGEDATE
                            where ID = @FAXID;
                        else
                        begin
                            select @SEQUENCE = coalesce(max(SEQUENCE), 0) from dbo.PHONE where PHONE.CONSTITUENTID = @CONSTITUENTID;
                            set @SEQUENCE = @SEQUENCE + 1;

                            insert into dbo.PHONE(CONSTITUENTID, PHONETYPECODEID, NUMBER, SEQUENCE, INFOSOURCECODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                                values(@CONSTITUENTID, @FAXTYPECODEID, @NEWFAX, @SEQUENCE, @INFOSOURCECODEID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
                        end
                    end
                    else
                    begin
                        if not @FAXID is null and not @FAXTYPECODEID = @PHONETYPECODEID
                            --JamesWill 01/02/2008 CR290548-122407 Don't try to update empty phone numbers: delete them

                            exec dbo.USP_PHONE_DELETEBYID_WITHCHANGEAGENTID @FAXID, @CHANGEAGENTID;
                    end
                end

                if @UPDATEWEBADDRESS = 1
                begin
                    update dbo.CONSTITUENT
                        set WEBADDRESS = @NEWWEBADDRESS,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CHANGEDATE
                    where CONSTITUENT.ID = @CONSTITUENTID;
                end

                if @UPDATEALIAS = 1
                begin
                    declare @ALIASID uniqueidentifier;
                    select top 1 @ALIASID = ID from dbo.ALIAS where ALIAS.CONSTITUENTID = @CONSTITUENTID and ALIAS.ALIASTYPECODEID = @ALIASTYPECODEID;

                    if not @ALIASID is null
                    begin
                        if len(@NEWALIAS) > 0
                            update dbo.ALIAS
                                set KEYNAME = @NEWALIAS,
                                    FIRSTNAME = N'',
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CHANGEDATE
                            where ID = @ALIASID;
                        else
                            exec dbo.USP_ALIAS_DELETEBYID_WITHCHANGEAGENTID @ALIASID, @CHANGEAGENTID;
                    end
                    else
                        if len(@NEWALIAS) > 0
                            insert into dbo.ALIAS(CONSTITUENTID, ALIASTYPECODEID, KEYNAME, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                                values(@CONSTITUENTID, @ALIASTYPECODEID, @NEWALIAS, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);                            
                end

                if @UPDATEINDUSTRY = 1
                begin
                    declare @INDUSTRYCODEID uniqueidentifier;
                    select top 1 @INDUSTRYCODEID = ID from dbo.INDUSTRYCODE where DESCRIPTION = @NEWINDUSTRY;

                    if @INDUSTRYCODEID is null and len(@NEWINDUSTRY) > 0
                    begin
                        declare @CANADD bit;
                        set @CANADD = 0;

                        --JamesWill 12/05/2007 CR289112-120307 Need to check for sysadmin rights as well as code table rights

                        select @CANADD = coalesce(ISSYSADMIN, 0) from dbo.APPUSER where ID = @APPUSERID;

                        if @CANADD = 0
                            set @CANADD = dbo.UFN_SECURITY_APPUSER_GRANTED_CODETABLEENTRYADD_IN_SYSTEMROLE(@APPUSERID, '7df7c84f-84db-4620-b620-76b4a2f67581');

                        if @CANADD = 0
                            raiserror('ERR_MFUPDATE_CANNOTADDINDUSTRYCODE_NOPERMISSION', 16, 1);

                        select @SEQUENCE = coalesce(max(SEQUENCE), 0) from dbo.INDUSTRYCODE;
                        set @SEQUENCE = @SEQUENCE + 1;

                        set @INDUSTRYCODEID = newid();

                        insert into dbo.INDUSTRYCODE(ID, DESCRIPTION, ACTIVE, SEQUENCE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            values(@INDUSTRYCODEID, @NEWINDUSTRY, 1, @SEQUENCE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
                    end

                    --JamesWill 01/03/2008 CR289847-121107 Not all organizations have an entry in dbo.ORGANIZATIONDATA so add it if it's not already there.

                    if (select count(ID) from dbo.ORGANIZATIONDATA where ID = @CONSTITUENTID) = 0 
                        insert into dbo.ORGANIZATIONDATA(ID, INDUSTRYCODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            values(@CONSTITUENTID, @INDUSTRYCODEID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
                    else
                        update dbo.ORGANIZATIONDATA
                            set INDUSTRYCODEID = @INDUSTRYCODEID,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CHANGEDATE
                        where ID = @CONSTITUENTID;
                end

                declare @MGCONDITIONID uniqueidentifier;

                if @UPDATEMATCHINGFACTOR = 1 or @UPDATEMINMATCHPERGIFT = 1 or @UPDATEMAXMATCHPERGIFT = 1 or @UPDATEMAXMATCHTOTAL = 1 or @UPDATEMAXMATCHANNUAL = 1 or @UPDATEMATCHNOTES = 1
                begin
                    select top 1 @MGCONDITIONID = ID from dbo.MATCHINGGIFTCONDITION where ORGANIZATIONID = @CONSTITUENTID and MATCHINGGIFTCONDITIONTYPECODEID = @MATCHINGGIFTCONDITIONTYPECODEID;

                    if not @MGCONDITIONID is null
                    begin
                        if @UPDATEMATCHINGFACTOR = 1 
                            update dbo.MATCHINGGIFTCONDITION
                                set MATCHINGFACTOR = @NEWMATCHINGFACTOR,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CHANGEDATE
                            where ID = @MGCONDITIONID;

                        if @UPDATEMINMATCHPERGIFT = 1
                            update dbo.MATCHINGGIFTCONDITION
                                set MINMATCHPERGIFT = @NEWMINMATCHPERGIFT,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CHANGEDATE
                            where ID = @MGCONDITIONID;

                        if @UPDATEMAXMATCHPERGIFT = 1
                            update dbo.MATCHINGGIFTCONDITION
                                set MAXMATCHPERGIFT = @NEWMAXMATCHPERGIFT,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CHANGEDATE
                            where ID = @MGCONDITIONID;

                        if @UPDATEMAXMATCHTOTAL = 1
                            update dbo.MATCHINGGIFTCONDITION
                                set MAXMATCHTOTAL = @NEWMAXMATCHTOTAL,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CHANGEDATE
                            where ID = @MGCONDITIONID;

                        if @UPDATEMAXMATCHANNUAL = 1
                            update dbo.MATCHINGGIFTCONDITION
                                set MAXMATCHANNUAL = @NEWMAXMATCHANNUAL,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CHANGEDATE
                            where ID = @MGCONDITIONID;

                        if @UPDATEMATCHNOTES = 1
                            update dbo.MATCHINGGIFTCONDITION
                                set NOTES = @NEWMATCHNOTES,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CHANGEDATE
                            where ID = @MGCONDITIONID;            
                    end                        
                    else
                    begin
                        --Set table defaults for fields we aren't updating, so we can just do one big add instead of an add and lots of little updates

                        if @UPDATEMATCHINGFACTOR = 0
                            set @NEWMATCHINGFACTOR = 0;
                        if @UPDATEMINMATCHPERGIFT = 0
                            set @NEWMINMATCHPERGIFT = 0;
                        if @UPDATEMAXMATCHPERGIFT = 0
                            set @NEWMAXMATCHPERGIFT = 0;
                        if @UPDATEMAXMATCHTOTAL = 0
                            set @NEWMAXMATCHTOTAL = 0;
                        if @UPDATEMAXMATCHANNUAL = 0
                            set @NEWMAXMATCHANNUAL = 0;
                        if @UPDATEMATCHNOTES = 0
                            set @NEWMATCHNOTES = N'';

                        declare @MATCHTYPECODE tinyint;
                        set @MATCHTYPECODE = 1;

                        insert into dbo.MATCHINGGIFTCONDITION(ORGANIZATIONID, MATCHINGGIFTCONDITIONTYPECODEID, MATCHINGFACTOR, MAXMATCHANNUAL, MAXMATCHPERGIFT, MAXMATCHTOTAL, MINMATCHPERGIFT, NOTES, [SEQUENCE], ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, MATCHTYPECODE)
                            values(@CONSTITUENTID, @MATCHINGGIFTCONDITIONTYPECODEID, @NEWMATCHINGFACTOR, @NEWMAXMATCHANNUAL, @NEWMAXMATCHPERGIFT, @NEWMAXMATCHTOTAL, @NEWMINMATCHPERGIFT, @NEWMATCHNOTES, coalesce((select max(SEQUENCE) from dbo.MATCHINGGIFTCONDITION where ORGANIZATIONID = @CONSTITUENTID) + 1, 0), @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE, @MATCHTYPECODE);

                    end
                end

                if @UPDATECONTACTNAME = 1 or @UPDATECONTACTEMAIL = 1
                begin
                    declare @CONTACTID uniqueidentifier;

                    if @CREATENEWCONTACT = 1 and @UPDATECONTACT = 1
                        raiserror('ERR_MFCONTACT_UPDATEANDCREATE_INVALID', 16, 1);

                    if @CREATENEWCONTACT = 0 and @UPDATECONTACT = 0
                        raiserror('ERR_MFCONTACT_MUSTUPDATEORCREATE', 16, 1);

                    --JamesWill 12/06/2007 CR289213-120407 

                    if @CREATENEWCONTACT = 1 
                    begin
                        set @CONTACTID = newid();

                        if @UPDATECONTACTNAME = 0 
                            raiserror('ERR_MFCREATECONTACT_MUSTUPDATECONTACTNAME', 16, 1);

                        if @CONTACTKEYNAME is null or len(@CONTACTKEYNAME) = 0
                            raiserror('ERR_MFCREATECONTACT_CONTACTKEYNAME_REQUIRED', 16, 1);

                        insert into dbo.CONSTITUENT(ID, KEYNAME, MIDDLENAME, FIRSTNAME, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            values(@CONTACTID, @CONTACTKEYNAME, @CONTACTMIDDLENAME, @CONTACTFIRSTNAME, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

                        insert into dbo.CONSTITUENTORIGINATION(ID, INFOSOURCECODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            values(@CONTACTID, @INFOSOURCECODEID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

                        --JamesWill 09/09/2008 Work Item 4947

                        insert into dbo.CONSTIT_SECURITY_ATTRIBUTE_ASSIGNMENT(ID, CONSTIT_SECURITY_ATTRIBUTEID, CONSTITUENTID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            select
                                newid(),
                                CONSTIT_SECURITY_ATTRIBUTEID,
                                @CONTACTID,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CHANGEDATE,
                                @CHANGEDATE
                            from dbo.CONSTIT_SECURITY_ATTRIBUTE_ASSIGNMENT
                            where CONSTITUENTID = @CONSTITUENTID;

                        insert into dbo.CONSTITUENTSITE
                        (
                            ID, 
                            SITEID, 
                            CONSTITUENTID, 
                            ADDEDBYID, 
                            CHANGEDBYID, 
                            DATEADDED, 
                            DATECHANGED
                        )
                        select
                            newid(),
                            SITEID,
                            @CONTACTID,
                            @CHANGEAGENTID,
                            @CHANGEAGENTID,
                            @CHANGEDATE,
                            @CHANGEDATE
                        from dbo.CONSTITUENTSITE
                        where CONSTITUENTID = @CONSTITUENTID;                            

                        insert into dbo.[NAMEFORMAT]
                            ([CONSTITUENTID]
                            ,[NAMEFORMATTYPECODEID]
                            ,[NAMEFORMATFUNCTIONID]
                            ,[ADDEDBYID]
                            ,[CHANGEDBYID]
                            ,[DATEADDED]
                            ,[DATECHANGED]
                            ,[PRIMARYADDRESSEE]
                            ,[PRIMARYSALUTATION])
                        select
                            @CONTACTID
                            ,NFD.NAMEFORMATTYPECODEID
                            ,NFD.NAMEFORMATFUNCTIONID
                            ,@CHANGEAGENTID
                            ,@CHANGEAGENTID
                            ,@CHANGEDATE
                            ,@CHANGEDATE
                            ,NFD.PRIMARYADDRESSEE
                            ,NFD.PRIMARYSALUTATION
                        from dbo.NAMEFORMATDEFAULT as NFD
                        where NFD.APPLYTOCODE = 0 
                    end

                    if @UPDATECONTACT = 1
                        set @CONTACTID = @CONTACTLINKID;

                    if not @CONTACTID is null
                    begin
                        declare @RELATIONSHIPID uniqueidentifier;
                        select top 1 @RELATIONSHIPID = ID                             
                        from dbo.RELATIONSHIP 
                        where RELATIONSHIPCONSTITUENTID = @CONTACTID 
                            and RECIPROCALCONSTITUENTID = @CONSTITUENTID 
                            and RELATIONSHIPTYPECODEID = @CONTACTRELATIONSHIPTYPECODEID 
                            and RECIPROCALTYPECODEID = @CONTACTRECIPROCALRELATIONSHIPTYPECODEID;

                        if @RELATIONSHIPID is null
                        begin
                            insert into dbo.RELATIONSHIP(RELATIONSHIPCONSTITUENTID, RECIPROCALCONSTITUENTID, RELATIONSHIPTYPECODEID, RECIPROCALTYPECODEID, ISCONTACT, CONTACTTYPECODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                                values(@CONTACTID, @CONSTITUENTID, @CONTACTRELATIONSHIPTYPECODEID, @CONTACTRECIPROCALRELATIONSHIPTYPECODEID, 1, @CONTACTTYPECODEID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
                        end
                        else
                        begin
                            declare @RELATIONSHIPISCONTACT bit;
                            declare @RELATIONSHIPCONTACTTYPECODEID uniqueidentifier;

                            select @RELATIONSHIPISCONTACT = ISCONTACT, @RELATIONSHIPCONTACTTYPECODEID = CONTACTTYPECODEID from dbo.RELATIONSHIP where ID = @RELATIONSHIPID;

                            if @RELATIONSHIPISCONTACT = 0
                                update dbo.RELATIONSHIP
                                    set ISCONTACT = 1,
                                        CONTACTTYPECODEID = @CONTACTTYPECODEID,
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CHANGEDATE
                                where ID = @RELATIONSHIPID
                            else if @RELATIONSHIPCONTACTTYPECODEID <> @CONTACTTYPECODEID
                                update dbo.RELATIONSHIP
                                    set CONTACTTYPECODEID = @CONTACTTYPECODEID,
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CHANGEDATE
                                where ID = @RELATIONSHIPID
                        end

                        if @UPDATECONTACTNAME = 1
                        update dbo.CONSTITUENT
                            set KEYNAME = @CONTACTKEYNAME,
                                MIDDLENAME = @CONTACTMIDDLENAME,
                                FIRSTNAME = @CONTACTFIRSTNAME,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CHANGEDATE
                        where CONSTITUENT.ID = @CONTACTID;

                        if @UPDATECONTACTEMAIL = 1 and not @CONTACTID is null
                        begin
                            declare @RECIPROCALRELATIONSHIPID uniqueidentifier;
                            select top 1
                              @RECIPROCALRELATIONSHIPID = ID
                            from
                              dbo.RELATIONSHIP 
                            where
                              RECIPROCALCONSTITUENTID = @CONTACTID and
                              RELATIONSHIPCONSTITUENTID = @CONSTITUENTID and
                              RECIPROCALTYPECODEID = @CONTACTRELATIONSHIPTYPECODEID and
                              RELATIONSHIPTYPECODEID = @CONTACTRECIPROCALRELATIONSHIPTYPECODEID;

                            declare @EMAILID uniqueidentifier;
                            select top 1 @EMAILID = ID from dbo.EMAILADDRESS where CONSTITUENTID = @CONTACTID and EMAILADDRESSTYPECODEID = @CONTACTEMAILADDRESSTYPECODEID;

                            if not @EMAILID is null
                                update dbo.EMAILADDRESS
                                    set EMAILADDRESS = @NEWCONTACTEMAIL,
                                        INFOSOURCECODEID = @INFOSOURCECODEID,
                                        RELATIONSHIPID = @RECIPROCALRELATIONSHIPID,
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CHANGEDATE
                                where ID = @EMAILID;
                            else
                            begin
                                declare @PRIMARYCONTACTEMAIL bit
                                set @PRIMARYCONTACTEMAIL = case when dbo.UFN_EMAILADDRESS_PRIMARYCOUNT(@CONTACTID) = 0 then 1 else 0 end

                                select @SEQUENCE = coalesce(max(SEQUENCE), 0) from dbo.EMAILADDRESS where CONSTITUENTID = @CONTACTID;
                                set @SEQUENCE = @SEQUENCE + 1;

                                insert into dbo.EMAILADDRESS(CONSTITUENTID, EMAILADDRESSTYPECODEID, EMAILADDRESS, ISPRIMARY, SEQUENCE, INFOSOURCECODEID, RELATIONSHIPID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                                    values(@CONTACTID, @CONTACTEMAILADDRESSTYPECODEID, @NEWCONTACTEMAIL, @PRIMARYCONTACTEMAIL, @SEQUENCE, @INFOSOURCECODEID, @RECIPROCALRELATIONSHIPID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
                            end

                        end    
                    end    


                end
            end try
            begin catch
                exec dbo.USP_RAISE_ERROR;
                return 1;
            end catch