USP_PLEDGEWRITEOFFPROCESS_ADDWRITEOFF
Adds a write off for the global pledge writeoff process.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@PLEDGEID | uniqueidentifier | IN | |
@DATE | datetime | IN | |
@POSTDATE | datetime | IN | |
@POSTSTATUSCODE | tinyint | IN | |
@REASON | nvarchar(300) | IN | |
@REASONCODEID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN | |
@ADDWRITEOFF | bit | IN | |
@INSTALLMENTID | uniqueidentifier | IN | |
@WRITEOFFAMOUNT | money | IN |
Definition
Copy
CREATE procedure dbo.USP_PLEDGEWRITEOFFPROCESS_ADDWRITEOFF
(
@ID uniqueidentifier,
@PLEDGEID uniqueidentifier,
@DATE datetime,
@POSTDATE datetime,
@POSTSTATUSCODE tinyint,
@REASON nvarchar(300),
@REASONCODEID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@CURRENTDATE datetime,
@ADDWRITEOFF bit,
@INSTALLMENTID uniqueidentifier,
@WRITEOFFAMOUNT money
)
as
begin
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CURRENTDATE is null
set @CURRENTDATE = GetDate();
declare @ERRORMESSAGE nvarchar(max);
set @ERRORMESSAGE = '';
-- Check GL business rule for this account system and set to 'Do not post' if needed.
declare @PDACCOUNTSYSTEMID uniqueidentifier;
select @PDACCOUNTSYSTEMID = PDACCOUNTSYSTEMID from dbo.PDACCOUNTSYSTEMFORREVENUE where ID = @PLEDGEID;
if dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID) = 0
begin
set @POSTSTATUSCODE = 2 -- Do not post
set @POSTDATE = null
end
begin transaction;
if @ADDWRITEOFF = 1
begin
if @POSTSTATUSCODE = 1
insert into dbo.WRITEOFF(ID,REVENUEID,DATE,POSTDATE,POSTSTATUSCODE,REASON,REASONCODEID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
values (@ID,@PLEDGEID,@DATE,@POSTDATE,@POSTSTATUSCODE,@REASON,@REASONCODEID,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE);
else
insert into dbo.WRITEOFF(ID,REVENUEID,DATE,POSTSTATUSCODE,REASON,REASONCODEID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
values (@ID,@PLEDGEID,@DATE,@POSTSTATUSCODE,@REASON,@REASONCODEID,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE);
end
exec dbo.USP_INSTALLMENT_WRITEOFFINSTALLMENTSPLITS @PLEDGEID,@INSTALLMENTID,@ID,@WRITEOFFAMOUNT,@CHANGEAGENTID,@CURRENTDATE;
exec dbo.USP_WRITEOFF_FIXSPLITS @ID,@PLEDGEID,@CHANGEAGENTID,@CURRENTDATE
declare @WRITEOFFTRANSACTIONAMOUNT money;
declare @WRITEOFFBASEAMOUNT money;
declare @WRITEOFFORGAMOUNT money;
select
@WRITEOFFTRANSACTIONAMOUNT = sum(T2.TRANSACTIONAMOUNT),
@WRITEOFFBASEAMOUNT = sum(T2.BASEAMOUNT),
@WRITEOFFORGAMOUNT = sum(T2.ORGAMOUNT)
from dbo.FINANCIALTRANSACTION T1
inner join dbo.FINANCIALTRANSACTIONLINEITEM T2 on T1.ID = T2.FINANCIALTRANSACTIONID
where T1.TYPECODE = 20 and T1.ID = @ID
update dbo.FINANCIALTRANSACTION
set TRANSACTIONAMOUNT = isnull(@WRITEOFFTRANSACTIONAMOUNT,0),
BASEAMOUNT = isnull(@WRITEOFFBASEAMOUNT,0),
ORGAMOUNT = isnull(@WRITEOFFORGAMOUNT,0)
where ID = @ID
--Bug 164325 We're comparing the current sequence to the max sequence to determine if this is the final installment for a pledge. If it is then we can safely write
-- the GL and it will be for the correct amount.
declare @MAXSEQUENCE int = (select max(SEQUENCE) from dbo.INSTALLMENT where REVENUEID=@PLEDGEID);
declare @CURRENTSEQUENCE int = (select SEQUENCE from dbo.INSTALLMENT where ID=@INSTALLMENTID);
if @CURRENTSEQUENCE = @MAXSEQUENCE
begin
--Save the write-off GL distributions
if @POSTSTATUSCODE <> 2 and dbo.UFN_VALID_BASICGL_INSTALLED() = 1
begin
-- Using a table to support redistributing across multiple write-offs, e.g. editing a pledge designation
declare @WRITEOFFIDTABLE UDT_GENERICID;
insert into @WRITEOFFIDTABLE values (@ID);
--Write-off for pledge, use try/catch to grab the error
begin try
exec dbo.USP_SAVE_PLEDGEWRITEOFFGLDISTRIBUTION @PLEDGEID, @WRITEOFFIDTABLE, @CHANGEAGENTID, @CURRENTDATE
end try
begin catch
set @ERRORMESSAGE = ERROR_MESSAGE();
end catch
end
else if @POSTSTATUSCODE <> 2
exec dbo.USP_SAVE_WRITEOFFGLDISTRIBUTION_PROCESS @PLEDGEID, @CHANGEAGENTID, @CURRENTDATE, @ERRORMESSAGE output;
end
if @ERRORMESSAGE <> ''
begin
rollback transaction;
raiserror('%s', 13, 1, @ERRORMESSAGE);
return 1;
end
commit transaction;
return 0;
end