USP_DATAFORMTEMPLATE_EDIT_PLEDGEWRITEOFF2
The save procedure used by the edit dataform template "Pledge Write-off Edit Form 2".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | The input ID parameter indicating the ID of the record being edited. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@DATE | datetime | IN | Date |
@WRITEOFFTOTALAMOUNT | money | IN | Amount |
@POSTSTATUSCODE | tinyint | IN | GL post status |
@POSTDATE | datetime | IN | GL post date |
@REASON | nvarchar(300) | IN | Details |
@INSTALLMENTS | xml | IN | |
@REASONCODEID | uniqueidentifier | IN | Reason code |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_PLEDGEWRITEOFF2
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@DATE datetime,
@WRITEOFFTOTALAMOUNT money,
@POSTSTATUSCODE tinyint,
@POSTDATE datetime,
@REASON nvarchar(300),
@INSTALLMENTS xml,
@REASONCODEID uniqueidentifier
)
as
begin
set nocount on;
if exists (select 1 from dbo.FINANCIALTRANSACTION where ID = @ID and POSTSTATUSCODE = 2)
return
-- Check GL business rule for this account system and set to 'Do not post' if needed.
-- ****
declare @PDACCOUNTSYSTEMID uniqueidentifier;
select @PDACCOUNTSYSTEMID = FINANCIALTRANSACTION.PDACCOUNTSYSTEMID
from dbo.FINANCIALTRANSACTION
where ID = @ID;
declare @ALLOWGLDISTRIBUTIONS bit;
set @ALLOWGLDISTRIBUTIONS = dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID);
if @ALLOWGLDISTRIBUTIONS = 0
begin
set @POSTSTATUSCODE = 2 -- Do not post
set @POSTDATE = null
end
-- ****
declare @CURRENTDATE datetime;
declare @PLEDGEID uniqueidentifier;
declare @OLDAMOUNT money;
declare @OLDREASONCODE uniqueidentifier;
declare @CLEARGLDISTRIBUTION bit;
set @CLEARGLDISTRIBUTION = 0;
begin try
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @WRITEOFFTOTALAMOUNT < 0
raiserror('BBERR_WRITEOFF_VALIDAMOUNT', 13, 1);
set @CURRENTDATE = getdate();
select @PLEDGEID = REVENUEID from dbo.WRITEOFF where ID = @ID;
select @OLDAMOUNT = sum(TRANSACTIONAMOUNT) from dbo.INSTALLMENTWRITEOFF where WRITEOFFID = @ID;
select @OLDREASONCODE = REASONCODEID from dbo.WRITEOFF_EXT where ID = @ID;
if not exists (select 1 from dbo.WRITEOFF where ID = @ID and POSTSTATUSCODE = @POSTSTATUSCODE and POSTDATE = @POSTDATE)
or @OLDAMOUNT <> @WRITEOFFTOTALAMOUNT or @OLDREASONCODE <> @REASONCODEID
begin
set @CLEARGLDISTRIBUTION = 1;
end
update
dbo.WRITEOFF
set
DATE = @DATE,
POSTSTATUSCODE = @POSTSTATUSCODE,
POSTDATE = @POSTDATE,
REASON = @REASON,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE,
REASONCODEID = @REASONCODEID
where
ID = @ID;
exec dbo.USP_INSTALLMENT_WRITEOFFINSTALLMENTS @ID,@WRITEOFFTOTALAMOUNT,@CHANGEAGENTID,@CURRENTDATE,1,@INSTALLMENTS;
exec dbo.USP_WRITEOFF_FIXSPLITS @ID, @PLEDGEID, @CHANGEAGENTID,@CURRENTDATE;
if exists(select 1 from dbo.FINANCIALTRANSACTIONLINEITEM where FINANCIALTRANSACTIONID = @ID and POSTSTATUSCODE = 1 and DELETEDON is null)
set @CLEARGLDISTRIBUTION = 1
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
-- if any GL-related write-off fields have changed, clear any user-defined gl distributions for this record
if @CLEARGLDISTRIBUTION = 1
begin
--Clear GL
--Cache CONTEXT INFO
declare @contextCache varbinary(128);
set @contextCache = CONTEXT_INFO();
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID;
delete from dbo.WRITEOFFGLDISTRIBUTION where WRITEOFFID = @ID and OUTDATED = 0;
declare @TRANSACTIONTYPECODE int = (select FINANCIALTRANSACTION.TYPECODE from dbo.FINANCIALTRANSACTION where ID = @PLEDGEID)
--Save the write-off GL distributions
if @POSTSTATUSCODE <> 2 and @TRANSACTIONTYPECODE in (1,15) 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
exec dbo.USP_SAVE_PLEDGEWRITEOFFGLDISTRIBUTION @PLEDGEID, @WRITEOFFIDTABLE, @CHANGEAGENTID, @CURRENTDATE
end
else if @POSTSTATUSCODE <> 2
exec dbo.USP_SAVE_WRITEOFFGLDISTRIBUTION @PLEDGEID, @CHANGEAGENTID, @CURRENTDATE;
--Restore CONTEXT_INFO
if not @contextCache is null
set CONTEXT_INFO @contextCache;
end
update LI set
POSTDATE = @POSTDATE
,POSTSTATUSCODE = case @POSTSTATUSCODE when 0 then 2 when 1 then 1 when 2 then 3 end
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CURRENTDATE
from dbo.FINANCIALTRANSACTIONLINEITEM LI
where LI.FINANCIALTRANSACTIONID = @ID and LI.POSTSTATUSCODE != 2 and LI.DELETEDON is null;
-- Redefault installment receipt amounts
exec dbo.USP_INSTALLMENTS_DEFAULTRECEIPTAMOUNTS @PLEDGEID, @CHANGEAGENTID
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;
end