UFN_REVENUE_GENERATEGLACCOUNT_STANDARD
Generates GL Account Code from the account code mappings defined in the system.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUESPLITID | uniqueidentifier | IN | |
@REVENUETRANSACTIONTYPECODE | tinyint | IN | |
@REVENUESPLITTYPECODE | tinyint | IN | |
@APPLICATIONCODE | tinyint | IN | |
@PAYMENTMETHODCODE | tinyint | IN | |
@DESIGNATIONID | uniqueidentifier | IN |
Definition
Copy
CREATE function DBO.UFN_REVENUE_GENERATEGLACCOUNT_STANDARD
(
@REVENUESPLITID as uniqueidentifier,
@REVENUETRANSACTIONTYPECODE tinyint,
@REVENUESPLITTYPECODE tinyint,
@APPLICATIONCODE tinyint,
@PAYMENTMETHODCODE tinyint,
@DESIGNATIONID uniqueidentifier
)
returns
@DATA table (ACCOUNTSTRING nvarchar(255), PROJECTCODE nvarchar(255), TRANSACTIONTYPECODE tinyint, ERRORMESSAGE nvarchar(max), ACCOUNTID uniqueidentifier)
as
begin
declare @ACCOUNTNUMBER nvarchar(100);
declare @PROJECTCODE nvarchar(255);
declare @DESIGNATIONNAME nvarchar(100);
declare @ERRORMESSAGE nvarchar(max);
declare @RECORDTYPE nvarchar(11);
declare @RECORDNAME nvarchar(250);
declare @REVENUECATEGORYACCOUNT nvarchar(100);
declare @REVENUECATEGORY nvarchar(100);
declare @SPLITAPPLICATIONCODE tinyint;
declare @SPLITTYPECODE tinyint;
declare @ACCOUNTID uniqueidentifier;
-- We need to get the application code from the split in case that the @APPLICATIONCODE parameter does not match the
-- split's application code, for example the parameter is 200 for 'All'. This is needed to determine whether we need
-- to execute event registration or membership code below.
select
@SPLITAPPLICATIONCODE = APPLICATIONCODE,
@SPLITTYPECODE = TYPECODE
from
dbo.REVENUESPLIT
where
ID = @REVENUESPLITID;
declare @DEBITSCREDITS table(
ACCOUNT nvarchar(100),
GLACCOUNTTYPEMAPPINGID uniqueidentifier,
TRANSACTIONTYPECODE tinyint,
ERRORMESSAGE nvarchar(max)
)
insert into @DEBITSCREDITS
(ACCOUNT,GLACCOUNTTYPEMAPPINGID,TRANSACTIONTYPECODE,ERRORMESSAGE)
select
GLACCOUNTTYPEMAPPING.GLCODE,
MAP.GLACCOUNTTYPEMAPPINGID,
MAP.TRANSACTIONTYPECODE,
case when coalesce(GLACCOUNTTYPEMAPPING.GLCODE, '') = '' then 'GL account code is not defined for the ' + GLACCOUNTTYPEMAPPING.ACCOUNTTYPE + ' account type.' else '' end
from
dbo.GLPAYMENTMETHODREVENUETYPEMAPPING AS MAP with (nolock)
left join
dbo.GLACCOUNTTYPEMAPPING on MAP.GLACCOUNTTYPEMAPPINGID = GLACCOUNTTYPEMAPPING.ID
where
MAP.REVENUETRANSACTIONTYPECODE = @REVENUETRANSACTIONTYPECODE and MAP.PAYMENTMETHODCODE = @PAYMENTMETHODCODE and MAP.REVENUESPLITTYPECODE = @REVENUESPLITTYPECODE and MAP.APPLICATIONCODE = @APPLICATIONCODE;
if @SPLITAPPLICATIONCODE = 1 -- Event registration
begin
select
@ACCOUNTNUMBER = case when EVENTGLMAPPING.ID is null then '' else ACCOUNTNUMBER end,
@PROJECTCODE = case when EVENTGLMAPPING.ID is null then '' else PROJECTCODE end,
@RECORDNAME = EVENT.NAME
from dbo.EVENT with (nolock)
inner join dbo.REGISTRANT with (nolock) on REGISTRANT.EVENTID = EVENT.ID
inner join dbo.EVENTREGISTRANTPAYMENT with (nolock) on EVENTREGISTRANTPAYMENT.REGISTRANTID = REGISTRANT.ID
left join dbo.EVENTGLMAPPING with (nolock) on EVENT.ID = EVENTGLMAPPING.ID
where
EVENTREGISTRANTPAYMENT.PAYMENTID=@REVENUESPLITID;
set @REVENUECATEGORYACCOUNT = '';
set @RECORDTYPE = 'event';
end
if @SPLITTYPECODE = 2 --Membership
begin
if @SPLITAPPLICATIONCODE = 5 -- Membership
begin
select
@ACCOUNTNUMBER = case when MEMBERSHIPGLMAPPING.ID is null then '' else ACCOUNTNUMBER end,
@PROJECTCODE = case when MEMBERSHIPGLMAPPING.ID is null then '' else PROJECTCODE end,
@RECORDNAME = MEMBERSHIPPROGRAM.NAME + ' - ' + MEMBERSHIPLEVEL.NAME
from dbo.MEMBERSHIPLEVEL with (nolock)
inner join dbo.MEMBERSHIPPROGRAM with (nolock) on MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID = MEMBERSHIPPROGRAM.ID
inner join dbo.MEMBERSHIPTRANSACTION with (nolock) on MEMBERSHIPTRANSACTION.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID
left join dbo.MEMBERSHIPGLMAPPING with (nolock) on MEMBERSHIPLEVEL.ID = MEMBERSHIPGLMAPPING.ID
where
MEMBERSHIPTRANSACTION.REVENUESPLITID=@REVENUESPLITID;
set @REVENUECATEGORYACCOUNT = '';
set @RECORDTYPE = 'membership';
end
else -- Membership payment
if @SPLITAPPLICATIONCODE = 10 --Order
begin
declare @MEMBERSHIPLEVELID uniqueidentifier;
select @MEMBERSHIPLEVELID = REVENUESPLITORDER.MEMBERSHIPLEVELID
from dbo.REVENUESPLITORDER
where ID = @REVENUESPLITID;
select
@ACCOUNTNUMBER = case when MEMBERSHIPGLMAPPING.ID is null then '' else ACCOUNTNUMBER end,
@PROJECTCODE = case when MEMBERSHIPGLMAPPING.ID is null then '' else PROJECTCODE end,
@RECORDNAME = MEMBERSHIPPROGRAM.NAME + ' - ' + MEMBERSHIPLEVEL.NAME
from dbo.MEMBERSHIPLEVEL with (nolock)
inner join dbo.MEMBERSHIPPROGRAM with (nolock) on MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID = MEMBERSHIPPROGRAM.ID
left join dbo.MEMBERSHIPGLMAPPING with (nolock) on MEMBERSHIPLEVEL.ID = MEMBERSHIPGLMAPPING.ID
where
MEMBERSHIPLEVEL.ID=@MEMBERSHIPLEVELID;
set @REVENUECATEGORYACCOUNT = '';
set @RECORDTYPE = 'membership';
end
end
if @SPLITTYPECODE = 5 -- Ticket
begin
declare @PROGRAMID uniqueidentifier;
select @PROGRAMID = REVENUESPLITORDER.PROGRAMID
from dbo.REVENUESPLITORDER
where ID = @REVENUESPLITID;
select
@ACCOUNTNUMBER = case when PROGRAMGLMAPPING.ID is null then '' else ACCOUNTNUMBER end,
@PROJECTCODE = case when PROGRAMGLMAPPING.ID is null then '' else PROJECTCODE end,
@RECORDNAME = PROGRAM.NAME
from dbo.PROGRAM
left join dbo.PROGRAMGLMAPPING on PROGRAM.ID = PROGRAMGLMAPPING.ID
where PROGRAM.ID = @PROGRAMID;
set @REVENUECATEGORYACCOUNT = '';
set @RECORDTYPE = 'program';
end
if @SPLITTYPECODE = 6 -- Fee
begin
declare @FEEID uniqueidentifier;
select @FEEID = REVENUESPLITORDER.FEEID
from dbo.REVENUESPLITORDER
where ID = @REVENUESPLITID;
select
@ACCOUNTNUMBER = case when FEEGLMAPPING.ID is null then '' else ACCOUNTNUMBER end,
@PROJECTCODE = case when FEEGLMAPPING.ID is null then '' else PROJECTCODE end,
@RECORDNAME = FEE.NAME
from dbo.FEE
left join dbo.FEEGLMAPPING on FEE.ID = FEEGLMAPPING.ID
where FEE.ID = @FEEID;
set @REVENUECATEGORYACCOUNT = '';
set @RECORDTYPE = 'fee';
end
if @SPLITTYPECODE = 7 -- Tax
begin
declare @TAXID uniqueidentifier;
select @TAXID = REVENUESPLITORDER.TAXID
from dbo.REVENUESPLITORDER
where ID = @REVENUESPLITID;
select
@ACCOUNTNUMBER = case when TAXGLMAPPING.ID is null then '' else ACCOUNTNUMBER end,
@PROJECTCODE = case when TAXGLMAPPING.ID is null then '' else PROJECTCODE end,
@RECORDNAME = TAX.NAME
from dbo.TAX
left join dbo.TAXGLMAPPING on TAX.ID = TAXGLMAPPING.ID
where TAX.ID = @TAXID;
set @REVENUECATEGORYACCOUNT = '';
set @RECORDTYPE = 'tax';
end
if @ACCOUNTNUMBER is null
begin
select
@ACCOUNTNUMBER = ACCOUNTNUMBER,
@PROJECTCODE = PROJECTCODE
--@DESIGNATIONLEVEL1ID = DESIGNATIONLEVEL1ID
from
DBO.DESIGNATION with (nolock)
where
DESIGNATION.ID=@DESIGNATIONID;
select
@REVENUECATEGORYACCOUNT = coalesce(MAP.ACCOUNTCODE, ''),
@REVENUECATEGORY = MAP.REVENUECATEGORYNAME
from
dbo.REVENUECATEGORY
left join
dbo.GLREVENUECATEGORYMAPPING MAP on REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID = MAP.ID
where
REVENUECATEGORY.ID = @REVENUESPLITID;
-- the revenue record does not have a category, so use the empty account code from config
if @REVENUECATEGORYACCOUNT is null
select @REVENUECATEGORY = 'default', @REVENUECATEGORYACCOUNT = coalesce((select top 1 EMPTYREVENUECATEGORYACCOUNTCODE from dbo.GLPREFERENCEINFO), '');
set @RECORDTYPE = 'designation';
if coalesce(@ACCOUNTNUMBER, '') = ''
select @RECORDNAME = NAME from dbo.DESIGNATION with (nolock) where ID = @DESIGNATIONID;
end
select @ERRORMESSAGE =
case
when coalesce(@ACCOUNTNUMBER, '') = ''
then 'GL account/fund code is not defined for the ' + @RECORDNAME + ' ' + @RECORDTYPE + '.'
when exists (select 1 from @DEBITSCREDITS where GLACCOUNTTYPEMAPPINGID is null)
then 'Payment method and revenue type of the revenue record does not map to a valid GL account type.'
--when coalesce(@CREDITACCOUNT, '') = '' or coalesce(@DEBITACCOUNT, '') = ''
-- then 'GL account code is not defined for the ' + @CREDITACCOUNTTYPE + ' account type.'
when coalesce(@REVENUECATEGORYACCOUNT, '') = '' and @REVENUESPLITTYPECODE <> 1
then 'GL account code is not defined for the ' + @REVENUECATEGORY + ' revenue category.'
else ''
end;
insert into @DATA
(ACCOUNTSTRING, TRANSACTIONTYPECODE, PROJECTCODE, ERRORMESSAGE, ACCOUNTID)
select
coalesce((replace((replace(@ACCOUNTNUMBER,'*',ACCOUNT)), '%', @REVENUECATEGORYACCOUNT)), ''),
TRANSACTIONTYPECODE,
@PROJECTCODE,
case @ERRORMESSAGE when '' then ERRORMESSAGE else @ERRORMESSAGE end,
null
from
@DEBITSCREDITS;
return;
end