USP_EXCHANGECALENDARSYNC_GETINTERACTIONLIST

Returns a list of interactions for a synchronization process based on the parameter set values.

Parameters

Parameter Parameter Type Mode Description
@PARAMETERSETID uniqueidentifier IN

Definition

Copy


            CREATE procedure [dbo].[USP_EXCHANGECALENDARSYNC_GETINTERACTIONLIST]
            (
                @PARAMETERSETID uniqueidentifier
            )
            as
                set nocount on;

                declare @APPUSERIDSETREGISTERID uniqueidentifier
                declare @LASTRUNON datetime
                declare @SPECIFICAPPUSERID uniqueidentifier
                declare @APPLYTOCODE tinyint
                declare @CREATEITEMOPTIONCODE tinyint
                declare @EXPECTEDDATEINTERVALCODE tinyint
                declare @INTERACTIONFILTERCODE tinyint
                declare @CURRENTDATE datetime
                declare @EXPECTEDDATE datetime
                declare @APPUSERLIST table (CONSTITUENTID uniqueidentifier, APPUSERID uniqueidentifier, USERSID varbinary(85));

                declare @PENDINGSTATUS tinyint
                set @PENDINGSTATUS = 1;

                set @CURRENTDATE = getdate();

                /* Get the current settings for the business process.*/
                select
                    @APPUSERIDSETREGISTERID = EXCHANGECALENDARSYNC.APPUSERIDSETREGISTERID,
                    @LASTRUNON = EXCHANGECALENDARSYNC.LASTRUNON,
                    @SPECIFICAPPUSERID = EXCHANGECALENDARSYNC.SPECIFICAPPUSERID,
                    @APPLYTOCODE = EXCHANGECALENDARSYNC.APPLYTOCODE,
                    @CREATEITEMOPTIONCODE = EXCHANGECALENDARSYNC.CREATEITEMOPTIONCODE,
                    @EXPECTEDDATEINTERVALCODE = EXCHANGECALENDARSYNC.EXPECTEDDATEINTERVALCODE,
                    @INTERACTIONFILTERCODE = case 
                                                when EXCHANGECALENDARSYNC.INCLUDEPENDINGINTERACTIONS = 1 and  EXCHANGECALENDARSYNC.INCLUDEPROSPECTPLANSTEPS = 1 then 2
                                                when EXCHANGECALENDARSYNC.INCLUDEPENDINGINTERACTIONS = 0 and  EXCHANGECALENDARSYNC.INCLUDEPROSPECTPLANSTEPS = 1 then 1
                                                else 0 end --adding case for backwards compat

                from
                    dbo.EXCHANGECALENDARSYNC
                where
                    EXCHANGECALENDARSYNC.ID = @PARAMETERSETID

                --build the daterange to test

                select @EXPECTEDDATE = case @CREATEITEMOPTIONCODE
                    when 0 then 
                        case @EXPECTEDDATEINTERVALCODE
                            when 0 then DATEADD(mm, 1, @CURRENTDATE)
                            when 1 then DATEADD(mm, 2, @CURRENTDATE)
                            when 2 then DATEADD(mm, 3, @CURRENTDATE)
                            when 3 then DATEADD(mm, 4, @CURRENTDATE)
                            when 4 then DATEADD(mm, 5, @CURRENTDATE)
                            when 5 then DATEADD(mm, 6, @CURRENTDATE)
                        end
                    when 1 then NULL
                end

                if @APPLYTOCODE = 0 -- All users

                    begin
                        insert into @APPUSERLIST(CONSTITUENTID, APPUSERID, USERSID) 
                            select 
                                CONSTITUENT.ID, 
                                APPUSER.ID,
                                APPUSER.USERSID
                            from
                                dbo.CONSTITUENT
                                inner join dbo.APPUSER on CONSTITUENT.ID = APPUSER.CONSTITUENTID
                            where
                                CONSTITUENT.ISORGANIZATION = 0
                            order by 
                                CONSTITUENT.ID;                                    
                    end
                else if @APPLYTOCODE = 1 --Selected users

                    begin
                        declare @APPUSERS TABLE (ID UNIQUEIDENTIFIER NOT NULL PRIMARY KEY);
                        INSERT INTO @APPUSERS (ID) select ID from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@APPUSERIDSETREGISTERID);

                        insert into @APPUSERLIST(CONSTITUENTID, APPUSERID, USERSID) 
                            select 
                                CONSTITUENT.ID, 
                                APPUSER.ID,
                                APPUSER.USERSID 
                            from
                                dbo.CONSTITUENT
                                inner join dbo.APPUSER on APPUSER.CONSTITUENTID = CONSTITUENT.ID
                                inner join @APPUSERS as APPUSERSELECTION on APPUSERSELECTION.ID = APPUSER.ID
                            where
                                CONSTITUENT.ISORGANIZATION = 0
                            order by 
                                CONSTITUENT.ID;
                    end
                else if @APPLYTOCODE = 2 -- Specific user

                    begin
                        insert into @APPUSERLIST(CONSTITUENTID, APPUSERID, USERSID) 
                            select 
                                CONSTITUENT.ID, 
                                @SPECIFICAPPUSERID,
                                (select APPUSER.USERSID from dbo.APPUSER where APPUSER.ID = @SPECIFICAPPUSERID)
                            from
                                dbo.CONSTITUENT
                                inner join dbo.APPUSER on CONSTITUENT.ID = APPUSER.CONSTITUENTID 
                            where
                                APPUSER.ID = @SPECIFICAPPUSERID and CONSTITUENT.ISORGANIZATION = 0 
                            order by 
                                CONSTITUENT.ID;
                    end                            

                /* Return interactions owned by our appusers that satisfy the criteria and have not been added to Exchange or where the information has been updated since the last run */
                select 
                    INTERACTION.ID, 
                    dbo.UFN_CONSTITUENT_BUILDNAME(INTERACTION.CONSTITUENTID) as CONSTITUENTNAME, 
                    INTERACTION.OBJECTIVE as SUBJECT, 
                    INTERACTION.CONSTITUENTID, 
                    APPUSERLIST.APPUSERID, 
                    APPUSERLIST.USERSID, 
                    INTERACTION.EXPECTEDDATE,                                   
                    coalesce(EXCHANGEUSER.WATERMARK,'') as WATERMARK,
                    EXCHANGESERVERAPPUSER.EMAILADDRESS,
                    coalesce(EXCHANGESERVERAPPUSER.IDENTIFIERTYPECODE,0) as IDENTIFIERTYPECODE,
                    coalesce(EXCHANGESERVERAPPUSER.EXCHANGESERVERID, (select EXCHANGESERVER.ID from dbo.EXCHANGESERVER where ISDEFAULTSERVER = 1)) as EXCHANGESERVERID    
                from
                    @APPUSERLIST AS APPUSERLIST
                    inner join dbo.INTERACTION on INTERACTION.FUNDRAISERID = APPUSERLIST.CONSTITUENTID
                    left join dbo.EXCHANGEUSER on APPUSERLIST.APPUSERID = EXCHANGEUSER.APPUSERID
                    left join dbo.EXCHANGESERVERAPPUSER on APPUSERLIST.APPUSERID = EXCHANGESERVERAPPUSER.APPUSERID
                where
                    (INTERACTION.DATECHANGED > @LASTRUNON or @LASTRUNON is null) and
                    (
                        (
                            (@INTERACTIONFILTERCODE in (0,2)) and INTERACTION.STATUSCODE = @PENDINGSTATUS
                        ) 
                        or
                        (
                            (@INTERACTIONFILTERCODE in (1,2)) and (PROSPECTPLANID is not NULL)
                        )
                    ) 
                    and 
                    (
                        (@EXPECTEDDATE is null) or (INTERACTION.EXPECTEDDATE <= @EXPECTEDDATE)
                    );