UFN_SALESORDER_GETRECEIPTAMOUNT
Finds the amount of money in a sales order which is receiptable as a gift
Return
Return Type |
---|
money |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SALESORDERID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_SALESORDER_GETRECEIPTAMOUNT
(
@SALESORDERID uniqueidentifier
)
returns money
with execute as caller
as begin
declare @RECEIPTAMOUNT money
declare @RA table
(
RECEIPTAMOUNT money
)
insert into @RA (RECEIPTAMOUNT)
select SALESORDERITEM.TOTAL
from dbo.SALESORDERITEM
where SALESORDERITEM.SALESORDERID = @SALESORDERID and TYPECODE = 2
if exists (select * from dbo.SALESORDERITEM where SALESORDERID = @SALESORDERID and TYPECODE = 1)
insert into @RA (RECEIPTAMOUNT)
select
case
when MEMBERSHIPPROGRAM.DEDUCTIBILITYCODE = 0 then
SALESORDERITEM.TOTAL - PROMOS.AMOUNT
when MEMBERSHIPPROGRAM.DEDUCTIBILITYCODE = 1 then
case
when MEMBERSHIPLEVEL.RECEIPTAMOUNT <= SALESORDERITEM.TOTAL then
MEMBERSHIPLEVEL.RECEIPTAMOUNT - PROMOS.AMOUNT
else
(SALESORDERITEM.TOTAL * (MEMBERSHIPLEVEL.RECEIPTAMOUNT / MEMBERSHIPLEVELTERM.AMOUNT) - PROMOS.AMOUNT)
end
else 0
end
from dbo.SALESORDERITEM
inner join dbo.SALESORDERITEMMEMBERSHIP on SALESORDERITEM.ID = SALESORDERITEMMEMBERSHIP.ID
inner join dbo.MEMBERSHIPPROGRAM on SALESORDERITEMMEMBERSHIP.MEMBERSHIPPROGRAMID = MEMBERSHIPPROGRAM.ID
inner join dbo.MEMBERSHIPLEVEL on SALESORDERITEMMEMBERSHIP.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID
inner join dbo.MEMBERSHIPLEVELTERM on SALESORDERITEMMEMBERSHIP.MEMBERSHIPLEVELTERMID = MEMBERSHIPLEVELTERM.ID
outer apply (
select isnull(sum(SALESORDERITEMMEMBERSHIPITEMPROMOTION.AMOUNT), 0) as AMOUNT
from dbo.SALESORDERITEMMEMBERSHIPITEMPROMOTION
where SALESORDERITEMMEMBERSHIPITEMPROMOTION.SALESORDERITEMID = SALESORDERITEM.ID
) as PROMOS
where SALESORDERITEM.SALESORDERID = @SALESORDERID and MEMBERSHIPPROGRAM.DEDUCTIBILITYCODE <> 2
if exists (select * from dbo.SALESORDERITEM where SALESORDERID = @SALESORDERID and TYPECODE = 6)
insert into @RA (RECEIPTAMOUNT)
select isnull(sum(EVENTREGISTRANTPAYMENT.RECEIPTAMOUNT), 0)
from dbo.SALESORDER
inner join dbo.FINANCIALTRANSACTIONLINEITEM as LI on LI.FINANCIALTRANSACTIONID = SALESORDER.REVENUEID
inner join dbo.EVENTREGISTRANTPAYMENT on EVENTREGISTRANTPAYMENT.PAYMENTID = LI.ID
where SALESORDER.ID = @SALESORDERID and LI.DELETEDON is null and LI.TYPECODE <> 1; -- Reversal
select @RECEIPTAMOUNT =
sum(
(case
when RECEIPTAMOUNT < 0 then 0
else RECEIPTAMOUNT
end)
)
from @RA
return isnull(@RECEIPTAMOUNT, 0)
end