UFN_RECEIVABLEPAYMENTCREDITAPPLICATIONS

Gets a list of all the receivable payment applications for a given payment

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@RECEIVABLEPAYMENTCREDITLINEITEMID uniqueidentifier IN
@RECEIVABLEPAYMENTCREDITOWNERID uniqueidentifier IN
@INCLUDEPOSSIBLEAPPLICATIONS bit IN

Definition

Copy


            CREATE function dbo.UFN_RECEIVABLEPAYMENTCREDITAPPLICATIONS
                (
                    @RECEIVABLEPAYMENTCREDITLINEITEMID uniqueidentifier = null,
                    @RECEIVABLEPAYMENTCREDITOWNERID uniqueidentifier = null,
                    @INCLUDEPOSSIBLEAPPLICATIONS bit = 1
                )
            returns @APPLICATIONS table
                (
                    ID uniqueidentifier,
                    SOURCELINEITEMID uniqueidentifier,
                    TARGETLINEITEMID uniqueidentifier NOT NULL,
                    TARGETID uniqueidentifier NOT NULL,
                    TARGETLINEITEMDESCRIPTION nvarchar(100),
                    DUEDATE datetime,
                    APPLICATIONDATE datetime,
                    DATE datetime NOT NULL,
                    NAME nvarchar(100) NOT NULL,
                    BILLINGITEMNAME nvarchar(100) NOT NULL,
                    DESCRIPTION nvarchar(100) NOT NULL,
                    TOTALAMOUNT money NOT NULL,
                    TOTALAMOUNTREMAINING money NOT NULL,
                    AMOUNT money NOT NULL,
                    DUEON nvarchar(40),
                    POSTDATE date NULL,
                    POSTSTATUSCODE tinyint
                )
            with execute as caller
            as 
            begin

                -- Check the basic rule that only one of the two IDs can be passed in

                if ((not @RECEIVABLEPAYMENTCREDITLINEITEMID is null) and (not @RECEIVABLEPAYMENTCREDITOWNERID is null))
                    return;

                -- Check the basic rule that one of the two IDs must be passed in

                if ((@RECEIVABLEPAYMENTCREDITLINEITEMID is null) and (@RECEIVABLEPAYMENTCREDITOWNERID is null))
                    return;

                -- Generate a table with all the existing applications

                if (not @RECEIVABLEPAYMENTCREDITLINEITEMID is null)
                begin
                    insert into @APPLICATIONS
                        (ID,
                        SOURCELINEITEMID,
                        TARGETLINEITEMID,
                        TARGETID,
                        TARGETLINEITEMDESCRIPTION,
                        DUEDATE,
                        APPLICATIONDATE,
                        DATE,
                        NAME,
                        BILLINGITEMNAME,
                        DESCRIPTION,
                        TOTALAMOUNT,
                        TOTALAMOUNTREMAINING,
                        AMOUNT,
                        DUEON,
                        POSTDATE,
                        POSTSTATUSCODE)
                    select FINANCIALTRANSACTIONLINEITEM_APPLICATION.ID,
                            FINANCIALTRANSACTIONLINEITEM_APPLICATION.SOURCELINEITEMID,
                            FINANCIALTRANSACTIONLINEITEM_APPLICATION.TARGETLINEITEMID,
                            FINANCIALTRANSACTION_CHARGE.ID,
                            FINANCIALTRANSACTIONLINEITEM_CHARGE.DESCRIPTION,
                            CHARGE.DUEDATE,
                            case when (FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.DATE > FINANCIALTRANSACTION_CHARGE.DATE) then
                                FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.DATE
                            else
                                FINANCIALTRANSACTION_CHARGE.DATE
                            end,
                            FINANCIALTRANSACTION_CHARGE.DATE,
                            CONSTITUENT_CHARGEOWNER.NAME,
                            BILLINGITEM.NAME,
                            FINANCIALTRANSACTIONLINEITEM_CHARGE.DESCRIPTION,
                            FINANCIALTRANSACTIONLINEITEM_CHARGE.TRANSACTIONAMOUNT,
                            FINANCIALTRANSACTIONLINEITEM_CHARGE.TRANSACTIONAMOUNT,
                            FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT,
  convert(nvarchar(10), CHARGE.DUEDATE, 101),
                            FINANCIALTRANSACTIONLINEITEM_APPLICATION.POSTDATE,
                            FINANCIALTRANSACTIONLINEITEM_APPLICATION.POSTSTATUSCODE
                    from dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENTCREDIT
                        inner join dbo.FINANCIALTRANSACTION as FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT
                            on FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.ID = FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENTCREDIT.FINANCIALTRANSACTIONID
                        inner join FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_APPLICATION
                            on FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENTCREDIT.ID = FINANCIALTRANSACTIONLINEITEM_APPLICATION.SOURCELINEITEMID
                        inner join dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_CHARGE
                            on FINANCIALTRANSACTIONLINEITEM_CHARGE.ID = FINANCIALTRANSACTIONLINEITEM_APPLICATION.TARGETLINEITEMID
                        inner join dbo.FINANCIALTRANSACTION as FINANCIALTRANSACTION_CHARGE
                            on FINANCIALTRANSACTIONLINEITEM_CHARGE.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION_CHARGE.ID
                        inner join dbo.CHARGE
                            on CHARGE.ID =FINANCIALTRANSACTION_CHARGE.ID
                        inner join dbo.CONSTITUENT as CONSTITUENT_CHARGEOWNER
                            on FINANCIALTRANSACTION_CHARGE.CONSTITUENTID = CONSTITUENT_CHARGEOWNER.ID
                        inner join dbo.CHARGELINEITEM
                            on CHARGELINEITEM.ID = FINANCIALTRANSACTIONLINEITEM_CHARGE.ID
                        inner join dbo.BILLINGITEM
                            on BILLINGITEM.ID = CHARGELINEITEM.BILLINGITEMID
                    where (FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENTCREDIT.ID = @RECEIVABLEPAYMENTCREDITLINEITEMID) and
                            (FINANCIALTRANSACTIONLINEITEM_APPLICATION.DELETEDON is null);
                end

                -- Are we including possible applications

                if ((@INCLUDEPOSSIBLEAPPLICATIONS = 1) or (not @RECEIVABLEPAYMENTCREDITOWNERID is null))
                begin
                    -- Get the payment owner

                    if (@RECEIVABLEPAYMENTCREDITOWNERID is null)
                    begin
                        select @RECEIVABLEPAYMENTCREDITOWNERID = FINANCIALTRANSACTION.CONSTITUENTID
                        from dbo.FINANCIALTRANSACTION
                            inner join dbo.FINANCIALTRANSACTIONLINEITEM
                                on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
                        where FINANCIALTRANSACTIONLINEITEM.ID = @RECEIVABLEPAYMENTCREDITLINEITEMID;
                    end

                    -- Find all the possible charge line items for this payment that do not already have applications

                    --  and that this payment owner is responsible for.

                    insert into @APPLICATIONS
                        (ID,
                        SOURCELINEITEMID,
                        TARGETLINEITEMID,
                        TARGETID,
                        TARGETLINEITEMDESCRIPTION,
                        DUEDATE,
                        DATE,
                        NAME,
                        BILLINGITEMNAME,
                        DESCRIPTION,
                        TOTALAMOUNT,
                        TOTALAMOUNTREMAINING,
                        AMOUNT,
                        DUEON,
                        POSTDATE,
                        POSTSTATUSCODE)
                    select null,
                            @RECEIVABLEPAYMENTCREDITLINEITEMID,
                            FINANCIALTRANSACTIONLINEITEM_CHARGE.ID,
   FINANCIALTRANSACTION_CHARGE.ID,
                            FINANCIALTRANSACTIONLINEITEM_CHARGE.DESCRIPTION,
                            CHARGE.DUEDATE,
                            FINANCIALTRANSACTION_CHARGE.DATE,
                            CONSTITUENT_CHARGEOWNER.NAME,
                            BILLINGITEM.NAME,
                            FINANCIALTRANSACTIONLINEITEM_CHARGE.DESCRIPTION,
                            FINANCIALTRANSACTIONLINEITEM_CHARGE.TRANSACTIONAMOUNT,
                            FINANCIALTRANSACTIONLINEITEM_CHARGE.TRANSACTIONAMOUNT,
                            0,
                            convert(nvarchar(10), CHARGE.DUEDATE, 101),
                            null,
                            1
                    from dbo.CHARGE
                        inner join dbo.FINANCIALTRANSACTION as FINANCIALTRANSACTION_CHARGE
                            on CHARGE.ID = FINANCIALTRANSACTION_CHARGE.ID
                        inner join dbo.CONSTITUENT as CONSTITUENT_CHARGEOWNER
                            on FINANCIALTRANSACTION_CHARGE.CONSTITUENTID = CONSTITUENT_CHARGEOWNER.ID
                        inner join dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_CHARGE
                            on FINANCIALTRANSACTION_CHARGE.ID = FINANCIALTRANSACTIONLINEITEM_CHARGE.FINANCIALTRANSACTIONID
                        inner join dbo.CHARGELINEITEM
                            on CHARGELINEITEM.ID = FINANCIALTRANSACTIONLINEITEM_CHARGE.ID
                        inner join dbo.BILLINGITEM
                            on BILLINGITEM.ID = CHARGELINEITEM.BILLINGITEMID
                        inner join dbo.V_QUERY_CHARGELINEITEMRESPONSIBILITY
                            on (V_QUERY_CHARGELINEITEMRESPONSIBILITY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM_CHARGE.ID) and
                                (V_QUERY_CHARGELINEITEMRESPONSIBILITY.CONSTITUENTID = @RECEIVABLEPAYMENTCREDITOWNERID)
                        left outer join @APPLICATIONS as APPLICATIONS
                            on APPLICATIONS.TARGETLINEITEMID = FINANCIALTRANSACTIONLINEITEM_CHARGE.ID
                    where (APPLICATIONS.ID is null);
                end

                -- Now subtract the already made payments

                update @APPLICATIONS
                    set TOTALAMOUNTREMAINING = TOTALAMOUNTREMAINING - isnull((select sum(FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT)
                                                                                from dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_APPLICATION
                                                                                where (FINANCIALTRANSACTIONLINEITEM_APPLICATION.DELETEDON is null) and
                                                                                        (FINANCIALTRANSACTIONLINEITEM_APPLICATION.TARGETLINEITEMID = APPLICATIONS.TARGETLINEITEMID)
                                                                                group by FINANCIALTRANSACTIONLINEITEM_APPLICATION.TARGETLINEITEMID), 0)
                from @APPLICATIONS as APPLICATIONS;

                -- Update due date to only show days late if there is an overdue balance

                update @APPLICATIONS
                    set DUEON = case when ((DATEDIFF(day, DUEDATE, GETDATE()) = 1) and (TOTALAMOUNTREMAINING > 0)) then 
                                DUEON + ' - 1 day late'
                            when ((DATEDIFF(day, DUEDATE, GETDATE()) > 0) and (TOTALAMOUNTREMAINING > 0)) then 
                                DUEON + ' - ' + convert(nvarchar(10), DATEDIFF(day, DUEDATE, GETDATE())) + ' days late'
                            else 
                                DUEON
                            end

                -- Now remove any possible charges where the amount remaining is zero

                delete from @APPLICATIONS
                where (ID is null) and (TOTALAMOUNTREMAINING = 0);

                return;
            end