USP_REPORT_APPEALPROFILE_BENEFITS

Returns all benefits associated with an appeal.

Parameters

Parameter Parameter Type Mode Description
@APPEALID uniqueidentifier IN
@SHOW bit IN
@CURRENCYCODE tinyint IN

Definition

Copy


            CREATE procedure dbo.USP_REPORT_APPEALPROFILE_BENEFITS
            (
                @APPEALID uniqueidentifier = null,
                @SHOW bit = null,
                @CURRENCYCODE tinyint = null
            )
            as
                set nocount on;

                begin try
                    if @SHOW = 1
                    begin
                        -- NOTE: Be sure to update AppealProfileReportSectionsHaveData.View.xml if you modify

                        -- the joins/constraints of the below query.


                        declare @ORGANIZATIONCURRENCYID uniqueidentifier;
                        declare @LEASTSIGNIFICANTAMOUNT money;

                        if coalesce(@CURRENCYCODE, 1) = 1
                        begin
                            set @CURRENCYCODE = 1;
                            set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

                            --power() function returns the same number of decimal digits as the first parameter has, using a number with the maximum decimal digits a money type can have

                            select @LEASTSIGNIFICANTAMOUNT = power(10.0000,-CURRENCY.DECIMALDIGITS)
                                from dbo.CURRENCY
                                where CURRENCY.ID = @ORGANIZATIONCURRENCYID
                        end
                        else begin
                            set @CURRENCYCODE = 0;

                            select @LEASTSIGNIFICANTAMOUNT = power(10.0000,-CURRENCY.DECIMALDIGITS)
                                from dbo.APPEAL
                                    left join dbo.CURRENCY on CURRENCY.ID = APPEAL.BASECURRENCYID
                                where APPEAL.ID = @APPEALID;
                        end;

                        --this is to correctly assign levels to benefits,

                        --doing this inline does not work correctly

                        with LEVELMAP( LEVEL, AMOUNT ) as
                        (
                            select distinct
                                RANK() OVER(order by AMOUNT),
                                AMOUNT
                            from
                            dbo.APPEALBENEFIT
                            where
                                APPEALID = @APPEALID
                        )
                        select
                            APPEALBENEFIT.ID,
                            LEVELMAP.LEVEL,
                            case @CURRENCYCODE
                                when 0 then APPEALBENEFIT.AMOUNT
                                else APPEALBENEFIT.ORGANIZATIONAMOUNT
                            end as MINAMOUNT,
                            (select top (1) (
                                case @CURRENCYCODE
                                    when 0 then NEXTAPPEALBENEFITLEVEL.AMOUNT
                                    else NEXTAPPEALBENEFITLEVEL.ORGANIZATIONAMOUNT
                                end - @LEASTSIGNIFICANTAMOUNT) from DBO.APPEALBENEFIT NEXTAPPEALBENEFITLEVEL
                                        where NEXTAPPEALBENEFITLEVEL.APPEALID = @APPEALID 
                                            and NEXTAPPEALBENEFITLEVEL.AMOUNT > APPEALBENEFIT.AMOUNT
                                        order by NEXTAPPEALBENEFITLEVEL.AMOUNT asc) MAXAMOUNT,
                            BENEFIT.NAME,
                            APPEALBENEFITDETAIL.QUANTITY,
                            case @CURRENCYCODE
                                when 0 then APPEALBENEFITDETAIL.VALUE
                                else APPEALBENEFITDETAIL.ORGANIZATIONVALUE
                            end as COST,
                            BENEFIT.VALUE,
                            CURRENCYPROPERTIES.ID as CURRENCYID,
                            CURRENCYPROPERTIES.ISO4217 as CURRENCYISO,
                            CURRENCYPROPERTIES.DECIMALDIGITS as CURRENCYDECIMALDIGITS,
                            CURRENCYPROPERTIES.CURRENCYSYMBOL as CURRENCYSYMBOL,
                            CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE as CURRENCYSYMBOLDISPLAYSETTINGCODE,
                            DETAILCURRENCYPROPERTIES.ID as DETAILCURRENCYID,
                            DETAILCURRENCYPROPERTIES.ISO4217 as DETAILCURRENCYISO,
                            DETAILCURRENCYPROPERTIES.DECIMALDIGITS as DETAILCURRENCYDECIMALDIGITS,
                            DETAILCURRENCYPROPERTIES.CURRENCYSYMBOL as DETAILCURRENCYSYMBOL,
                            DETAILCURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE as DETAILCURRENCYSYMBOLDISPLAYSETTINGCODE
                        from
                            dbo.APPEALBENEFIT
                            left join dbo.APPEALBENEFITDETAIL on APPEALBENEFIT.ID = APPEALBENEFITDETAIL.APPEALBENEFITID
                            left join dbo.BENEFIT on APPEALBENEFITDETAIL.BENEFITID = BENEFIT.ID
                            left join LEVELMAP on APPEALBENEFIT.AMOUNT = LEVELMAP.AMOUNT
                            outer apply dbo.UFN_CURRENCY_GETPROPERTIES(coalesce(@ORGANIZATIONCURRENCYID, APPEALBENEFIT.BASECURRENCYID)) CURRENCYPROPERTIES
                            outer apply dbo.UFN_CURRENCY_GETPROPERTIES(coalesce(@ORGANIZATIONCURRENCYID, APPEALBENEFITDETAIL.BASECURRENCYID)) DETAILCURRENCYPROPERTIES
                        where
                            APPEALID = @APPEALID
                        order by
                            APPEALBENEFIT.AMOUNT;
                    end
                end try

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

                return 0;