USP_DATAFORMTEMPLATE_ADD_CUSTOMFORMPAYMENTSETTING

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@FORMGUID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@ALLOWDIRECTDEBIT bit IN
@ALLOWPLEDGE bit IN
@REQUIREFIRSTNAME bit IN
@REQUIRETITLE bit IN
@REQUIREPHONE bit IN
@MERCHANTACCOUNTID int IN
@ALLOWWAIVE bit IN
@WAIVECODE nvarchar(1000) IN
@ALLOWPAYMENTCOLLECTION bit IN
@DISPLAYRECAPTCHA bit IN
@PAYMENTPARTPAGEID int IN
@ACKNOWLEDGEMENTBLOCK nvarchar(max) IN
@FEES xml IN

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_CUSTOMFORMPAYMENTSETTING
(
    @ID uniqueidentifier = null output,
    @FORMGUID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @ALLOWDIRECTDEBIT            bit,
    @ALLOWPLEDGE                bit,
    @REQUIREFIRSTNAME            bit,
    @REQUIRETITLE                bit,
    @REQUIREPHONE                bit,
    @MERCHANTACCOUNTID            int,
    @ALLOWWAIVE                    bit,
    @WAIVECODE                    nvarchar(1000) = '',
    @ALLOWPAYMENTCOLLECTION        bit,
    @DISPLAYRECAPTCHA            bit,
    @PAYMENTPARTPAGEID            int = null,
    @ACKNOWLEDGEMENTBLOCK        nvarchar(max) = null,
    @FEES                        xml = null
)
as

set nocount on;

if @CHANGEAGENTID is null  
    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()

