USP_AMPROIMPORT_COMMITCONSTITUENT

Creates or updates a constituent with data from AuctionMaestro Pro.

Parameters

Parameter Parameter Type Mode Description
@LINKID uniqueidentifier INOUT
@BATCHROWID uniqueidentifier IN
@TITLECODEID uniqueidentifier IN
@FIRSTNAME nvarchar(50) IN
@KEYNAME nvarchar(100) IN
@ISORG bit IN
@ADDRESSBLOCK nvarchar(150) IN
@CITY nvarchar(50) IN
@POSTCODE nvarchar(12) IN
@COUNTRYID uniqueidentifier IN
@STATEID uniqueidentifier IN
@PHONE nvarchar(100) IN
@EMAILADDRESS nvarchar(100) IN
@UPDATECONTACTINFO bit IN
@NEWSECURITYGROUPID uniqueidentifier IN
@NEWSITEID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN

Definition

Copy


            CREATE procedure dbo.USP_AMPROIMPORT_COMMITCONSTITUENT
            (
                @LINKID uniqueidentifier = null output,
                @BATCHROWID uniqueidentifier = null,
                @TITLECODEID uniqueidentifier = null,
                @FIRSTNAME nvarchar(50) = '',
                @KEYNAME nvarchar(100) = '',
                @ISORG bit = 0,
                @ADDRESSBLOCK nvarchar(150) = '',
                @CITY nvarchar(50) = '',
                @POSTCODE nvarchar(12) = '',
                @COUNTRYID uniqueidentifier = null,
                @STATEID uniqueidentifier = null,
                @PHONE nvarchar(100) = '',
                @EMAILADDRESS nvarchar(100) = '',
                @UPDATECONTACTINFO bit = 0,
                @NEWSECURITYGROUPID uniqueidentifier = null,
                @NEWSITEID uniqueidentifier = null,                
                @CHANGEAGENTID uniqueidentifier,
                @CHANGEDATE datetime
            )
            as
            set nocount on;
            declare @EMPTYGUID uniqueidentifier = '00000000-0000-0000-0000-000000000000'

            if @LINKID = @EMPTYGUID
                set @LINKID = null;
            if @BATCHROWID = @EMPTYGUID
                set @BATCHROWID = null;
            if @TITLECODEID = @EMPTYGUID
                set @TITLECODEID = null;
            if @COUNTRYID = @EMPTYGUID
                set @COUNTRYID = null;
            if @STATEID = @EMPTYGUID
                set @STATEID = null;
            if @NEWSECURITYGROUPID = @EMPTYGUID
                set @NEWSECURITYGROUPID = null;
            if @NEWSITEID = @EMPTYGUID
                set @NEWSITEID = null;

            declare @NAME nvarchar(100) = @KEYNAME;
            declare @KEYNAMEPREFIX nvarchar(50) = '';

            declare @CONSTITUENTID uniqueidentifier;
            select top 1 @CONSTITUENTID = ID from dbo.CONSTITUENT where CONSTITUENT.ID = @LINKID;
            if @CONSTITUENTID is null
            begin
                set @CONSTITUENTID = newid();
                set @LINKID = @CONSTITUENTID;

                if @ISORG = 1
                begin
                    exec dbo.USP_PARSE_ORGANIZATION_NAME @NAME, @KEYNAME output, @KEYNAMEPREFIX output;

                    insert into dbo.CONSTITUENT(ID, ISORGANIZATION, KEYNAME, KEYNAMEPREFIX, ISCONSTITUENT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                        values(@CONSTITUENTID, 1, @KEYNAME, @KEYNAMEPREFIX, 1, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

                    insert into dbo.ORGANIZATIONDATA(ID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                        values(@CONSTITUENTID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
                end
                else
                begin
                    insert into dbo.CONSTITUENT(ID, ISORGANIZATION, KEYNAME, FIRSTNAME, TITLECODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                        values(@CONSTITUENTID, 0, @KEYNAME, @FIRSTNAME, @TITLECODEID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
                end

                if @NEWSECURITYGROUPID is not null
                    insert into dbo.CONSTIT_SECURITY_ATTRIBUTE_ASSIGNMENT(ID, CONSTIT_SECURITY_ATTRIBUTEID, CONSTITUENTID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                        values(newid(), @NEWSECURITYGROUPID, @CONSTITUENTID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

                if @NEWSITEID is not null
                    insert into dbo.CONSTITUENTSITE(CONSTITUENTID, SITEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                        values(@CONSTITUENTID, @NEWSITEID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

            end 
            else
            begin
                if @ISORG = 1
                begin
                    exec dbo.USP_PARSE_ORGANIZATION_NAME @NAME, @KEYNAME output, @KEYNAMEPREFIX output;
                    update dbo.CONSTITUENT
                        set KEYNAME = @KEYNAME,
                            KEYNAMEPREFIX = @KEYNAMEPREFIX,
                            ISCONSTITUENT = 1,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CHANGEDATE
                    where ID = @CONSTITUENTID;

                end
                else
                begin
                    update dbo.CONSTITUENT 
                        set KEYNAME = @KEYNAME,
                            FIRSTNAME = @FIRSTNAME
                            TITLECODEID = @TITLECODEID,
                            ISCONSTITUENT = 1,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CHANGEDATE
                    where ID = @CONSTITUENTID;
                end    
            end

            declare @HASADDRESS bit;
            declare @OLDADDRESSID uniqueidentifier = null;
            if len(@ADDRESSBLOCK) > 0 or len(@CITY) > 0 or len(@POSTCODE) > 0 or (@COUNTRYID is not null and @COUNTRYID <> @EMPTYGUID) or (@STATEID is not null and @STATEID <> @EMPTYGUID)
                set @HASADDRESS = 1;
            else
                set @HASADDRESS = 0;

            select @OLDADDRESSID = ADDRESS.ID from ADDRESS where ADDRESS.CONSTITUENTID = @CONSTITUENTID and ADDRESS.ISPRIMARY = 1;

            if @HASADDRESS = 1 begin
                if @UPDATECONTACTINFO = 0 or @OLDADDRESSID is null begin
                     update dbo.ADDRESS
                        set ADDRESS.ISPRIMARY = 0
                            ADDRESS.HISTORICALENDDATE = @CHANGEDATE
                            ADDRESS.DATECHANGED = @CHANGEDATE
                            ADDRESS.CHANGEDBYID = @CHANGEAGENTID
                        where ADDRESS.ID = @OLDADDRESSID; --Won't do anything if @OLDADDRESSID is null.


                    declare @NEWADDRESSID uniqueidentifier;
                    set @NEWADDRESSID = newid();

                    exec dbo.USP_ADDRESS_CREATE @ID=@NEWADDRESSID output, @CHANGEAGENTID=@CHANGEAGENTID, @CONSTITUENTID=@CONSTITUENTID,
                        @PRIMARY=1, @HISTORICALSTARTDATE=@CHANGEDATE, @COUNTRYID=@COUNTRYID, @STATEID=@STATEID, @ADDRESSBLOCK=@ADDRESSBLOCK
                        @CITY=@CITY, @POSTCODE=@POSTCODE;
                end
                else begin
                    update dbo.ADDRESS
                    set ADDRESS.CHANGEDBYID = @CHANGEAGENTID,
                        ADDRESS.DATECHANGED = @CHANGEDATE,
                        ADDRESS.ISPRIMARY = 1,
                        ADDRESS.HISTORICALENDDATE = null,
                        ADDRESS.COUNTRYID = @COUNTRYID
                        ADDRESS.STATEID = @STATEID
                        ADDRESS.ADDRESSBLOCK = @ADDRESSBLOCK
                        ADDRESS.CITY = @CITY
                        ADDRESS.POSTCODE = @POSTCODE
                    where ADDRESS.ID = @OLDADDRESSID
                end
            end

            declare @CURRENTPRIMARYPHONEID uniqueidentifier = null;
            declare @CURRENTPRIMARYPHONENUMBER nvarchar(100) = null;
            declare @CURRENTPRIMARYTYPECODEID uniqueidentifier = null;

            select top 1 
                @CURRENTPRIMARYPHONEID = PHONE.ID,
                @CURRENTPRIMARYPHONENUMBER = PHONE.NUMBER,
                @CURRENTPRIMARYTYPECODEID = PHONE.PHONETYPECODEID
            from dbo.PHONE 
            where PHONE.CONSTITUENTID = @CONSTITUENTID 
                and PHONE.ISPRIMARY = 1;


            if @CURRENTPRIMARYPHONEID is not null and len(@PHONE) = 0
            begin
                --There was no phone number, so get rid of the primary number. 


                update dbo.PHONE
                    set ISPRIMARY = 0,
                        ENDDATE = @CHANGEDATE,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CHANGEDATE
                where ID = @CURRENTPRIMARYPHONEID;
            end
            else if (@CURRENTPRIMARYPHONEID is not null and @CURRENTPRIMARYPHONENUMBER <> @PHONE)
            begin
                --There was a change in the phone number. So update the current or create a new one.

                if @UPDATECONTACTINFO = 1--Update the current primary phone number

                begin
                    --Trying to insert the same CONSTITUENT/PHONETYPECODEID/NUMBER into the PHONE table will result in an exception.

                    --So avoid doing that. 

                    if exists(select ID from dbo.PHONE where CONSTITUENTID = @CONSTITUENTID and NUMBER = @PHONE and PHONETYPECODEID = @CURRENTPRIMARYTYPECODEID)
                    begin
                        --We can't use the primary, because that will cause an error. So act as if we moved away from the primary.

                        update dbo.PHONE 
                            set ISPRIMARY = 0,
                                ENDDATE = @CHANGEDATE,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CHANGEDATE
                        where ID = @CURRENTPRIMARYPHONEID;

                        --Update the existing number to be primary

                        update dbo.PHONE
                            set ISPRIMARY = 1,
                                ENDDATE = null,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CHANGEDATE
                        where ID = (select top 1 ID from dbo.PHONE where CONSTITUENTID = @CONSTITUENTID and NUMBER = @PHONE and PHONETYPECODEID = @CURRENTPRIMARYTYPECODEID);                                
                    end
                    else
                    begin
                        update dbo.PHONE
                            set NUMBER = @PHONE,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CHANGEDATE
                        where ID = @CURRENTPRIMARYPHONEID;
                    end
                end
                else
                begin --Insert a new phone number

                    --Get rid of the old primary phone

                    update dbo.PHONE 
                        set ISPRIMARY = 0,
                            ENDDATE = @CHANGEDATE,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CHANGEDATE
                    where ID = @CURRENTPRIMARYPHONEID;

                    --Trying to insert the same CONSTITUENT/PHONETYPECODEID/NUMBER into the PHONE table will result in an exception.

                    --So avoid doing that. 

                    if exists(select ID from dbo.PHONE where CONSTITUENTID = @CONSTITUENTID and NUMBER = @PHONE and PHONETYPECODEID is null)
                    begin
                        update dbo.PHONE
                            set ISPRIMARY = 1,
                                ENDDATE = null,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CHANGEDATE
                        where ID = (select top 1 ID from dbo.PHONE where CONSTITUENTID = @CONSTITUENTID and NUMBER = @PHONE and PHONETYPECODEID is null);
                    end
                    else
                    begin
                        insert into dbo.PHONE(ID, CONSTITUENTID, NUMBER, ISPRIMARY, STARTDATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            values(newid(), @CONSTITUENTID, @PHONE, 1, @CHANGEDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
                    end
                end
            end
            else if @CURRENTPRIMARYPHONEID is null and len(@PHONE) <> 0
            begin
                --Since there's no phone to update, we have to insert. 


                --Trying to insert the same CONSTITUENT/PHONETYPECODEID/NUMBER into the PHONE table will result in an exception.

                --So avoid doing that. 

                if exists(select ID from dbo.PHONE where CONSTITUENTID = @CONSTITUENTID and NUMBER = @PHONE and PHONETYPECODEID is null)
                begin
                    update dbo.PHONE
                        set ISPRIMARY = 1,
                            ENDDATE = null,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CHANGEDATE
                    where ID = (select top 1 ID from dbo.PHONE where CONSTITUENTID = @CONSTITUENTID and NUMBER = @PHONE and PHONETYPECODEID is null);
                end
                else
                begin
                    insert into dbo.PHONE(ID, CONSTITUENTID, NUMBER, ISPRIMARY, STARTDATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                        values(newid(), @CONSTITUENTID, @PHONE, 1, @CHANGEDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
                end
            end

            declare @OLDEMAILADDRESSID uniqueidentifier = null;
            select @OLDEMAILADDRESSID = EMAILADDRESS.ID from dbo.EMAILADDRESS where EMAILADDRESS.CONSTITUENTID = @CONSTITUENTID and EMAILADDRESS.ISPRIMARY = 1;

            if @EMAILADDRESS is not null and len(@EMAILADDRESS) > 0 begin
                if @OLDEMAILADDRESSID is not null
                begin
                    update dbo.EMAILADDRESS
                        set EMAILADDRESS.EMAILADDRESS = @EMAILADDRESS,
                            EMAILADDRESS.CHANGEDBYID = @CHANGEAGENTID,
                            EMAILADDRESS.DATECHANGED = @CHANGEDATE
                        where EMAILADDRESS.ID = @OLDEMAILADDRESSID;
                end
                else begin
                    insert into dbo.EMAILADDRESS
                        (ID, CONSTITUENTID, EMAILADDRESS, ISPRIMARY, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                    values
                        (newid(), @CONSTITUENTID, @EMAILADDRESS, 1, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
                end
            end
            else if @OLDEMAILADDRESSID is not null begin
                delete from dbo.EMAILADDRESS where EMAILADDRESS.ID = @OLDEMAILADDRESSID;
            end


            --If this is a new constituent, update any batch rows that were pointing at it to point to the CONSTITUENT record instead

            update dbo.BATCHAMPROIMPORTITEM
                set AUCTIONITEM_CONSTITUENTID = @LINKID,
                    CHANGEDBYID= @CHANGEAGENTID,
                    DATECHANGED = @CHANGEDATE
                where AUCTIONITEM_CONSTITUENTID = @BATCHROWID;

            update dbo.BATCHAMPROIMPORTREGISTRANT
                set REGISTRANT_CONSTITUENTID = @LINKID,
                    CHANGEDBYID= @CHANGEAGENTID,
                    DATECHANGED = @CHANGEDATE
                where REGISTRANT_CONSTITUENTID = @BATCHROWID;

            update dbo.BATCHAMPROIMPORTPURCHASE
                set PURCHASE_CONSTITUENTID = @LINKID,
                    CHANGEDBYID= @CHANGEAGENTID,
                    DATECHANGED = @CHANGEDATE
                where PURCHASE_CONSTITUENTID = @BATCHROWID;