USP_GLOBALCHANGE_ADDCONSTITUENTSOLICITICODE

Parameters

Parameter Parameter Type Mode Description
@IDSETREGISTERID uniqueidentifier IN
@SOLICITCODEID uniqueidentifier IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@COMMENTS nvarchar(100) IN
@CHANGEAGENTID uniqueidentifier IN
@ASOF datetime IN
@NUMBERADDED int INOUT
@NUMBEREDITED int INOUT
@NUMBERDELETED int INOUT
@CURRENTAPPUSERID uniqueidentifier IN
@CONSENTPREFERENCECODE tinyint IN
@SOURCEEVIDENCECODEID uniqueidentifier IN
@SOURCEFILE nvarchar(260) IN
@PRIVACYPOLICY nvarchar(260) IN
@SUPPORTINGINFORMATION nvarchar(max) IN
@CONSENTSTATEMENT nvarchar(max) IN

Definition

Copy


        CREATE procedure dbo.USP_GLOBALCHANGE_ADDCONSTITUENTSOLICITICODE
        (
                @IDSETREGISTERID uniqueidentifier = null
                @SOLICITCODEID uniqueidentifier  = null,
                @STARTDATE datetime =null,
                @ENDDATE datetime=null,
                @COMMENTS nvarchar(100) = null,
                @CHANGEAGENTID uniqueidentifier = null,
                @ASOF as datetime = null,
                @NUMBERADDED int = 0 output,
                @NUMBEREDITED int = 0 output,
                @NUMBERDELETED int = 0 output,
                @CURRENTAPPUSERID uniqueidentifier = null,
                @CONSENTPREFERENCECODE tinyint = 0,
                @SOURCEEVIDENCECODEID uniqueidentifier = null,
                @SOURCEFILE nvarchar(260) = null,
                @PRIVACYPOLICY nvarchar(260) = null,
                @SUPPORTINGINFORMATION nvarchar(max) = null,
                @CONSENTSTATEMENT nvarchar(max) = null
            )
            as
                set nocount off;

                declare @CURRENTDATE datetime = getdate();

                set @NUMBERADDED = 0;
                set @NUMBEREDITED = 0;
                set @NUMBERDELETED = 0

                declare @BPID uniqueidentifier = '3269A1D1-31CB-4D28-945C-B7623A3EFCCA';
                declare @BYPASSSECURITY bit;
                declare @BYPASSSITESECURITY bit;
                declare @USERHASSITEACCESS bit;
                declare @SITEID uniqueidentifier;

                exec dbo.USP_SECURITY_APPUSER_BYPASSSECURITYFORBUSINESSPROCESS @CURRENTAPPUSERID, @BPID, @BYPASSSECURITY output, @BYPASSSITESECURITY output;

                select @SITEID = SITEID from dbo.SOLICITCODE where ID = @SOLICITCODEID;
                set @USERHASSITEACCESS = dbo.UFN_SECURITY_APPUSER_GRANTED_BUSINESSPROCESS_FORSITE(@CURRENTAPPUSERID, @BPID, @SITEID)

                -- If the user should not bypass security and does not have rights to the given solicit code, exit the procedure.

                if @BYPASSSECURITY = 0 and @BYPASSSITESECURITY = 0 and @USERHASSITEACCESS = 0
                    return 0;

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

                declare @SELECTION table (ID uniqueidentifier not null primary key)

                begin try
                    -- retrieve records that the user can add solicit codes to

                    insert into @SELECTION(ID)
                        select ID from dbo.UFN_CONSTITUENT_GETRECORDSINSELECTION_FORBUSINESSPROCESS(@CURRENTAPPUSERID, @IDSETREGISTERID, @BPID, @BYPASSSECURITY, @BYPASSSITESECURITY);

                    declare @CONSENT tinyint;
                    select @CONSENT = CONSENTCODE from SOLICITCODE where ID = @SOLICITCODEID

                    -- validate consent codes, close where the same code exists with an end date of yesterday

                    if @CONSENT <> 0
                    begin
                        declare @UPDATEROWS table
                        (
                          ROWNUMBER bigint,
                          CONSTITUENTSOLICITCODEID uniqueidentifier,
                          AUTOENDDATE date
                        );

                        declare @INPUT table
                        (
                          SOLICITCODEID uniqueidentifier,
                          NEW_STARTDATE date
                        );

                        -- Populate temp table with selected data

                        insert into @INPUT
                        select
                            @SOLICITCODEID AS 'SOLICITCODEID',
                            @STARTDATE AS 'STARTDATE';

                        insert into @UPDATEROWS
                        select
                          ROW_NUMBER() over (partition by CONSTITUENTSOLICITCODE.CONSTITUENTID, CONSTITUENTSOLICITCODE.SOLICITCODEID order by CONSTITUENTSOLICITCODE.STARTDATE desc) as ROWNUMBER,
                          CONSTITUENTSOLICITCODE.ID as CONSTITUENTSOLICITCODEID,
                          dateadd(day, -1, INPUT.NEW_STARTDATE) as AUTOENDDATE
                        from @INPUT INPUT
                        inner join dbo.CONSTITUENTSOLICITCODE on INPUT.SOLICITCODEID = CONSTITUENTSOLICITCODE.SOLICITCODEID
                        inner join dbo.SOLICITCODE on CONSTITUENTSOLICITCODE.SOLICITCODEID = SOLICITCODE.ID
                        where
                        CONSTITUENTSOLICITCODE.CONSTITUENTID in (select ID from @SELECTION)
                        and ( SOLICITCODE.CONSENTCODE = 1 
                              OR
                              SOLICITCODE.CONSENTCODE = 2) -- EU Consent / Advanced Consent

                        and CONSTITUENTSOLICITCODE.STARTDATE < INPUT.NEW_STARTDATE
                        and CONSTITUENTSOLICITCODE.ENDDATE is null

                        update dbo.CONSTITUENTSOLICITCODE
                        set
                            ENDDATE = AUTOENDDATE,
                            DATECHANGED = @CURRENTDATE,
                            CHANGEDBYID = @CHANGEAGENTID
                        from @UPDATEROWS UPDATEROWS
                        where
                            CONSTITUENTSOLICITCODE.ID = UPDATEROWS.CONSTITUENTSOLICITCODEID
                            and UPDATEROWS.ROWNUMBER = 1;

                        -- Mark associated mail preferences as Do not send when the ended solicit code is no longer active

                        update MAILPREFERENCE set
                          SENDMAIL = 0,
                          USESEASONALADDRESS = 0,
                          USEPRIMARYADDRESS = 0,
                          USEPRIMARYEMAIL = 0,
                          CHANGEDBYID = @CHANGEAGENTID,
                          DATECHANGED = @CURRENTDATE
                        from @UPDATEROWS UPDATEROWS
                          inner join dbo.MAILPREFERENCE on UPDATEROWS.CONSTITUENTSOLICITCODEID = MAILPREFERENCE.CONSTITUENTSOLICITCODEID
                        where UPDATEROWS.AUTOENDDATE < @CURRENTDATE;

                    end

                    insert into dbo.[CONSTITUENTSOLICITCODE]
                        ([ID],[SOLICITCODEID],[CONSTITUENTID],[STARTDATE],[ENDDATE],[COMMENTS],[SEQUENCE],[ADDEDBYID],[CHANGEDBYID],[DATEADDED],[DATECHANGED],
                         [CONSENTPREFERENCECODE],[SOURCECODEID],[SOURCEFILEPATH],[PRIVACYPOLICYFILEPATH],[SUPPORTINGINFORMATION],[CONSENTSTATEMENT])
                    select
                        newid(),
                        @SOLICITCODEID,
                        selection.ID,
                        @STARTDATE,
                        @ENDDATE,
                        @COMMENTS,
                        (select coalesce(max(SEQUENCE),0)+1 from dbo.CONSTITUENTSOLICITCODE where CONSTITUENTID = selection.ID),
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CURRENTDATE,
                        @CURRENTDATE,
                        @CONSENTPREFERENCECODE,
                        @SOURCEEVIDENCECODEID,
                        @SOURCEFILE,
                        @PRIVACYPOLICY,
                        @SUPPORTINGINFORMATION,
                        @CONSENTSTATEMENT
                    from
                        @SELECTION selection
                    where not exists
                      (
                        select
                          1
                        from
                          dbo.CONSTITUENTSOLICITCODE
                        where
                          CONSTITUENTID = selection.ID and
                          SOLICITCODEID = @SOLICITCODEID and
                          dbo.UFN_DATES_AREDATESOVERLAPPING(@STARTDATE, @ENDDATE, STARTDATE, ENDDATE) = 1
                      );

                    set @NUMBERADDED = @@ROWCOUNT
                end try

                begin catch
                    exec dbo.USP_RAISE_ERROR;
                    return 1;
                end catch