USP_MATCHINGGIFTCLAIM_READD

A stripped down version of USP_MATCHINGGIFTPLEDGE_ADD used when a user chooses to reset the matching gift claims on the edit payment form.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@CHANGEAGENTID uniqueidentifier IN
@ORIGINALGIFTID uniqueidentifier IN
@MATCHINGORGANIZATIONID uniqueidentifier IN
@DATE datetime IN
@AMOUNT money IN
@SPLITS xml IN
@MATCHINGGIFTCONDITIONID uniqueidentifier IN
@TRANSACTIONCURRENCYID uniqueidentifier IN
@BASECURRENCYID uniqueidentifier IN
@BASEEXCHANGERATEID uniqueidentifier IN

Definition

Copy


            CREATE procedure dbo.USP_MATCHINGGIFTCLAIM_READD
            (
                @ID uniqueidentifier = null output
                @CHANGEAGENTID uniqueidentifier,
                @ORIGINALGIFTID uniqueidentifier,
                @MATCHINGORGANIZATIONID uniqueidentifier,
                @DATE datetime,
                @AMOUNT money,
                @SPLITS xml,
                @MATCHINGGIFTCONDITIONID uniqueidentifier = null,
                @TRANSACTIONCURRENCYID uniqueidentifier = null,
                @BASECURRENCYID uniqueidentifier = null,
                @BASEEXCHANGERATEID uniqueidentifier = null
            )
            as
                set nocount on;

                declare @CURRENTDATE datetime;    
                declare @SOURCECONSTITUENTID uniqueidentifier;

                declare @STARTDATE datetime;
                declare @FREQUENCYCODE tinyint;
                declare @NUMBEROFINSTALLMENTS int;
                declare @INSTALLMENTSEQUENCE int;

                set @STARTDATE = @DATE;
                set @FREQUENCYCODE = 5; --Single Installment

                set @NUMBEROFINSTALLMENTS = 1;
                set @INSTALLMENTSEQUENCE = 1;

                if @ID is null
                    set @ID = newid();

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

                set @CURRENTDATE = getdate();    

                --Set currency parameters for backwards compatibility

                if @TRANSACTIONCURRENCYID is null
                    set @TRANSACTIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

                if @BASECURRENCYID is null
                    set @BASECURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

                declare @SUM money;
                declare @COUNT int;

                begin try
                    exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS, @AMOUNT, 3, default, @TRANSACTIONCURRENCYID;

                    select 
                        @COUNT = count(REVENUE.ID) 
                    from dbo.REVENUE
                    inner join dbo.REVENUEMATCHINGGIFT RMG on REVENUE.ID = RMG.ID
                    where REVENUE.CONSTITUENTID = @MATCHINGORGANIZATIONID 
                        and RMG.MGSOURCEREVENUEID = @ORIGINALGIFTID;

                    --if @COUNT > 0 

                    --raiserror('An organization cannot match a single gift more than once.', 13, 1);


                    declare @REVENUEID uniqueidentifier;
                    declare @MAILINGID uniqueidentifier;
                    declare @APPEALID uniqueidentifier;
                    declare @SOURCECODE nvarchar(50);

                    select @MAILINGID = MAILINGID, @APPEALID = APPEALID, @SOURCECODE = SOURCECODE
                    from dbo.REVENUE R
                    where R.ID = @ORIGINALGIFTID;

                    --Multicurrency - AdamBu 5/7/10 - Retrieve and calculate the necessary multicurrency values.    

                    declare @BASEAMOUNT money;                    
                    declare @ORGANIZATIONCURRENCYID uniqueidentifier;
                    declare @ORGANIZATIONAMOUNT money;
                    declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;

                    exec dbo.USP_CURRENCY_GETCURRENCYVALUES @AMOUNT, @DATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASEAMOUNT output, @ORGANIZATIONCURRENCYID output, @ORGANIZATIONAMOUNT output, @ORGANIZATIONEXCHANGERATEID output, 1;

                    --Multicurrency - AdamBu 3/30/10 - Process the splits xml to calculate the base and organization amounts and place them in proper nodes.

                    set @SPLITS = dbo.UFN_REVENUESPLIT_CONVERTAMOUNTSINXML(@SPLITS,@BASECURRENCYID,@ORGANIZATIONEXCHANGERATEID,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID)
                    exec dbo.USP_REVENUE_GETSPLITS_2_ADDFROMXML @ID, @SPLITS, @CHANGEAGENTID, @CURRENTDATE;

                    --If recognition credits should be added automatically when a MG claim is created, add them.

                    declare @AUTOADDMGCLAIMCREDIT bit;
                    declare @CLAIMDEFAULTCREDITTYPEID uniqueidentifier;
                    declare @AUTOADDMGCLAIMCREDITFORORG bit;
                    declare @CLAIMDEFAULTCREDITTYPEIDFORORG uniqueidentifier;
                    select 
                        @AUTOADDMGCLAIMCREDIT = ADDRECOGNITIONCREDITSONMGCLAIMADD,
                        @CLAIMDEFAULTCREDITTYPEID = 
                            case MGCLAIMADDRECOGNITIONTYPECODE
                                when 0 then CLAIMREVENUERECOGNITIONTYPECODEID
                                when 1 then null
                            end,
                        @AUTOADDMGCLAIMCREDITFORORG = ADDRECOGNITIONCREDITSTOMATCHINGORGONMGCLAIMADD,
                        @CLAIMDEFAULTCREDITTYPEIDFORORG = MATCHINGORGCLAIMREVENUERECOGNITIONTYPECODEID
                    from MATCHINGGIFTPREFERENCEINFO;

                    declare @MGSPLITS xml;
                    if @AUTOADDMGCLAIMCREDIT = 1 or @AUTOADDMGCLAIMCREDITFORORG = 1
                        set @MGSPLITS = dbo.UFN_REVENUE_GETSPLITS_2_TOITEMLISTXML(@ID);

          declare @DEFAULTANONYMOUSRECOGNITION bit = 0;

          --Select the value for default anonymous recognition setting

          select @DEFAULTANONYMOUSRECOGNITION = DEFAULTANONYMOUSRECOGNITION
          from dbo.RECOGNITIONDEFAULT

                    if @AUTOADDMGCLAIMCREDIT = 1
                    begin
                        declare @ORIGINALDONORID uniqueidentifier
                        declare @ORIGINALDONATIONDATE datetime
                        select 
                            @ORIGINALDONORID=CONSTITUENTID,
                            @ORIGINALDONATIONDATE=DATE
                        from REVENUE
                        where 
                            ID = @ORIGINALGIFTID
                            and (REVENUE.GIVENANONYMOUSLY = 0 or @DEFAULTANONYMOUSRECOGNITION = 1)

                        if @ORIGINALDONORID is not null
                        begin
                            if (select count(*) from dbo.MATCHINGGIFTPREFERENCEINFO
                                where MGCLAIMADDRECOGNITIONTYPECODE = 0) > 0
                            begin                    
                                exec dbo.USP_RECOGNITIONCREDIT_ADDDEFAULTSFORMGSPLITS @MGSPLITS, @ORIGINALDONORID, @ORIGINALDONATIONDATE, @CLAIMDEFAULTCREDITTYPEID, @CHANGEAGENTID, @CURRENTDATE;
                              end

                            if (select count(*) from dbo.MATCHINGGIFTPREFERENCEINFO
                                where MGCLAIMADDRECOGNITIONTYPECODE = 1) > 0
                            begin
                                --Bug#256960 - Last parameter @USERECOGNITIONCREDITTYPEIDFROMRECOGNITION in USP_RECOGNITIONCREDIT_ADDTOGROUPMEMBERS is used to set the REVENUERECOGNITIONTYPECODEID

                                --and when USERECOGNITIONCREDITTYPEIDFROMRECOGNITION is not provided it takes its default value which is "0"

                                exec dbo.USP_RECOGNITIONCREDIT_ADDTOGROUPMEMBERS @MGSPLITS, @ORIGINALDONORID, @ORIGINALDONATIONDATE, @ORIGINALGIFTID, @CLAIMDEFAULTCREDITTYPEID, @CHANGEAGENTID, @CURRENTDATE, 1;
                            end
                        end
                    end

                    declare @GIFTISANONYMOUS bit = 0;
                    select @GIFTISANONYMOUS = GIVENANONYMOUSLY from dbo.REVENUE where ID = @ID
                    if @AUTOADDMGCLAIMCREDITFORORG = 1 and (@GIFTISANONYMOUS = 0 or @DEFAULTANONYMOUSRECOGNITION = 1)
                        exec dbo.USP_RECOGNITIONCREDIT_ADDDEFAULTSFORMGSPLITS @MGSPLITS, @MATCHINGORGANIZATIONID, @DATE, @CLAIMDEFAULTCREDITTYPEIDFORORG, @CHANGEAGENTID, @CURRENTDATE;

                    declare CUR_MGCAMPAIGNS cursor local fast_forward 
                    for 
                        select 
                            MGSPLIT.ID MGSPLITID,
                            case
                                when GIFTSPLIT.ID is null then(
                                        select CAMPAIGNID,CAMPAIGNSUBPRIORITYID 
                                        from dbo.UFN_DESIGNATION_CAMPAIGNS(MGSPLIT.DESIGNATIONID) 
                                        for xml raw('ITEM'),type,elements,root('CAMPAIGNS'),BINARY BASE64
                                    )
                                else(
                                    select CAMPAIGNID,CAMPAIGNSUBPRIORITYID 
                                    from dbo.UFN_REVENUESPLIT_GETCAMPAIGNS(GIFTSPLIT.ID) 
                                    for xml raw('ITEM'),type,elements,root('CAMPAIGNS'),BINARY BASE64
                                )
                            end
                        from dbo.UFN_REVENUE_GETSPLITS_2(@ID) MGSPLIT
                            left join(
                                select 
                                    GIFTSPLIT.ID, 
                                    GIFTSPLIT.DESIGNATIONID
                                from  dbo.UFN_REVENUE_GETSPLITS_2(@ORIGINALGIFTID) GIFTSPLIT
                                where not exists(
                                    select GIFTSPLITDUPE.ID
                                    from dbo.UFN_REVENUE_GETSPLITS(@ORIGINALGIFTID) GIFTSPLITDUPE
                                    where GIFTSPLIT.DESIGNATIONID = GIFTSPLITDUPE.DESIGNATIONID
                                        and GIFTSPLIT.ID <> GIFTSPLITDUPE.ID
                                )         
                            ) GIFTSPLIT on GIFTSPLIT.DESIGNATIONID=MGSPLIT.DESIGNATIONID

                    open CUR_MGCAMPAIGNS
                    declare @SPLITID uniqueidentifier
                    declare @CAMPAIGNS xml

                    fetch next from CUR_MGCAMPAIGNS into @SPLITID, @CAMPAIGNS
                    while @@fetch_status <> -1
                    begin
                        if @@fetch_status <> -2
                        begin
                            exec dbo.USP_REVENUESPLIT_GETCAMPAIGNS_ADDFROMXML @SPLITID, @CAMPAIGNS, @CHANGEAGENTID;
                        end

                        fetch next from CUR_MGCAMPAIGNS into @SPLITID, @CAMPAIGNS
                    end

                    close CUR_MGCAMPAIGNS
                    deallocate CUR_MGCAMPAIGNS
                end try

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

                return 0;