USP_REFUND_CREATEGLDISTRIBUTION_GROUPSALES
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CREDITPAYMENTID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_REFUND_CREATEGLDISTRIBUTION_GROUPSALES
(
@CREDITPAYMENTID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@CHANGEDATE datetime = null
)
as
begin
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CHANGEDATE is null
set @CHANGEDATE = getdate();
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 join
dbo.GLACCOUNT on GLACCOUNT.ID = PDACCOUNTSYSTEM.DEFAULTGLACCOUNTID;
declare @CREDITID uniqueidentifier
select @CREDITID = CREDITID from dbo.CREDITPAYMENT where ID = @CREDITPAYMENTID
declare @POSTDATE datetime;
select @POSTDATE = POSTDATE
from dbo.FINANCIALTRANSACTION where ID = @CREDITID;
declare @DISTRIBUTIONS table(
GLTRANSACTIONID uniqueidentifier,
ACCOUNT nvarchar(100),
AMOUNT money,
TRANSACTIONTYPECODE tinyint,
REFERENCE nvarchar(255),
POSTDATE datetime,
ACCOUNTID uniqueidentifier,
CREDITPAYMENTID uniqueidentifier,
ERRORMESSAGE nvarchar(255),
MAPPEDVALUES xml
,FTLIID uniqueidentifier
);
-- Generate GL distributions for the discount record.
insert into @DISTRIBUTIONS(
GLTRANSACTIONID,
ACCOUNT,
AMOUNT,
TRANSACTIONTYPECODE,
REFERENCE,
POSTDATE,
ACCOUNTID,
CREDITPAYMENTID,
FTLIID)
select
NEWID() as GLTRANSACTIONID
,case when JE.TRANSACTIONTYPECODE = 0 then
dbo.UFN_REFUND_GETCREDITACCOUNT_GROUPSALES(@CREDITPAYMENTID)
else
A.ACCOUNTNUMBER
end ACCOUNT
,REFUNDLI.TRANSACTIONAMOUNT as AMOUNT
,case when JE.TRANSACTIONTYPECODE = 0 then 1 else 0 end as TRANSACTIONTYPECODE
,'Refund-'+ JE.COMMENT as REFERENCE
,@POSTDATE as POSTDATE
,case when JE.TRANSACTIONTYPECODE = 0 then
null
else
JE.GLACCOUNTID
end ACCOUNTID
,@CREDITPAYMENTID as CREDITPAYMENTID
,REFUNDLI.ID as FTLIID
from dbo.FINANCIALTRANSACTIONLINEITEM REFUNDLI
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on REFUNDLI.SOURCELINEITEMID = LI.ID
inner join dbo.REVENUESPLIT_EXT EXT on EXT.ID = LI.ID
inner join dbo.JOURNALENTRY JE on JE.FINANCIALTRANSACTIONLINEITEMID = LI.ID
inner join dbo.JOURNALENTRY_EXT JEX on JE.ID = JEX.ID
inner join dbo.GLACCOUNT A on A.ID = JE.GLACCOUNTID
where REFUNDLI.FINANCIALTRANSACTIONID = @CREDITID
and LI.TYPECODE != 1 and LI.DELETEDON is null
and JEX.TABLENAMECODE = 1
and EXT.APPLICATIONCODE = 10 --Order
and EXT.TYPECODE = 19 -- Unearned revenue
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
,FTLIID
,TRANSACTIONTYPECODE
,0
,row_number() over (partition by FTLIID 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
,CREDITPAYMENTID
,JOURNAL
,ACCOUNT
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
GLTRANSACTIONID
,6
,0
,FTLIID
,CREDITPAYMENTID
,@JOURNAL
,ACCOUNT
,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
from @DISTRIBUTIONS;
end