USP_RECURRINGGIFT_ADDSKIPANDWRITEOFF
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | |
@REVENUEID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@DATE | date | IN | |
@WRITEOFFREASONID | uniqueidentifier | IN | |
@SKIPREASONID | uniqueidentifier | IN | |
@AMOUNT | money | IN | |
@INSTALLMENTS | xml | IN | |
@ASOFDATE | date | IN | |
@TYPECODE | tinyint | IN | |
@ORIGINALSTATUSCODE | tinyint | IN |
Definition
Copy
CREATE procedure dbo.USP_RECURRINGGIFT_ADDSKIPANDWRITEOFF
(
@ID uniqueidentifier = null output,
@REVENUEID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@DATE date = null,
@WRITEOFFREASONID uniqueidentifier = null,
@SKIPREASONID uniqueidentifier = null,
@AMOUNT money = 0,
@INSTALLMENTS xml = null,
@ASOFDATE date = null,
@TYPECODE tinyint = 0,
@ORIGINALSTATUSCODE tinyint = null
)
as
begin
if @ID is null
set @ID = newid()
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
begin try
declare @RGAMOUNT money;
declare @BASECURRENCYID uniqueidentifier;
declare @RGORGANIZATIONAMOUNT money;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @RGTRANSACTIONAMOUNT money;
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @BASEEXCHANGERATEID uniqueidentifier;
select
@RGAMOUNT = REVENUE.AMOUNT,
@BASECURRENCYID = REVENUE.BASECURRENCYID,
@RGORGANIZATIONAMOUNT = REVENUE.ORGANIZATIONAMOUNT,
@ORGANIZATIONEXCHANGERATEID = REVENUE.ORGANIZATIONEXCHANGERATEID,
@RGTRANSACTIONAMOUNT = REVENUE.TRANSACTIONAMOUNT,
@TRANSACTIONCURRENCYID = REVENUE.TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID = REVENUE.BASEEXCHANGERATEID
from
dbo.REVENUE
where
REVENUE.ID = @REVENUEID;
if @BASECURRENCYID <> @TRANSACTIONCURRENCYID and @BASEEXCHANGERATEID is null
raiserror('BBERR_BASEEXCHANGERATE_MISSING', 13, 1);
-- add missing installments
exec dbo.USP_RECURRINGGIFT_ADDMISSINGINSTALLMENTS
@REVENUEID,
@CHANGEAGENTID,
@CURRENTDATE,
@RGAMOUNT,
null,
@BASECURRENCYID,
@RGORGANIZATIONAMOUNT,
@ORGANIZATIONEXCHANGERATEID,
@RGTRANSACTIONAMOUNT,
@TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID,
@ASOFDATE;
insert into dbo.RECURRINGGIFTWRITEOFF (ID, REVENUEID, DATE, REASONCODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, SKIPREASONCODEID, TYPECODE)
values (@ID, @REVENUEID, @DATE, @WRITEOFFREASONID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @SKIPREASONID, @TYPECODE);
insert into dbo.RECURRINGGIFTINSTALLMENTWRITEOFF (
ID,
RECURRINGGIFTINSTALLMENTID,
WRITEOFFID,
AMOUNT,
BASECURRENCYID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
newid(),
-- insert all installments to be skipped/written-off. When ID is null or empty guid try matching them by date to the existing installments
coalesce(nullif(WRITEOFFINSTALLMENT.ID,'00000000-0000-0000-0000-000000000000'),(select ID from dbo.RECURRINGGIFTINSTALLMENT where REVENUEID = @REVENUEID and DATE = WRITEOFFINSTALLMENT.DATE)),
@ID,
case when @TYPECODE = 0 then WRITEOFFAMOUNTCURRENCYVALUES.BASEAMOUNT else 0 end,--if this is a 'Skip' set the to 0
@BASECURRENCYID,
case when @TYPECODE = 0 then WRITEOFFAMOUNTCURRENCYVALUES.ORGANIZATIONAMOUNT else 0 end,
@ORGANIZATIONEXCHANGERATEID,
case when @TYPECODE = 0 then WRITEOFFINSTALLMENT.WRITEOFFAMOUNT else 0 end,
@TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID,
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from
dbo.UFN_RECURRINGGIFTINSTALLMENT_GETWRITEOFFINSTALLMENTS_2_FROMITEMLISTXML(@INSTALLMENTS) WRITEOFFINSTALLMENT
outer apply dbo.UFN_CURRENCY_GETCURRENCYVALUES_2
(
WRITEOFFINSTALLMENT.WRITEOFFAMOUNT,
null,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
null,
null,
null,
@ORGANIZATIONEXCHANGERATEID,
0
) as WRITEOFFAMOUNTCURRENCYVALUES
where
WRITEOFFINSTALLMENT.WRITEOFFAMOUNT > 0;
declare @STATUSCHANGETYPECODE tinyint = case @TYPECODE when 0 then 3 else 98 end;
declare @NEWSTATUSCODE tinyint = case when @ORIGINALSTATUSCODE is null then null else 1 end;
exec dbo.USP_RECURRINGGIFT_UPDATEREVENUESCHEDULE
@REVENUEID,
@STATUSCHANGETYPECODE,
@SKIPREASONID,
@ORIGINALSTATUSCODE,
@NEWSTATUSCODE,
@RGAMOUNT,
@BASECURRENCYID,
@RGORGANIZATIONAMOUNT,
@ORGANIZATIONEXCHANGERATEID,
@RGTRANSACTIONAMOUNT,
@TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID,
@CHANGEAGENTID,
@CURRENTDATE
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0
end