USP_DATALIST_RECONCILIATION

Data list shows all reconciliations that the supervisor can access.

Definition

Copy


CREATE procedure dbo.USP_DATALIST_RECONCILIATION
as
    set nocount on;

    declare @OPENSTATUS nvarchar(20);
    select @OPENSTATUS = [dbo].[UFN_RECONCILIATION_STATUSCODE_GETDESCRIPTION](0);

    select RECONCILIATIONLIST.ID, 
        RECONCILIATION.APPUSERID as APPUSERID,
        RECONCILIATION.STATUSCODE,
        dbo.UFN_APPUSER_GETNAME([APPUSER].[ID]) as [USERNAME],
        RECONCILIATION.RECONCILIATIONDATE as RECONCILIATIONDATE,
        RECONCILIATION.[STATUS],
        isnull([0], 0) as CASHAMOUNTDIFFERENCE, 
        isnull([1], 0) as CHECKCOUNTDIFFERENCE, 
        isnull([2], 0) as CREDITCARDCOUNTDIFFERENCE, 
        isnull([10], 0) as OTHERCOUNTDIFFERENCE,
        dbo.UFN_APPUSER_GETNAME(RECONCILIATION.APPROVEDBYID) as APPROVEDBYNAME,
        RECONCILIATION.APPROVALDATE,
        RECONCILIATION.ORIGINALSUBMISSIONDATE,
        RECONCILIATIONLIST.CHECKDIFFERENCE,
        RECONCILIATIONLIST.TOTALOTHERAMOUNT
        ,RECONCILIATIONLIST.[CASHCOUNT]
        ,RECONCILIATIONLIST.[CHECKCOUNT]
    from
    (
        select DIFFERENCETABLE.ID
            ,SUM(case when DIFFERENCETABLE.PAYMENTMETHODCODE = 0 then DIFFERENCETABLE.DIFFERENCE end) as [0]
            ,SUM(case when DIFFERENCETABLE.PAYMENTMETHODCODE = 1 then DIFFERENCETABLE.DIFFERENCE end) as [1]
            ,SUM(case when DIFFERENCETABLE.PAYMENTMETHODCODE = 2 then DIFFERENCETABLE.DIFFERENCE end) as [2]
            ,SUM(case when DIFFERENCETABLE.PAYMENTMETHODCODE = 10 then DIFFERENCETABLE.DIFFERENCE end) as [10]
            ,SUM(case when DIFFERENCETABLE.PAYMENTMETHODCODE = 1 then DIFFERENCETABLE.OTHERAMOUNTS end) as [CHECKDIFFERENCE]
            ,SUM(case when DIFFERENCETABLE.PAYMENTMETHODCODE in (2, 10) then DIFFERENCETABLE.OTHERAMOUNTS end) as [TOTALOTHERAMOUNT]
            ,SUM(case when DIFFERENCETABLE.PAYMENTMETHODCODE = 0 then DIFFERENCETABLE.[COUNTS] end) as [CASHCOUNT]
            ,SUM(case when DIFFERENCETABLE.PAYMENTMETHODCODE = 1 then DIFFERENCETABLE.[COUNTS] end) as [CHECKCOUNT]
         from (
            -- count amount difference for cash and count difference for the rest

            select isnull(isnull(EXPECTED.ID, ACTUAL.ID),REFUND.ID) as ID,
                isnull(isnull(EXPECTED.PAYMENTMETHODCODE, ACTUAL.PAYMENTMETHODCODE),REFUND.PAYMENTMETHODCODE) as PAYMENTMETHODCODE,
                case isnull(isnull(EXPECTED.PAYMENTMETHODCODE, ACTUAL.PAYMENTMETHODCODE),REFUND.PAYMENTMETHODCODE)
                    when 0 then isnull(ACTUAL.ACTUALAMOUNT, 0)  - (isnull(EXPECTED.EXPECTEDAMOUNT, 0) - isnull(REFUND.REFUNDAMOUNT, 0))
                    else isnull(ACTUAL.ACTUALCOUNT, 0) - isnull(EXPECTED.EXPECTEDCOUNT, 0)
                end as [DIFFERENCE]
                ,case isnull(isnull(EXPECTED.PAYMENTMETHODCODE, ACTUAL.PAYMENTMETHODCODE),REFUND.PAYMENTMETHODCODE)
                    when 1 then isnull(ACTUAL.ACTUALAMOUNT, 0)  - (isnull(EXPECTED.EXPECTEDAMOUNT, 0) - isnull(REFUND.REFUNDAMOUNT, 0))
                    when 2 then isnull(EXPECTED.EXPECTEDAMOUNT, 0) - ISNULL(REFUND.REFUNDAMOUNT, 0)
                    when 10 then isnull(EXPECTED.EXPECTEDAMOUNT, 0)  - ISNULL(REFUND.REFUNDAMOUNT, 0)
                end [OTHERAMOUNTS]
                ,case isnull(isnull(EXPECTED.PAYMENTMETHODCODE, ACTUAL.PAYMENTMETHODCODE),REFUND.PAYMENTMETHODCODE)
                    when 0 then isnull(EXPECTED.EXPECTEDCOUNT, 0
                    when 1 then isnull(EXPECTED.EXPECTEDCOUNT, 0
                end [COUNTS]
            from 
            (
                -- expected count and amount

                -- from payment tables

                select
                    R.ID, 
                    REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE as PAYMENTMETHODCODE,
                    count(SALESORDERPAYMENT.ID)as EXPECTEDCOUNT,
                    sum(SALESORDERPAYMENT.AMOUNT) as EXPECTEDAMOUNT
                from dbo.RECONCILIATION as R
                inner join (select ID, SALESORDERID, PAYMENTID, RECONCILIATIONID, AMOUNT from dbo.SALESORDERPAYMENT where [SALESORDERPAYMENT].[DONOTRECONCILE] = 0
                                        union all 
                                        select ID, RESERVATIONID as SALESORDERID, PAYMENTID, RECONCILIATIONID, AMOUNT from dbo.RESERVATIONSECURITYDEPOSITPAYMENT
                            ) as SALESORDERPAYMENT on R.ID = SALESORDERPAYMENT.RECONCILIATIONID
                inner join dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.REVENUEID = SALESORDERPAYMENT.PAYMENTID
                where R.STATUSCODE in (1, 2)
                group by R.ID, REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE
            ) as EXPECTED         
            full outer join
            (
                -- actual count and amount

                -- from reconciliation tables

                select R.ID, 
                    rd.PAYMENTMETHODCODE as PAYMENTMETHODCODE, 
                    sum(RD.QUANTITY) as ACTUALCOUNT,
                    sum(RD.AMOUNT) as ACTUALAMOUNT
                from dbo.RECONCILIATION R 
                inner join dbo.RECONCILIATIONDETAIL RD on R.ID = RD.RECONCILIATIONID 
                where R.STATUSCODE in (1, 2)
                group by R.ID, RD.PAYMENTMETHODCODE

                union all

                select R.ID, 
                    0 as PAYMENTMETHODCODE, 
                    0 as ACTUALCOUNT, 
                    coalesce(ACTUALCASH,0) as ACTUALAMOUNT
                from dbo.RECONCILIATION R
                where R.STATUSCODE in (1, 2)
            ) as ACTUAL on EXPECTED.ID = ACTUAL.ID and EXPECTED.PAYMENTMETHODCODE = ACTUAL.PAYMENTMETHODCODE 
            full outer join
            (
                select
                    [RECONCILIATION].[ID] as [ID],
                    case when [CREDITPAYMENT].[PAYMENTMETHODCODE] = 1 then 2 else [CREDITPAYMENT].[PAYMENTMETHODCODE] end as [PAYMENTMETHODCODE],
                    sum([CREDITPAYMENT].[AMOUNT]) as [REFUNDAMOUNT]
                from dbo.[CREDITPAYMENT]
                inner join dbo.[RECONCILIATION]
                    on [CREDITPAYMENT].[RECONCILIATIONID] = [RECONCILIATION].[ID]
                where 
                    [RECONCILIATION].[STATUSCODE] in (1,2)
                group by 
                    case when [CREDITPAYMENT].[PAYMENTMETHODCODE] = 1 then 2 else [CREDITPAYMENT].[PAYMENTMETHODCODE] end,
                    [RECONCILIATION].[ID]
            ) as REFUND on EXPECTED.ID = REFUND.ID and EXPECTED.PAYMENTMETHODCODE = REFUND.PAYMENTMETHODCODE 
        ) as DIFFERENCETABLE group by DIFFERENCETABLE.ID
    ) as RECONCILIATIONLIST
    inner join dbo.RECONCILIATION on RECONCILIATIONLIST.ID = RECONCILIATION.ID
    inner join dbo.APPUSER on RECONCILIATION.APPUSERID = APPUSER.ID

    union all 
    -- open reconciliations with payment >0

    select 
        null as ID, 
        [APPUSER].[ID] as APPUSERID,
        0 as STATUSCODE,
        dbo.UFN_APPUSER_GETNAME([APPUSER].[ID]) as [USERNAME],
        null as RECONCILIATIONDATE,
        @OPENSTATUS as [STATUS],
        null as CASHAMOUNTDIFFERENCE, 
        null as CHECKCOUNTDIFFERENCE, 
        null as CREDITCARDCOUNTDIFFERENCE, 
        null as OTHERCOUNTDIFFERENCE,
        null as APPROVEDBYNAME,
        null as APPROVALDATE,
        null as ORIGINALSUBMISSIONDATE,
        null as CHECKDIFFERENCE,
        null as TOTALOTHERAMOUNT
        ,null as [CASHCOUNT]
        ,null as [CHECKCOUNT]
    from dbo.[APPUSER]
    where
        (
            exists (
                select [ID]
                from dbo.[RECONCILIATION]
                where 
                    [RECONCILIATION].[STATUSCODE] = 0 and
                    [RECONCILIATION].[APPUSERID] = [APPUSER].[ID]
            ) or
            exists (
                select [ID]
                from dbo.[SALESORDERPAYMENT]
                where 
                    [SALESORDERPAYMENT].[DONOTRECONCILE] = 0 and
                    [SALESORDERPAYMENT].[RECONCILIATIONID] is null and
                    [SALESORDERPAYMENT].[APPUSERID] = [APPUSER].[ID] and
                    [SALESORDERPAYMENT].[AMOUNT] > 0
            ) or             
            exists (
                    select [ID] from dbo.[RESERVATIONSECURITYDEPOSITPAYMENT]
                where 
                    [RESERVATIONSECURITYDEPOSITPAYMENT].[RECONCILIATIONID] is null and
                    [RESERVATIONSECURITYDEPOSITPAYMENT].[APPUSERID] = [APPUSER].[ID] and
                    [RESERVATIONSECURITYDEPOSITPAYMENT].[AMOUNT] > 0
            ) or
            exists (
                select [ID]
                from dbo.[CREDITPAYMENT]
                where 
                    [CREDITPAYMENT].[RECONCILIATIONID] is null and
                    [CREDITPAYMENT].[APPUSERID] = [APPUSER].[ID] and
                    [CREDITPAYMENT].[REFUNDPROCESSED] = 1 and
                    [CREDITPAYMENT].[CREDITID] not in (
                        select FT.ID
                        from dbo.FINANCIALTRANSACTION as FT
                        inner join dbo.CREDIT_EXT as EXT on EXT.ID = FT.ID
                        left outer join dbo.SALESORDER on SALESORDER.REVENUEID = FT.PARENTID
                        where SALESORDER.ID is null and EXT.SALESORDERID is null
                    )
            )
        )
        and (select top 1 C.CONFIGURATIONOPTIONCODE from CLOSEDRAWERCONFIGURATION C) = 0

    order by STATUSCODE desc, RECONCILIATIONDATE desc, [USERNAME];

    return 0;