USP_EXCHANGECALENDARSYNC_GETINTERACTIONLIST_2

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_2]
(
    @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 @INCLUDEPENDINGINTERACTIONS bit
  declare @INCLUDEPROSPECTPLANSTEPS bit
  declare @INCLUDEPENDINGSTEWARDSHIPSTEPS bit        
  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,
      @INCLUDEPENDINGINTERACTIONS = EXCHANGECALENDARSYNC.INCLUDEPENDINGINTERACTIONS,
  @INCLUDEPROSPECTPLANSTEPS = EXCHANGECALENDARSYNC.INCLUDEPROSPECTPLANSTEPS,
  @INCLUDEPENDINGSTEWARDSHIPSTEPS = EXCHANGECALENDARSYNC.INCLUDEPENDINGSTEWARDSHIPSTEPS
  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,
    case 
      when INTERACTION.PROSPECTPLANID is null then 0
      else 1 
    end as RECORDTYPE,
    null as CONTACTNAME,
    INTERACTION.EXPECTEDSTARTDATETIME,
    INTERACTION.EXPECTEDENDDATETIME,
    INTERACTION.ISALLDAYEVENT,
    (select name from TIMEZONEENTRY where TIMEZONEENTRY.ID = INTERACTION.TIMEZONEENTRYID) as TIMEZONE
  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.STATUSCODE in (0,1) and
    (INTERACTION.DATECHANGED > @LASTRUNON or @LASTRUNON is null) and
    (
      (@INCLUDEPENDINGINTERACTIONS = 1 and INTERACTION.STATUSCODE = @PENDINGSTATUS
      or
      (@INCLUDEPROSPECTPLANSTEPS = 1 and PROSPECTPLANID is not NULL)
    ) 
    and datediff(day, @CURRENTDATE, INTERACTION.EXPECTEDDATE) > = 0 -- Only get future interactions        

    and 
    (
      (@EXPECTEDDATE is null) or (INTERACTION.EXPECTEDDATE <= @EXPECTEDDATE)
    )

  union all

  select 
    STEP.ID, 
    CONSTITUENT.NAME as CONSTITUENTNAME, 
    STEP.OBJECTIVE as SUBJECT, 
    STEWARDSHIPPLAN.CONSTITUENTID, 
    APPUSERLIST.APPUSERID, 
    APPUSERLIST.USERSID, 
    STEP.TARGETDATE as 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,
    2 as RECORDTYPE,
    dbo.UFN_CONSTITUENT_BUILDNAME(STEP.CONTACTPERSONID) as CONTACTNAME,
    STEP.TARGETSTARTDATETIME,
    STEP.TARGETENDDATETIME,
    STEP.ISALLDAYEVENT,
    (select name from TIMEZONEENTRY where TIMEZONEENTRY.ID = STEP.TIMEZONEENTRYID) as TIMEZONE
  from @APPUSERLIST AS APPUSERLIST
  inner join dbo.STEWARDSHIPPLANSTEP STEP 
    on STEP.CONSTITUENTID = APPUSERLIST.CONSTITUENTID
  inner join dbo.STEWARDSHIPPLAN
    on STEWARDSHIPPLAN.ID = STEP.PLANID
  inner join dbo.CONSTITUENT
    on CONSTITUENT.ID = STEWARDSHIPPLAN.CONSTITUENTID
  left join dbo.EXCHANGEUSER 
    on APPUSERLIST.APPUSERID = EXCHANGEUSER.APPUSERID
  left join dbo.EXCHANGESERVERAPPUSER 
    on APPUSERLIST.APPUSERID = EXCHANGESERVERAPPUSER.APPUSERID
  where
    (STEP.DATECHANGED > @LASTRUNON or @LASTRUNON is null)
    and @INCLUDEPENDINGSTEWARDSHIPSTEPS = 1
    and STEP.STATUSCODE = 0            -- Pending Steps     

    and datediff(day, @CURRENTDATE, STEP.TARGETDATE) > = 0 -- Only get future steps            

    and (@EXPECTEDDATE is null or STEP.TARGETDATE <= @EXPECTEDDATE)