USP_DATALIST_SALESDEPOSITPROCESS_UNDEPOSITEDTRANSASCTIONS

Parameters

Parameter Parameter Type Mode Description
@SALESDEPOSITPROCESSID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_DATALIST_SALESDEPOSITPROCESS_UNDEPOSITEDTRANSASCTIONS
(
    @SALESDEPOSITPROCESSID uniqueidentifier = null
)
as
    set nocount on;

declare @CURRENCYID uniqueidentifier;
declare @CURRENCYDESC nvarchar(110)
select @CURRENCYID = ID, @CURRENCYDESC = dbo.UFN_CURRENCY_GETDESCRIPTION(ID) 
from dbo.CURRENCY where ISORGANIZATIONCURRENCY = 1;

select 
    PAYMENTS.PAYMENTMETHOD as PAYMENTMETHOD
    ,PAYMENTS.SALESMETHOD as SALESMETHOD
    ,COUNT(1) as [COUNT]
    ,SUM(PAYMENTS.AMOUNT) as TOTAL
    ,PAYMENTS.TRANSACTIONCURRENCYID as TRANSACTIONCURRENCYID
  ,PAYMENTS.CURRENCY
from (
    select
        T.PAYMENTMETHODCODE
        ,T.PAYMENTMETHOD
        ,T.SALESMETHODCODE
        ,T.SALESMETHOD
        ,case when T.ISREFUND = 0 then T.AMOUNT else -1 * T.AMOUNT end AMOUNT
        ,T.TRANSACTIONCURRENCYID
        ,CURRENCY.NAME + ' (' + CURRENCY.ISO4217 + ')' as CURRENCY
    from dbo.UFN_SALESDEPOSITPROCESS_GETACCOUNTSYSTEMTRANSACTIONS(@SALESDEPOSITPROCESSID) T
    inner join dbo.CURRENCY on CURRENCY.ID = T.TRANSACTIONCURRENCYID

    union all

    select 
        case when unpvt.PAYMENTMETHOD = 'CASHOVERSHORTSALESMETHODCODE' then 0 else 1 end PAYMENTMETHODCODE
        ,case when unpvt.PAYMENTMETHOD = 'CASHOVERSHORTSALESMETHODCODE' then 'Cash' else 'Check' end PAYMENTMETHOD
        ,unpvt.SALESMETHODTYPECODE
        ,case when unpvt.PAYMENTMETHOD = 'CASHOVERSHORTSALESMETHODCODE' then unpvt.CASHOVERSHORTSALESMETHOD else unpvt.CHECKOVERSHORTSALESMETHOD end
        ,case when unpvt.PAYMENTMETHOD = 'CASHOVERSHORTSALESMETHODCODE' then unpvt.CASHDIFF else unpvt.CHECKDIFFERENCE end
        ,@CURRENCYID
        ,@CURRENCYDESC
    from (
        select 
            isnull([0], 0) CASHDIFF
            ,RECONCILIATIONLIST.CHECKDIFFERENCE
            ,RECONCILIATION.CASHOVERSHORTSALESMETHODCODE
            ,RECONCILIATION.CASHOVERSHORTSALESMETHOD
            ,RECONCILIATION.CHECKOVERSHORTSALESMETHODCODE
            ,RECONCILIATION.CHECKOVERSHORTSALESMETHOD
        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 [CHECKDIFFERENCE]
            from (
                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))
                        when 1 then isnull(ACTUAL.ACTUALAMOUNT, 0)  - (isnull(EXPECTED.EXPECTEDAMOUNT, 0) - isnull(REFUND.REFUNDAMOUNT, 0))
                        else 0
                    end as [DIFFERENCE]
                from (
                    select
                        R.ID
                        ,REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE as PAYMENTMETHODCODE
                        ,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.FINANCIALTRANSACTION REVENUE on SALESORDERPAYMENT.PAYMENTID = REVENUE.ID 
                    inner join dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.REVENUEID = REVENUE.ID
                    where R.STATUSCODE > 1 and (R.CASHOVERSHORTDEPOSITED = 0 or R.CHECKOVERSHORTDEPOSITED = 0)
                        and (@SALESDEPOSITPROCESSID is null or REVENUE.PDACCOUNTSYSTEMID = (select PDACCOUNTSYSTEMID from dbo.SALESDEPOSITPROCESS where ID = @SALESDEPOSITPROCESSID))
                    group by R.ID, REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE
                ) as EXPECTED 

                full outer join (
                    select 
                        R.ID
                        ,RD.PAYMENTMETHODCODE as PAYMENTMETHODCODE
                        ,sum(RD.AMOUNT) as ACTUALAMOUNT
                    from dbo.RECONCILIATION R 
                    inner join dbo.RECONCILIATIONDETAIL RD on R.ID = RD.RECONCILIATIONID 
                    where R.STATUSCODE > 1 and RD.PAYMENTMETHODCODE = 1 and R.CHECKOVERSHORTDEPOSITED = 0
                    group by R.ID, RD.PAYMENTMETHODCODE

                    union all

                    select 
                        R.ID
                        ,0 as PAYMENTMETHODCODE
                        ,coalesce(ACTUALCASH,0) as ACTUALAMOUNT
                    from dbo.RECONCILIATION R
                    where R.STATUSCODE > 1 and R.CASHOVERSHORTDEPOSITED = 0
                ) as ACTUAL on EXPECTED.ID = ACTUAL.ID and EXPECTED.PAYMENTMETHODCODE = ACTUAL.PAYMENTMETHODCODE 

                full outer join (
                    select
                        R.ID
                        ,CP.PAYMENTMETHODCODE
                        ,sum(CP.AMOUNT) as [REFUNDAMOUNT]
                    from dbo.CREDITPAYMENT CP
                    inner join dbo.FINANCIALTRANSACTION FT on FT.ID = CP.CREDITID
                    inner join dbo.RECONCILIATION R on CP.RECONCILIATIONID = R.ID
                    where R.STATUSCODE > 1 and CP.PAYMENTMETHODCODE = 0
                        and (@SALESDEPOSITPROCESSID is null or FT.PDACCOUNTSYSTEMID = (select PDACCOUNTSYSTEMID from dbo.SALESDEPOSITPROCESS where ID = @SALESDEPOSITPROCESSID))
                    group by CP.PAYMENTMETHODCODE, R.ID
                ) as REFUND on EXPECTED.ID = REFUND.ID and EXPECTED.PAYMENTMETHODCODE = REFUND.PAYMENTMETHODCODE 
                where ACTUAL.ID is not null
            ) as DIFFERENCETABLE 
            group by DIFFERENCETABLE.ID
        ) as RECONCILIATIONLIST
        inner join dbo.RECONCILIATION on RECONCILIATIONLIST.ID = RECONCILIATION.ID
        where RECONCILIATION.STATUSCODE > 1 and (RECONCILIATION.CASHOVERSHORTDEPOSITED = 0 or RECONCILIATION.CHECKOVERSHORTDEPOSITED = 0)
            and isnull([0], 0) != 0
            or RECONCILIATIONLIST.CHECKDIFFERENCE != 0) P
    unpivot
        (SALESMETHODTYPECODE for PAYMENTMETHOD in (CASHOVERSHORTSALESMETHODCODE, CHECKOVERSHORTSALESMETHODCODE)) as unpvt
    where (unpvt.PAYMENTMETHOD = 'CASHOVERSHORTSALESMETHODCODE' and unpvt.CASHDIFF != 0)
        or (unpvt.PAYMENTMETHOD = 'CHECKOVERSHORTSALESMETHODCODE' and unpvt.CHECKDIFFERENCE != 0)
    ) PAYMENTS
group by PAYMENTS.PAYMENTMETHODCODE, PAYMENTS.PAYMENTMETHOD, PAYMENTS.SALESMETHODCODE, PAYMENTS.SALESMETHOD, PAYMENTS.TRANSACTIONCURRENCYID, PAYMENTS.CURRENCY
order by PAYMENTS.PAYMENTMETHOD, PAYMENTS.SALESMETHOD