UFN_BILLINGINDIVIDUALTRANSACTIONDETAILS

Returns a table with details about an individual's billing transactions.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN
@TYPECODE tinyint IN
@STATUSCODE tinyint IN
@BILLINGSTARTDATE datetime IN
@BILLINGENDDATE datetime IN
@BILLINGSTARTDUEDATE datetime IN
@BILLINGENDDUEDATE datetime IN

Definition

Copy


            CREATE function dbo.UFN_BILLINGINDIVIDUALTRANSACTIONDETAILS
            (
                @CONSTITUENTID uniqueidentifier,
                @TYPECODE tinyint = 0,      -- see BillingIndividualActivity.DataList.xml for details

                @STATUSCODE tinyint = 0,    -- see BillingIndividualActivity.DataList.xml for details

                @BILLINGSTARTDATE datetime,
                @BILLINGENDDATE datetime,
                @BILLINGSTARTDUEDATE datetime,
                @BILLINGENDDUEDATE datetime
            )
            returns @TRANSACTIONS table
                (
                    ID uniqueidentifier,
                    DATE datetime,
                    DUEDATE datetime,
                    DAYSLATE integer,
                    DUEDATEDISPLAY nvarchar(50),
                    TYPE nvarchar(50),
                    TYPECODE tinyint,
                    DESCRIPTION nvarchar(200),
                    AMOUNT money,
                    AMOUNTREMAINING money,
                    PAIDBY nvarchar(100),
                    STATUSCODE tinyint,
                    STATUS nvarchar(100)
                )
            as
            begin  
                insert into @TRANSACTIONS
                select ID,
                        DATE,
                        DUEDATE,
                        DAYSLATE,
                        DUEDATEDISPLAY,
                        TYPE,
                        TYPECODE,
                        DESCRIPTION,
                        TRANSACTIONAMOUNT,
                        AMOUNTREMAINING,
                        PAIDBY,
                        STATUSCODE,
                        STATUS
                from (
                    select FINANCIALTRANSACTION.ID,
                            FINANCIALTRANSACTION.DATE,
                            CHARGE.DUEDATE,
                            case when ((FINANCIALTRANSACTION.TRANSACTIONAMOUNT > sum(isnull(FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT, 0))) and 
                                      (FINANCIALTRANSACTION.TYPECODE = 104) and 
                                      (CHARGE.DUEDATE < dbo.UFN_DATE_GETEARLIESTTIME(getdate()))) then
                                    datediff(d, CHARGE.DUEDATE, dbo.UFN_DATE_GETEARLIESTTIME(getdate()))
                                else
                                    0
                            end as DAYSLATE,
                            case when ((FINANCIALTRANSACTION.TRANSACTIONAMOUNT > sum(isnull(FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT, 0))) and 
                                      (FINANCIALTRANSACTION.TYPECODE = 104) and 
                                      (CHARGE.DUEDATE < dbo.UFN_DATE_GETEARLIESTTIME(getdate()))) then
                                    CONVERT(nvarchar(12), CHARGE.DUEDATE, 101) + ' - ' + cast(datediff(d, CHARGE.DUEDATE, dbo.UFN_DATE_GETEARLIESTTIME(getdate())) as nvarchar(12)) + ' days late'
                                else
                                    CONVERT(nvarchar(12), CHARGE.DUEDATE, 101)
                            end as DUEDATEDISPLAY,
                            FINANCIALTRANSACTION.TYPE,
                            FINANCIALTRANSACTION.TYPECODE,
                            case when (len(FINANCIALTRANSACTIONLINEITEM.DESCRIPTION) > 0) then
                                FINANCIALTRANSACTIONLINEITEM.DESCRIPTION
                            when (len(FINANCIALTRANSACTION.DESCRIPTION) > 0) then
                                FINANCIALTRANSACTION.DESCRIPTION
                            when ((not BILLINGITEM.NAME is null) and (len(BILLINGITEM.NAME) > 0)) then
                                BILLINGITEM.NAME
                            else
                                FINANCIALTRANSACTION.DESCRIPTION
                            end as DESCRIPTION,
                            FINANCIALTRANSACTION.TRANSACTIONAMOUNT,
          FINANCIALTRANSACTION.TRANSACTIONAMOUNT - sum(isnull(FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT, 0)) as AMOUNTREMAINING,
                            CONSTITUENT.NAME as PAIDBY,
                            case when (((FINANCIALTRANSACTION.TRANSACTIONAMOUNT - sum(isnull(FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT, 0))) = 0) and 
                                      (FINANCIALTRANSACTION.TYPECODE = 104) and 
                                      (exists (select FINANCIALTRANSACTIONLINEITEM_INNER.ID 
                                                from dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_INNER
                                                    inner join dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_APPLICATION_INNER
                                                        on FINANCIALTRANSACTIONLINEITEM_INNER.ID = FINANCIALTRANSACTIONLINEITEM_APPLICATION_INNER.TARGETLINEITEMID
                                                    inner join dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENTCREDIT_INNER
                                                        on FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENTCREDIT_INNER.ID = FINANCIALTRANSACTIONLINEITEM_APPLICATION_INNER.SOURCELINEITEMID
                                                    inner join dbo.FINANCIALTRANSACTION as FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT
                                                        on FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.ID = FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENTCREDIT_INNER.FINANCIALTRANSACTIONID
                                                where (FINANCIALTRANSACTIONLINEITEM_INNER.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID) and
                                                      (((FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.DATE > FINANCIALTRANSACTION.DATE) and (FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.DATE > CHARGE.DUEDATE)) or
                                                       ((FINANCIALTRANSACTION.DATE > FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.DATE) and (FINANCIALTRANSACTION.DATE > CHARGE.DUEDATE)))))) then
                                    5
                                when ((FINANCIALTRANSACTION.TRANSACTIONAMOUNT - sum(isnull(FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT, 0))) = 0) then
                                    1
                                when ((FINANCIALTRANSACTION.TRANSACTIONAMOUNT > sum(isnull(FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT, 0))) and 
                                      (FINANCIALTRANSACTION.TYPECODE = 104) and 
                                      (CHARGE.DUEDATE < dbo.UFN_DATE_GETEARLIESTTIME(getdate()))) then
                                    4
                                when (sum(isnull(FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT, 0)) = 0) then
                                    3
                                when (FINANCIALTRANSACTION.TRANSACTIONAMOUNT > sum(isnull(FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT, 0))) then 
                                    2
                            end as STATUSCODE,
                            case when (((FINANCIALTRANSACTION.TRANSACTIONAMOUNT - sum(isnull(FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT, 0))) = 0) and 
                                      (FINANCIALTRANSACTION.TYPECODE = 104) and 
                                      (exists (select FINANCIALTRANSACTIONLINEITEM_INNER.ID 
                                                from dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_INNER
                                                    inner join dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_APPLICATION_INNER
                                                        on FINANCIALTRANSACTIONLINEITEM_INNER.ID = FINANCIALTRANSACTIONLINEITEM_APPLICATION_INNER.TARGETLINEITEMID
                                                    inner join dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENTCREDIT_INNER
                                                        on FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENTCREDIT_INNER.ID = FINANCIALTRANSACTIONLINEITEM_APPLICATION_INNER.SOURCELINEITEMID
                                                    inner join dbo.FINANCIALTRANSACTION as FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT
                                                        on FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.ID = FINANCIALTRANSACTIONLINEITEM_RECEIVABLEPAYMENTCREDIT_INNER.FINANCIALTRANSACTIONID
                                                where (FINANCIALTRANSACTIONLINEITEM_INNER.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID) and
                                                      (((FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.DATE > FINANCIALTRANSACTION.DATE) and (FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.DATE > CHARGE.DUEDATE)) or
                                                       ((FINANCIALTRANSACTION.DATE > FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.DATE) and (FINANCIALTRANSACTION.DATE > CHARGE.DUEDATE)))))) then
                                    'Paid late'
                                when ((FINANCIALTRANSACTION.TRANSACTIONAMOUNT - sum(isnull(FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT, 0))) = 0) then
                                    'Paid/Applied'
                                when ((FINANCIALTRANSACTION.TRANSACTIONAMOUNT > sum(isnull(FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT, 0))) and 
                                      (FINANCIALTRANSACTION.TYPECODE = 104) and 
                                      (CHARGE.DUEDATE < dbo.UFN_DATE_GETEARLIESTTIME(getdate()))) then
                                    'Overdue'
                                when (sum(isnull(FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT, 0)) = 0) then
                                    'Open/Unpaid'
                                when (FINANCIALTRANSACTION.TRANSACTIONAMOUNT > sum(isnull(FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT, 0))) then
                                    'Partially paid/applied'
                            end as STATUS
                    from dbo.FINANCIALTRANSACTION
                        inner join dbo.FINANCIALTRANSACTIONLINEITEM
                            on (FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID) and
                                (FINANCIALTRANSACTIONLINEITEM.TYPECODE = 0) and -- Standard

                                (FINANCIALTRANSACTIONLINEITEM.DELETEDON is null)
                        left outer join dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_APPLICATION
                            on (((FINANCIALTRANSACTION.TYPECODE = 104) and
                                 (FINANCIALTRANSACTIONLINEITEM_APPLICATION.TARGETLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID)) or
                                ((FINANCIALTRANSACTION.TYPECODE in (105, 106)) and
                                 (FINANCIALTRANSACTIONLINEITEM_APPLICATION.SOURCELINEITEMID  = FINANCIALTRANSACTIONLINEITEM.ID))) and
                               (FINANCIALTRANSACTIONLINEITEM_APPLICATION.DELETEDON is null)
                        left outer join dbo.CHARGE
                            on (FINANCIALTRANSACTION.ID = CHARGE.ID) and
                                (FINANCIALTRANSACTION.TYPECODE = 104)
                        left outer join dbo.CHARGELINEITEM
                            on FINANCIALTRANSACTIONLINEITEM.ID = CHARGELINEITEM.ID
                        left outer join dbo.RECEIVABLECREDITLINEITEM
                            on FINANCIALTRANSACTIONLINEITEM.ID = RECEIVABLECREDITLINEITEM.ID
                        left outer join dbo.BILLINGITEM
               on (CHARGELINEITEM.BILLINGITEMID = BILLINGITEM.ID) or 
                                (RECEIVABLECREDITLINEITEM.BILLINGITEMID = BILLINGITEM.ID)
                        left outer join dbo.RECEIVABLEPAYMENT
                            on (FINANCIALTRANSACTION.ID = RECEIVABLEPAYMENT.ID) and
                                (FINANCIALTRANSACTION.TYPECODE = 105)
                        left outer join dbo.CONSTITUENT
                            on RECEIVABLEPAYMENT.CONSTITUENTID = CONSTITUENT.ID
                    where (FINANCIALTRANSACTION.CONSTITUENTID = @CONSTITUENTID) and
                            ((isnull(@TYPECODE, 0)  = 0) or (@TYPECODE = FINANCIALTRANSACTION.TYPECODE) or ((@TYPECODE = 1) and (FINANCIALTRANSACTION.TYPECODE in (105, 106)))) and -- TYPE filter

                            ((@BILLINGSTARTDATE is null) or (@BILLINGSTARTDATE <= FINANCIALTRANSACTION.DATE)) and 
                            ((@BILLINGENDDATE is null) or (@BILLINGENDDATE >= FINANCIALTRANSACTION.DATE)) and 
                            ((@BILLINGSTARTDUEDATE is null) or ((FINANCIALTRANSACTION.TYPECODE = 104) and (@BILLINGSTARTDUEDATE <= CHARGE.DUEDATE))) and 
                            ((@BILLINGENDDUEDATE is null) or ((FINANCIALTRANSACTION.TYPECODE = 104) and (@BILLINGENDDUEDATE >= CHARGE.DUEDATE)))
                    group by FINANCIALTRANSACTION.ID,
                                FINANCIALTRANSACTION.DATE,
                                CHARGE.DUEDATE,
                                FINANCIALTRANSACTIONLINEITEM.DESCRIPTION,
                                FINANCIALTRANSACTION.DESCRIPTION,
                                BILLINGITEM.NAME,
                                FINANCIALTRANSACTION.TYPE,
                                FINANCIALTRANSACTION.TYPECODE,
                                FINANCIALTRANSACTION.TRANSACTIONAMOUNT,
                                CONSTITUENT.NAME
                    ) as INNERSELECT
                where ((isnull(@STATUSCODE, 0) = 0) or 
                        ((@STATUSCODE != 3) and (@STATUSCODE = INNERSELECT.STATUSCODE)) or
                        ((@STATUSCODE = 3) and (INNERSELECT.STATUSCODE in (2,3,4))))
                order by DATE asc;

                return;
            end