UFN_PREPOST_DATA
Retrieve the pre-post GL transaction data.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | nvarchar(36) | IN |
Definition
Copy
CREATE function [dbo].[UFN_PREPOST_DATA](
@ID as nvarchar(36)
)
returns
@PrePostData_Table
table(
ID uniqueidentifier,
REVENUEID nvarchar(100),
DEPOSITCORRECTIONID nvarchar(150),
ADJUSTMENTID nvarchar(100),
ACCOUNT nvarchar(100),
LOOKUPID nvarchar(100),
POSTDATE datetime,
TRANSACTIONTYPECODE tinyint,
AMOUNT money,
JOURNAL nvarchar(50),
REFERENCE nvarchar(max),
DEPOSITID nvarchar(36),
DEPOSITLINKID nvarchar(150),
DEPOSITNUMBER integer,
PERIODID nvarchar(36),
SUMMARYDATE datetime,
GROUPBY nvarchar(50),
ISEXCEPTION bit,
EXCEPTIONREASON nvarchar(max),
TRANSACTIONAMOUNT money,
ORGANIZATIONAMOUNT money,
TRANSACTIONISOCURRENCYCODE nvarchar(3),
TRANSACTIONCURRENCYSYMBOL nvarchar(5),
TRANSACTIONCURRENCYDECIMALDIGITS tinyint,
TRANSACTIONCURRENCYSYMBOLDISPLAYSETTINGCODE tinyint,
REVENUEIDGUID uniqueidentifier,
ADJUSTMENTIDGUID uniqueidentifier,
CREDITID nvarchar(100)
)
as
begin
declare @PostOptions tinyint -- 0=All, 1=Selected, 2=Adjustments/Reversals only, 3=None
declare @RevenueMethod tinyint
declare @CashMethod tinyint
declare @ARMethod tinyint
declare @RevaluationGainLossMethod tinyint
declare @SummarizeBy tinyint -- 0=Date / 1=Period
declare @BasicGL bit;
declare @DepostiPostingOption tinyint; --0=All, 1=Selected, 2=None, 3=Specific bank accounts, 4=Specific deposit templates
declare @AdjustmentPostingOption tinyint; --0=All, 1=Selected, 2=None
declare @RequireDeposit as bit
declare @PostDateFilter date;
declare @PostDateUpToCode tinyint; --0 - Today, 1 - Yesterday, 2 - End of last week, 3 - End of this week, 4 - End of last period, 5 - End of this period, 6 - Specific date
declare @OWNERID uniqueidentifier;
declare @BUSINESSPROCESSCATALOGID uniqueidentifier;
select @OWNERID = OWNERID,
@BUSINESSPROCESSCATALOGID = BUSINESSPROCESSCATALOGID
from dbo.BUSINESSPROCESSINSTANCE
where BUSINESSPROCESSPARAMETERSETID = convert(uniqueidentifier, @ID);
declare @ISADMIN bit = dbo.UFN_APPUSER_ISSYSADMIN(@OWNERID);
declare @APPUSER_IN_NONRACROLE bit = dbo.UFN_SECURITY_APPUSER_IN_NONRACROLE(@OWNERID);
declare @AllowedSites table (SITEID uniqueidentifier, SITESECURITYMODE int) --For checking site security
set @RevenueMethod = 0
set @CashMethod = 1
set @ARMethod = 1
set @RevaluationGainLossMethod = 1
set @SummarizeBy = 0
--select @BasicGL = CASE WHEN ID is null THEN 0 ELSE 1 END
--from dbo.INSTALLEDPRODUCTLIST where ID = '0E85C527-E6E9-4C5F-A8E8-105FD0E18FE7';
select @BasicGL = dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('0E85C527-E6E9-4C5F-A8E8-105FD0E18FE7');
declare @DEFAULTGLACCOUNTID uniqueidentifier;
select
@PostOptions=POSTINGOPTIONCODE,
@DepostiPostingOption = DEPOSITPOSTINGOPTIONCODE,
@AdjustmentPostingOption = ADJUSTMENTPOSTINGOPTIONCODE,
@RevenueMethod=REVENUEPOSTMETHODCODE,
@CashMethod=CASHPOSTMETHODCODE,
@ARMethod=ARPOSTMETHODCODE,
@SummarizeBy=SUMMARIZECODE,
@RevaluationGainLossMethod = REVALUATIONGAINLOSSPOSTMETHODCODE,
@RequireDeposit = isnull(PDACCOUNTSYSTEM.REQUIREDPOSIT, 0),
@DEFAULTGLACCOUNTID = PDACCOUNTSYSTEM.DEFAULTGLACCOUNTID
,@PostDateUpToCode = T1.POSTDATEUPTOCODE
,@PostDateFilter = T1.SPECIFICPOSTDATEUPTO
from
POSTTOGLPROCESS as T1
inner join POSTTOGLPROCESSDETAIL as T2 on T1.ID = T2.ID
left join dbo.PDACCOUNTSYSTEM on PDACCOUNTSYSTEM.ID = T1.PDACCOUNTSYSTEMID
where
T1.ID = @ID
select @PostDateFilter = case @PostDateUpToCode
when 0 then cast(getdate() as date)
when 1 then cast(DATEADD("D", -1, getdate()) as date)
when 2 then cast(DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 5) as date)
when 3 then cast(DATEADD(wk, DATEDIFF(wk, 5, GETDATE()), 5) as date)
when 4 then cast(DATEADD("D", -1, P.STARTDATE) as date)
when 5 then cast(P.ENDDATE as date)
when 6 then @PostDateFilter end
from dbo.GLFISCALPERIOD P
where P.STARTDATE <= cast(GETDATE() as date) and cast(GETDATE() as date) <= P.ENDDATE;
declare @ORGAMOUNTORIGINCODE tinyint;
declare @ORGCURRENCYID uniqueidentifier;
select top 1 @ORGAMOUNTORIGINCODE = ORGANIZATIONAMOUNTORIGINCODE from dbo.MULTICURRENCYCONFIGURATION;
set @ORGCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @Temp table (ID uniqueidentifier);
--kwb This needed to be moved outside of the revenue transaction section because it is also used by deposits
if @ISADMIN != 1 and (@PostOptions != 3 or (@DepostiPostingOption != 2 and @BasicGL = 1)) --Only needed if not an administrator
insert into @AllowedSites (SITEID, SITESECURITYMODE)
select SITEID, SITESECURITYMODE
from
dbo.V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BUSINESSPROCESS as SECURITYVIEW
left join dbo.SITEPERMISSION on SITEPERMISSION.APPUSERID = SECURITYVIEW.APPUSERID and SITEPERMISSION.SYSTEMROLEID = SECURITYVIEW.SYSTEMROLEID and (SECURITYVIEW.SITESECURITYMODE = 2 or SECURITYVIEW.SITESECURITYMODE = 3)
where
SECURITYVIEW.APPUSERID = @OWNERID and
SECURITYVIEW.BUSINESSPROCESSCATALOGID = @BUSINESSPROCESSCATALOGID and
SECURITYVIEW.GRANTORDENY=1
if @PostOptions != 3 or (@DepostiPostingOption != 2 and @BasicGL = 1)
begin
declare @UNPOSTEDDEPOSITTRANSACTIONS table (RecordID uniqueidentifier, GLTransactionID uniqueidentifier primary key, DepositID uniqueidentifier, IsReversal bit, Reference nvarchar(255))
insert into @UNPOSTEDDEPOSITTRANSACTIONS (RecordID, GLTransactionID, DepositID, IsReversal, Reference)
select RecordID, GLTransactionID, DepositID, IsReversal, Reference
from dbo.UFN_POSTTOGLPROCESS_GETUNPOSTEDDEPOSITTRANSACTIONS_2(@ID)
declare @GRANTEDCONSTITIDSFORBUSINESSPROCESS table (ID uniqueidentifier)
insert into @GRANTEDCONSTITIDSFORBUSINESSPROCESS (ID)
select ID
from dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORBUSINESSPROCESS(@OWNERID, @BUSINESSPROCESSCATALOGID)
end
-- Insert all revenue transactions.
if @PostOptions != 3
begin
declare @UNPOSTEDGLTRANSACTIONS table (RevenueID uniqueidentifier, GLTransactionID uniqueidentifier primary key, Account nvarchar(101), IsReversal bit, IsAdjusted bit)
insert into @UNPOSTEDGLTRANSACTIONS (RevenueID, GLTransactionID, Account, IsReversal, IsAdjusted)
select RevenueID, GLTransactionID, Account, IsReversal, IsAdjusted
from dbo.UFN_POSTTOGLPROCESS_GETUNPOSTEDGLTRANSACTIONS_2(@ID)
declare @UNLINKED table (GLTransactionID uniqueidentifier primary key)
insert into @UNLINKED (GLTransactionID)
select GLTransactionID
from dbo.UFN_REVENUE_PAYMENT_UNLINKED()
insert @PrePostData_Table
Select t1.ID,
'http://www.blackbaud.com/REVENUEID?REVENUEID=' + CONVERT(nvarchar(36),f1.REVENUEID) as REVENUEID, null as DEPOSITCORRECTIONID, null as ADJUSTMENTID,
isnull(f1.ACCOUNT, JOURNALENTRY_EXT.ACCOUNT) as ACCOUNT, isnull(FT.CALCULATEDUSERDEFINEDID,'') as LOOKUPID,
LI.POSTDATE, --kwb bug 224302 Don't case out post date for reversals based on summary option; reversals are always posted in detail
t1.TRANSACTIONTYPECODE, t1.BASEAMOUNT, JOURNALENTRY_EXT.JOURNAL, left(CASE WHEN LI.TYPECODE = 1 then 'Reversal - ' else '' END + t1.COMMENT, 255),
Cast(t4.DEPOSITID as nvarchar(36)) DEPOSITID, null as DEPOSITLINKID, null as DEPOSITNUMBER, Cast(t5.ID as nvarchar(36)) PERIODID,
case dbo.UFN_POSTSUMMARYTYPE(f1.ISREVERSAL, t1.TRANSACTIONTYPECODE, coalesce(t3.REVENUETRANSACTIONTYPECODE, case JOURNALENTRY_EXT.TABLENAMECODE when 10 then PROPERTYREVENUETYPEMAPPING.REVENUETRANSACTIONTYPECODE else null end, 255), coalesce(t3.APPLICATIONCODE, case JOURNALENTRY_EXT.TABLENAMECODE when 10 then PROPERTYREVENUETYPEMAPPING.APPLICATIONCODE else null end, 255), coalesce(t3.PAYMENTMETHODCODE, case JOURNALENTRY_EXT.TABLENAMECODE when 10 then PROPERTYREVENUETYPEMAPPING.PAYMENTMETHODCODE else null end, 255))
when 1 then
case @RevenueMethod when 0 then cast(LI.POSTDATE as date) else case @SummarizeBy when 0 then cast(LI.POSTDATE as date) else cast(t5.ENDDATE as date) end end
when 2 then
case @CashMethod when 0 then cast(LI.POSTDATE as date) else case @SummarizeBy when 0 then cast(LI.POSTDATE as date) else cast(t5.ENDDATE as date) end end
when 3 then
case @ARMethod when 0 then cast(LI.POSTDATE as date) else case @SummarizeBy when 0 then cast(LI.POSTDATE as date) else cast(t5.ENDDATE as date) end end
when 4 then
case JOURNALENTRY_EXT.TABLENAMECODE
when 1 then cast(LI.POSTDATE as date)
when 9 then cast(LI.POSTDATE as date)
when 12 then cast(LI.POSTDATE as date)
when 13 then cast(LI.POSTDATE as date)
when 11 then cast(LI.POSTDATE as date)
when 8 then cast(LI.POSTDATE as date)
when 6 then cast(LI.POSTDATE as date)
else case @RevaluationGainLossMethod when 0 then cast(LI.POSTDATE as date) else case @SummarizeBy when 0 then cast(LI.POSTDATE as date) else cast(t5.ENDDATE as date) end end
end
else
cast(LI.POSTDATE as date)
end SUMMARYDATE,
case dbo.UFN_POSTSUMMARYTYPE(f1.ISREVERSAL, t1.TRANSACTIONTYPECODE, coalesce(t3.REVENUETRANSACTIONTYPECODE, case JOURNALENTRY_EXT.TABLENAMECODE when 10 then PROPERTYREVENUETYPEMAPPING.REVENUETRANSACTIONTYPECODE else null end, 255), coalesce(t3.APPLICATIONCODE, case JOURNALENTRY_EXT.TABLENAMECODE when 10 then PROPERTYREVENUETYPEMAPPING.APPLICATIONCODE else null end, 255), coalesce(t3.PAYMENTMETHODCODE, case JOURNALENTRY_EXT.TABLENAMECODE when 10 then PROPERTYREVENUETYPEMAPPING.PAYMENTMETHODCODE else null end, 255))
when 1 then (case @RevenueMethod when 0 then '0_' + cast(f1.REVENUEID as nvarchar(36)) when 2 then '1_' + cast(t3.APPLICATIONCODE as nvarchar(36)) when 3 then '1_' + isnull(Cast(t4.DEPOSITID as nvarchar(36)), '') else '1' end)
when 2 then (case @CashMethod when 0 then '0_' + cast(f1.REVENUEID as nvarchar(36)) when 1 then '2_' + isnull(Cast(t4.DEPOSITID as nvarchar(36)), '') else '2' end)
when 3 then (case @ARMethod when 0 then '0_' + cast(f1.REVENUEID as nvarchar(36)) else '3' end)
when 4 then case JOURNALENTRY_EXT.TABLENAMECODE
when 1 then '0_' + cast(f1.REVENUEID as nvarchar(36)) -- These should only be planned gifts
when 9 then '0_' + cast(f1.REVENUEID as nvarchar(36)) --PlannedGiftGLDistribution
when 12 then '0_' + cast(f1.REVENUEID as nvarchar(36)) --WriteOffGLDistribution
when 13 then '0_' + cast(f1.REVENUEID as nvarchar(36)) --GiftInKindGLDistribution
when 11 then '0_' + cast(f1.REVENUEID as nvarchar(36)) --StockSaleGLDistribution
when 8 then '0_' + cast(f1.REVENUEID as nvarchar(36)) --GiftFeeGLDistribution
when 6 then case --CreditGLDistribution
when JOURNALENTRY_EXT.CREDITPAYMENTID is null then case --Discount
when t1.TRANSACTIONTYPECODE = 0 then case @ARMethod
when 0 then '0_' + cast(f1.REVENUEID as nvarchar(36))
else '3'
end
else case @RevenueMethod
when 0 then '0_' + cast(f1.REVENUEID as nvarchar(36))
when 2 then '1_' + cast(t3.APPLICATIONCODE as nvarchar(36))
when 3 then '1_' + isnull(Cast(t4.DEPOSITID as nvarchar(36)), '')
else '1'
end
end
else case --Refund
when t1.TRANSACTIONTYPECODE = 0 then case @RevenueMethod
when 0 then '0_' + CAST(isnull(JOURNALENTRY_EXT.DISTRIBUTIONTABLEID, JOURNALENTRY_EXT.ID) as nvarchar(36))
else '1'
end
else case @CashMethod
when 0 then '0_' + CAST(isnull(JOURNALENTRY_EXT.DISTRIBUTIONTABLEID, JOURNALENTRY_EXT.ID) as nvarchar(36))
else '2'
end
end
end
else case @RevaluationGainLossMethod
when 0 then '0_' + cast(f1.REVENUEID as nvarchar(36))
else '4'
end
end
else '0' + CAST(FT.ID as nvarchar(36))
end + '_' +
cast(case @SummarizeBy when 0 then cast(LI.POSTDATE as date) else cast(t5.ENDDATE as date) end as nvarchar(10)) GROUPBY,
t5.CLOSED as ISEXCEPTION,
CASE WHEN t5.CLOSED = 1 THEN 'Post date must be in an open fiscal period' ELSE NULL END as EXCEPTIONREASON,
t1.TRANSACTIONAMOUNT,
t1.ORGAMOUNT as ORGANIZATIONAMOUNT,
CURRENCY.ISO4217,
CURRENCY.CURRENCYSYMBOL,
CURRENCY.DECIMALDIGITS,
CURRENCY.SYMBOLDISPLAYSETTINGCODE,
f1.REVENUEID, null,
'http://www.blackbaud.com/CREDITID?CREDITID=' + CONVERT(nvarchar(36),CREDITPAYMENT.CREDITID) as CREDITID
from dbo.JOURNALENTRY as t1
inner join dbo.JOURNALENTRY_EXT on t1.ID = JOURNALENTRY_EXT.ID
inner join @UNPOSTEDGLTRANSACTIONS as f1 On t1.ID = f1.GLTRANSACTIONID
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = t1.FINANCIALTRANSACTIONLINEITEMID
inner join dbo.GLFISCALPERIOD t5 On cast(LI.POSTDATE as date) between t5.STARTDATE and t5.ENDDATE
inner join dbo.FINANCIALTRANSACTION FT on FT.ID = LI.FINANCIALTRANSACTIONID
left join dbo.FINANCIALTRANSACTION PARENT on PARENT.ID = FT.PARENTID and FT.TYPECODE = 26
left join dbo.CURRENCY on CURRENCY.ID = t1.TRANSACTIONCURRENCYID
left outer join dbo.GLPAYMENTMETHODREVENUETYPEMAPPING as t3 on JOURNALENTRY_EXT.GLPAYMENTMETHODREVENUETYPEMAPPINGID = t3.ID and JOURNALENTRY_EXT.TABLENAMECODE = 1 and t3.ID not in (select ID from GLPAYMENTMETHODREVENUETYPEMAPPING where REVENUETRANSACTIONTYPECODE = 4 and APPLICATIONCODE = 0)
left outer join dbo.BANKACCOUNTDEPOSITPAYMENT t4 on f1.REVENUEID = t4.ID
left outer join dbo.REVENUEPAYMENTMETHOD on f1.REVENUEID = REVENUEPAYMENTMETHOD.REVENUEID
left outer join dbo.OTHERPAYMENTMETHODDETAIL on REVENUEPAYMENTMETHOD.ID = OTHERPAYMENTMETHODDETAIL.ID
left outer join dbo.GLPAYMENTMETHODREVENUETYPEMAPPING PROPERTYREVENUETYPEMAPPING on JOURNALENTRY_EXT.GLPAYMENTMETHODREVENUETYPEMAPPINGID = PROPERTYREVENUETYPEMAPPING.ID and JOURNALENTRY_EXT.TABLENAMECODE = 10
left outer join dbo.CREDITPAYMENT on CREDITPAYMENT.ID = f1.REVENUEID
where
(
(@PostOptions != 2)
or
(
(f1.ISADJUSTED = 1 or f1.ISREVERSAL = 1)
and
(JOURNALENTRY_EXT.TABLENAMECODE != 14 or (JOURNALENTRY_EXT.TABLENAMECODE = 14 and LI.POSTSTATUSCODE = 2))
)
)
and (@RequireDeposit = 0 or t1.ID not in (Select GLTRANSACTIONID from @UNLINKED))
and JOURNALENTRY_EXT.TABLENAMECODE != 5
and ((@BasicGL = 0) or (@RequireDeposit = 0 and T4.DEPOSITID is null) or (not (REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE in (0,1,2)
or (REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = 10
and OTHERPAYMENTMETHODDETAIL.OTHERPAYMENTMETHODCODEID not in
(select ID from dbo.NONDEPOSITABLEPAYMENTMETHOD)
)
) --or GIFTAIDGLDISTRIBUTION.ID is not null --below still sucks, look at again
or (JOURNALENTRY_EXT.TABLENAMECODE = 7 AND JOURNALENTRY_EXT.ID not in (select GLTRANSACTIONID from @UNPOSTEDDEPOSITTRANSACTIONS))
or (f1.GLTRANSACTIONID in (select gl1.ID from dbo.JOURNALENTRY_EXT gl1 inner join dbo.JOURNALENTRY_EXT gl2 on gl1.REVERSEDGLTRANSACTIONID=gl2.ID where gl2.TABLENAMECODE = 7))
or (FT.TYPECODE in (1,15,20))
)
or (FT.DELETEDON is not null)
or (REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE is null))
and(@ISADMIN = 1 or f1.REVENUEID is null
or(
(@APPUSER_IN_NONRACROLE = 1
or dbo.UFN_CONSTITID_MAPFROM_REVENUETRANSACTIONID(f1.REVENUEID) IN (
select ID
from @GRANTEDCONSTITIDSFORBUSINESSPROCESS
)
)
and exists (select 1
from dbo.UFN_SITEID_MAPFROM_REVENUEID(f1.REVENUEID) REVSITES inner join @AllowedSites t2
on (REVSITES.SITEID = t2.SITEID and (t2.SITESECURITYMODE = 2 or t2.SITESECURITYMODE = 3))
or t2.SITESECURITYMODE = 0
or (t2.SITESECURITYMODE = 1 and REVSITES.SITEID is null)
)
)
)
and ((@PostOptions != 4)
or (@PostOptions = 4 and isnull(PARENT.TYPECODE, FT.TYPECODE) in (select FILTER.TYPECODE from dbo.POSTTOGLPROCESSTRANSACTIONTYPEFILTER FILTER where FILTER.POSTTOGLPROCESSID = @ID)))
option (recompile);
insert @PrePostData_Table
Select t1.ID,
'http://www.blackbaud.com/REVENUEID?REVENUEID=' + CONVERT(nvarchar(36),f1.REVENUEID) as REVENUEID,
null as DEPOSITCORRECTIONID,
null as ADJUSTMENTID,
isnull(f1.ACCOUNT, JOURNALENTRY_EXT.ACCOUNT) as ACCOUNT,
isnull(FT.CALCULATEDUSERDEFINEDID,'') as LOOKUPID,
LI.POSTDATE,
t1.TRANSACTIONTYPECODE,
t1.BASEAMOUNT as AMOUNT,
JOURNALENTRY_EXT.JOURNAL,
left(CASE WHEN LI.TYPECODE = 1 then 'Reversal - ' else '' END + t1.COMMENT, 255),
null as DEPOSITID,
null as DEPOSITLINKID,
null as DEPOSITNUMBER,
Cast(t5.ID as nvarchar(36)) PERIODID,
case @RevenueMethod when 0 then cast(LI.POSTDATE as date) else case @SummarizeBy when 0 then cast(LI.POSTDATE as date) else cast(t5.ENDDATE as date) end end SUMMARYDATE,
case @RevenueMethod when 0 then '0_' + cast(f1.REVENUEID as nvarchar(36)) when 2 then '1_' + cast(f1.REVENUEID as nvarchar(36)) when 3 then '1_' + isnull(Cast(BADP.DEPOSITID as nvarchar(36)), '') else '1' end
+ '_' +
cast(case @SummarizeBy when 0 then cast(LI.POSTDATE as date) else cast(t5.ENDDATE as date) end as nvarchar(10)) GROUPBY,
0 as ISEXCEPTION, '' as EXCEPTIONREASON,
t1.TRANSACTIONAMOUNT,
t1.ORGAMOUNT as ORGANIZATIONAMOUNT,
CURRENCY.ISO4217,
CURRENCY.CURRENCYSYMBOL,
CURRENCY.DECIMALDIGITS,
CURRENCY.SYMBOLDISPLAYSETTINGCODE,
f1.REVENUEID, null, null
from dbo.JOURNALENTRY as t1
inner join dbo.JOURNALENTRY_EXT on T1.ID = JOURNALENTRY_EXT.ID and JOURNALENTRY_EXT.TABLENAMECODE = 5 and isnull(JOURNALENTRY_EXT.GLPAYMENTMETHODREVENUETYPEMAPPINGID, '00000000-0000-0000-0000-000000000000') not in (select ID from GLPAYMENTMETHODREVENUETYPEMAPPING where REVENUETRANSACTIONTYPECODE = 4 and APPLICATIONCODE = 0)
inner join @UNPOSTEDGLTRANSACTIONS as f1 On t1.ID = f1.GLTRANSACTIONID
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = t1.FINANCIALTRANSACTIONLINEITEMID
inner join dbo.GLFISCALPERIOD t5 On LI.POSTDATE between t5.STARTDATE and t5.ENDDATE
inner join dbo.FINANCIALTRANSACTION FT on FT.ID = LI.FINANCIALTRANSACTIONID
left join dbo.FINANCIALTRANSACTION PARENT on PARENT.ID = FT.PARENTID and FT.TYPECODE = 26
left join dbo.CURRENCY on CURRENCY.ID = t1.TRANSACTIONCURRENCYID
left join dbo.BANKACCOUNTDEPOSITPAYMENT BADP on FT.ID = BADP.ID
left outer join dbo.GLPAYMENTMETHODREVENUETYPEMAPPING as t3 on JOURNALENTRY_EXT.GLPAYMENTMETHODREVENUETYPEMAPPINGID = t3.ID
left outer join dbo.REVENUEPAYMENTMETHOD on f1.REVENUEID = REVENUEPAYMENTMETHOD.REVENUEID
left outer join dbo.OTHERPAYMENTMETHODDETAIL on REVENUEPAYMENTMETHOD.ID = OTHERPAYMENTMETHODDETAIL.ID
where ((@PostOptions != 2) or (f1.ISADJUSTED = 1 or f1.ISREVERSAL = 1)) and (t1.ID not in (Select GLTRANSACTIONID from @UNLINKED) or @RequireDeposit = 0)
and ((@BasicGL = 0) or (not (REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE in (0,1,2)
or (REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = 10
and OTHERPAYMENTMETHODDETAIL.OTHERPAYMENTMETHODCODEID not in
(select ID from dbo.NONDEPOSITABLEPAYMENTMETHOD)
)
)
or @RequireDeposit = 0)
or (REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE is null)
)
and ((@PostOptions != 4)
or (@PostOptions = 4 and isnull(PARENT.TYPECODE, FT.TYPECODE) in (select FILTER.TYPECODE from dbo.POSTTOGLPROCESSTRANSACTIONTYPEFILTER FILTER where FILTER.POSTTOGLPROCESSID = @ID)))
option (recompile);
-- Find all non-depositable records that don't have an exchange rate when they should.
update
@PrePostData_Table
set
ISEXCEPTION = 1,
EXCEPTIONREASON = case when (JOURNALENTRY.TRANSACTIONCURRENCYID <> V.BASECURRENCYID and JOURNALENTRY_EXT.PRECALCBASEEXCHANGERATEID is null)
and ((@ORGAMOUNTORIGINCODE = 0 and V.BASECURRENCYID <> @ORGCURRENCYID and nullif(JOURNALENTRY_EXT.PRECALCORGANIZATIONEXCHANGERATEID,'00000000-0000-0000-0000-000000000000') is null)
or (@ORGAMOUNTORIGINCODE = 1 and JOURNALENTRY.TRANSACTIONCURRENCYID <> @ORGCURRENCYID and nullif(JOURNALENTRY_EXT.PRECALCORGANIZATIONEXCHANGERATEID,'00000000-0000-0000-0000-000000000000') is null))
then 'Base and organization exchange rates do not exist for this distribution.'
else
case when (JOURNALENTRY.TRANSACTIONCURRENCYID <> V.BASECURRENCYID and JOURNALENTRY_EXT.PRECALCBASEEXCHANGERATEID is null)
then 'Base exchange rate does not exist for this distribution.'
else 'Organization exchange rate does not exist for this distribution.'
end
end
from
@PrePostData_Table as PREPOSTDATA
inner join dbo.JOURNALENTRY on PREPOSTDATA.ID = JOURNALENTRY.ID
inner join dbo.JOURNALENTRY_EXT ON JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
left join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = V.FINANCIALTRANSACTIONID
where
JOURNALENTRY.TRANSACTIONCURRENCYID is not null
and JOURNALENTRY.TRANSACTIONAMOUNT <> 0
and
(
(JOURNALENTRY.TRANSACTIONCURRENCYID <> V.BASECURRENCYID and JOURNALENTRY_EXT.PRECALCBASEEXCHANGERATEID is null)
or
(
JOURNALENTRY_EXT.PRECALCORGANIZATIONEXCHANGERATEID is null
and
(
(
@ORGAMOUNTORIGINCODE = 0
and V.BASECURRENCYID <> @ORGCURRENCYID
)
or
(
@ORGAMOUNTORIGINCODE = 1
and JOURNALENTRY.TRANSACTIONCURRENCYID <> @ORGCURRENCYID
)
)
)
)
end
if @DepostiPostingOption != 2 and @BasicGL = 1
begin
--insert any records that are linked to a deposit
insert into @PrePostData_Table
select tf.GLTRANSACTIONID,
CASE WHEN FINANCIALTRANSACTION.ID is not null then 'http://www.blackbaud.com/REVENUEID?REVENUEID=' + CONVERT(nvarchar(36), tf.RECORDID) ELSE NULL END as REVENUEID,
CASE WHEN BANKACCOUNTDEPOSITCORRECTION.ID is not null then 'http://www.blackbaud.com/DEPOSITCORRECTIONID?DEPOSITCORRECTIONID=' + CONVERT(nvarchar(36), tf.RECORDID) ELSE NULL END as DEPOSITCORRECTIONID,
null as ADJUSTMENTID,
isnull(case
when T.GLACCOUNTID is null
then T_EXT.ACCOUNT
else
case when T_EXT.ACCOUNT != GLACCOUNT.ACCOUNTNUMBER
and len(T_EXT.ACCOUNT) > 0
then T_EXT.ACCOUNT
else
GLACCOUNT.ACCOUNTNUMBER
end
end,'') as ACCOUNT
,case when FINANCIALTRANSACTION.ID is not null then isnull(FINANCIALTRANSACTION.CALCULATEDUSERDEFINEDID,'')
else case when BANKACCOUNTDEPOSITCORRECTION.ID is not null then convert(nvarchar(36),BAT.TRANSACTIONNUMBER) + ' - ' + BANKACCOUNTDEPOSITCORRECTION.CORRECTIONTYPE
else case when CREDIT.ID is not null then CREDIT.TYPE + ' - ' + convert(nvarchar(36), SALESORDER.SEQUENCEID)
else '' end
end
end as [LOOKUPID],
case when Tf.ISREVERSAL = 1
then
case dbo.UFN_REVERSALPOSTSUMMARYTYPE(T.ID)
when 1 then (case @RevenueMethod when 0 then BAT.POSTDATE else case @SummarizeBy when 0 then cast(BAT.POSTDATE as date) else cast(GLFISCALPERIOD.ENDDATE as date) end end)
when 2 then (case @CashMethod when 0 then BAT.POSTDATE else case @SummarizeBy when 0 then cast(BAT.POSTDATE as date) else cast(GLFISCALPERIOD.ENDDATE as date) end end)
when 3 then (case @ARMethod when 0 then BAT.POSTDATE else case @SummarizeBy when 0 then cast(BAT.POSTDATE as date) else cast(GLFISCALPERIOD.ENDDATE as date) end end)
else BAT.POSTDATE
end
else
BAT.POSTDATE
end as POSTDATE,
T.TRANSACTIONTYPECODE, T.BASEAMOUNT, T_EXT.JOURNAL
,left(CASE WHEN LI.TYPECODE = 1 then 'Reversal - ' else '' END + tf.REFERENCE, 255) REFERENCE,
Cast(tf.DEPOSITID as nvarchar(36)) as DEPOSITID,
case @CashMethod when 2 then 'http://www.blackbaud.com/DEPOSITLINKID?DEPOSITLINKID='+CONVERT(nvarchar(36),tf.DEPOSITID) else null end as DEPOSITLINKID,
BAT.TRANSACTIONNUMBER as DEPOSITNUMBER,
Cast(GLFISCALPERIOD.ID as nvarchar(36)) PERIODID,
case @CashMethod when 0 then cast(isnull(BAT.POSTDATE, T.POSTDATE) as date) else case @SummarizeBy when 0 then cast(isnull(BAT.POSTDATE, T.POSTDATE) as date) else cast(GLFISCALPERIOD.ENDDATE as date) end end SUMMARYDATE,
case when FINANCIALTRANSACTION.ID is not null then
case dbo.UFN_POSTSUMMARYTYPE(tf.ISREVERSAL, T.TRANSACTIONTYPECODE, t3.REVENUETRANSACTIONTYPECODE, t3.APPLICATIONCODE, t3.PAYMENTMETHODCODE)
when 1 then (case @RevenueMethod when 0 then '0_' + cast(FINANCIALTRANSACTION.ID as nvarchar(36)) when 2 then '1_' + cast(t3.APPLICATIONCODE as nvarchar(36)) when 3 then '1_' + isnull(Cast(t4.DEPOSITID as nvarchar(36)), '') else '1' end)
when 2 then (case @CashMethod when 0 then '0_' + cast(FINANCIALTRANSACTION.ID as nvarchar(36)) when 2 then '2_' + Cast(t4.DEPOSITID as nvarchar(36)) else '2' end)
when 3 then (case @ARMethod when 0 then '0_' + cast(FINANCIALTRANSACTION.ID as nvarchar(36)) else '3' end)
else '0_0' + CAST(FT.ID as nvarchar(36)) end + '_' +
cast(case @SummarizeBy when 0 then cast(isnull(BAT.POSTDATE, T.POSTDATE) as date) else cast(GLFISCALPERIOD.ENDDATE as date) end as nvarchar(10))
else case when CREDIT.ID is not null then
case when T_EXT.TABLENAMECODE = 6 and T_EXT.CREDITPAYMENTID is null then
case when T.TRANSACTIONTYPECODE = 1 then (case @ARMethod when 0 then '0_' + cast(tf.RECORDID as nvarchar(36)) else '3_' end)
else (case @RevenueMethod when 0 then '0_' + cast(tf.RECORDID as nvarchar(36)) when 2 then '1_' + cast(t3.APPLICATIONCODE as nvarchar(36)) when 3 then '1_' + isnull(Cast(t4.DEPOSITID as nvarchar(36)), '') else '1_' end) end
else case T.TRANSACTIONTYPECODE when 0 then case @RevenueMethod when 0 then '0_' + CAST(CREDIT.ID as nvarchar(36)) when 2 then '1_' else '1_' end
else case @CashMethod when 0 then '0_' + CAST(CREDIT.ID as nvarchar(36)) when 2 then '2_' + CAST(tf.DEPOSITID as nvarchar(36)) else '2_' end end end
+ cast(case @SummarizeBy when 0 then cast(isnull(T.POSTDATE, T.POSTDATE) as date) else cast(GLFISCALPERIOD.ENDDATE as date) end as nvarchar(10))
else --DEPOSIT CORRECTION
case FT.TYPECODE
when 24 then --SHORT
case T.TRANSACTIONTYPECODE
when 0 then --DEBIT
case @RevenueMethod when 0 then '0_' + cast(BANKACCOUNTDEPOSITCORRECTION.ID as nvarchar(36)) when 3 then '1_' + Cast(BAT.ID as nvarchar(36)) + '_' else '1_' end
else --CREDIT
case @CashMethod when 0 then '0_' + cast(BANKACCOUNTDEPOSITCORRECTION.ID as nvarchar(36)) when 2 then '2_' + Cast(BAT.ID as nvarchar(36)) + '_' else (CASE WHEN T.TRANSACTIONTYPECODE = 0 THEN '2_' ELSE '2_' END) end
end
when 25 then --OVER
case T.TRANSACTIONTYPECODE
when 0 then --DEBIT
case @CashMethod when 0 then '0_' + cast(BANKACCOUNTDEPOSITCORRECTION.ID as nvarchar(36)) when 2 then '2_' + Cast(BAT.ID as nvarchar(36)) + '_' else CASE WHEN T.TRANSACTIONTYPECODE = 0 THEN '2_' ELSE '2_' END end
else --CREDIT
case @RevenueMethod when 0 then '0_' + cast(BANKACCOUNTDEPOSITCORRECTION.ID as nvarchar(36)) when 3 then '1_' + Cast(BAT.ID as nvarchar(36)) + '_' else '1_' end
end
else
case T.TRANSACTIONTYPECODE
when 0 then --DEBIT
case @RevenueMethod when 0 then '0_' when 3 then '1_' + Cast(BAT.ID as nvarchar(36)) + '_' else '1_' end
else --CREDIT
case @CashMethod when 0 then '0_' when 2 then '2_' + Cast(BAT.ID as nvarchar(36)) + '_' else (CASE WHEN T.TRANSACTIONTYPECODE = 0 THEN '2_' ELSE '2_' END) end
end
end
+ cast(case @SummarizeBy when 0 then cast(isnull(BAT.POSTDATE, LI.POSTDATE) as date) else cast(GLFISCALPERIOD.ENDDATE as date) end as nvarchar(10)) end end
GROUPBY,
CASE WHEN GLFISCALPERIOD.CLOSED = 1 THEN 1 ELSE CASE WHEN BA.STATUSCODE = 0 THEN 1 ELSE 0 END END as ISEXCEPTION,
CASE WHEN GLFISCALPERIOD.CLOSED = 1 THEN 'Post date must be in an open fiscal period' ELSE CASE WHEN BA.STATUSCODE = 0 THEN 'Payments linked to deposits associated with closed bank accounts cannot be posted.' ELSE null END END as EXCEPTIONREASON,
T.TRANSACTIONAMOUNT TRANSACTIONAMOUNT,
T.ORGAMOUNT ORGANIZATIONAMOUNT,
CURRENCY.ISO4217,
CURRENCY.CURRENCYSYMBOL,
CURRENCY.DECIMALDIGITS,
CURRENCY.SYMBOLDISPLAYSETTINGCODE,
tf.RECORDID, null,
'http://www.blackbaud.com/CREDITID?CREDITID=' + CONVERT(nvarchar(36), CREDIT.ID) as CREDITID
from @UNPOSTEDDEPOSITTRANSACTIONS as tf
inner join dbo.JOURNALENTRY T on T.ID = tf.GLTRANSACTIONID
inner join dbo.JOURNALENTRY_EXT T_EXT on T_EXT.ID = T.ID
inner join dbo.BANKACCOUNTTRANSACTION BAT on BAT.ID = tf.DEPOSITID
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = T.FINANCIALTRANSACTIONLINEITEMID
inner join dbo.GLFISCALPERIOD On isnull(BAT.POSTDATE, LI.POSTDATE) between GLFISCALPERIOD.STARTDATE and GLFISCALPERIOD.ENDDATE
inner join dbo.BANKACCOUNT BA on BA.ID = BAT.BANKACCOUNTID
inner join dbo.FINANCIALTRANSACTION FT on FT.ID = LI.FINANCIALTRANSACTIONID
left join dbo.CURRENCY on CURRENCY.ID = T.TRANSACTIONCURRENCYID
left outer join dbo.GLACCOUNT on T.GLACCOUNTID = GLACCOUNT.ID
left outer join dbo.FINANCIALTRANSACTION on tf.RECORDID = FINANCIALTRANSACTION.ID
left outer join dbo.BANKACCOUNTDEPOSITCORRECTION on tf.RECORDID = BANKACCOUNTDEPOSITCORRECTION.ID
left outer join dbo.GLPAYMENTMETHODREVENUETYPEMAPPING as t3 on T_EXT.GLPAYMENTMETHODREVENUETYPEMAPPINGID = t3.ID and T_EXT.TABLENAMECODE = 1
left outer join dbo.BANKACCOUNTDEPOSITPAYMENT t4 on TF.RECORDID = t4.ID
left outer join dbo.CREDITPAYMENT CP on CP.ID = T_EXT.CREDITPAYMENTID
left outer join dbo.CREDIT on CREDIT.ID = tf.RECORDID or CP.CREDITID = CREDIT.ID --Yes it's a view, but too hard to put the base tables here
left outer join dbo.SALESORDER on SALESORDER.ID = CREDIT.SALESORDERID
where @DepostiPostingOption < 2
or (@DepostiPostingOption = 3 and BA.ID in (select F.BANKACCOUNTID from dbo.POSTTOGLPROCESSBANKACCOUNTFILTER F where F.POSTTOGLPROCESSID = @ID))
or (@DepostiPostingOption = 4 and BAT.ID in (select D.ID from dbo.POSTTOGLPROCESSDEPOSITTEMPLATESFILTER F inner join dbo.BANKACCOUNTDEPOSIT D on D.SALESDEPOSITTEMPLATEID = f.SALESDEPOSITTEMPLATEID where F.POSTTOGLPROCESSID = @ID))
option (recompile);
insert into @Temp
select t1.DEPOSITID
from @PrePostData_Table t1
inner join dbo.JOURNALENTRY on t1.ID = JOURNALENTRY.ID
inner join dbo.JOURNALENTRY_EXT ON JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
left join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
left join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = V.FINANCIALTRANSACTIONID
inner join dbo.BANKACCOUNTDEPOSIT D on D.ID = t1.DEPOSITID
inner join dbo.BANKACCOUNTTRANSACTION_EXT BAT on BAT.ID = D.ID
inner join dbo.BANKACCOUNT BA on BA.ID = BAT.BANKACCOUNTID
where JOURNALENTRY.TRANSACTIONCURRENCYID is not null and t1.ISEXCEPTION = 0
and ((D.TRANSACTIONCURRENCYID <> BA.TRANSACTIONCURRENCYID and D.TRANSACTIONEXCHANGERATEID is null)
or (JOURNALENTRY.TRANSACTIONCURRENCYID <> V.BASECURRENCYID and JOURNALENTRY_EXT.PRECALCBASEEXCHANGERATEID is null)
or (@ORGAMOUNTORIGINCODE = 1 and JOURNALENTRY.TRANSACTIONCURRENCYID <> @ORGCURRENCYID and JOURNALENTRY_EXT.PRECALCORGANIZATIONEXCHANGERATEID is null)
or (@ORGAMOUNTORIGINCODE = 0 and V.BASECURRENCYID <> @ORGCURRENCYID and JOURNALENTRY_EXT.PRECALCORGANIZATIONEXCHANGERATEID is null));
update @PrePostData_Table set
ISEXCEPTION = 1
,EXCEPTIONREASON = CASE WHEN JOURNALENTRY.TRANSACTIONCURRENCYID is null or (isnull(JOURNALENTRY.BASEAMOUNT, 0) > 0 and isnull(JOURNALENTRY.ORGAMOUNT, 0) > 0)
THEN 'Distribution cannot post due to a related distribution with exceptions.'
ELSE CASE WHEN BANKACCOUNTTRANSACTION.ID is not null and BANKACCOUNTDEPOSIT.TRANSACTIONCURRENCYID <> BANKACCOUNT.TRANSACTIONCURRENCYID and BANKACCOUNTDEPOSIT.TRANSACTIONEXCHANGERATEID is null
THEN 'Exchange rate from the payment currency to the bank account currency does not exist for this transaction.'
ELSE CASE WHEN (JOURNALENTRY.TRANSACTIONCURRENCYID <> V.BASECURRENCYID and JOURNALENTRY_EXT.PRECALCBASEEXCHANGERATEID is null)
and ((@ORGAMOUNTORIGINCODE = 0 and V.BASECURRENCYID <> @ORGCURRENCYID and JOURNALENTRY_EXT.PRECALCORGANIZATIONEXCHANGERATEID is null)
or (@ORGAMOUNTORIGINCODE = 1 and JOURNALENTRY.TRANSACTIONCURRENCYID <> @ORGCURRENCYID and JOURNALENTRY_EXT.PRECALCORGANIZATIONEXCHANGERATEID is null))
THEN 'Base and organization exchange rates do not exist for this distribution.'
ELSE CASE WHEN (JOURNALENTRY.TRANSACTIONCURRENCYID <> V.BASECURRENCYID and JOURNALENTRY_EXT.PRECALCBASEEXCHANGERATEID is null)
THEN 'Base exchange rate does not exist for this distribution.'
ELSE 'Organization exchange rate does not exist for this distribution.' END
END
END
END
from @PrePostData_Table T
inner join dbo.JOURNALENTRY on T.ID = JOURNALENTRY.ID
inner join dbo.JOURNALENTRY_EXT on T.ID = JOURNALENTRY_EXT.ID
left join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
left join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = V.FINANCIALTRANSACTIONID
inner join dbo.BANKACCOUNTDEPOSIT on BANKACCOUNTDEPOSIT.ID = T.DEPOSITID
inner join dbo.BANKACCOUNTTRANSACTION on BANKACCOUNTTRANSACTION.ID = BANKACCOUNTDEPOSIT.ID
inner join dbo.BANKACCOUNT on BANKACCOUNT.ID = BANKACCOUNTTRANSACTION.BANKACCOUNTID
where T.ISEXCEPTION = 0
and T.DEPOSITID in (select ID from @Temp)
--This section replaces the deletion below for performance
--Again, get rid of the scalar function and make the deletion a simpler, two step process
if @ISADMIN = 0
begin
declare @DepositTable table (DEPOSITID uniqueidentifier)
insert into @DepositTable (DEPOSITID)
select T.DEPOSITID
from @PrePostData_Table T
left join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = T.REVENUEIDGUID
where (T.REVENUEIDGUID is null
or(
(@APPUSER_IN_NONRACROLE = 1
or FINANCIALTRANSACTION.CONSTITUENTID IN (
select ID
from @GRANTEDCONSTITIDSFORBUSINESSPROCESS
)
)
and exists (select 1
from dbo.UFN_SITEID_MAPFROM_REVENUEID(T.REVENUEIDGUID) REVSITES inner join @AllowedSites t2
on (REVSITES.SITEID = t2.SITEID and (t2.SITESECURITYMODE = 2 or t2.SITESECURITYMODE = 3))
or t2.SITESECURITYMODE = 0
or (t2.SITESECURITYMODE = 1 and REVSITES.SITEID is null)
))) option (recompile);
delete from @PrePostData_Table
where DEPOSITID is not null
and DEPOSITID not in (select t1.DEPOSITID from @DepositTable t1)
end
end
if @AdjustmentPostingOption != 2 and @BasicGL = 1
begin
--insert any bank account adjustments
insert into @PrePostData_Table
select tf.GLTRANSACTIONID,
null as REVENUEID, null as DEPOSITCORRECTIONID,
'http://www.blackbaud.com/ADJUSTMENTID?ADJUSTMENTID=' + CONVERT(nvarchar(36), tf.ADJUSTMENTID) as ADJUSTMENTID,
isnull(GLACCOUNT.ACCOUNTNUMBER, JOURNALENTRY_EXT.ACCOUNT),
'' as LOOKUPID,
LI.POSTDATE
, T.TRANSACTIONTYPECODE, T.BASEAMOUNT, JOURNALENTRY_EXT.JOURNAL, T.COMMENT,
null as DEPOSITID, null as DEPOSITLINKID, null as DEPOSITNUMBER, Cast(GLFISCALPERIOD.ID as nvarchar(36)) PERIODID
, case @SummarizeBy when 0 then cast(isnull(LI.POSTDATE, T.POSTDATE) as date) else cast(GLFISCALPERIOD.ENDDATE as date) end,
case @CashMethod when 0 then '0_' + cast(BAT.ID as nvarchar(36)) else CASE WHEN T.TRANSACTIONTYPECODE = 0 THEN '2_' ELSE '1_' END end
+ cast(case @SummarizeBy when 0 then cast(isnull(LI.POSTDATE, T.POSTDATE) as date) else cast(GLFISCALPERIOD.ENDDATE as date) end as nvarchar(10)) GROUPBY,
CASE WHEN GLFISCALPERIOD.CLOSED = 1 THEN 1 ELSE CASE WHEN BA.STATUSCODE = 0 THEN 1 ELSE 0 END END as ISEXCEPTION,
CASE WHEN GLFISCALPERIOD.CLOSED = 1 THEN 'Post date must be in an open fiscal period' ELSE CASE WHEN BA.STATUSCODE = 0 THEN 'Payments linked to deposits associated with closed bank accounts cannot be posted.' ELSE null END END as EXCEPTIONREASON,
T.TRANSACTIONAMOUNT,
T.ORGAMOUNT,
CURRENCY.ISO4217,
CURRENCY.CURRENCYSYMBOL,
CURRENCY.DECIMALDIGITS,
CURRENCY.SYMBOLDISPLAYSETTINGCODE,
tf.ADJUSTMENTID, tf.ADJUSTMENTID, null
from dbo.UFN_POSTTOGLPROCESS_GETUNPOSTEDADJUSTMENTTRANSACTIONS_2(@ID) as tf
inner join dbo.JOURNALENTRY T on T.ID = tf.GLTRANSACTIONID
inner join dbo.JOURNALENTRY_EXT on T.ID = JOURNALENTRY_EXT.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = T.FINANCIALTRANSACTIONLINEITEMID
inner join dbo.BANKACCOUNTTRANSACTION BAT on BAT.ID = tf.ADJUSTMENTID
inner join dbo.GLFISCALPERIOD on LI.POSTDATE between GLFISCALPERIOD.STARTDATE and GLFISCALPERIOD.ENDDATE
inner join dbo.BANKACCOUNT BA on BA.ID = BAT.BANKACCOUNTID
left join dbo.CURRENCY on CURRENCY.ID = T.TRANSACTIONCURRENCYID
left join dbo.GLACCOUNT on T.GLACCOUNTID = GLACCOUNT.ID
delete from @Temp;
insert into @Temp
select t1.ADJUSTMENTIDGUID
from @PrePostData_Table t1
inner join dbo.JOURNALENTRY on t1.ID = JOURNALENTRY.ID
inner join dbo.JOURNALENTRY_EXT ON JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
left join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
left join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = V.FINANCIALTRANSACTIONID
where JOURNALENTRY.TRANSACTIONCURRENCYID is not null and t1.ADJUSTMENTID is not null and t1.ISEXCEPTION = 0
and ((JOURNALENTRY.TRANSACTIONCURRENCYID <> V.BASECURRENCYID and JOURNALENTRY_EXT.PRECALCBASEEXCHANGERATEID is null)
or (@ORGAMOUNTORIGINCODE = 1 and JOURNALENTRY.TRANSACTIONCURRENCYID <> @ORGCURRENCYID and JOURNALENTRY_EXT.PRECALCORGANIZATIONEXCHANGERATEID is null)
or (@ORGAMOUNTORIGINCODE = 0 and V.BASECURRENCYID <> @ORGCURRENCYID and JOURNALENTRY_EXT.PRECALCORGANIZATIONEXCHANGERATEID is null));
update @PrePostData_Table set
ISEXCEPTION = 1
,EXCEPTIONREASON = CASE WHEN JOURNALENTRY.TRANSACTIONCURRENCYID is null or (isnull(JOURNALENTRY.BASEAMOUNT, 0) > 0 and isnull(JOURNALENTRY.ORGAMOUNT, 0) > 0)
THEN 'Distribution cannot post due to a related distribution with exceptions.'
ELSE case when (JOURNALENTRY.TRANSACTIONCURRENCYID <> V.BASECURRENCYID and JOURNALENTRY_EXT.PRECALCBASEEXCHANGERATEID is null)
and ((@ORGAMOUNTORIGINCODE = 0 and V.BASECURRENCYID <> @ORGCURRENCYID and JOURNALENTRY_EXT.PRECALCORGANIZATIONEXCHANGERATEID is null)
or (@ORGAMOUNTORIGINCODE = 1 and JOURNALENTRY.TRANSACTIONCURRENCYID <> @ORGCURRENCYID and JOURNALENTRY_EXT.PRECALCORGANIZATIONEXCHANGERATEID is null))
then 'Base and organization exchange rates do not exist for this distribution.'
else
case when (JOURNALENTRY.TRANSACTIONCURRENCYID <> V.BASECURRENCYID and JOURNALENTRY_EXT.PRECALCBASEEXCHANGERATEID is null)
then 'Base exchange rate does not exist for this distribution.'
else 'Organization exchange rate does not exist for this distribution.'
end
end
end
from @PrePostData_Table T
inner join dbo.JOURNALENTRY on T.ID = JOURNALENTRY.ID
inner join dbo.JOURNALENTRY_EXT on T.ID = JOURNALENTRY_EXT.ID
left join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
left join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = V.FINANCIALTRANSACTIONID
where T.ISEXCEPTION = 0
and T.ADJUSTMENTIDGUID in (select ID from @Temp)
end
if @DEFAULTGLACCOUNTID is not null
update @PrePostData_Table set
ISEXCEPTION = 1
,EXCEPTIONREASON = CASE
WHEN tf.REVENUEIDGUID = tf2.REVENUEIDGUID
then 'The account assigned to unmapped transactions is included in this GL distribution.'
else 'Transaction is in a deposit that cannot be posted because the GL distribution for one of its payments includes the account assigned to unmapped transactions.'
end
from @PrePostData_Table tf
inner join (select tf2.REVENUEIDGUID, tf2.DEPOSITID
from @PrePostData_Table as tf2
inner join dbo.JOURNALENTRY T on T.ID = tf2.ID
where tf2.ISEXCEPTION = 0 and T.GLACCOUNTID = @DEFAULTGLACCOUNTID) tf2 on tf.REVENUEIDGUID = tf2.REVENUEIDGUID or tf.DEPOSITID = tf2.DEPOSITID
where tf.ISEXCEPTION = 0
delete from @PrePostData_Table
where cast(POSTDATE as date) > @PostDateFilter;
return
end