UFN_BATCHREVENUE_PAYMENTVALIDFORDIRECTDEBIT_UK
Determines if a batch revenue row is valid for direct debit in the UK.
Return
Return Type |
---|
bit |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@BATCHREVENUEID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_BATCHREVENUE_PAYMENTVALIDFORDIRECTDEBIT_UK
(
@BATCHREVENUEID uniqueidentifier
)
returns bit
as
begin
declare @R bit;
declare @SOURCEREVENUEID uniqueidentifier;
select @SOURCEREVENUEID = BATCHREVENUEAPPLICATION.REVENUEID
from dbo.BATCHREVENUEAPPLICATION
inner join dbo.BATCHREVENUE on BATCHREVENUE.ID = BATCHREVENUEAPPLICATION.BATCHREVENUEID
where BATCHREVENUE.ID = @BATCHREVENUEID;
if @SOURCEREVENUEID is null
begin
declare @APPINFO as nvarchar(60);
set @APPINFO = (select APPLICATIONINFO from dbo.BATCHREVENUE where ID = @BATCHREVENUEID);
if len(@APPINFO) > 3
begin
set @SOURCEREVENUEID = (select SINGLEAPPLICATIONID from dbo.UFN_REVENUEBATCH_PARSEAPPLICATIONINFO(@APPINFO));
end
end
--Return zero if no commitment exists.
if @SOURCEREVENUEID is null
return 0;
--Note: This select will return applications that are considered invalid. So the case that assigns to @R looks
--inverted. However, it's correct: if there are any rows returned then the @BATCHREVENUEID is not valid for UK direct debit
select
@R = case when count(1) > 0 then 0 else 1 end
from BATCHREVENUEAPPLICATION
inner join dbo.BATCHREVENUE on BATCHREVENUE.ID = BATCHREVENUEAPPLICATION.BATCHREVENUEID
inner join dbo.REVENUE on REVENUE.ID = BATCHREVENUEAPPLICATION.REVENUEID
inner join dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.REVENUEID = REVENUE.ID
inner join dbo.REVENUESCHEDULEDIRECTDEBITPAYMENT as [DD] on [DD].ID = REVENUE.ID
where BATCHREVENUEAPPLICATION.BATCHREVENUEID = @BATCHREVENUEID
and BATCHREVENUE.PAYMENTMETHODCODE = 3
and BATCHREVENUEAPPLICATION.APPLIED > 0
and REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = 3
and --This and clause has all the rejection rules
(
[DD].CONSTITUENTACCOUNTID <> BATCHREVENUE.CONSTITUENTACCOUNTID -- The application has a different account from the payment
or
(
dbo.UFN_PAPERLESSMANDATES_ENABLED_FORREVENUE(REVENUE.ID) = 1 --Site is configured for paperless mandates but...
and
(
--... the DDISOURCECODE is null
[DD].DDISOURCECODEID is null
or --... the advance notice date is not set at all
[DD].PMADVANCENOTICESENTDATE is null
or --...the advance notice date is not in the right place
--The "GETEARLIESTTIME" date function has been inlined here for performance (the part with "cast(@DATE as date)")...
dateadd(dd,dbo.UFN_PAPERLESSMANDATES_DAYSADVANCEDNOTICE_FORREVENUE(REVENUE.ID), [DD].PMADVANCENOTICESENTDATE) > cast(BATCHREVENUE.DATE as date)
)
)
)
return @R;
end