UFN_RESERVATION_GETDEPOSITPAIDDATE
Returns date the deposit on a reservation was been paid.
Return
Return Type |
---|
date |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@RESERVATIONID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_RESERVATION_GETDEPOSITPAIDDATE
(
@RESERVATIONID uniqueidentifier
)
returns date
with execute as caller
as begin
declare @DEPOSITAMOUNT money;
select @DEPOSITAMOUNT = [DEPOSITAMOUNT]
from dbo.[RESERVATION]
where [ID] = @RESERVATIONID;
declare @PAYMENTTOTAL money = 0;
declare @PAYMENTAMOUNT money;
declare @PAYMENTDATE datetime;
declare @PREVIOUSPAYMENTDATE datetime;
declare reservationpayments_cursor cursor local fast_forward for
select
(SALESORDERPAYMENT.AMOUNT - PAYMENTREFUNDTOTAL.AMOUNTREFUNDED) as AMOUNT,
REVENUE.DATE
from
dbo.[REVENUE]
inner join
dbo.[SALESORDERPAYMENT] on [REVENUE].[ID] = [SALESORDERPAYMENT].[PAYMENTID]
outer apply (
select isnull(sum(CREDITPAYMENT.AMOUNT), 0) as AMOUNTREFUNDED
from dbo.CREDITPAYMENT
where CREDITPAYMENT.REVENUEID = REVENUE.ID
) PAYMENTREFUNDTOTAL
where
[SALESORDERPAYMENT].[SALESORDERID] = @RESERVATIONID
and SALESORDERPAYMENT.AMOUNT > PAYMENTREFUNDTOTAL.AMOUNTREFUNDED
order by
[REVENUE].[DATE] asc;
open reservationpayments_cursor;
fetch next from reservationpayments_cursor
into @PAYMENTAMOUNT, @PAYMENTDATE;
while @@FETCH_STATUS = 0 and @PAYMENTTOTAL < @DEPOSITAMOUNT begin
set @PAYMENTTOTAL += @PAYMENTAMOUNT;
set @PREVIOUSPAYMENTDATE = @PAYMENTDATE;
fetch next from reservationpayments_cursor
into @PAYMENTAMOUNT, @PAYMENTDATE;
end
--When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long
close reservationpayments_cursor;
deallocate reservationpayments_cursor;
declare @DEPOSITPAIDDATE date;
if @PAYMENTTOTAL >= @DEPOSITAMOUNT begin
set @DEPOSITPAIDDATE = @PREVIOUSPAYMENTDATE;
end
return @DEPOSITPAIDDATE;
end