UFN_BILLINGINDIVIDUALAGING

Returns billing aging information for a given individual.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN
@ASOFDATE datetime IN

Definition

Copy


            CREATE function dbo.UFN_BILLINGINDIVIDUALAGING
            (
                @CONSTITUENTID uniqueidentifier,
                @ASOFDATE datetime = null
            )
            returns @AGINGBUCKETS table
            (
                SEQUENCE int,
                LABEL nvarchar(100),
                AMOUNT money
            )
            with execute as caller
            as begin

                -- If past in null then get today's date

                if (@ASOFDATE is null)
                    set @ASOFDATE = getdate();

                -- Get the earliest time for this day

                set @ASOFDATE = dbo.UFN_DATE_GETEARLIESTTIME(@ASOFDATE);

                -- Setup a temporary variable for the total unapplied payment amount

                declare @TOTALUNAPPLIEDPAYMENTAMOUNT money;
                set @TOTALUNAPPLIEDPAYMENTAMOUNT = dbo.UFN_BILLINGUNAPPLIEDPAYMENTCREDITTOTALINDIVIDUAL(@CONSTITUENTID, null, @ASOFDATE);

                declare @CURRENTBUCKETAMOUNT money;
                set @CURRENTBUCKETAMOUNT = dbo.UFN_BILLINGTRANSACTIONTYPETOTAL(104, @CONSTITUENTID, null , dateadd(d, -91, @ASOFDATE), 1, 1, 1);

                -- Get the last bucket first

                insert into @AGINGBUCKETS
                    (SEQUENCE, LABEL, AMOUNT)
                select 4,
                        'Over 90 days:',
                        case when (@CURRENTBUCKETAMOUNT - @TOTALUNAPPLIEDPAYMENTAMOUNT) <=  0 then
                                0
                            else
                                @CURRENTBUCKETAMOUNT - @TOTALUNAPPLIEDPAYMENTAMOUNT
                            end;

                declare @LASTBUCKETAMOUNT money;
                set @LASTBUCKETAMOUNT = @CURRENTBUCKETAMOUNT;

                -- Get the next bucket

                set @CURRENTBUCKETAMOUNT = dbo.UFN_BILLINGTRANSACTIONTYPETOTAL(104, @CONSTITUENTID, null , dateadd(d, -61, @ASOFDATE), 1, 1, 1);

                insert into @AGINGBUCKETS
                    (SEQUENCE, LABEL, AMOUNT)
                select 3,
                        '61-90 days:',
                        case when (@CURRENTBUCKETAMOUNT - @TOTALUNAPPLIEDPAYMENTAMOUNT) <=  0 then
                                0
                            when (@LASTBUCKETAMOUNT > @TOTALUNAPPLIEDPAYMENTAMOUNT) then
                                @CURRENTBUCKETAMOUNT - @LASTBUCKETAMOUNT 
                            else
                                (@CURRENTBUCKETAMOUNT - @LASTBUCKETAMOUNT) - (@TOTALUNAPPLIEDPAYMENTAMOUNT - @LASTBUCKETAMOUNT)
                            end;

                set @LASTBUCKETAMOUNT = @CURRENTBUCKETAMOUNT;

                -- Get the next bucket

                set @CURRENTBUCKETAMOUNT = dbo.UFN_BILLINGTRANSACTIONTYPETOTAL(104, @CONSTITUENTID, null , dateadd(d, -31, @ASOFDATE), 1, 1, 1);

                insert into @AGINGBUCKETS
                    (SEQUENCE, LABEL, AMOUNT)
                select 2,
                        '31-60 days:',
                        case when (@CURRENTBUCKETAMOUNT - @TOTALUNAPPLIEDPAYMENTAMOUNT) <=  0 then
                                0
                            when (@LASTBUCKETAMOUNT > @TOTALUNAPPLIEDPAYMENTAMOUNT) then
                                @CURRENTBUCKETAMOUNT - @LASTBUCKETAMOUNT
                            else
                                (@CURRENTBUCKETAMOUNT - @LASTBUCKETAMOUNT) - (@TOTALUNAPPLIEDPAYMENTAMOUNT - @LASTBUCKETAMOUNT)
                            end;

                set @LASTBUCKETAMOUNT = @CURRENTBUCKETAMOUNT;

                -- Get the next bucket

                set @CURRENTBUCKETAMOUNT = dbo.UFN_BILLINGTRANSACTIONTYPETOTAL(104, @CONSTITUENTID, null , @ASOFDATE, 1, 1, 1);

                insert into @AGINGBUCKETS
                    (SEQUENCE, LABEL, AMOUNT)
                select 1,
                        'Current:',
                        case when (@CURRENTBUCKETAMOUNT - @TOTALUNAPPLIEDPAYMENTAMOUNT) <=  0 then
                                0
                            when (@LASTBUCKETAMOUNT > @TOTALUNAPPLIEDPAYMENTAMOUNT) then
                                @CURRENTBUCKETAMOUNT - @LASTBUCKETAMOUNT
                            else
                                (@CURRENTBUCKETAMOUNT - @LASTBUCKETAMOUNT) - (@TOTALUNAPPLIEDPAYMENTAMOUNT - @LASTBUCKETAMOUNT)
                            end;

                return;
            end