USP_DATAFORMTEMPLATE_ADD_SOLICITCODECHANNELOPTOUT

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@CONSTITUENTID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@SOLICITCODECHANNELCODE tinyint IN
@CONSENTCODE tinyint IN
@STARTDATE datetime IN
@SOURCEEVIDENCECODEID uniqueidentifier IN
@COMMENTS nvarchar(255) IN

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_SOLICITCODECHANNELOPTOUT
(
  @ID uniqueidentifier = null output,
  @CONSTITUENTID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null,
  @SOLICITCODECHANNELCODE tinyint = null,
  @CONSENTCODE tinyint = 1,
  @STARTDATE datetime = null,
  @SOURCEEVIDENCECODEID uniqueidentifier = null,
  @COMMENTS nvarchar(255) = ''
)
as

set nocount on;

if @ID is null
    set @ID = newid();

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

declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();

begin try

  -- handle inserting the data

  insert into dbo.SOLICITCODECHANNELOPTOUT
    ([ID],[CONSTITUENTID],[SOLICITCODECHANNELCODE],[CONSENTCODE],[STARTDATE],[SOURCECODEID],[COMMENTS],[ADDEDBYID],[CHANGEDBYID],[DATEADDED],[DATECHANGED])
  values
    (@ID,@CONSTITUENTID,@SOLICITCODECHANNELCODE,@CONSENTCODE,@STARTDATE,@SOURCEEVIDENCECODEID,@COMMENTS,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE);

    -- select set of SC to end / start opt-outs on

    -- create working set of CONSTITUENTSOLICITCODE's

    declare @SCWORKING table(
      [ID] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
      [CONSTITUENTID] [uniqueidentifier] NOT NULL,
      [SOLICITCODEID] [uniqueidentifier] NOT NULL,
      [SEQUENCE] [int] NOT NULL,
      [ADDEDBYID] [uniqueidentifier] NOT NULL,
      [CHANGEDBYID] [uniqueidentifier] NOT NULL,
      [DATEADDED] [datetime] NOT NULL,
      [DATECHANGED] [datetime] NOT NULL,
      [TS] [timestamp] NOT NULL,
      [TSLONG]  AS (CONVERT([bigint],[TS],0)),
      [STARTDATE] [datetime] NULL,
      [ENDDATE] [datetime] NULL,
      [COMMENTS] [nvarchar](100) NOT NULL,
      [CONSENTPREFERENCECODE] [tinyint] NOT NULL,
      [CONSENTPREFERENCE]  AS (case [CONSENTPREFERENCECODE] when (0) then N'No response' when (1) then N'Opt-out' when (2) then N'Opt-in'  end),
      [SOURCECODEID] [uniqueidentifier] NULL,
      [SOURCEFILEPATH] [nvarchar](260) NOT NULL,
      [PRIVACYPOLICYFILEPATH] [nvarchar](260) NOT NULL,
      [SUPPORTINGINFORMATION] [nvarchar](max) NOT NULL,
      [CONSENTSTATEMENT] [nvarchar](max) NOT NULL,
      [SOLICITCODECHANNELOPTOUTID]  [uniqueidentifier] NULL
    );

    if @CONSENTCODE = 255
    begin
        -- fill working set - 255 = All so we don't care about the consent type

        insert into @SCWORKING
        (
          [ID],
          [CONSTITUENTID],
          [SOLICITCODEID],
          [SEQUENCE],
          [ADDEDBYID],
          [CHANGEDBYID],
          [DATEADDED],
          [DATECHANGED],
          [STARTDATE],
          [ENDDATE],
          [COMMENTS],
          [CONSENTPREFERENCECODE],
          [SOURCECODEID],
          [SOURCEFILEPATH],
          [PRIVACYPOLICYFILEPATH],
          [SUPPORTINGINFORMATION],
          [CONSENTSTATEMENT],
          [SOLICITCODECHANNELOPTOUTID]
        )
        select  
          csc.[ID],
          csc.[CONSTITUENTID],
          csc.[SOLICITCODEID],
          csc.[SEQUENCE],
          csc.[ADDEDBYID],
          csc.[CHANGEDBYID],
          csc.[DATEADDED],
          csc.[DATECHANGED],
          csc.[STARTDATE],
          csc.[ENDDATE],
          csc.[COMMENTS],
          csc.[CONSENTPREFERENCECODE],
          csc.[SOURCECODEID],
          csc.[SOURCEFILEPATH],
          csc.[PRIVACYPOLICYFILEPATH],
          csc.[SUPPORTINGINFORMATION],
          csc.[CONSENTSTATEMENT],
          csc.[SOLICITCODECHANNELOPTOUTID]
        from    dbo.CONSTITUENTSOLICITCODE csc
        join    dbo.SOLICITCODE sc on sc.ID = csc.SOLICITCODEID
        where    CONSTITUENTID = @CONSTITUENTID
        and        (ENDDATE is null or ENDDATE >= @CURRENTDATE)
        and        sc.ACTIVE = 1
        and        sc.SOLICITCODECHANNELCODE = @SOLICITCODECHANNELCODE
        and        (CONSENTPREFERENCECODE = 0 OR CONSENTPREFERENCECODE = 2)
        and        SOLICITCODECHANNELOPTOUTID is null;
    end
    else
    begin
    -- fill working set

        insert into @SCWORKING
        (
          [ID],
          [CONSTITUENTID],
          [SOLICITCODEID],
          [SEQUENCE],
          [ADDEDBYID],
          [CHANGEDBYID],
          [DATEADDED],
          [DATECHANGED],
          [STARTDATE],
          [ENDDATE],
          [COMMENTS],
          [CONSENTPREFERENCECODE],
          [SOURCECODEID],
          [SOURCEFILEPATH],
          [PRIVACYPOLICYFILEPATH],
          [SUPPORTINGINFORMATION],
          [CONSENTSTATEMENT],
          [SOLICITCODECHANNELOPTOUTID]
        )
        select  
          csc.[ID],
          csc.[CONSTITUENTID],
          csc.[SOLICITCODEID],
          csc.[SEQUENCE],
          csc.[ADDEDBYID],
          csc.[CHANGEDBYID],
          csc.[DATEADDED],
          csc.[DATECHANGED],
          csc.[STARTDATE],
          csc.[ENDDATE],
          csc.[COMMENTS],
          csc.[CONSENTPREFERENCECODE],
          csc.[SOURCECODEID],
          csc.[SOURCEFILEPATH],
          csc.[PRIVACYPOLICYFILEPATH],
          csc.[SUPPORTINGINFORMATION],
          csc.[CONSENTSTATEMENT],
          csc.[SOLICITCODECHANNELOPTOUTID]
        from    dbo.CONSTITUENTSOLICITCODE csc
        join    dbo.SOLICITCODE sc on sc.ID = csc.SOLICITCODEID
        where    CONSTITUENTID = @CONSTITUENTID
        and        (ENDDATE is null or ENDDATE >= @CURRENTDATE)
        and        sc.ACTIVE = 1 -- should we care about this?

        and        sc.SOLICITCODECHANNELCODE = @SOLICITCODECHANNELCODE
        and        (CONSENTPREFERENCECODE = 0 OR CONSENTPREFERENCECODE = 2)
        and        SOLICITCODECHANNELOPTOUTID is null
        and        sc.CONSENTCODE = @CONSENTCODE;
    end

    -- validate we are not going to set end dates in the past

    declare @COUNTOFWRONGDATES int = 0
    select  @COUNTOFWRONGDATES = count(STARTDATE)
    from    @SCWORKING
    where   STARTDATE = @STARTDATE;

    if @COUNTOFWRONGDATES > 0 
        raiserror('BBERR_WRONGDATE_ENDDATEINPAST', 13, 1);

    -- update End Dates as (date-1) days on SC in temp table

    update    CONSTITUENTSOLICITCODE
    set          CONSTITUENTSOLICITCODE.ENDDATE = DATEADD(d, -1, @STARTDATE),
            CONSTITUENTSOLICITCODE.CHANGEDBYID = @CHANGEAGENTID,
            CONSTITUENTSOLICITCODE.DATECHANGED = @CURRENTDATE
    from    dbo.CONSTITUENTSOLICITCODE
    join      @SCWORKING wip on wip.id = CONSTITUENTSOLICITCODE.ID;

    if (convert(DATE, @CURRENTDATE) >= convert(DATE, @STARTDATE))
    begin
        -- set any associated MP to 'do not send'

        update    MAILPREFERENCE
        set
          MAILPREFERENCE.SENDMAIL = 0,
          MAILPREFERENCE.USESEASONALADDRESS = 0,
          MAILPREFERENCE.USEPRIMARYADDRESS = 0,
          MAILPREFERENCE.USEPRIMARYEMAIL = 0,
          MAILPREFERENCE.CHANGEDBYID = @CHANGEAGENTID,
          MAILPREFERENCE.DATECHANGED = @CURRENTDATE
        from    dbo.MAILPREFERENCE
        join    @SCWORKING wip on wip.id = MAILPREFERENCE.CONSTITUENTSOLICITCODEID;
    end

    -- update held data to re-insert

    update  @SCWORKING
    set
      [ID] = NEWID(),
      [ADDEDBYID] = @CHANGEAGENTID,
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATEADDED] = GETDATE(),
      [DATECHANGED] = GETDATE(),
      [STARTDATE] = @STARTDATE,
      [ENDDATE] = null,
      [COMMENTS] = 'Channel Opt-out',
      [CONSENTPREFERENCECODE] = 1,
      [SOURCECODEID] = @SOURCEEVIDENCECODEID,
      [SOURCEFILEPATH] = '',
      [PRIVACYPOLICYFILEPATH] = '',
      [SUPPORTINGINFORMATION] = 'Channel Opt-out',
      [CONSENTSTATEMENT] = 'Channel Opt-out',
      [SOLICITCODECHANNELOPTOUTID] = @ID;

    -- insert opt-out records

    insert into dbo.CONSTITUENTSOLICITCODE
    (
      [ID],
      [CONSTITUENTID],
      [SOLICITCODEID],
      [SEQUENCE],
      [ADDEDBYID],
      [CHANGEDBYID],
      [DATEADDED],
      [DATECHANGED],
      [STARTDATE],
      [ENDDATE],
      [COMMENTS],
      [CONSENTPREFERENCECODE],
      [SOURCECODEID],
      [SOURCEFILEPATH],
      [PRIVACYPOLICYFILEPATH],
      [SUPPORTINGINFORMATION],
      [CONSENTSTATEMENT],
      [SOLICITCODECHANNELOPTOUTID]
    )
    select
      [ID],
      [CONSTITUENTID],
      [SOLICITCODEID],
      [SEQUENCE],
      [ADDEDBYID],
      [CHANGEDBYID],
      [DATEADDED],
      [DATECHANGED],
      [STARTDATE],
      [ENDDATE],
      [COMMENTS],
      [CONSENTPREFERENCECODE],
      [SOURCECODEID],
      [SOURCEFILEPATH],
      [PRIVACYPOLICYFILEPATH],
      [SUPPORTINGINFORMATION],
      [CONSENTSTATEMENT],
      [SOLICITCODECHANNELOPTOUTID]
 from
      @SCWORKING;

end try

begin catch
    exec dbo.USP_RAISE_ERROR
    return 1
end catch

return 0