USP_RECONCILEMATCHINGGIFT_UPDATECLAIMSPLITS

Updates a matching gift claim's splits when reconciling matching gifts.

Parameters

Parameter Parameter Type Mode Description
@MGCLAIMINSTALLMENTSPLITID uniqueidentifier INOUT
@APPLICATIONID uniqueidentifier IN
@MGCLAIMREVENUEID uniqueidentifier IN
@MGCLAIMDESIGNATIONID uniqueidentifier IN
@MGCLAIMAMOUNT money IN
@APPLIEDAMOUNT money IN
@APPLICATIONDESIGNATIONID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CREATIONDATE datetime IN
@MGCLAIMREVENUESPLITID uniqueidentifier INOUT

Definition

Copy


CREATE procedure dbo.USP_RECONCILEMATCHINGGIFT_UPDATECLAIMSPLITS
(
    @MGCLAIMINSTALLMENTSPLITID uniqueidentifier output,
    @APPLICATIONID uniqueidentifier,
    @MGCLAIMREVENUEID uniqueidentifier,
    @MGCLAIMDESIGNATIONID uniqueidentifier,
    @MGCLAIMAMOUNT money,
    @APPLIEDAMOUNT money,
    @APPLICATIONDESIGNATIONID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier,
    @CREATIONDATE datetime
    @MGCLAIMREVENUESPLITID uniqueidentifier = null output
)
as
    set nocount on

    if @MGCLAIMAMOUNT = @APPLIEDAMOUNT
    begin
        update dbo.REVENUESPLIT set
            DESIGNATIONID = @APPLICATIONDESIGNATIONID,
            DATECHANGED = @CREATIONDATE,
            CHANGEDBYID = @CHANGEAGENTID
        where ID = @APPLICATIONID

        --Bug 129338 - AdamBu - 12/20/10 - Clear existing campaigns and add the defaults from the new designation.

        delete dbo.REVENUESPLITCAMPAIGN
        where REVENUESPLITID = @APPLICATIONID

        insert into dbo.REVENUESPLITCAMPAIGN(
            REVENUESPLITID, 
            CAMPAIGNID, 
            CAMPAIGNSUBPRIORITYID, 
            ADDEDBYID, 
            CHANGEDBYID, 
            DATEADDED, 
            DATECHANGED
        )
        select distinct
            REVENUESPLIT.ID,
            DESIGNATIONCAMPAIGN.CAMPAIGNID,
            DESIGNATIONCAMPAIGN.CAMPAIGNSUBPRIORITYID,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CREATIONDATE,
            @CREATIONDATE
        from dbo.REVENUE
            inner join dbo.REVENUESPLIT on REVENUE.ID = REVENUESPLIT.REVENUEID
            cross apply dbo.UFN_DESIGNATION_GETCAMPAIGNSTODEFAULT(  
                REVENUESPLIT.DESIGNATIONID, 
                REVENUE.DATE
            ) as DESIGNATIONCAMPAIGN
        where REVENUESPLIT.ID = @APPLICATIONID

        update dbo.INSTALLMENTSPLIT set
            DESIGNATIONID = @APPLICATIONDESIGNATIONID,
            DATECHANGED = @CREATIONDATE,
            CHANGEDBYID = @CHANGEAGENTID
        where
            PLEDGEID = @MGCLAIMREVENUEID and
            DESIGNATIONID = @MGCLAIMDESIGNATIONID

        select @MGCLAIMINSTALLMENTSPLITID = ID
        from dbo.INSTALLMENTSPLIT
        where
            PLEDGEID = @MGCLAIMREVENUEID and
            DESIGNATIONID = @APPLICATIONDESIGNATIONID

        --Bug 129338 - AdamBu - 12/20/10 - Set the output value for the MG split ID.

        set @MGCLAIMREVENUESPLITID = @APPLICATIONID 
    end
    else
    begin
        declare @MGCLAIMBASEAMOUNT money, @APPLIEDBASEAMOUNT money, @APPLIEDORGANIZATIONAMOUNT money;
        declare @BASECURRENCYID uniqueidentifier, @BASEEXCHANGERATEID uniqueidentifier, @TRANSACTIONCURRENCYID uniqueidentifier, @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
        declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

        select 
            @MGCLAIMBASEAMOUNT = AMOUNT,
            @BASECURRENCYID = BASECURRENCYID,
            @BASEEXCHANGERATEID = BASEEXCHANGERATEID,
            @TRANSACTIONCURRENCYID = TRANSACTIONCURRENCYID,
            @ORGANIZATIONEXCHANGERATEID = ORGANIZATIONEXCHANGERATEID
        from dbo.REVENUESPLIT
        where ID = @APPLICATIONID;

        exec dbo.USP_CURRENCY_GETCURRENCYVALUES
            @AMOUNT = @APPLIEDAMOUNT,
            @DATE = null,
            @BASECURRENCYID = @BASECURRENCYID,
            @BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
            @TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
            @BASEAMOUNT = @APPLIEDBASEAMOUNT output,
            @ORGANIZATIONAMOUNT = @APPLIEDORGANIZATIONAMOUNT output,
            @ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID

        update dbo.REVENUESPLIT set
            TRANSACTIONAMOUNT = (@MGCLAIMAMOUNT - @APPLIEDAMOUNT),
            AMOUNT = @MGCLAIMBASEAMOUNT - @APPLIEDBASEAMOUNT,
            ORGANIZATIONAMOUNT = ORGANIZATIONAMOUNT - @APPLIEDORGANIZATIONAMOUNT,
            DATECHANGED = @CREATIONDATE,
            CHANGEDBYID = @CHANGEAGENTID
        where ID = @APPLICATIONID

        update dbo.INSTALLMENTSPLIT set
            TRANSACTIONAMOUNT = (@MGCLAIMAMOUNT - @APPLIEDAMOUNT),
            AMOUNT = @MGCLAIMBASEAMOUNT - @APPLIEDBASEAMOUNT,
            ORGANIZATIONAMOUNT = ORGANIZATIONAMOUNT - @APPLIEDORGANIZATIONAMOUNT,
            DATECHANGED = @CREATIONDATE,
            CHANGEDBYID = @CHANGEAGENTID
        where
            PLEDGEID = @MGCLAIMREVENUEID and
            DESIGNATIONID = @MGCLAIMDESIGNATIONID

        -- Update recognition credit and solicitor amounts

        declare @BASEDECIMALDIGITS tinyint;
        select @BASEDECIMALDIGITS = DECIMALDIGITS 
        from dbo.CURRENCY 
        where ID = @BASECURRENCYID;


        declare @MGCLAIMRECOGNITIONS xml
        set @MGCLAIMRECOGNITIONS = (
            select ID, AMOUNT
            from dbo.REVENUERECOGNITION
            where REVENUESPLITID = @APPLICATIONID
            for xml raw('ITEM'),type,elements,root('AMOUNTSTOPRORATE'),binary base64
        )

        declare @MGCLAIMSOLICITORS xml
        set @MGCLAIMSOLICITORS = (
            select ID, AMOUNT
            from dbo.REVENUESOLICITOR
            where REVENUESPLITID = @APPLICATIONID
            for xml raw('ITEM'),type,elements,root('AMOUNTSTOPRORATE'),binary base64
        )

        update dbo.REVENUERECOGNITION set
            AMOUNT = UPDATEDAMOUNT.AMOUNT,
            ORGANIZATIONAMOUNT = case
                when BASECURRENCYID <> @ORGANIZATIONCURRENCYID
                    then dbo.UFN_CURRENCY_CONVERT(UPDATEDAMOUNT.AMOUNT, ORGANIZATIONEXCHANGERATEID)
                else UPDATEDAMOUNT.AMOUNT
            end,    
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CREATIONDATE
        from dbo.UFN_SPLITS_PRORATEAMOUNTS(@MGCLAIMBASEAMOUNT, @MGCLAIMBASEAMOUNT - @APPLIEDBASEAMOUNT, @BASEDECIMALDIGITS, @MGCLAIMRECOGNITIONS) UPDATEDAMOUNT
        where REVENUERECOGNITION.ID = UPDATEDAMOUNT.ID

        update dbo.REVENUESOLICITOR set
            AMOUNT = UPDATEDAMOUNT.AMOUNT,
            ORGANIZATIONAMOUNT = case
                when BASECURRENCYID <> @ORGANIZATIONCURRENCYID
                    then dbo.UFN_CURRENCY_CONVERT(UPDATEDAMOUNT.AMOUNT, ORGANIZATIONEXCHANGERATEID)
                else UPDATEDAMOUNT.AMOUNT
            end,    
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CREATIONDATE
        from dbo.UFN_SPLITS_PRORATEAMOUNTS(@MGCLAIMBASEAMOUNT, @MGCLAIMBASEAMOUNT - @APPLIEDBASEAMOUNT, @BASEDECIMALDIGITS, @MGCLAIMSOLICITORS) UPDATEDAMOUNT
        where REVENUESOLICITOR.ID = UPDATEDAMOUNT.ID

        --Bug 129338 - AdamBu - 12/20/10 - @MGCLAIMREVENUESPLITID is now an output parameter.

        --declare @MGCLAIMREVENUESPLITID uniqueidentifier;

        set @MGCLAIMREVENUESPLITID = newid();
        insert into dbo.REVENUESPLIT (
            ID, 
            REVENUEID,
            DESIGNATIONID,
            TRANSACTIONAMOUNT,
            TRANSACTIONCURRENCYID,
            AMOUNT,
            BASECURRENCYID,
            BASEEXCHANGERATEID,
            ORGANIZATIONAMOUNT,
            ORGANIZATIONEXCHANGERATEID,
            DATEADDED, 
            DATECHANGED, 
            ADDEDBYID, 
            CHANGEDBYID
        )
        select 
            @MGCLAIMREVENUESPLITID,
            @MGCLAIMREVENUEID,
            @APPLICATIONDESIGNATIONID,
            @APPLIEDAMOUNT,
            TRANSACTIONCURRENCYID,
            @APPLIEDBASEAMOUNT,
            BASECURRENCYID,
            BASEEXCHANGERATEID,
            @APPLIEDORGANIZATIONAMOUNT,
            ORGANIZATIONEXCHANGERATEID,
            @CREATIONDATE
            @CREATIONDATE
            @CHANGEAGENTID
            @CHANGEAGENTID
        from dbo.REVENUESPLIT
        where ID = @APPLICATIONID;

        --Bug 129338 - AdamBu - 12/20/10 - Add the default campaigns for the new MG split.

        insert into dbo.REVENUESPLITCAMPAIGN(
            REVENUESPLITID, 
            CAMPAIGNID, 
            CAMPAIGNSUBPRIORITYID, 
            ADDEDBYID, 
            CHANGEDBYID, 
            DATEADDED, 
            DATECHANGED
        )
        select distinct
            REVENUESPLIT.ID,
            DESIGNATIONCAMPAIGN.CAMPAIGNID,
            DESIGNATIONCAMPAIGN.CAMPAIGNSUBPRIORITYID,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CREATIONDATE,
            @CREATIONDATE
        from dbo.REVENUE
            inner join dbo.REVENUESPLIT on REVENUE.ID = REVENUESPLIT.REVENUEID
            cross apply dbo.UFN_DESIGNATION_GETCAMPAIGNSTODEFAULT(  
                REVENUESPLIT.DESIGNATIONID, 
                REVENUE.DATE
            ) as DESIGNATIONCAMPAIGN
        where REVENUESPLIT.ID = @MGCLAIMREVENUESPLITID

        set @MGCLAIMINSTALLMENTSPLITID = newid();
        insert into dbo.INSTALLMENTSPLIT (
            ID, 
            INSTALLMENTID,
            PLEDGEID,
            DESIGNATIONID,
            TRANSACTIONAMOUNT,
            TRANSACTIONCURRENCYID,
            AMOUNT,
            BASECURRENCYID,
            BASEEXCHANGERATEID,
            ORGANIZATIONAMOUNT,
            ORGANIZATIONEXCHANGERATEID,
            DATEADDED, 
            DATECHANGED, 
            ADDEDBYID, 
            CHANGEDBYID
        )
        select
            @MGCLAIMINSTALLMENTSPLITID,
            INSTALLMENT.ID,
            @MGCLAIMREVENUEID,
            @APPLICATIONDESIGNATIONID,
            @APPLIEDAMOUNT,
            TRANSACTIONCURRENCYID,
            @APPLIEDBASEAMOUNT,
            BASECURRENCYID,
            BASEEXCHANGERATEID,
            @APPLIEDORGANIZATIONAMOUNT,
            ORGANIZATIONEXCHANGERATEID,
            @CREATIONDATE
            @CREATIONDATE
            @CHANGEAGENTID
            @CHANGEAGENTID
        from dbo.INSTALLMENT
        where REVENUEID = @MGCLAIMREVENUEID

        insert into dbo.REVENUERECOGNITION (
            REVENUESPLITID, 
            CONSTITUENTID, 
            AMOUNT, 
            BASECURRENCYID, 
            ORGANIZATIONAMOUNT, 
            ORGANIZATIONEXCHANGERATEID, 
            EFFECTIVEDATE, 
            REVENUERECOGNITIONTYPECODEID, 
            ADDEDBYID, 
            CHANGEDBYID, 
            DATEADDED, 
            DATECHANGED
        )
        select
            @MGCLAIMREVENUESPLITID,
            REVENUERECOGNITION.CONSTITUENTID,
            UPDATEDAMOUNT.AMOUNT,
            REVENUERECOGNITION.BASECURRENCYID,
            case
                when REVENUERECOGNITION.BASECURRENCYID <> @ORGANIZATIONCURRENCYID
                    then dbo.UFN_CURRENCY_CONVERT(UPDATEDAMOUNT.AMOUNT, REVENUERECOGNITION.ORGANIZATIONEXCHANGERATEID)
                else UPDATEDAMOUNT.AMOUNT
            end ORGANIZATIONAMOUNT,    
            REVENUERECOGNITION.ORGANIZATIONEXCHANGERATEID,
            REVENUERECOGNITION.EFFECTIVEDATE,
            REVENUERECOGNITION.REVENUERECOGNITIONTYPECODEID,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CREATIONDATE,
            @CREATIONDATE
        from dbo.UFN_SPLITS_PRORATEAMOUNTS(@MGCLAIMBASEAMOUNT, @APPLIEDBASEAMOUNT, @BASEDECIMALDIGITS, @MGCLAIMRECOGNITIONS) UPDATEDAMOUNT
            inner join dbo.REVENUERECOGNITION on REVENUERECOGNITION.ID = UPDATEDAMOUNT.ID

        insert into dbo.REVENUESOLICITOR (
            REVENUESPLITID, 
            CONSTITUENTID, 
            AMOUNT, 
            BASECURRENCYID, 
            ORGANIZATIONAMOUNT, 
            ORGANIZATIONEXCHANGERATEID, 
            ADDEDBYID, 
            CHANGEDBYID, 
            DATEADDED, 
            DATECHANGED
        )
        select
            @MGCLAIMREVENUESPLITID,
            REVENUESOLICITOR.CONSTITUENTID,
            UPDATEDAMOUNT.AMOUNT,
            REVENUESOLICITOR.BASECURRENCYID,
            case
                when REVENUESOLICITOR.BASECURRENCYID <> @ORGANIZATIONCURRENCYID
                    then dbo.UFN_CURRENCY_CONVERT(UPDATEDAMOUNT.AMOUNT, REVENUESOLICITOR.ORGANIZATIONEXCHANGERATEID)
                else UPDATEDAMOUNT.AMOUNT
            end ORGANIZATIONAMOUNT,    
            REVENUESOLICITOR.ORGANIZATIONEXCHANGERATEID,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CREATIONDATE,
            @CREATIONDATE
        from dbo.UFN_SPLITS_PRORATEAMOUNTS(@MGCLAIMBASEAMOUNT, @APPLIEDBASEAMOUNT, @BASEDECIMALDIGITS, @MGCLAIMSOLICITORS) UPDATEDAMOUNT
            inner join dbo.REVENUESOLICITOR on REVENUESOLICITOR.ID = UPDATEDAMOUNT.ID
    end