USP_BENEFIT_USERMODIFIEDBENEFITS

Parameters

Parameter Parameter Type Mode Description
@APPLICATIONINFO nvarchar(60) IN
@REVENUESTREAMS xml IN
@APPEALID uniqueidentifier IN
@AMOUNT money IN
@DATE datetime IN
@TRANSACTIONCURRENCYID uniqueidentifier IN
@BASECURRENCYID uniqueidentifier IN
@REVENUEBENEFITS xml IN
@REVENUEPERCENTAGEBENEFITS xml IN
@EXCHANGERATE decimal(20, 8) IN
@BASEEXCHANGERATEID uniqueidentifier IN
@USERMODIFIEDBENEFITS bit INOUT

Definition

Copy


    create procedure dbo.USP_BENEFIT_USERMODIFIEDBENEFITS
    (
        @APPLICATIONINFO nvarchar(60), 
        @REVENUESTREAMS xml, 
        @APPEALID uniqueidentifier, 
        @AMOUNT money, 
        @DATE datetime
        @TRANSACTIONCURRENCYID uniqueidentifier, 
        @BASECURRENCYID uniqueidentifier, 
        @REVENUEBENEFITS xml, 
        @REVENUEPERCENTAGEBENEFITS xml, 
        @EXCHANGERATE decimal(20,8), 
        @BASEEXCHANGERATEID uniqueidentifier,
        @USERMODIFIEDBENEFITS bit output
    )
    as
    begin

    --Logic for this procedure is used from the reference Blackbaud.AppFx.Fundraising.UIModel\TransactionDataLoader.vb\SetUserModifiedBenefits().

    --This procedure sets USERMODIFIEDBENEFITS bit after comparing benefits same as it is being done in RUB.


        declare @DEFAULTUNITBENEFITCOUNT int;
        declare @DEFAULTPERCENTAGEBENEFITCOUNT int;
        declare @ROWUNITBENEFITCOUNT int;
        declare @ROWPERCENTBENEFITCOUNT int;
        declare @ACTUALUNITBENEFITCOUNT int;
        declare @ACTUALPERCENTBENEFITCOUNT int;
        declare @BENEFITS xml;
        declare @PERCENTAGEBENEFITS xml;

        declare @UNITBENEFIT table 
        (
            BENEFITID uniqueidentifier,
            QUANTITY int,
            UNITVALUE money
        );

        declare @PERCENTAGEBENEFIT table 
        (
            BENEFITID uniqueidentifier,
            VALUEPERCENT decimal
        );

        declare @ROWUNITBENEFITS as table
        (
            BENEFITID uniqueidentifier,
            QUANTITY smallint,
            UNITVALUE money,
            TOTALVALUE money,
            DETAILS nvarchar(100),
            SEQUENCE int
        );

        declare @ROWPERCENTAGEBENEFITS as table
        (
            BENEFITID uniqueidentifier,
            VALUEPERCENT int,
            TOTALVALUE money,
            DETAILS nvarchar(100),
            SEQUENCE int
        );

        --Get all default benefits. This includes benefits from appeals, event registrations, and memberships.

        if @APPEALID is not null
        begin 

        --Get Membership Defaults.

            if exists(select 1 from [dbo].[UFN_APPEAL_GETMEMBERSHIPDEFAULTS](@APPEALID, @AMOUNT))
            begin

                declare @MEMBERSHIPLEVELID uniqueidentifier;
                select @MEMBERSHIPLEVELID=MEMBERSHIPLEVELID from [dbo].[UFN_APPEAL_GETMEMBERSHIPDEFAULTS](@APPEALID, @AMOUNT);

            --Get Membership Level Benefits.

                insert into @UNITBENEFIT (BENEFITID, QUANTITY, UNITVALUE) 
                (
                    select BENEFITID, QUANTITY, UNITVALUE from 
                    dbo.MEMBERSHIPLEVELBENEFIT 
                    where dbo.MEMBERSHIPLEVELBENEFIT.USEPERCENT = 0 and dbo.MEMBERSHIPLEVELBENEFIT.MEMBERSHIPLEVELID = @MEMBERSHIPLEVELID
                );

                insert into @PERCENTAGEBENEFIT (BENEFITID, VALUEPERCENT) 
                (
                    select BENEFITID, VALUEPERCENT from 
                    dbo.MEMBERSHIPLEVELBENEFIT 
                    where dbo.MEMBERSHIPLEVELBENEFIT.USEPERCENT = 1 and dbo.MEMBERSHIPLEVELBENEFIT.MEMBERSHIPLEVELID = @MEMBERSHIPLEVELID
                );

            end
        end


        -- Get Revenue batch benefits, it includes event registrant and appeal benefits.

        exec dbo.[USP_REVENUEBATCH_GETDEFAULTBENEFITS] 
            @APPLICATIONINFO = @APPLICATIONINFO
            @REVENUESTREAMS = @REVENUESTREAMS
            @APPEALID = @APPEALID
            @AMOUNT = @AMOUNT
            @DATE = @DATE
            @TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID
            @BASECURRENCYID = @BASECURRENCYID
            @BENEFITS = @BENEFITS output
            @PERCENTAGEBENEFITS = @PERCENTAGEBENEFITS output
            @EXCHANGERATE = @EXCHANGERATE
            @BASEEXCHANGERATEID = @BASEEXCHANGERATEID;

        --Insert benefits .

        insert into @UNITBENEFIT 
        select T.c.value('(BENEFITID)[1]','uniqueidentifier') AS 'BENEFITID',
        T.c.value('(QUANTITY)[1]','int') AS 'QUANTITY',
        T.c.value('(UNITVALUE)[1]','money') AS 'UNITVALUE' from @BENEFITS.nodes('/BENEFITS/ITEM') T(c);

        insert into @PERCENTAGEBENEFIT 
        select T.c.value('(BENEFITID)[1]','uniqueidentifier') AS 'BENEFITID',
        T.c.value('(VALUEPERCENT)[1]','decimal(20, 4)') AS 'VALUEPERCENT' from @PERCENTAGEBENEFITS.nodes('/PERCENTAGEBENEFITS/ITEM') T(c);

        -- Get the benefits from Revenue batch benefits grid.

        insert into @ROWUNITBENEFITS
        select T.c.value('(BENEFITID)[1]','uniqueidentifier') AS 'BENEFITID',
        T.c.value('(QUANTITY)[1]','int') AS 'QUANTITY',
        T.c.value('(UNITVALUE)[1]','money') AS 'UNITVALUE',
        T.c.value('(TOTALVALUE)[1]','money') AS 'TOTALVALUE',
        T.c.value('(DETAILS)[1]','nvarchar(100)') AS 'DETAILS',
        T.c.value('(SEQUENCE)[1]','int') AS 'SEQUENCE' from @REVENUEBENEFITS.nodes('/BENEFITS/ITEM') T(c);

        insert into @ROWPERCENTAGEBENEFITS 
        select T.c.value('(BENEFITID)[1]','uniqueidentifier') AS 'BENEFITID',
        T.c.value('(VALUEPERCENT)[1]','decimal(20, 4)') AS 'VALUEPERCENT',
        T.c.value('(TOTALVALUE)[1]','money') AS 'TOTALVALUE',
        T.c.value('(DETAILS)[1]','nvarchar(100)') AS DETAILS,
        T.c.value('(SEQUENCE)[1]','int') AS 'SEQUENCE' from @REVENUEPERCENTAGEBENEFITS.nodes('/PERCENTAGEBENEFITS/ITEM') T(c);

        --Count all the default benefits.

        select @DEFAULTUNITBENEFITCOUNT = count(1) from @UNITBENEFIT;
        select @DEFAULTPERCENTAGEBENEFITCOUNT = count(1) from @PERCENTAGEBENEFIT;

        --Count all the Row benefits. Row benefits are benefits from Revenue batch benefits grid.

        select @ROWUNITBENEFITCOUNT = count(1) from @ROWUNITBENEFITS;
        select @ROWPERCENTBENEFITCOUNT = count(1) from @ROWPERCENTAGEBENEFITS;

        -- Compare benefits.

        if(@DEFAULTUNITBENEFITCOUNT = @ROWUNITBENEFITCOUNT) and (@DEFAULTPERCENTAGEBENEFITCOUNT = @ROWPERCENTBENEFITCOUNT
        begin
            select @ACTUALUNITBENEFITCOUNT = count(1
            from @ROWUNITBENEFITS RUB
            inner join @UNITBENEFIT UB on RUB.BENEFITID = UB.BENEFITID and RUB.QUANTITY = UB.QUANTITY and RUB.UNITVALUE = UB.UNITVALUE;

            select @ACTUALPERCENTBENEFITCOUNT = count(1
            from @ROWPERCENTAGEBENEFITS RPB
            inner join @PERCENTAGEBENEFIT PB on RPB.BENEFITID = PB.BENEFITID and RPB.VALUEPERCENT = PB.VALUEPERCENT;

            -- Set USERMODIFIEDBENEFITS field to true, if the benefits are different else set it to false.

            if ((@ACTUALUNITBENEFITCOUNT = @DEFAULTUNITBENEFITCOUNT ) and (@ACTUALPERCENTBENEFITCOUNT = @DEFAULTPERCENTAGEBENEFITCOUNT))
                    set @USERMODIFIEDBENEFITS = 0;
            else
                    set @USERMODIFIEDBENEFITS = 1;
        end
        else
            set @USERMODIFIEDBENEFITS = 1;
        end