USP_DATALIST_SALESRECONCILIATIONREPORT_RECONCILIATIONDETAILS

Returns list of reconciliation details.

Parameters

Parameter Parameter Type Mode Description
@RECONCILIATIONID uniqueidentifier IN Input parameter indicating the context ID for the data list.
@ISSUPERVISOR bit IN Is supervisor

Definition

Copy


CREATE procedure dbo.USP_DATALIST_SALESRECONCILIATIONREPORT_RECONCILIATIONDETAILS
(
    @RECONCILIATIONID uniqueidentifier,
    @ISSUPERVISOR bit = 0
)
as
    set nocount on;

    select
        coalesce(EXPECTED.PAYMENTMETHODCODE, ACTUAL.PAYMENTMETHODCODE,REFUND.PAYMENTMETHODCODE) as PAYMENTMETHODCODE,
        dbo.UFN_REVENUEPAYMENTMETHOD_PAYMENTMETHODCODE_GETDESCRIPTION(coalesce(EXPECTED.PAYMENTMETHODCODE, ACTUAL.PAYMENTMETHODCODE, REFUND.PAYMENTMETHODCODE)) as PAYMENTMETHOD,
        case isnull(isnull(EXPECTED.PAYMENTMETHODCODE, ACTUAL.PAYMENTMETHODCODE),REFUND.PAYMENTMETHODCODE)
            when 0 then ACTUAL.NAME
            when 2 then dbo.UFN_CREDITTYPECODE_GETDESCRIPTION(isnull(isnull(EXPECTED.CREDITTYPECODEID, ACTUAL.CREDITTYPECODEID), REFUND.CREDITTYPECODEID)) 
            when 10 then dbo.UFN_OTHERPAYMENTMETHODCODE_GETDESCRIPTION(isnull(isnull(EXPECTED.OTHERPAYMENTMETHODCODEID, ACTUAL.OTHERPAYMENTMETHODCODEID), REFUND.OTHERPAYMENTMETHODCODEID))
            else ''
        end as PAYMENTTYPE,
        isnull(ACTUAL.ACTUALAMOUNT, 0) as ACTUALAMOUNT,
        case
            when isnull(isnull(EXPECTED.PAYMENTMETHODCODE, ACTUAL.PAYMENTMETHODCODE),REFUND.PAYMENTMETHODCODE) = 0 then
                case when ACTUAL.SEQUENCE = 1 then isnull(EXPECTED.EXPECTEDAMOUNT, 0) else 0 end
            else isnull(EXPECTED.EXPECTEDAMOUNT, 0)
        end as EXPECTEDAMOUNT,
        case
            when isnull(isnull(EXPECTED.PAYMENTMETHODCODE, ACTUAL.PAYMENTMETHODCODE),REFUND.PAYMENTMETHODCODE) = 0 then
                case when ACTUAL.SEQUENCE = 1 then isnull(REFUND.REFUNDAMOUNT, 0) else 0 end
            else isnull(REFUND.REFUNDAMOUNT, 0)
        end as REFUNDAMOUNT,
        isnull(ACTUAL.ACTUALCOUNT, 0) as ACTUALCOUNT,
        isnull(EXPECTED.EXPECTEDCOUNT, 0) as EXPECTEDCOUNT,
        cast(0 as bit) as [ISREFUND],
        rank() over (partition by isnull(isnull(EXPECTED.PAYMENTMETHODCODE, ACTUAL.PAYMENTMETHODCODE),REFUND.PAYMENTMETHODCODE) order by ACTUAL.VALUE desc) SORTINGCOLUMN
    from (
        -- expected count and amount

        -- from payment tables

        select
            R.ID, 
            REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE as PAYMENTMETHODCODE,
            CREDITCARDPAYMENTMETHODDETAIL.[CREDITTYPECODEID],
            OTHERPAYMENTMETHODDETAIL.[OTHERPAYMENTMETHODCODEID],
            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 [RECONCILIATIONID] = @RECONCILIATIONID and [DONOTRECONCILE] = 0

            union all 
            select ID, RESERVATIONID as SALESORDERID, PAYMENTID, RECONCILIATIONID, AMOUNT
            from dbo.RESERVATIONSECURITYDEPOSITPAYMENT
            where [RECONCILIATIONID] = @RECONCILIATIONID
        ) as SALESORDERPAYMENT on R.ID = SALESORDERPAYMENT.RECONCILIATIONID
        inner join dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.REVENUEID = SALESORDERPAYMENT.PAYMENTID
        left join dbo.CREDITCARDPAYMENTMETHODDETAIL on CREDITCARDPAYMENTMETHODDETAIL.ID = REVENUEPAYMENTMETHOD.ID 
        left join dbo.OTHERPAYMENTMETHODDETAIL on OTHERPAYMENTMETHODDETAIL.ID = REVENUEPAYMENTMETHOD.ID
        where R.ID = @RECONCILIATIONID 
        group by
            R.ID,
            REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE,
            CREDITCARDPAYMENTMETHODDETAIL.CREDITTYPECODEID,
            OTHERPAYMENTMETHODDETAIL.OTHERPAYMENTMETHODCODEID
    ) as EXPECTED 
    full outer join (
        -- actual count and amount

        -- from reconciliation tables

        select R.ID, 
            rd.PAYMENTMETHODCODE as PAYMENTMETHODCODE,
            rd.CREDITTYPECODEID,
            rd.OTHERPAYMENTMETHODCODEID,
            sum(RD.QUANTITY) as ACTUALCOUNT,
            sum(RD.AMOUNT) as ACTUALAMOUNT,
            null as NAME,
            null as VALUE,
            null as SEQUENCE
        from dbo.RECONCILIATION R 
        inner join dbo.RECONCILIATIONDETAIL RD on R.ID = RD.RECONCILIATIONID 
        where
            R.ID = @RECONCILIATIONID
            and (
                RD.QUANTITY != 0
                or RD.AMOUNT != 0
                or (
                    @ISSUPERVISOR = 1
                    and exists (
                        select 1
                        from (
                            select PAYMENTID, RECONCILIATIONID from dbo.SALESORDERPAYMENT where [RECONCILIATIONID] = @RECONCILIATIONID and [DONOTRECONCILE] = 0
                            union all 
                            select PAYMENTID, RECONCILIATIONID from dbo.RESERVATIONSECURITYDEPOSITPAYMENT where [RECONCILIATIONID] = @RECONCILIATIONID
                        ) as SALESORDERPAYMENT
                        inner join dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.REVENUEID = SALESORDERPAYMENT.PAYMENTID
                        where REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = 1 and SALESORDERPAYMENT.RECONCILIATIONID = @RECONCILIATIONID
                    )
                )
            )
        group by R.ID, RD.PAYMENTMETHODCODE, RD.CREDITTYPECODEID, RD.OTHERPAYMENTMETHODCODEID

        union all
        select 
            R.ID
            ,0 as PAYMENTMETHODCODE
            ,null
            ,null
            ,ISNULL(C.QUANTITY, 0) as ACTUALCOUNT
            ,ISNULL(C.QUANTITY * C.VALUE, R.ACTUALCASH + R.STARTINGCASH) as ACTUALAMOUNT
            ,ISNULL(case when C.NUMBER = 1 then case C.TYPECODE when 0 then 'Currency ' else 'Coin ' end else '' end + C.NAME, 'Total cash') NAME
            ,isnull(C.VALUE, 0)
            ,isnull(C.OVERALLNUMBER, 1)
        from dbo.RECONCILIATION R
        left join (
            select
                CD.RECONCILIATIONID
                ,CD.QUANTITY
                ,D.VALUE
                ,D.TYPECODE
                ,D.NAME
                ,ROW_NUMBER() over (partition by D.TYPECODE order by D.VALUE desc) NUMBER
                ,ROW_NUMBER() over (order by D.VALUE desc) OVERALLNUMBER
            from dbo.CLOSEDRAWERDENOMINATION CD
            inner join dbo.CURRENCYDENOMINATION D on CD.CURRENCYDENOMINATIONID = D.ID
            where CD.RECONCILIATIONID = @RECONCILIATIONID and CD.QUANTITY > 0
        ) C on C.RECONCILIATIONID = R.ID
        where
            R.ID = @RECONCILIATIONID
            and (
                C.RECONCILIATIONID is not null
                or R.ACTUALCASH != 0
                or R.STARTINGCASH != 0
                or (
                    @ISSUPERVISOR = 1
                    and (
                        exists (
                            select 1
                            from (
                                select PAYMENTID, RECONCILIATIONID from dbo.SALESORDERPAYMENT where [RECONCILIATIONID] = @RECONCILIATIONID and [DONOTRECONCILE] = 0
                                union all 
                                select PAYMENTID, RECONCILIATIONID from dbo.RESERVATIONSECURITYDEPOSITPAYMENT where [RECONCILIATIONID] = @RECONCILIATIONID
                            ) as SALESORDERPAYMENT
                            inner join dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.REVENUEID = SALESORDERPAYMENT.PAYMENTID
                            where REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = 0 and SALESORDERPAYMENT.RECONCILIATIONID = @RECONCILIATIONID
                        )
                        or exists (
                            select 1
                            from dbo.CREDITPAYMENT CP
                            where CP.RECONCILIATIONID = @RECONCILIATIONID
                            and CP.PAYMENTMETHODCODE = 0
                        )
                    )
                )
            )

            union all
            select
                R.ID
                ,0 as PAYMENTMETHODCODE
                ,null
                ,null
                ,1
                ,-R.STARTINGCASH
                ,'Starting balance'
                ,-R.STARTINGCASH
                ,-R.STARTINGCASH
            from dbo.RECONCILIATION R
            where R.ID = @RECONCILIATIONID and R.STARTINGCASH != 0
    ) as ACTUAL
        on EXPECTED.ID = ACTUAL.ID and EXPECTED.PAYMENTMETHODCODE = ACTUAL.PAYMENTMETHODCODE 
        and ( EXPECTED.PAYMENTMETHODCODE in (0, 1) or
              (EXPECTED.PAYMENTMETHODCODE = 2 and EXPECTED.CREDITTYPECODEID = ACTUAL.CREDITTYPECODEID) or
              (EXPECTED.PAYMENTMETHODCODE = 10 and EXPECTED.OTHERPAYMENTMETHODCODEID = ACTUAL.OTHERPAYMENTMETHODCODEID))
    full outer join (
        select
            [CREDITS].[PAYMENTMETHODCODE],
            [CREDITS].[CREDITTYPECODEID],
            [CREDITS].[OTHERPAYMENTMETHODCODEID],
            sum([CREDITS].[AMOUNT]) as [REFUNDAMOUNT]
        from (
            select 
                [PAYMENTMETHODCODE],
                case when [PAYMENTMETHODCODE] = 2 then
                    (
                        select top 1
                            [CREDITCARDPAYMENTMETHODDETAIL].[CREDITTYPECODEID]
                        from
                            dbo.[CREDITCARDPAYMENTMETHODDETAIL] 
                        inner join
                            dbo.[REVENUEPAYMENTMETHOD] on [CREDITCARDPAYMENTMETHODDETAIL].[ID] = [REVENUEPAYMENTMETHOD].[ID]
                        left outer join
                            dbo.FINANCIALTRANSACTIONLINEITEM as LI on LI.FINANCIALTRANSACTIONID = REVENUEPAYMENTMETHOD.REVENUEID
                        where 
                            [REVENUEPAYMENTMETHOD].[REVENUEID] = [CREDITPAYMENT].[REVENUEID] or
                            LI.ID = [CREDITPAYMENT].[REVENUESPLITID]
                    ) 
                    else null
                end as [CREDITTYPECODEID],
                [OTHERPAYMENTMETHODCODEID],
                [AMOUNT]
            from dbo.[CREDITPAYMENT]
            where [CREDITPAYMENT].[RECONCILIATIONID] = @RECONCILIATIONID
        ) as [CREDITS]
        group by
            [CREDITS].[PAYMENTMETHODCODE],
            [CREDITS].[CREDITTYPECODEID],
            [CREDITS].[OTHERPAYMENTMETHODCODEID]
    ) as REFUND
        on 
            (
                EXPECTED.PAYMENTMETHODCODE = REFUND.PAYMENTMETHODCODE and
                (
                    EXPECTED.PAYMENTMETHODCODE in (0, 1) or
                    (EXPECTED.PAYMENTMETHODCODE = 2 and EXPECTED.CREDITTYPECODEID = REFUND.CREDITTYPECODEID) or 
                    (EXPECTED.PAYMENTMETHODCODE = 10 and EXPECTED.OTHERPAYMENTMETHODCODEID = REFUND.OTHERPAYMENTMETHODCODEID)
                )
            ) or
            (
                ACTUAL.PAYMENTMETHODCODE = REFUND.PAYMENTMETHODCODE and
                (
                    ACTUAL.PAYMENTMETHODCODE in (0, 1) or
                    (ACTUAL.PAYMENTMETHODCODE = 2 and EXPECTED.CREDITTYPECODEID = REFUND.CREDITTYPECODEID) or 
                    (ACTUAL.PAYMENTMETHODCODE = 10 and EXPECTED.OTHERPAYMENTMETHODCODEID = REFUND.OTHERPAYMENTMETHODCODEID)
                )
            )

    union all
    select
        null as [PAYMENTMETHODCODE],
        null as [PAYMENTMETHOD],
        null as [PAYMENTTYPE],
        null as [ACTUALAMOUNT],
        coalesce(sum([CREDITPAYMENT].[AMOUNT]),0) as [EXPECTEDAMOUNT],
        null as [REFUNDAMOUNT], --we aren't refunding a refund

        coalesce((select [QUANTITY] from dbo.[RECONCILIATIONCREDITDETAIL] where [ID] = @RECONCILIATIONID),0) as [QUANTITY],
        count(distinct FT.ID) as [EXPECTED],
        cast(1 as bit) as [ISREFUND],
        null as SORTINGCOLUMN
    from dbo.FINANCIALTRANSACTION as FT
    inner join dbo.[CREDITPAYMENT] on [CREDITPAYMENT].[CREDITID] = FT.ID
    where [CREDITPAYMENT].[RECONCILIATIONID] = @RECONCILIATIONID
    having count(distinct FT.ID) > 0

    order by ISREFUND asc, PAYMENTMETHODCODE asc, SORTINGCOLUMN asc, PAYMENTTYPE asc
    option (recompile);

    return 0;