USP_REVENUEBATCH_SEPAMANDATE_VALIDATEORCREATE
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SEPAMANDATEID | uniqueidentifier | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN | |
@ADDSEPAMANDATE | bit | IN | |
@SEPAMANDATECUSTOMIDENTIFIER | nvarchar(35) | IN | |
@SEPAMANDATESIGNATUREDATE | date | IN | |
@SEPAMANDATETYPECODE | tinyint | IN | |
@PAYMENTMETHODCODE | tinyint | IN | |
@CONSTITUENTACCOUNTID | uniqueidentifier | IN | |
@FINANCIALINSTITUTIONID | uniqueidentifier | IN | |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_REVENUEBATCH_SEPAMANDATE_VALIDATEORCREATE
@SEPAMANDATEID as uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTDATE datetime = null,
@ADDSEPAMANDATE bit = 0,
@SEPAMANDATECUSTOMIDENTIFIER as nvarchar(35) = '',
@SEPAMANDATESIGNATUREDATE as date,
@SEPAMANDATETYPECODE as tinyint,
@PAYMENTMETHODCODE as tinyint,
@CONSTITUENTACCOUNTID as uniqueidentifier,
@FINANCIALINSTITUTIONID as uniqueidentifier,
@TRANSACTIONCURRENCYID as uniqueidentifier
as
begin
declare @USEEXISTINGSEPAMANDATE bit = 0;
if @SEPAMANDATEID is null
begin
-- Attempt to locate matching SEPA Mandate
select @SEPAMANDATEID = SEPAMANDATE.ID
from dbo.SEPAMANDATE
where
(
@SEPAMANDATECUSTOMIDENTIFIER = SEPAMANDATE.LOOKUPID or
@SEPAMANDATECUSTOMIDENTIFIER = SEPAMANDATE.CUSTOMIDENTIFIER
) and
@SEPAMANDATETYPECODE = SEPAMANDATE.TYPECODE and
@SEPAMANDATESIGNATUREDATE = SEPAMANDATE.SIGNATUREDATE and
@CONSTITUENTACCOUNTID = SEPAMANDATE.CONSTITUENTACCOUNTID;
if @SEPAMANDATEID is not null
begin
set @USEEXISTINGSEPAMANDATE = 1;
set @ADDSEPAMANDATE = 0;
end
end
else
begin
if exists (select 1 from dbo.SEPAMANDATE where SEPAMANDATE.ID = @SEPAMANDATEID)
set @USEEXISTINGSEPAMANDATE = 1;
end
--Set defaults
if @ADDSEPAMANDATE is null
set @ADDSEPAMANDATE = 0;
-- Bail if no SEPA mandate is being used
if @USEEXISTINGSEPAMANDATE = 0 and @ADDSEPAMANDATE = 0
return 0;
--Set more defaults
if @SEPAMANDATECUSTOMIDENTIFIER is null
set @SEPAMANDATECUSTOMIDENTIFIER = '';
if @SEPAMANDATETYPECODE is null
set @SEPAMANDATETYPECODE = 0;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CURRENTDATE is null
set @CURRENTDATE = getdate();
-- Attempt to find the institution from an existing constituent account
if @FINANCIALINSTITUTIONID is null
begin
select @FINANCIALINSTITUTIONID = FINANCIALINSTITUTIONID
from dbo.CONSTITUENTACCOUNT
where ID = @CONSTITUENTACCOUNTID;
end
-- If a financial institution is not provided, attempt to find one in revenue batch
if @FINANCIALINSTITUTIONID is null
begin
select @FINANCIALINSTITUTIONID = FINANCIALINSTITUTIONID
from dbo.BATCHREVENUECONSTITUENTACCOUNT
where ID = @CONSTITUENTACCOUNTID;
end
-- If a financial institution is not provided, attempt to find one in sponsorship batch
if @FINANCIALINSTITUTIONID is null
begin
select @FINANCIALINSTITUTIONID = FINANCIALINSTITUTIONID
from dbo.BATCHSPONSORSHIPCONSTITUENTACCOUNT
where ID = @CONSTITUENTACCOUNTID;
end
declare @BANKINGSYSTEMCONDITIONSETTINGNAME nvarchar(50) = '';
select
@BANKINGSYSTEMCONDITIONSETTINGNAME = BANKINGSYSTEM.CONDITIONSETTINGNAME
from
dbo.FINANCIALINSTITUTION
inner join dbo.BANKINGSYSTEM on FINANCIALINSTITUTION.BANKINGSYSTEMID = BANKINGSYSTEM.ID
where
FINANCIALINSTITUTION.ID = @FINANCIALINSTITUTIONID;
if @BANKINGSYSTEMCONDITIONSETTINGNAME = ''
begin
select @BANKINGSYSTEMCONDITIONSETTINGNAME = BANKINGSYSTEM.CONDITIONSETTINGNAME
from dbo.BATCHREVENUEFINANCIALINSTITUTION
inner join dbo.BANKINGSYSTEM on BATCHREVENUEFINANCIALINSTITUTION.BANKINGSYSTEMID = BANKINGSYSTEM.ID
where BATCHREVENUEFINANCIALINSTITUTION.ID = @FINANCIALINSTITUTIONID;
end
declare @TRANSACTIONCURRENCYISEURO bit = 0;
if exists (select 1 from dbo.CURRENCY where CURRENCY.ID = @TRANSACTIONCURRENCYID and CURRENCY.ISO4217 = N'EUR')
set @TRANSACTIONCURRENCYISEURO = 1;
--Several conditions must be met before the mandate field is enabled
if (@PAYMENTMETHODCODE <> 3) --Direct debit
begin
if @ADDSEPAMANDATE = 1
raiserror('BBERR_SEPAMANDATE_ADDNOTALLOWED_WRONGPAYMENTMETHOD', 13, 1);
else if @USEEXISTINGSEPAMANDATE = 1
raiserror('BBERR_SEPAMANDATE_NOTALLOWED_WRONGPAYMENTMETHOD', 13, 1);
return 1;
end
if (@CONSTITUENTACCOUNTID is null) --With a constituent account
begin
if @ADDSEPAMANDATE = 1
raiserror('BBERR_SEPAMANDATE_ADDNOTALLOWED_NOACCOUNT', 13, 1);
else if @USEEXISTINGSEPAMANDATE = 1
raiserror('BBERR_SEPAMANDATE_NOTALLOWED_NOACCOUNT', 13, 1);
return 1;
end
if (@BANKINGSYSTEMCONDITIONSETTINGNAME <> N'BankingSystem-SEPA') --Using a SEPA financial institution
begin
if @ADDSEPAMANDATE = 1
raiserror('BBERR_SEPAMANDATE_ADDNOTALLOWED_WRONGBANKINGSYSTEM', 13, 1);
else if @USEEXISTINGSEPAMANDATE = 1
raiserror('BBERR_SEPAMANDATE_NOTALLOWED_WRONGBANKINGSYSTEM', 13, 1);
return 1;
end
if (@TRANSACTIONCURRENCYISEURO <> 1) --With a euro transaction currency
begin
if @ADDSEPAMANDATE = 1
raiserror('BBERR_SEPAMANDATE_ADDNOTALLOWED_WRONGCURRENCY', 13, 1);
else if @USEEXISTINGSEPAMANDATE = 1
raiserror('BBERR_SEPAMANDATE_NOTALLOWED_WRONGCURRENCY', 13, 1);
return 1;
end
if @ADDSEPAMANDATE = 1 and @USEEXISTINGSEPAMANDATE = 0
begin
-- Validate custom identifier if one was provided
if @SEPAMANDATECUSTOMIDENTIFIER <> '' and
(
@SEPAMANDATECUSTOMIDENTIFIER not like '[a-zA-Z0-9]%' or -- Starts with alphanumeric
@SEPAMANDATECUSTOMIDENTIFIER like '%[^a-zA-Z0-9/?:().,''+ -]%' or -- Contains no invalid characters
@SEPAMANDATECUSTOMIDENTIFIER not like '%[a-zA-Z0-9]' -- Ends with alphanumeric
)
raiserror('BBERR_SEPAMANDATE_INVALIDCUSTOMIDENTIFIER', 13, 1);
if @SEPAMANDATEID is null
set @SEPAMANDATEID = newid();
--The constituent account may be either a batch constituent account or a committed constituent account
declare @BATCHREVENUECONSTITUENTACCOUNTID uniqueidentifier = null;
declare @BATCHSPONSORSHIPCONSTITUENTACCOUNTID uniqueidentifier = null;
if exists (select 1 from dbo.BATCHREVENUECONSTITUENTACCOUNT where BATCHREVENUECONSTITUENTACCOUNT.ID = @CONSTITUENTACCOUNTID)
begin
set @BATCHREVENUECONSTITUENTACCOUNTID = @CONSTITUENTACCOUNTID;
set @CONSTITUENTACCOUNTID = null;
end
if exists(select 1 from dbo.BATCHSPONSORSHIPCONSTITUENTACCOUNT where BATCHSPONSORSHIPCONSTITUENTACCOUNT.ID = @CONSTITUENTACCOUNTID)
begin
set @BATCHSPONSORSHIPCONSTITUENTACCOUNTID = @CONSTITUENTACCOUNTID;
set @CONSTITUENTACCOUNTID = null;
end
--Default the mandate status for mandates that were imported
--If there is a signature, set the mandate to active. Otherwise, leave it at pending signature.
--0 = Pending signature
--1 = Active
declare @SEPAMANDATESTATUSCODE tinyint = 0;
if @SEPAMANDATESIGNATUREDATE is not null
begin
set @SEPAMANDATESTATUSCODE = 1;
end
insert into dbo.SEPAMANDATE
(
ID,
CONSTITUENTACCOUNTID,
BATCHREVENUECONSTITUENTACCOUNTID,
BATCHSPONSORSHIPCONSTITUENTACCOUNTID,
CUSTOMIDENTIFIER,
SIGNATUREDATE,
TYPECODE,
STATUSCODE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
@SEPAMANDATEID,
@CONSTITUENTACCOUNTID,
@BATCHREVENUECONSTITUENTACCOUNTID,
@BATCHSPONSORSHIPCONSTITUENTACCOUNTID,
@SEPAMANDATECUSTOMIDENTIFIER,
@SEPAMANDATESIGNATUREDATE,
@SEPAMANDATETYPECODE,
@SEPAMANDATESTATUSCODE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
end
end