USP_BATCHMEMBERSHIPDUES_VALIDATIONREPORT_CURRENCYSUMMARY

Parameters

Parameter Parameter Type Mode Description
@BATCHID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_BATCHMEMBERSHIPDUES_VALIDATIONREPORT_CURRENCYSUMMARY
(
    @BATCHID uniqueidentifier
)
as
begin

    set nocount on;

    --Get batch revenue records we care about

    declare @BATCHMEMBERSHIPDUES table(
        ID uniqueidentifier
        , TOTALAMOUNT money
        , DONATIONAMOUNT money
        , MEMBERSHIPPROGRAMID uniqueidentifier
        , TRANSACTIONCURRENCYID uniqueidentifier
        , BASECURRENCYID uniqueidentifier
        , REVENUETYPECODE tinyint
        , MEMBERSHIPTRANSACTIONTYPECODE tinyint
        , EXCHANGERATEID uniqueidentifier
    );

    insert into @BATCHMEMBERSHIPDUES
        ID
        , TOTALAMOUNT
        , DONATIONAMOUNT
        , MEMBERSHIPPROGRAMID
        , TRANSACTIONCURRENCYID
        , BASECURRENCYID
        , REVENUETYPECODE
        , MEMBERSHIPTRANSACTIONTYPECODE
        , EXCHANGERATEID
    )
    select
        BATCHMEMBERSHIPDUES.ID
        , BATCHMEMBERSHIPDUES.TOTALAMOUNT
        , BATCHMEMBERSHIPDUES.DONATIONAMOUNT
        , BATCHMEMBERSHIPDUES.MEMBERSHIPPROGRAMID
        , BATCHMEMBERSHIPDUES.TRANSACTIONCURRENCYID
        , BATCHMEMBERSHIPDUES.BASECURRENCYID
        , BATCHMEMBERSHIPDUES.REVENUETYPECODE
        , BATCHMEMBERSHIPDUES.MEMBERSHIPTRANSACTIONTYPECODE
        , case 
            when BATCHMEMBERSHIPDUES.TRANSACTIONCURRENCYID = BATCHMEMBERSHIPDUES.BASECURRENCYID then null
            else dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(BATCHMEMBERSHIPDUES.BASECURRENCYID, BATCHMEMBERSHIPDUES.TRANSACTIONCURRENCYID, null, 1, null)
          end
    from dbo.BATCHMEMBERSHIPDUES
    where BATCHMEMBERSHIPDUES.BATCHID = @BATCHID;

    --Get currencies used by batch revenue records we care about.

    declare @CURRENCY table(
        ID uniqueidentifier,
        NAME nvarchar(100),
        ISO4217 nvarchar(3),
        DECIMALDIGITS tinyint,
        CURRENCYSYMBOL nvarchar(5),
        SYMBOLDISPLAYSETTINGCODE tinyint
    );

    insert into @CURRENCY(
        ID,
        NAME,
        ISO4217,
        DECIMALDIGITS,
        CURRENCYSYMBOL,
        SYMBOLDISPLAYSETTINGCODE
    )
    select distinct
        ID,
        NAME,
        ISO4217,
        DECIMALDIGITS,
        CURRENCYSYMBOL,
        SYMBOLDISPLAYSETTINGCODE
    from dbo.CURRENCY
    where ID in(
        select
            TRANSACTIONCURRENCYID
        from @BATCHMEMBERSHIPDUES
    );

    if @@ROWCOUNT > 1
    begin            
        --If there is more than one currency, do the aggregation.

        select
            CURRENCY.ID CURRENCYID
            , CURRENCY.NAME CURRENCYNAME
            , CURRENCY.ISO4217
            , CURRENCY.DECIMALDIGITS
            , CURRENCY.CURRENCYSYMBOL
            , CURRENCY.SYMBOLDISPLAYSETTINGCODE
            , coalesce((select sum(TOTALAMOUNT) from @BATCHMEMBERSHIPDUES BMD where BMD.TRANSACTIONCURRENCYID = CURRENCY.ID), 0) as CURRENTTOTALAMOUNT
            , coalesce((select count(ID) from @BATCHMEMBERSHIPDUES BMD where BMD.TRANSACTIONCURRENCYID = CURRENCY.ID), 0) as CURRENTNUMBEROFRECORDS
            , coalesce((select 
                            case 
                                when BMD.EXCHANGERATEID is null then
                                    SUM(MPA.PRICE * BMDA.NUMBEROFADDONS)
                                else 
                                    dbo.UFN_CURRENCY_CONVERT(SUM(MPA.PRICE * BMDA.NUMBEROFADDONS), BMD.EXCHANGERATEID)
                            end
                    from @BATCHMEMBERSHIPDUES BMD
                        inner join dbo.BATCHMEMBERSHIPDUESMEMBERSHIPROGRAMADDON BMDA on BMD.ID = BMDA.BATCHMEMBERSHIPDUESID
                        inner join dbo.MEMBERSHIPPROGRAMADDON MPA on MPA.ADDONID = BMDA.ADDONID and BMD.MEMBERSHIPPROGRAMID = MPA.MEMBERSHIPPROGRAMID
                    where BMD.TRANSACTIONCURRENCYID = CURRENCY.ID
                    group by BMD.EXCHANGERATEID), 0) as TOTALADDONAMOUNT
            , coalesce((select SUM(DONATIONAMOUNT) from dbo.BATCHMEMBERSHIPDUES where BATCHID = @BATCHID), 0) as TOTALDONATIONAMOUNT
        from @CURRENCY CURRENCY;
    end
end