begin try

    UPDATE dbo.CustomFormPaymentSetting
    SET
        FormGUID = @FormGUID,
        AllowDirectDebit = @AllowDirectDebit,
        AllowPledge = @AllowPledge,
        RequireFirstName = @RequireFirstName,
        RequireTitle = @RequireTitle,
        RequirePhone = @RequirePhone,
        MerchantAccountID = @MerchantAccountID,
        AllowWaive = @AllowWaive,
        WaiveCode = @WaiveCode,
        AllowPaymentCollection = @AllowPaymentCollection,
        DisplayReCAPTCHA = @DisplayReCAPTCHA,
        PaymentPartPageID = @PaymentPartPageID,
        AcknowledgementBlock = @AcknowledgementBlock
    WHERE FormGUID = @FormGUID

    IF @@ROWCOUNT = 0 
    BEGIN
        INSERT INTO dbo.CustomFormPaymentSetting
        (
            FormGUID,
            AllowDirectDebit,
            AllowPledge,
            RequireFirstName,
            RequireTitle,
            RequirePhone,
            MerchantAccountID,
            AllowWaive,
            WaiveCode,
            AllowPaymentCollection,
            DisplayReCAPTCHA,
            PaymentPartPageID,
            AcknowledgementBlock
        )
        values
        (
            @FormGUID,
            @AllowDirectDebit,
            @AllowPledge,
            @RequireFirstName,
            @RequireTitle,
            @RequirePhone,
            @MerchantAccountID,
            @AllowWaive,
            @WaiveCode,
            @AllowPaymentCollection,
            @DisplayReCAPTCHA,
            @PaymentPartPageID,
            @AcknowledgementBlock
        )
    END

    --Pull the fees out into a table variable
    declare @FEESTABLE table(FEEID uniqueidentifier, NAME nvarchar(60), AMOUNT money, CRITERIACODE tinyint, RULES xml)
    insert into @FEESTABLE(FEEID, NAME, AMOUNT, CRITERIACODE, RULES)
    select 
    F.I.value('FEEID[1]', 'uniqueidentifier'),
    F.I.value('NAME[1]', 'nvarchar(60)'),
    F.I.value('AMOUNT[1]', 'money'),
    F.I.value('CRITERIACODE[1]', 'tinyint'),
    F.I.query('./RULES')
    from @FEES.nodes('/FEES/ITEM') F(I)

    --Pull the rules out into a table variable
    declare @RULEACTIONSTABLE table(RULEACTIONID uniqueidentifier, RULEACTIONFIELDID uniqueidentifier, RULEACTIONCOMPARISONCODE tinyint, RULEACTIONVALUE1 nvarchar(255), RULEACTIONVALUE2 nvarchar(255), CUSTOMFORMFEEID uniqueidentifier)
    insert into @RULEACTIONSTABLE(RULEACTIONID, RULEACTIONFIELDID, RULEACTIONCOMPARISONCODE, RULEACTIONVALUE1, RULEACTIONVALUE2, CUSTOMFORMFEEID)
    select
    RA.I.value('RULEACTIONID[1]', 'uniqueidentifier'),
    RA.I.value('RULEACTIONFIELDID[1]', 'uniqueidentifier'),
    RA.I.value('RULEACTIONCOMPARISONCODE[1]', 'tinyint'),
    RA.I.value('RULEACTIONVALUE1[1]', 'nvarchar(255)'),
    RA.I.value('RULEACTIONVALUE2[1]', 'nvarchar(255)'),
    FEEID
    from @FEESTABLE
    cross apply RULES.nodes('/RULES/ITEM') RA(I)

    --Cache current context information 
    declare @CONTEXTCACHE varbinary(128); 
    set @CONTEXTCACHE = CONTEXT_INFO(); 
    set CONTEXT_INFO @CHANGEAGENTID

    --merge fees
    merge dbo.CUSTOMFORMFEE as target
        using (select FEEID, NAME, AMOUNT, CRITERIACODE from @FEESTABLE
            as source (ID, NAME, AMOUNT, CRITERIACODE)
        on (target.ID = source.ID)
        when not matched by source and target.FORMID = @FORMGUID then DELETE
        when matched and (target.NAME <> source.NAME or target.AMOUNT <> source.AMOUNT or target.CRITERIACODE <> source.CRITERIACODE) then
            update set
                NAME = source.NAME,
                AMOUNT = source.AMOUNT,
                CRITERIACODE = source.CRITERIACODE,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CURRENTDATE
        when not matched then
            insert (ID, FORMID, NAME, AMOUNT, CRITERIACODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
            values (source.ID, @FORMGUID, source.NAME, source.AMOUNT, source.CRITERIACODE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

    --merge rules
    merge dbo.CUSTOMFORMRULEACTION as target
        using (select RULEACTIONID, RULEACTIONFIELDID, RULEACTIONCOMPARISONCODE, RULEACTIONVALUE1, RULEACTIONVALUE2, CUSTOMFORMFEEID from @RULEACTIONSTABLE
            as source (ID, RULEACTIONFIELDID, RULEACTIONCOMPARISONCODE, RULEACTIONVALUE1, RULEACTIONVALUE2, CUSTOMFORMFEEID)
        on (target.ID = source.ID)
        when not matched by source and target.CUSTOMFORMFEEID is not null and target.FORMID = @FORMGUID then DELETE
        when matched and (target.RULEACTIONFIELDID <> source.RULEACTIONFIELDID or target.RULEACTIONCOMPARISONCODE <> source.RULEACTIONCOMPARISONCODE or target.RULEACTIONVALUE1 <> source.RULEACTIONVALUE1 or target.RULEACTIONVALUE2 <> source.RULEACTIONVALUE2) then
            update set
                RULEACTIONFIELDID = source.RULEACTIONFIELDID,
                RULEACTIONCOMPARISONCODE = source.RULEACTIONCOMPARISONCODE,
                RULEACTIONVALUE1 = source.RULEACTIONVALUE1,
                RULEACTIONVALUE2 = source.RULEACTIONVALUE2,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CURRENTDATE
        when not matched then
            insert (ID, FORMID, RULEACTIONFIELDID, RULEACTIONCOMPARISONCODE, RULEACTIONVALUE1, RULEACTIONVALUE2, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, CUSTOMFORMFEEID)
            values (source.ID, @FORMGUID, source.RULEACTIONFIELDID, source.RULEACTIONCOMPARISONCODE, source.RULEACTIONVALUE1, source.RULEACTIONVALUE2, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, source.CUSTOMFORMFEEID);


    if not @CONTEXTCACHE is null 
        set CONTEXT_INFO @CONTEXTCACHE;    

end try

begin catch
    exec dbo.USP_RAISE_ERROR
    return 1
end catch

return 0