USP_REVENUEBATCH_CONSTITUENT_UPDATEIDS

Updates revenue batch constituent IDs with actual constituent IDs.

Parameters

Parameter Parameter Type Mode Description
@BATCHREVENUECONSTITUENTID uniqueidentifier IN
@CONSTITUENTID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTRECOGNITIONS xml IN
@UPDATEDRECOGNITIONS xml INOUT
@UPDATEDAPPLICATIONRECOGNITIONS xml INOUT

Definition

Copy


            CREATE procedure dbo.USP_REVENUEBATCH_CONSTITUENT_UPDATEIDS
            (
                @BATCHREVENUECONSTITUENTID uniqueidentifier,
                @CONSTITUENTID uniqueidentifier,
                @CHANGEAGENTID uniqueidentifier = null,
                @CURRENTRECOGNITIONS xml = null,
                @UPDATEDRECOGNITIONS xml = null output,
                @UPDATEDAPPLICATIONRECOGNITIONS xml = null output
            )
            as
                set nocount on

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

                declare @CURRENTDATE datetime
                set @CURRENTDATE = getdate()

                --update all existing batches to point to the newly created constituent instead of the imaginary revenue batch version

                update dbo.BATCHREVENUE 
                    set CONSTITUENTID = @CONSTITUENTID,
                        APPLYTOSHOWNFORCONSTITUENTID = BATCHREVENUE.CONSTITUENTID,
                        GIVENANONYMOUSLYDEFAULTEDFORCONSTITUENTID = BATCHREVENUE.CONSTITUENTID,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE
                where CONSTITUENTID = @BATCHREVENUECONSTITUENTID

                update dbo.BATCHREVENUERECOGNITION
                    set CONSTITUENTID = @CONSTITUENTID,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE
                where CONSTITUENTID = @BATCHREVENUECONSTITUENTID

                update dbo.BATCHREVENUEAPPLICATIONPLEDGE
                    set CONSTITUENTID = @CONSTITUENTID,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE
                where CONSTITUENTID = @BATCHREVENUECONSTITUENTID

                -- This clause contains the same pattern that was fixed lower down for bug 489752.  We believe this code to be no longer in use though

                -- since memberships and their application have been removed from ERB, so we are leaving as is.

                update dbo.BATCHREVENUEAPPLICATIONMEMBERSHIP
                    set MEMBERS.modify('replace value of (/MEMBERS/ITEM/CONSTITUENTID/text())[1] with sql:variable("@CONSTITUENTID")'),
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE
                where MEMBERS.value('(/MEMBERS/ITEM/CONSTITUENTID)[1]','uniqueidentifier') = @BATCHREVENUECONSTITUENTID                                

                update 
                    dbo.BATCHREVENUEREGISTRANT
                set
                    CONSTITUENTID = @CONSTITUENTID,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where
                    CONSTITUENTID = @BATCHREVENUECONSTITUENTID;

                update
                    dbo.BATCHREVENUEREGISTRANTPACKAGE
                set
                    CONSTITUENTID = @CONSTITUENTID,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where
                    CONSTITUENTID = @BATCHREVENUECONSTITUENTID;

                update
                    dbo.BATCHREVENUEREGISTRANTPACKAGE
                set
                    GUESTOFCONSTITUENTID = @CONSTITUENTID,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where
                    GUESTOFCONSTITUENTID = @BATCHREVENUECONSTITUENTID;

                if @CURRENTRECOGNITIONS is not null
                begin                    
                    --Also need to update the @RECOGNITIONS variable (since it will not be reloaded from the BATCHREVENUERECOGNITION table for this commit and may reference the newly created constituent)

                    set @UPDATEDRECOGNITIONS = 
                    (
                        select 
                            ID,
                            case when CONSTITUENTID = @BATCHREVENUECONSTITUENTID then @CONSTITUENTID else CONSTITUENTID end as CONSTITUENTID,
                            AMOUNT,
                            EFFECTIVEDATE,
                            REVENUERECOGNITIONTYPECODEID 
                        from dbo.UFN_REVENUEBATCH_GETRECOGNITIONS_FROMITEMLISTXML(@CURRENTRECOGNITIONS)
                        for xml raw('ITEM'), type, elements, root('RECOGNITIONS'), binary base64
                    )
                end

                if @UPDATEDAPPLICATIONRECOGNITIONS is not null
                begin
                    declare @APPLICATIONRECOGNITIONSTABLE table
                    (
                        ADDITIONALAPPLICATIONTYPECODE tinyint,
                        ADDITIONALAPPLICATIONDESIGNATIONID uniqueidentifier,
                        APPLICATIONAMOUNT money,
                        APPLICATIONDESCRIPTION nvarchar(100),
                        RECOGNITIONS xml
                    )

                    insert into @APPLICATIONRECOGNITIONSTABLE(ADDITIONALAPPLICATIONTYPECODE, ADDITIONALAPPLICATIONDESIGNATIONID, APPLICATIONAMOUNT, APPLICATIONDESCRIPTION, RECOGNITIONS)
                        select 
                            T.c.value('(ADDITIONALAPPLICATIONTYPECODE)[1]','tinyint') as ADDITIONALAPPLICATIONTYPECODE,
                            T.c.value('(ADDITIONALAPPLICATIONDESIGNATIONID)[1]','uniqueidentifier') as ADDITIONALAPPLICATIONDESIGNATIONID,
                            T.c.value('(APPLICATIONAMOUNT)[1]','money') as APPLICATIONAMOUNT,
                            T.c.value('(APPLICATIONDESCRIPTION)[1]','nvarchar(100)') as APPLICATIONDESCRIPTION,
                            case when T.c.exist('./RECOGNITIONS/ITEM') = 1 then T.c.query('(RECOGNITIONS/ITEM)') else null end as RECOGNITIONS
                        from @UPDATEDAPPLICATIONRECOGNITIONS.nodes('/APPLICATIONRECOGNITIONS/ITEM') T(c)  

                    -- Modified to fix 489752

                    update @APPLICATIONRECOGNITIONSTABLE set
                        --Rebuild the recognitions XML

                        RECOGNITIONS =
                            (
                                select
                                    --Replace @BATCHREVENUECONSTITUENTID with @CONSTITUENTID 

                                    case
                                        when T.c.value('(CONSTITUENTID)[1]','uniqueidentifier') = @BATCHREVENUECONSTITUENTID
                                            then @CONSTITUENTID
                                        else
                                            T.c.value('(CONSTITUENTID)[1]','uniqueidentifier')
                                    end as CONSTITUENTID,

                                    --Preserve all other values

                                    T.c.value('(AMOUNT)[1]','money') as AMOUNT,
                                    T.c.value('(EFFECTIVEDATE)[1]','datetime') as EFFECTIVEDATE,
                                    T.c.value('(ID)[1]','uniqueidentifier') as ID
                                from
                                    RECOGNITIONS.nodes('ITEM') as T(c)
                                for xml raw('ITEM'),type,elements,BINARY BASE64
                            )
                    where
                        --Only do this rebuild for the application recognitions where there is a value that

                        --needs to be changed.

                        exists
                            (
                                select
                                    'x'
                                from
                                    RECOGNITIONS.nodes('ITEM') as T(c)
                                where
                                    T.c.value('(CONSTITUENTID)[1]','uniqueidentifier') = @BATCHREVENUECONSTITUENTID
                            );

                    set @UPDATEDAPPLICATIONRECOGNITIONS = 
                        (
                            select 
                                ADDITIONALAPPLICATIONTYPECODE,
                                ADDITIONALAPPLICATIONDESIGNATIONID,
                                APPLICATIONAMOUNT,
                                APPLICATIONDESCRIPTION,
                                RECOGNITIONS
                            from @APPLICATIONRECOGNITIONSTABLE
                            for xml raw('ITEM'), type, elements, root('APPLICATIONRECOGNITIONS'), binary base64
                        )    
                    end