USP_DATAFORMTEMPLATE_ADD_BATCHEMAILFINDERBATCHCOMMIT

The save procedure used by the add dataform template "EmailFinder Batch Row Commit Add Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@VALIDATEONLY bit IN Validate only
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@EMAILFINDERID uniqueidentifier IN
@CONSTITUENTID uniqueidentifier IN Constituent
@ADDRESSID uniqueidentifier IN
@EMAILADDRESS UDT_EMAILADDRESS IN Email address
@OPTOUT bit IN Opt out

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_BATCHEMAILFINDERBATCHCOMMIT
(
    @ID uniqueidentifier = null output,
    @VALIDATEONLY bit = 0,
    @CHANGEAGENTID uniqueidentifier,
    @EMAILFINDERID uniqueidentifier,
    @CONSTITUENTID uniqueidentifier = null,
    @ADDRESSID uniqueidentifier = null,
    @EMAILADDRESS dbo.UDT_EMAILADDRESS = null,
    @OPTOUT bit = null

as
    set nocount on;

    declare @CURRENTDATE datetime;

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

    set @CURRENTDATE = getdate();

    begin try
        --Get EmailFinder process options
        declare @EMAILADDRESSTYPECODEID uniqueidentifier;
        declare @MARKASPRIMARY bit;
        declare @INFOSOURCECODEID uniqueidentifier;
        declare @INFOSOURCECOMMENTS nvarchar(256);

        select
            @EMAILADDRESSTYPECODEID = EMAILFINDER.EMAILADDRESSTYPECODEID,
            @MARKASPRIMARY = EMAILFINDER.MARKASPRIMARY,
            @INFOSOURCECODEID = EMAILFINDER.INFOSOURCECODEID,
            @INFOSOURCECOMMENTS =  EMAILFINDER.INFOSOURCECOMMENTS
        from
            dbo.EMAILFINDER
        where
            EMAILFINDER.ID = @EMAILFINDERID;

        --Check for existing address
        set @ID = null;
        select @ID = ID from dbo.EMAILADDRESS where CONSTITUENTID = @CONSTITUENTID and EMAILADDRESS = @EMAILADDRESS;

        --Bug 268367 The process options say to not mark addresses as primary, but there are cases
        -- where the address should be marked as primary anyway.
        if @MARKASPRIMARY = 0
        begin
            if @ID is null
            begin
                --When adding an address make it primary if no other addresses exist, even if the process options said not to
                if not exists (select 1 from dbo.EMAILADDRESS where EMAILADDRESS.CONSTITUENTID = @CONSTITUENTID)
                begin
                    set @MARKASPRIMARY = 1;
                end
            end
            else
            begin
                --When updating an address keep its primary status, even if the process options said not to
                select
                    @MARKASPRIMARY = EMAILADDRESS.ISPRIMARY
                from
                    dbo.EMAILADDRESS
                where
                    EMAILADDRESS.ID = @ID;
            end
        end

        --If they have not opt's out then add or update the email address
        if @OPTOUT = 0
        begin
            --If the email doesn't exist then add it
            if @ID is null
                exec dbo.USP_DATAFORMTEMPLATE_ADD_EMAILADDRESS @ID = @ID output, @CHANGEAGENTID = @CHANGEAGENTID, @CONSTITUENTID = @CONSTITUENTID, @EMAILADDRESSTYPECODEID = @EMAILADDRESSTYPECODEID, @EMAILADDRESS = @EMAILADDRESS, @PRIMARY = @MARKASPRIMARY, @UPDATEMATCHINGSPOUSEEMAILADDRESS = 0, @UPDATEMATCHINGHOUSEHOLDEMAILADDRESS = 0, @DONOTEMAIL = 0, @INFOSOURCECODEID = @INFOSOURCECODEID, @INFOSOURCECOMMENTS = @INFOSOURCECOMMENTS
            else
            begin
                --If there is a matching email with no other data update the record
                if exists(select ID from dbo.EMAILADDRESS where ID = @ID and EMAILADDRESSTYPECODEID is null and INFOSOURCECODEID is null and len(INFOSOURCECOMMENTS) > 0)
                    exec dbo.USP_DATAFORMTEMPLATE_EDIT_EMAILADDRESS_3 @ID, @CHANGEAGENTID, @EMAILADDRESSTYPECODEID, @EMAILADDRESS, @MARKASPRIMARY, 0, 0, 0, @INFOSOURCECODEID, @INFOSOURCECOMMENTS;
                else
                    set @ID = newID();
            end
        end
        else
        begin
            --If they have opt'd out then mark it do not email and update the info source
            if @ID is not null
            begin
                update dbo.EMAILADDRESS
                set
                    DONOTEMAIL = 1,
                    INFOSOURCECODEID = @INFOSOURCECODEID,
                    INFOSOURCECOMMENTS = @INFOSOURCECOMMENTS,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where
                    ID = @ID;
            end
            else
            begin
                set @ID = newID();
            end
        end
    end try
    begin catch
        exec.dbo.USP_RAISE_ERROR;
        return 1;
    end catch

    return 0;