USP_DATAFORMTEMPLATE_VIEW_DEPOSITSUMMARY
The load procedure used by the view dataform template "Deposit Summary View Form"
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@DATALOADED | bit | INOUT | Output parameter indicating whether or not data was actually loaded. |
@DEPOSITSUMMARY | xml | INOUT | Deposit summary |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_VIEW_DEPOSITSUMMARY
(
@DATALOADED bit = 0 output,
@DEPOSITSUMMARY xml = null output
)
as
set nocount on;
set @DATALOADED = 0;
declare @APPROVEDRECONCILIATIONS table (
ID uniqueidentifier not null,
ACTUALCASH money not null
)
-- This will produce a scan. We may need
-- a separate table containing only a few records for faster querying.
insert into @APPROVEDRECONCILIATIONS
select
ID,
ACTUALCASH
from
dbo.RECONCILIATION
where
STATUSCODE = 2; -- Approved
select
@DATALOADED = 1,
@DEPOSITSUMMARY = (
select
sum(PAYMENTCOUNT) as PAYMENTCOUNT,
sum(AMOUNT) as AMOUNT,
PAYMENTMETHODCODE,
PAYMENTMETHOD,
PAYMENTTYPE,
ISREFUND
from (
select
count(SALESORDERPAYMENT.ID) as PAYMENTCOUNT,
case REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE
when 0 then
(
select sum(ACTUALCASH)
from @APPROVEDRECONCILIATIONS
where ID in (select RECONCILIATIONID from SALESORDERPAYMENT)
)
else
sum(SALESORDERPAYMENT.AMOUNT)
end as AMOUNT,
REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE,
case REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE
when 0 then dbo.UFN_REVENUEPAYMENTMETHOD_PAYMENTMETHODCODE_GETDESCRIPTION(0)
when 1 then dbo.UFN_REVENUEPAYMENTMETHOD_PAYMENTMETHODCODE_GETDESCRIPTION(1)
end as PAYMENTMETHOD,
case REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE
when 2 then dbo.UFN_CREDITTYPECODE_GETDESCRIPTION(CREDITCARDPAYMENTMETHODDETAIL.[CREDITTYPECODEID])
when 10 then dbo.UFN_OTHERPAYMENTMETHODCODE_GETDESCRIPTION(OTHERPAYMENTMETHODDETAIL.[OTHERPAYMENTMETHODCODEID])
end as PAYMENTTYPE,
cast(0 as bit) as [ISREFUND]
from @APPROVEDRECONCILIATIONS as APPROVEDRECONCILIATIONS
inner join dbo.SALESORDERPAYMENT on APPROVEDRECONCILIATIONS.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
SALESORDERPAYMENT.DONOTRECONCILE = 0
group by
REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE,
CREDITCARDPAYMENTMETHODDETAIL.CREDITTYPECODEID,
OTHERPAYMENTMETHODDETAIL.OTHERPAYMENTMETHODCODEID
union all
-- LeeCh, 06/26/09, Bug #42655
-- If there is cash over but no expected cash payment,
-- we should still take the cash over amount into the deposit summary
select
count(ID) as PAYMENTCOUNT,
sum(ACTUALCASH) as AMOUNT,
0 as PAYMENTMETHODCODE,
dbo.UFN_REVENUEPAYMENTMETHOD_PAYMENTMETHODCODE_GETDESCRIPTION(0) as PAYMENTMETHOD,
null as PAYMENTTYPE,
cast(0 as bit) as [ISREFUND]
from
@APPROVEDRECONCILIATIONS
where
ACTUALCASH > 0 and
ID not in (
select SALESORDERPAYMENT.RECONCILIATIONID
from dbo.SALESORDERPAYMENT
inner join dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.REVENUEID = SALESORDERPAYMENT.PAYMENTID
where REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = 0 -- Cash
)
having
count(ID) > 0
union all --Refunds of payment types not used for reconciliation sales
select
0 as PAYMENTCOUNT, --Refunds of a "payment type" don't contribute to the count (just the number of refunds -- unioned below)
-coalesce(sum(REFUNDSPAYMENTS.REFUNDAMOUNT),0),
REFUNDSPAYMENTS.PAYMENTMETHODCODE,
case when REFUNDSPAYMENTS.PAYMENTMETHODCODE in (0,1) then dbo.UFN_REVENUEPAYMENTMETHOD_PAYMENTMETHODCODE_GETDESCRIPTION(REFUNDSPAYMENTS.PAYMENTMETHODCODE) end as PAYMENTMETHOD,
case REFUNDSPAYMENTS.PAYMENTMETHODCODE
when 2 then dbo.UFN_CREDITTYPECODE_GETDESCRIPTION(REFUNDSPAYMENTS.CREDITTYPECODEID)
when 10 then dbo.UFN_OTHERPAYMENTMETHODCODE_GETDESCRIPTION(REFUNDSPAYMENTS.OTHERPAYMENTMETHODCODEID)
else ''
end as PAYMENTTYPE,
cast(0 as bit) as ISREFUND
from (
select
coalesce(CREDITPAYMENT.AMOUNT,0) as REFUNDAMOUNT,
CREDITPAYMENT.PAYMENTMETHODCODE,
(
select top 1 CREDITCARDPAYMENTMETHODDETAIL.CREDITTYPECODEID
from dbo.CREDITCARDPAYMENTMETHODDETAIL
inner join dbo.REVENUEPAYMENTMETHOD on CREDITCARDPAYMENTMETHODDETAIL.ID = REVENUEPAYMENTMETHOD.ID
inner join dbo.CREDITORDERPAYMENTMAP on CREDITORDERPAYMENTMAP.ORDERPAYMENTID = REVENUEPAYMENTMETHOD.REVENUEID
where CREDITORDERPAYMENTMAP.CREDITPAYMENTID = CREDITPAYMENT.ID
) as CREDITTYPECODEID,
OTHERPAYMENTMETHODCODEID
from dbo.CREDITPAYMENT
inner join @APPROVEDRECONCILIATIONS as APPROVEDRECONCILIATIONS on CREDITPAYMENT.RECONCILIATIONID = APPROVEDRECONCILIATIONS.ID
where
CREDITPAYMENT.PAYMENTMETHODCODE <> 0 -- Cash
) as REFUNDSPAYMENTS
group by
REFUNDSPAYMENTS.PAYMENTMETHODCODE,
REFUNDSPAYMENTS.CREDITTYPECODEID,
REFUNDSPAYMENTS.OTHERPAYMENTMETHODCODEID
union all
select
count(distinct CREDITPAYMENT.CREDITID) as PAYMENTCOUNT,
0 as AMOUNT,
null as PAYMENTMETHODCODE,
null as PAYMENTMETHOD,
null as PAYMENTTYPE,
cast(1 as bit) as ISREFUND
from dbo.CREDITPAYMENT
inner join @APPROVEDRECONCILIATIONS as APPROVEDRECONCILIATIONS on CREDITPAYMENT.RECONCILIATIONID = APPROVEDRECONCILIATIONS.ID
having count(distinct CREDITPAYMENT.CREDITID) > 0
) as DEPOSITEDRECONCILIATIONS
group by ISREFUND, PAYMENTMETHODCODE, PAYMENTMETHOD, PAYMENTTYPE
order by ISREFUND asc, PAYMENTMETHODCODE
for xml raw ('ITEM'), type, elements, root('DEPOSITSUMMARY'), BINARY BASE64
);
return 0;