UFN_ADDRESSPROCESS_EMAILPREFERENCES

Returns email addresses according to email preference settings.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@MAILTYPE tinyint IN
@PARAMETERSETID uniqueidentifier IN

Definition

Copy


CREATE function dbo.[UFN_ADDRESSPROCESS_EMAILPREFERENCES]
(
  @MAILTYPE tinyint,
  @PARAMETERSETID uniqueidentifier
)
returns table
as
return (
  select
    MP.CONSTITUENTID,
    E.EMAILADDRESS,
    null as CONTACTID
  from dbo.MAILPREFERENCE MP
  inner join dbo.CONSTITUENT C on MP.CONSTITUENTID = C.ID
  inner join dbo.EMAILADDRESS E on ((MP.USEPRIMARYEMAIL = 0 and MP.EMAILADDRESSID = E.ID) or (MP.CONSTITUENTID = E.CONSTITUENTID and MP.USEPRIMARYEMAIL = 1 and E.ISPRIMARY = 1))
  where MP.SENDMAIL = 1
  and MP.DELIVERYMETHODCODE = 1
  and MP.MAILTYPECODE = @MAILTYPE
  and E.DONOTEMAIL = 0
  and
  (
    (case @MAILTYPE
      when 0 then ACKNOWLEDGEMENTID
      when 3 then CORRESPONDENCEID
      when 4 then PLEDGEREMINDERID
      when 8 then PURPOSEID
      else null
     end) = @PARAMETERSETID
    or 
    (
      (case @MAILTYPE
        when 0 then ACKNOWLEDGEMENTID
        when 3 then CORRESPONDENCEID
        when 4 then PLEDGEREMINDERID
        when 8 then PURPOSEID
        else null
       end) is null
      and not exists(select *
                     from dbo.MAILPREFERENCE 
                     where (case @MAILTYPE
                             when 0 then ACKNOWLEDGEMENTID
                             when 3 then CORRESPONDENCEID
                             when 4 then PLEDGEREMINDERID
                             when 8 then PURPOSEID
                             else null
                            end) = @PARAMETERSETID
                     and CONSTITUENTID = MP.CONSTITUENTID)
      -- only consider correspondence codes when there isn't a specific process preference

      and
      (@MAILTYPE <> 3 or
        (@MAILTYPE = 3 and
          (
            (
              MP.CORRESPONDENCECODEID is null and
              not exists(select * from dbo.MAILPREFERENCE where CORRESPONDENCECODEID = (select CORRESPONDENCECODEID from dbo.CORRESPONDENCEPROCESS where ID = @PARAMETERSETID) and CONSTITUENTID = MP.CONSTITUENTID)
            )
            or
            (
              MP.CORRESPONDENCECODEID = (select CORRESPONDENCECODEID from dbo.CORRESPONDENCEPROCESS where ID = @PARAMETERSETID) and
              not exists(select * from dbo.MAILPREFERENCE where CORRESPONDENCEID = @PARAMETERSETID and CONSTITUENTID = MP.CONSTITUENTID)
            )
          )
        )
      )
    )
  )
  and
  (@MAILTYPE <> 1 or
    (@MAILTYPE = 1 and
      (
        MP.BUSINESSUNITCODEID is null and
        MP.CATEGORYCODEID is null and
        MP.SITEID is null and
        not exists(select *
                   from dbo.MAILPREFERENCE sub, dbo.APPEAL
                   left join dbo.APPEALBUSINESSUNIT AB on AB.APPEALID = APPEAL.ID
                   where APPEAL.ID = @PARAMETERSETID and sub.ID <> MP.ID
                   and sub.CONSTITUENTID = MP.CONSTITUENTID
                   and ((sub.SITEID = APPEAL.SITEID and sub.CATEGORYCODEID = APPEAL.APPEALCATEGORYCODEID and sub.BUSINESSUNITCODEID = AB.BUSINESSUNITCODEID)
                     or (sub.SITEID is null and sub.CATEGORYCODEID = APPEAL.APPEALCATEGORYCODEID and sub.BUSINESSUNITCODEID = AB.BUSINESSUNITCODEID)
                     or (sub.SITEID = APPEAL.SITEID and sub.CATEGORYCODEID is null and sub.BUSINESSUNITCODEID = AB.BUSINESSUNITCODEID)
                     or (sub.SITEID = APPEAL.SITEID and sub.CATEGORYCODEID = APPEAL.APPEALCATEGORYCODEID and sub.BUSINESSUNITCODEID is null)
                     or (sub.SITEID is null and sub.CATEGORYCODEID is null and sub.BUSINESSUNITCODEID = AB.BUSINESSUNITCODEID)
                     or (sub.SITEID is null and sub.CATEGORYCODEID = APPEAL.APPEALCATEGORYCODEID and sub.BUSINESSUNITCODEID is null)
                     or (sub.SITEID = APPEAL.SITEID and sub.CATEGORYCODEID is null and sub.BUSINESSUNITCODEID is null)))
      )
      or
      (
        (MP.BUSINESSUNITCODEID in (select BUSINESSUNITCODEID from dbo.APPEALBUSINESSUNIT where APPEALID = @PARAMETERSETID) or MP.BUSINESSUNITCODEID is null) and
        (MP.CATEGORYCODEID = (select APPEALCATEGORYCODEID from dbo.APPEAL where ID = @PARAMETERSETID) or MP.CATEGORYCODEID is null) and
        (MP.SITEID = (select SITEID from dbo.APPEAL where ID = @PARAMETERSETID) or MP.SITEID is null) and
        not (MP.CATEGORYCODEID is null and MP.SITEID is null and MP.BUSINESSUNITCODEID is null)
      )
    )
  )
  and
  (@MAILTYPE <> 2 or
    (@MAILTYPE = 2 and
      (
        (MP.EVENTCATEGORYCODEID is null and MP.SITEID is null) and
        not exists(select *
                   from dbo.MAILPREFERENCE sub, dbo.INVITATION I 
                   inner join dbo.EVENT E on I.EVENTID = E.ID 
                   left join dbo.EVENTSITE on EVENTSITE.EVENTID = E.ID
                   where I.ID = @PARAMETERSETID and sub.ID <> MP.ID
                   and sub.CONSTITUENTID = MP.CONSTITUENTID 
                   and ((sub.SITEID = EVENTSITE.SITEID and sub.EVENTCATEGORYCODEID = E.EVENTCATEGORYCODEID)
                     or (sub.SITEID is null and sub.EVENTCATEGORYCODEID = E.EVENTCATEGORYCODEID)
                     or (sub.EVENTCATEGORYCODEID is null and sub.SITEID = EVENTSITE.SITEID))
                  )
      )
      or
      (
        (MP.EVENTCATEGORYCODEID = (select EVENTCATEGORYCODEID from dbo.INVITATION I inner join dbo.EVENT E on I.EVENTID = E.ID where I.ID = @PARAMETERSETID) or MP.EVENTCATEGORYCODEID is null) and
        (MP.SITEID in (select SITEID from dbo.INVITATION I inner join dbo.EVENTSITE E on I.EVENTID = E.EVENTID where I.ID = @PARAMETERSETID) or MP.SITEID is null) and
        not (MP.EVENTCATEGORYCODEID is null and MP.SITEID is null)
      )
    )
  )
  and not exists(select * from dbo.MAILPREFERENCEORGCONTACTTYPE where MAILPREFERENCEID = MP.ID)
  and not exists(select * from dbo.MAILPREFERENCEGROUPCONTACT where MAILPREFERENCEID = MP.ID)

  union all

  --grab contact addresses

  select distinct
    MP.CONSTITUENTID,
    isnull(CA.EMAILADDRESS, OA.EMAILADDRESS) as EMAILADDRESS,
    R.RECIPROCALCONSTITUENTID as CONTACTID
  from dbo.MAILPREFERENCEORGCONTACTTYPE 
  inner join dbo.MAILPREFERENCE MP on MAILPREFERENCEORGCONTACTTYPE.MAILPREFERENCEID = MP.ID
  inner join dbo.CONSTITUENT ORG on MP.CONSTITUENTID = ORG.ID
  left join dbo.EMAILADDRESS OA on ORG.ID = OA.CONSTITUENTID and OA.ISPRIMARY = 1 and OA.DONOTEMAIL = 0
  inner join dbo.RELATIONSHIP R on R.RELATIONSHIPCONSTITUENTID = ORG.ID
  left join dbo.EMAILADDRESS CA on CA.RELATIONSHIPID = R.ID and CA.DONOTEMAIL = 0
  where MP.SENDMAIL = 1
  and MP.DELIVERYMETHODCODE = 1
  and MP.MAILTYPECODE = @MAILTYPE
  and @MAILTYPE <> 5  --For receipts, only return the first contact

  and
  (
    (case @MAILTYPE
      when 0 then ACKNOWLEDGEMENTID
      when 3 then CORRESPONDENCEID
      when 4 then PLEDGEREMINDERID
      when 8 then PURPOSEID
      else null
     end) = @PARAMETERSETID
    or 
    (
      (case @MAILTYPE
        when 0 then ACKNOWLEDGEMENTID
        when 3 then CORRESPONDENCEID
        when 4 then PLEDGEREMINDERID
        when 8 then PURPOSEID
        else null
       end) is null
      and not exists(select *
                     from dbo.MAILPREFERENCE 
                     where (case @MAILTYPE
                             when 0 then ACKNOWLEDGEMENTID
                             when 3 then CORRESPONDENCEID
                             when 4 then PLEDGEREMINDERID
                             when 8 then PURPOSEID
                             else null
                            end) = @PARAMETERSETID
                     and CONSTITUENTID = MP.CONSTITUENTID)
      -- only consider correspondence codes when there isn't a specific process preference

      and
      (@MAILTYPE <> 3 or
        (@MAILTYPE = 3 and
          (
            (
              MP.CORRESPONDENCECODEID is null and
              not exists(select * from dbo.MAILPREFERENCE where CORRESPONDENCECODEID = (select CORRESPONDENCECODEID from dbo.CORRESPONDENCEPROCESS where ID = @PARAMETERSETID) and CONSTITUENTID = MP.CONSTITUENTID)
            )
            or
            (
              MP.CORRESPONDENCECODEID = (select CORRESPONDENCECODEID from dbo.CORRESPONDENCEPROCESS where ID = @PARAMETERSETID) and
              not exists(select * from dbo.MAILPREFERENCE where CORRESPONDENCEID = @PARAMETERSETID and CONSTITUENTID = MP.CONSTITUENTID)
            )
          )
        )
      )
    )
  )
  and
  (@MAILTYPE <> 1 or
    (@MAILTYPE = 1 and
      (
        MP.BUSINESSUNITCODEID is null and
        MP.CATEGORYCODEID is null and
        MP.SITEID is null and
        not exists(select *
                   from dbo.MAILPREFERENCE sub, dbo.APPEAL
                   left join dbo.APPEALBUSINESSUNIT AB on AB.APPEALID = APPEAL.ID
                   where APPEAL.ID = @PARAMETERSETID and sub.ID <> MP.ID
                   and sub.CONSTITUENTID = MP.CONSTITUENTID
                   and ((sub.SITEID = APPEAL.SITEID and sub.CATEGORYCODEID = APPEAL.APPEALCATEGORYCODEID and sub.BUSINESSUNITCODEID = AB.BUSINESSUNITCODEID)
                     or (sub.SITEID is null and sub.CATEGORYCODEID = APPEAL.APPEALCATEGORYCODEID and sub.BUSINESSUNITCODEID = AB.BUSINESSUNITCODEID)
                     or (sub.SITEID = APPEAL.SITEID and sub.CATEGORYCODEID is null and sub.BUSINESSUNITCODEID = AB.BUSINESSUNITCODEID)
                     or (sub.SITEID = APPEAL.SITEID and sub.CATEGORYCODEID = APPEAL.APPEALCATEGORYCODEID and sub.BUSINESSUNITCODEID is null)
                     or (sub.SITEID is null and sub.CATEGORYCODEID is null and sub.BUSINESSUNITCODEID = AB.BUSINESSUNITCODEID)
                     or (sub.SITEID is null and sub.CATEGORYCODEID = APPEAL.APPEALCATEGORYCODEID and sub.BUSINESSUNITCODEID is null)
                     or (sub.SITEID = APPEAL.SITEID and sub.CATEGORYCODEID is null and sub.BUSINESSUNITCODEID is null)))
      )
      or
      (
        (MP.BUSINESSUNITCODEID in (select BUSINESSUNITCODEID from dbo.APPEALBUSINESSUNIT where APPEALID = @PARAMETERSETID) or MP.BUSINESSUNITCODEID is null) and
        (MP.CATEGORYCODEID = (select APPEALCATEGORYCODEID from dbo.APPEAL where ID = @PARAMETERSETID) or MP.CATEGORYCODEID is null) and
        (MP.SITEID = (select SITEID from dbo.APPEAL where ID = @PARAMETERSETID) or MP.SITEID is null) and
        not (MP.CATEGORYCODEID is null and MP.SITEID is null and MP.BUSINESSUNITCODEID is null)
      )
    )
  )
  and
  (@MAILTYPE <> 2 or
    (@MAILTYPE = 2 and
      (
        (MP.EVENTCATEGORYCODEID is null and MP.SITEID is null) and
        not exists(select *
                   from dbo.MAILPREFERENCE sub, dbo.INVITATION I 
                   inner join dbo.EVENT E on I.EVENTID = E.ID 
                   left join dbo.EVENTSITE on EVENTSITE.EVENTID = E.ID
                   where I.ID = @PARAMETERSETID and sub.ID <> MP.ID
                   and sub.CONSTITUENTID = MP.CONSTITUENTID 
                   and ((sub.SITEID = EVENTSITE.SITEID and sub.EVENTCATEGORYCODEID = E.EVENTCATEGORYCODEID)
                     or (sub.SITEID is null and sub.EVENTCATEGORYCODEID = E.EVENTCATEGORYCODEID)
                     or (sub.EVENTCATEGORYCODEID is null and sub.SITEID = EVENTSITE.SITEID)))
      )
      or
      (
        (MP.EVENTCATEGORYCODEID = (select EVENTCATEGORYCODEID from dbo.INVITATION I inner join dbo.EVENT E on I.EVENTID = E.ID where I.ID = @PARAMETERSETID) or MP.EVENTCATEGORYCODEID is null) and
        (MP.SITEID in (select SITEID from dbo.INVITATION I inner join dbo.EVENTSITE E on I.EVENTID = E.EVENTID where I.ID = @PARAMETERSETID) or MP.SITEID is null) and
        not (MP.EVENTCATEGORYCODEID is null and MP.SITEID is null)
      )
    )
  )
  and R.ISCONTACT = 1
  and 
  (
    (R.CONTACTTYPECODEID = MAILPREFERENCEORGCONTACTTYPE.CONTACTTYPECODEID)
    or 
    (R.ISPRIMARYCONTACT = 1 and MAILPREFERENCEORGCONTACTTYPE.USEPRIMARYCONTACT = 1)
  )

  union all

  --For receipts, only grab the first contact found

  select
    MP.CONSTITUENTID,
    isnull(MPO.EMAILADDRESS, OA.EMAILADDRESS) as EMAILADDRESS,
    MPO.RECIPROCALCONSTITUENTID as CONTACTID
  from dbo.MAILPREFERENCE MP
  left join dbo.EMAILADDRESS OA on OA.CONSTITUENTID = MP.CONSTITUENTID and OA.ISPRIMARY = 1 and OA.DONOTEMAIL = 0
  cross apply
  (
    select top 1
      RELATIONSHIP.RECIPROCALCONSTITUENTID,
      E.EMAILADDRESS
    from dbo.MAILPREFERENCEORGCONTACTTYPE APO
    inner join dbo.RELATIONSHIP on APO.CONTACTTYPECODEID = RELATIONSHIP.CONTACTTYPECODEID or (APO.USEPRIMARYCONTACT = 1 and RELATIONSHIP.ISPRIMARYCONTACT = 1)
    inner join dbo.CONTACTTYPECODE CTC on CTC.ID = RELATIONSHIP.CONTACTTYPECODEID
    inner join dbo.EMAILADDRESS E on RELATIONSHIP.ID = E.RELATIONSHIPID
    where APO.MAILPREFERENCEID = MP.ID
    and RELATIONSHIP.RELATIONSHIPCONSTITUENTID = MP.CONSTITUENTID
    and RELATIONSHIP.ISCONTACT = 1
    and E.DONOTEMAIL = 0
    order by APO.USEPRIMARYCONTACT desc, CTC.[DESCRIPTION] asc
  ) MPO
  where MP.SENDMAIL = 1
  and MP.DELIVERYMETHODCODE = 1
  and MP.MAILTYPECODE = @MAILTYPE
  and @MAILTYPE = 5

  union all

  -- grab group member addresses

  select
    MP.CONSTITUENTID,
    E.EMAILADDRESS,
    null as CONTACTID
  from dbo.MAILPREFERENCEGROUPCONTACT GC
  inner join dbo.MAILPREFERENCE MP on GC.MAILPREFERENCEID = MP.ID
  inner join dbo.CONSTITUENT C on MP.CONSTITUENTID = C.ID
  inner join dbo.GROUPMEMBER GM on (GM.GROUPID=C.ID and (GC.CONSTITUENTID=GM.MEMBERID or (GC.USEPRIMARYCONTACT=1 and GM.ISPRIMARY=1)))
  inner join dbo.EMAILADDRESS E on (GM.MEMBERID = E.CONSTITUENTID and (GC.EMAILADDRESSID = E.ID or (GC.USEPRIMARYEMAIL = 1 and E.ISPRIMARY = 1)))
  where MP.SENDMAIL = 1
  and MP.DELIVERYMETHODCODE = 1
  and MP.MAILTYPECODE = @MAILTYPE
  and E.DONOTEMAIL = 0
  and
  (
    (case @MAILTYPE
      when 0 then ACKNOWLEDGEMENTID
      when 3 then CORRESPONDENCEID
      when 4 then PLEDGEREMINDERID
      when 8 then PURPOSEID
      else null
     end) = @PARAMETERSETID
    or 
    (case @MAILTYPE
      when 0 then ACKNOWLEDGEMENTID
      when 3 then CORRESPONDENCEID
      when 4 then PLEDGEREMINDERID
      when 8 then PURPOSEID
      else null
     end) is null
  )
  and
  (@MAILTYPE <> 3 or
    (@MAILTYPE = 3 and
      (
        (
          MP.CORRESPONDENCECODEID is null and
          not exists(select * from dbo.MAILPREFERENCE where CORRESPONDENCECODEID = (select CORRESPONDENCECODEID from dbo.CORRESPONDENCEPROCESS where ID = @PARAMETERSETID) and CONSTITUENTID = MP.CONSTITUENTID)
        )
        or
        (
          MP.CORRESPONDENCECODEID = (select CORRESPONDENCECODEID from dbo.CORRESPONDENCEPROCESS where ID = @PARAMETERSETID) and
          not exists(select * from dbo.MAILPREFERENCE where CORRESPONDENCEID = @PARAMETERSETID and CONSTITUENTID = MP.CONSTITUENTID)
        )
      )
    )
  )
);