USP_REFUND_CREATEDISCOUNTGLDISTRIBUTION
Generates the discount GL distribution for a refund.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CREDITID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_REFUND_CREATEDISCOUNTGLDISTRIBUTION(
@CREDITID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@CHANGEDATE datetime = null
)
as
begin
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CHANGEDATE is null
set @CHANGEDATE = getdate();
declare @POSTDATE datetime;
select @POSTDATE = POSTDATE from dbo.FINANCIALTRANSACTION where ID = @CREDITID;
--first, go get the distributions that we need to reverse...
declare @DISTRIBUTIONS table
(
REVENUESPLITID uniqueidentifier,
REVENUEID uniqueidentifier,
GLTRANSACTIONID uniqueidentifier,
ACCOUNT nvarchar(100),
AMOUNT money,
PROJECT nvarchar(100),
TRANSACTIONTYPECODE tinyint,
REFERENCE nvarchar(255),
POSTDATE datetime,
GLPAYMENTMETHODREVENUETYPEMAPPINGID uniqueidentifier,
ACCOUNTID uniqueidentifier,
CREDITITEMID uniqueidentifier,
DISCOUNTCREDITITEMID uniqueidentifier,
ERRORMESSAGE nvarchar(255),
MAPPEDVALUES xml
);
declare @PDACCOUNTSYSTEMID uniqueidentifier;
declare @DEFAULTACCOUNT nvarchar(100);
declare @DEFAULTACCOUNTID uniqueidentifier;
select
@PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID,
@DEFAULTACCOUNTID = GLACCOUNT.ID,
@DEFAULTACCOUNT = GLACCOUNT.ACCOUNTNUMBER
from dbo.UFN_PDACCOUNTSYSTEM_DEFAULTORSYSTEM() as PDACCOUNTSYSTEM
left outer join dbo.GLACCOUNT on GLACCOUNT.ID = PDACCOUNTSYSTEM.DEFAULTGLACCOUNTID;
-- Generate GL distributions for the discount record.
insert into @DISTRIBUTIONS(GLTRANSACTIONID, REVENUESPLITID, REVENUEID, ACCOUNT, AMOUNT, TRANSACTIONTYPECODE, REFERENCE, POSTDATE, GLPAYMENTMETHODREVENUETYPEMAPPINGID, ACCOUNTID, CREDITITEMID, DISCOUNTCREDITITEMID)
select
newid(),
JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID,
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID,
case when JOURNALENTRY.TRANSACTIONTYPECODE = 0 then -- COULD BE OPTIMIZED HERE
(
select
coalesce(GLA.ACCOUNTNUMBER, '')
from
JOURNALENTRY JE
left join
dbo.JOURNALENTRY_EXT JEXT on JEXT.ID = JE.ID
left join
dbo.GLACCOUNT GLA on JE.GLACCOUNTID = GLA.ID
where
JEXT.CREDITITEMID = SPLITS.DISCOUNTCREDITITEMID
and JE.TRANSACTIONTYPECODE = 0
)
else
isnull(GLACCOUNT.ACCOUNTNUMBER, JOURNALENTRY_EXT.ACCOUNT)
end,
SPLITS.AMOUNT,
case when JOURNALENTRY.TRANSACTIONTYPECODE = 0 then 1 else 0 end,
SPLITS.REFERENCE,
@POSTDATE,
isnull(JOURNALENTRY_EXT.GLPAYMENTMETHODREVENUETYPEMAPPINGID,'00000000-0000-0000-0000-000000000000'),
case when JOURNALENTRY.TRANSACTIONTYPECODE = 0 then
null
else
JOURNALENTRY.GLACCOUNTID
end,
SPLITS.CREDITITEMID,
SPLITS.DISCOUNTCREDITITEMID
from
dbo.JOURNALENTRY
left outer join
dbo.GLACCOUNT on JOURNALENTRY.GLACCOUNTID = GLACCOUNT.ID
left outer join
dbo.JOURNALENTRY_EXT on JOURNALENTRY_EXT.ID = JOURNALENTRY.ID
inner join
dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
inner join
dbo.UFN_REFUND_GETPRORATEDDISCOUNTSPLITS(@CREDITID) as SPLITS on SPLITS.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
update @DISTRIBUTIONS set ACCOUNTID = (select GLACCOUNT.ID from dbo.GLACCOUNT where GLACCOUNT.ACCOUNTNUMBER = ACCOUNT and GLACCOUNT.PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID)
where ACCOUNTID is null;
declare @ERRORMESSAGE nvarchar(255);
if exists(select 1 from @DISTRIBUTIONS where ACCOUNTID is null)
begin
set @ERRORMESSAGE = 'An account code has not been mapped for one or more payment methods.';
declare @MAPPEDVALUES xml;
set @MAPPEDVALUES = (select tv1.*, @ERRORMESSAGE as ERRORMESSAGE, 1 as ERRORCODE from dbo.UFN_GETGENERICACCOUNTMAPPINGSTRUCTURE(@PDACCOUNTSYSTEMID, 2, null, null, null, null) tv1 for XML raw('ROW'), type, elements, root('MAPPEDVALUES'), BINARY BASE64)
if @DEFAULTACCOUNTID is null
raiserror(@ERRORMESSAGE, 13, 1);
else
begin
update @DISTRIBUTIONS set
ACCOUNT = @DEFAULTACCOUNT
,ACCOUNTID = @DEFAULTACCOUNTID
,ERRORMESSAGE = @ERRORMESSAGE
,MAPPEDVALUES = convert(nvarchar(max), @MAPPEDVALUES)
where ACCOUNTID is null;
insert into dbo.GLACCOUNTMAPPINGERROR ([TRANSACTIONID],[TRANSACTIONTYPECODE],[ERRORMESSAGE], [MAPPEDVALUES],[ADDEDBYID],[CHANGEDBYID],[DATEADDED],[DATECHANGED])
select distinct
@CREDITID
,103
,D.ERRORMESSAGE
,convert(nvarchar(max), D.MAPPEDVALUES)
,@CHANGEAGENTID
,@CHANGEAGENTID
,@CHANGEDATE
,@CHANGEDATE
from @DISTRIBUTIONS D
where nullif(D.ERRORMESSAGE, '') is not null and D.ERRORMESSAGE not in (select ERRORMESSAGE from dbo.GLACCOUNTMAPPINGERROR where TRANSACTIONID = @CREDITID and DELETED = 0)
end
end
set @ERRORMESSAGE = dbo.UFN_GLDISTRIBUTION_VALIDPOSTDATE(@POSTDATE);
if @ERRORMESSAGE <> ''
raiserror(@ERRORMESSAGE, 13, 1);
declare @JOURNAL nvarchar(50);
set @JOURNAL = 'Blackbaud Enterprise';
declare @CURRENCYID uniqueidentifier;
select @CURRENCYID = ID from dbo.CURRENCY where ISORGANIZATIONCURRENCY = 1;
insert into dbo.JOURNALENTRY (
ID
,FINANCIALTRANSACTIONLINEITEMID
,TRANSACTIONTYPECODE
,CLASSCODE
,SEQUENCE
,TRANSACTIONAMOUNT
,COMMENT
,POSTDATE
,GLACCOUNTID
,SUBLEDGERTYPECODE
,BASEAMOUNT
,ORGAMOUNT
,TYPECODE
,TRANSACTIONCURRENCYID
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
GLTRANSACTIONID
,CREDITITEMID
,TRANSACTIONTYPECODE
,0
,row_number() over (partition by CREDITITEMID order by AMOUNT)
,AMOUNT
,REFERENCE
,POSTDATE
,ACCOUNTID
,TRANSACTIONTYPECODE
,AMOUNT
,AMOUNT
,0
,@CURRENCYID
,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
from @DISTRIBUTIONS;
insert into dbo.JOURNALENTRY_EXT(
ID
,TABLENAMECODE
,OUTDATED
,CREDITITEMID
,DISCOUNTCREDITITEMID
,JOURNAL
,ACCOUNT
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
GLTRANSACTIONID
,6
,0
,CREDITITEMID
,DISCOUNTCREDITITEMID
,@JOURNAL
,ACCOUNT
,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
from @DISTRIBUTIONS;
end