USP_RESERVATIONSECURITYDEPOSITCREDIT_ADDREFUND
Adds refund to a reservation security deposit.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | |
@CREDITPAYMENTID | uniqueidentifier | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@RESERVATIONID | uniqueidentifier | IN | |
@AMOUNTELIGIBLE | money | IN | |
@WITHHOLDREASONCODEID | uniqueidentifier | IN | |
@AMOUNTWITHHELD | money | IN | |
@REFUNDAMOUNT | money | IN | |
@REFUNDMETHODID | uniqueidentifier | IN | |
@COMMENT | nvarchar(max) | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@TRANSACTIONDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_RESERVATIONSECURITYDEPOSITCREDIT_ADDREFUND(
@ID uniqueidentifier = null output,
@CREDITPAYMENTID uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier = null,
@RESERVATIONID uniqueidentifier,
@AMOUNTELIGIBLE money = null,
@WITHHOLDREASONCODEID uniqueidentifier = null,
@AMOUNTWITHHELD money = null,
@REFUNDAMOUNT money = null,
@REFUNDMETHODID uniqueidentifier = null,
@COMMENT nvarchar(max) = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@TRANSACTIONDATE datetime = null
)
as
set nocount on;
if @ID is null
set @ID= newid();
if @CREDITPAYMENTID is null
set @CREDITPAYMENTID= newid();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
declare @CURRENTDATETIMEOFFSET datetimeoffset
set @CURRENTDATETIMEOFFSET = dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEWITHTIMEOFFSET(getutcdate(), 1);
if @TRANSACTIONDATE is null
set @TRANSACTIONDATE = dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEFROMUTC(getutcdate());
begin try
-- Withhold the whole security deposit, just change the status
if (@WITHHOLDREASONCODEID is not null) and @AMOUNTWITHHELD = @AMOUNTELIGIBLE
begin
if exists (select * from dbo.RESERVATION where RESERVATION.ID = @RESERVATIONID and SECURITYDEPOSITSTATUSCODE = 1)
update dbo.RESERVATION
set SECURITYDEPOSITSTATUSCODE = 3,
SECURITYDEPOSITWITHHOLDREASONCODEID = @WITHHOLDREASONCODEID,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
where RESERVATION.ID = @RESERVATIONID;
return 0;
end
-- If refund by credit card, validate amount
if @REFUNDMETHODID <> '00000000-0000-0000-0000-000000000001'
begin
declare @PAYMENTAMOUNT money
select @PAYMENTAMOUNT = FINANCIALTRANSACTION.BASEAMOUNT
from dbo.FINANCIALTRANSACTION
where FINANCIALTRANSACTION.ID = @REFUNDMETHODID
if @REFUNDAMOUNT > @PAYMENTAMOUNT
begin
raiserror('ERR_RESERVATIONSECURITYDEPOSITCREDIT_INVALIDREFUNDAMOUNT', 13, 1);
return 1;
end
end
declare @REVENUEID uniqueidentifier
if @REFUNDMETHODID = '00000000-0000-0000-0000-000000000001'
select @REVENUEID = PAYMENTID
from dbo.RESERVATIONSECURITYDEPOSITPAYMENT
where RESERVATIONID = @RESERVATIONID
else
set @REVENUEID = @REFUNDMETHODID
declare @REVENUESPLITID uniqueidentifier
select @REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
from dbo.FINANCIALTRANSACTIONLINEITEM
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @REVENUEID
if @REFUNDAMOUNT > 0
begin
-- Refund
declare @CONSTITUENTID uniqueidentifier
select @CONSTITUENTID = CONSTITUENTID from dbo.SALESORDER where ID = @RESERVATIONID
declare @CURRENCYID uniqueidentifier;
select @CURRENCYID = ID from dbo.CURRENCY where ISORGANIZATIONCURRENCY = 1;
declare @PDACCOUNTSYSTEMID uniqueidentifier;
declare @ALLOWGLDISTRIBUTIONS bit;
select
@PDACCOUNTSYSTEMID = ID,
@ALLOWGLDISTRIBUTIONS = ALLOWGLDISTRIBUTIONS
from
dbo.UFN_PDACCOUNTSYSTEM_DEFAULTORSYSTEM();
insert into dbo.FINANCIALTRANSACTION(
ID
,TRANSACTIONAMOUNT
,BASEAMOUNT
,ORGAMOUNT
,TRANSACTIONCURRENCYID
,TYPECODE
,PDACCOUNTSYSTEMID
,DESCRIPTION
,DATE
,POSTDATE
,POSTSTATUSCODE
,PARENTID
,APPUSERID
,CONSTITUENTID
---- Boilerplate
,DATEADDED ,DATECHANGED ,ADDEDBYID ,CHANGEDBYID)
values(
@ID
,@REFUNDAMOUNT
,@REFUNDAMOUNT
,@REFUNDAMOUNT
,@CURRENCYID
,23 --Refund
,@PDACCOUNTSYSTEMID
,@COMMENT
,@TRANSACTIONDATE
,case when @ALLOWGLDISTRIBUTIONS = 1 then cast(@TRANSACTIONDATE as date) else null end
,case when @ALLOWGLDISTRIBUTIONS = 1 then 1 else 3 end
,(select REVENUEID from dbo.SALESORDER where ID = @RESERVATIONID)
,@CURRENTAPPUSERID
,@CONSTITUENTID
,@CURRENTDATE, @CURRENTDATE, @CHANGEAGENTID, @CHANGEAGENTID);
insert into dbo.CREDIT_EXT(
ID
,SALESORDERID
,CREDITREASONCODEID
---- Boilerplate
,DATEADDED ,DATECHANGED ,ADDEDBYID ,CHANGEDBYID)
values (
@ID
,@RESERVATIONID
,null
,@CURRENTDATE, @CURRENTDATE, @CHANGEAGENTID, @CHANGEAGENTID);
insert into dbo.CREDITPAYMENT
(
ID,
CREDITID,
APPUSERID,
CREDITPAYMENTDATEWITHTIMEOFFSET,
AMOUNT,
PAYMENTMETHODCODE,
OTHERPAYMENTMETHODCODEID,
REVENUEID,
REVENUESPLITID,
REFUNDPROCESSED,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
) values (
@CREDITPAYMENTID,
@ID,
@CURRENTAPPUSERID,
@CURRENTDATETIMEOFFSET,
@REFUNDAMOUNT,
case @REFUNDMETHODID
when '00000000-0000-0000-0000-000000000001' then 1
else 2
end,
null,
@REVENUEID,
@REVENUESPLITID,
case @REFUNDMETHODID
when '00000000-0000-0000-0000-000000000001' then 1
else 0
end,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
)
if @REFUNDMETHODID = '00000000-0000-0000-0000-000000000001'
insert into dbo.CREDITPAYMENTCHECKPAYMENTMETHODDETAIL(
ID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select @CREDITPAYMENTID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE;
declare @CREDITITEMID uniqueidentifier = NEWID();
insert into dbo.FINANCIALTRANSACTIONLINEITEM(
ID
,FINANCIALTRANSACTIONID
,UNITVALUE
,QUANTITY
,DESCRIPTION
,TRANSACTIONAMOUNT
,BASEAMOUNT
,ORGAMOUNT
,POSTDATE
,POSTSTATUSCODE
,TYPECODE
,SOURCELINEITEMID
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (
@CREDITITEMID
,@ID
,@REFUNDAMOUNT
,1
,'Security deposit'
,@REFUNDAMOUNT
,@REFUNDAMOUNT
,@REFUNDAMOUNT
,case when @ALLOWGLDISTRIBUTIONS = 1 then cast(@TRANSACTIONDATE as date) else null end
,case when @ALLOWGLDISTRIBUTIONS = 1 then 1 else 3 end
,0
,@REVENUESPLITID
,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
insert into dbo.CREDITITEM_EXT(
ID
,CREDITID
,DISCOUNTS
,FEES
,GROUPID
,GROUPTYPECODE
,SALESORDERITEMID
,TYPECODE
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (
@CREDITITEMID
,@ID
,0
,0
,null
,0
,null
,12
,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
end
--create GL Distributions
if @ALLOWGLDISTRIBUTIONS = 1
exec dbo.USP_REFUND_CREATEGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE, @CREDITPAYMENTID
-- Update security deposit status
if @REFUNDAMOUNT = @AMOUNTELIGIBLE
update dbo.RESERVATION
set SECURITYDEPOSITSTATUSCODE = 2,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
where RESERVATION.ID = @RESERVATIONID
else
update dbo.RESERVATION
set SECURITYDEPOSITSTATUSCODE = 4,
SECURITYDEPOSITWITHHOLDREASONCODEID = @WITHHOLDREASONCODEID,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
where RESERVATION.ID = @RESERVATIONID
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0;