USP_DATALIST_APPEALBBISEMAIL

Displays Appeal BBIS Email Summary.

Parameters

Parameter Parameter Type Mode Description
@APPEALID uniqueidentifier IN Input parameter indicating the context ID for the data list.
@MAILDATEFROM datetime IN From
@MAILDATETO datetime IN To

Definition

Copy


CREATE procedure dbo.USP_DATALIST_APPEALBBISEMAIL (
    @APPEALID uniqueidentifier,
    @MAILDATEFROM datetime = null,
    @MAILDATETO datetime = null
)
as
  set nocount on;

    declare @BBISEMAILS table (
    EMAILID         integer,
    EMAILTEMPLATEID integer,
    NAME            nvarchar(510),
    RECIPIENTS      integer,
    CLICKS          integer,
    OPENS           integer,
    SENDDATE        datetime,
    URL             nvarchar(2047),
    TOTALSENT       integer);

  insert into @BBISEMAILS
              (EMAILID, EMAILTEMPLATEID, RECIPIENTS, CLICKS, OPENS, SENDDATE, NAME, URL, TOTALSENT)
  select 
    BBNC.EMAILID,
    BBNC.EMAILTEMPLATEID,
    count(BBNC.ID),
    sum(cast(BBNC.CLICKEDTHROUGH as integer)),
    sum(cast(BBNC.OPENED as integer)),
    BBNC.SENTDATE,
    BBNC.EMAILNAME,
    BBNC.URL,
  (count(BBNC.ID) - (sum(cast(BBNC.BOUNCED as integer)) + sum(cast(BBNC.SPAMCOMPLAINT as integer))))

  from   
  dbo.UFN_NETCOMMUNITYEMAILJOBRECIPIENT_EMAIL() AS BBNC
  left outer join dbo.BBNCAPPEALIDMAP on BBNC.APPEALID = BBNCAPPEALIDMAP.ID
    left outer join dbo.APPEAL on BBNCAPPEALIDMAP.APPEALID = APPEAL.ID
  where  
  APPEAL.ID = @APPEALID
    and 
    (  
    @MAILDATEFROM is null 
    or ( BBNC.SENTDATE is not null and BBNC.SENTDATE >= @MAILDATEFROM )
        or ( BBNC.SENTDATE is null
     )
     and 
     ( 
    @MAILDATETO is null
        or ( BBNC.SENTDATE is not null and BBNC.SENTDATE <= @MAILDATETO )
        or ( BBNC.SENTDATE is null
      )
      --and email.id <> 206 

  group by 
  BBNC.EMAILID,
    BBNC.SENTDATE,
    BBNC.EMAILNAME,
    BBNC.EMAILTEMPLATEID,
    BBNC.URL

declare @BASECURRENCYID uniqueidentifier
declare @TRANSACTIONCURRENCY uniqueidentifier
declare @DECIMALDIGITS tinyint
declare @ROUNDINGTYPECODE tinyint

select @BASECURRENCYID = basecurrencyid from APPEAL where id = @appealid
set @DECIMALDIGITS = 2
set @ROUNDINGTYPECODE = 0
--same as basecurrency

declare @ALLTRANSACTIONS table
(
  EMAILID integer,
  GIFTAMOUNT money
)

--==================================DONATION TRANSACTIONS===============================================

insert into @ALLTRANSACTIONS (EMAILID, GIFTAMOUNT)
select e.emailid, dbo.UFN_CURRENCY_ROUND(giftamount,2,0) from 
@BBISEMAILS e
left join DONATIONTRANSACTIONS on DONATIONTRANSACTIONS.EmailID = e.emailid 
where 
dbo.UFN_GETCURRENCY_BYSHELBYCODE(GiftCurrencyType) = @BASECURRENCYID
AND DONATIONTRANSACTIONS.[Status] = 1 AND DONATIONTRANSACTIONS.IsDeleted = 0

insert into @ALLTRANSACTIONS (EMAILID, GIFTAMOUNT)
select
  e.emailid, 
  case
    when [LATESTORGANIZATIONEXCHANGERATE].RATE is not null
      then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(giftamount, [LATESTORGANIZATIONEXCHANGERATE].RATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
    when [LATESTINVERSEORGANIZATIONEXCHANGERATE].RATE is not null
      then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(giftamount, cast((1 / [LATESTINVERSEORGANIZATIONEXCHANGERATE].RATE) as decimal(20,8))), @DECIMALDIGITS, @ROUNDINGTYPECODE)
    else 0
  end [AMOUNTINCURRENCY]
from 
  @BBISEMAILS e
left join DONATIONTRANSACTIONS on DONATIONTRANSACTIONS.EmailID = e.emailid 
outer apply
(
  select
    RATE
  from
    dbo.CURRENCYEXCHANGERATE
  where
    CURRENCYEXCHANGERATE.FROMCURRENCYID = dbo.UFN_GETCURRENCY_BYSHELBYCODE(GiftCurrencyType)
    and CURRENCYEXCHANGERATE.TOCURRENCYID = @BASECURRENCYID
    and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
    and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
    and dateadd(ms, 86399996, DateAdded) >= CURRENCYEXCHANGERATE.ASOFDATESDTZ
        and dateadd(ms, 86399996, DateAdded) <= CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ
) LATESTORGANIZATIONEXCHANGERATE
outer apply
(
  select
    RATE
  from
    dbo.CURRENCYEXCHANGERATE
  where
    CURRENCYEXCHANGERATE.FROMCURRENCYID = dbo.UFN_GETCURRENCY_BYSHELBYCODE(GiftCurrencyType) 
    and CURRENCYEXCHANGERATE.TOCURRENCYID =@BASECURRENCYID
    and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
    and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
    and dateadd(ms, 86399996, DateAdded) >= CURRENCYEXCHANGERATE.ASOFDATESDTZ
        and dateadd(ms, 86399996, DateAdded) <= CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ
) LATESTINVERSEORGANIZATIONEXCHANGERATE
where 
dbo.UFN_GETCURRENCY_BYSHELBYCODE(GiftCurrencyType) <> @BASECURRENCYID
AND DONATIONTRANSACTIONS.[Status] = 1 AND DONATIONTRANSACTIONS.IsDeleted = 0

--==================================EVENT TRANSACTIONS===============================================

insert into @ALLTRANSACTIONS (EMAILID, GIFTAMOUNT)
select e.emailid, dbo.UFN_CURRENCY_ROUND(giftamount,2,0) from 
@BBISEMAILS e
left join EVENTTRANSACTIONS on EVENTTRANSACTIONS.EmailID = e.emailid 
where 
dbo.UFN_GETCURRENCY_BYSHELBYCODE(GiftCurrencyType) = @BASECURRENCYID
AND EVENTTRANSACTIONS.[Status] = 1 AND EVENTTRANSACTIONS.IsDeleted = 0

insert into @ALLTRANSACTIONS (EMAILID, GIFTAMOUNT)
select
  e.emailid, 
  case
    when [LATESTORGANIZATIONEXCHANGERATE].RATE is not null
      then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(giftamount, [LATESTORGANIZATIONEXCHANGERATE].RATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
    when [LATESTINVERSEORGANIZATIONEXCHANGERATE].RATE is not null
      then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(giftamount, cast((1 / [LATESTINVERSEORGANIZATIONEXCHANGERATE].RATE) as decimal(20,8))), @DECIMALDIGITS, @ROUNDINGTYPECODE)
    else 0
  end [AMOUNTINCURRENCY]
from 
  @BBISEMAILS e
left join EVENTTRANSACTIONS on EVENTTRANSACTIONS.EmailID = e.emailid 
outer apply
(
  select
    RATE
  from
    dbo.CURRENCYEXCHANGERATE
  where
    CURRENCYEXCHANGERATE.FROMCURRENCYID = dbo.UFN_GETCURRENCY_BYSHELBYCODE(GiftCurrencyType)
    and CURRENCYEXCHANGERATE.TOCURRENCYID = @BASECURRENCYID
    and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
    and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
    and dateadd(ms, 86399996, DateAdded) >= CURRENCYEXCHANGERATE.ASOFDATESDTZ
        and dateadd(ms, 86399996, DateAdded) <= CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ
) LATESTORGANIZATIONEXCHANGERATE
outer apply
(
  select
    RATE
  from
    dbo.CURRENCYEXCHANGERATE
  where
    CURRENCYEXCHANGERATE.FROMCURRENCYID = dbo.UFN_GETCURRENCY_BYSHELBYCODE(GiftCurrencyType) 
    and CURRENCYEXCHANGERATE.TOCURRENCYID =@BASECURRENCYID
    and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
    and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
    and dateadd(ms, 86399996, DateAdded) >= CURRENCYEXCHANGERATE.ASOFDATESDTZ
        and dateadd(ms, 86399996, DateAdded) <= CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ
) LATESTINVERSEORGANIZATIONEXCHANGERATE
where 
dbo.UFN_GETCURRENCY_BYSHELBYCODE(GiftCurrencyType) <> @BASECURRENCYID
AND EVENTTRANSACTIONS.[Status] = 1 AND EVENTTRANSACTIONS.IsDeleted = 0

--==================================MEMBERSHIP TRANSACTIONS===============================================

insert into @ALLTRANSACTIONS (EMAILID, GIFTAMOUNT)
select e.emailid, dbo.UFN_CURRENCY_ROUND(giftamount,2,0) from 
@BBISEMAILS e
left join MEMBERSHIPTRANSACTIONS on MEMBERSHIPTRANSACTIONS.EmailID = e.emailid 
where 
dbo.UFN_GETCURRENCY_BYSHELBYCODE(GiftCurrencyType) = @BASECURRENCYID
AND MEMBERSHIPTRANSACTIONs.[Status] = 1 AND MEMBERSHIPTRANSACTIONs.IsDeleted = 0

insert into @ALLTRANSACTIONS (EMAILID, GIFTAMOUNT)
select
  e.emailid, 
  case
    when [LATESTORGANIZATIONEXCHANGERATE].RATE is not null
      then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(giftamount, [LATESTORGANIZATIONEXCHANGERATE].RATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
    when [LATESTINVERSEORGANIZATIONEXCHANGERATE].RATE is not null
      then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(giftamount, cast((1 / [LATESTINVERSEORGANIZATIONEXCHANGERATE].RATE) as decimal(20,8))), @DECIMALDIGITS, @ROUNDINGTYPECODE)
    else 0
  end [AMOUNTINCURRENCY]
from 
@BBISEMAILS e
left join MEMBERSHIPTRANSACTIONs on MEMBERSHIPTRANSACTIONs.EmailID = e.emailid 
outer apply
(
  select
    RATE
  from
    dbo.CURRENCYEXCHANGERATE
  where
    CURRENCYEXCHANGERATE.FROMCURRENCYID = dbo.UFN_GETCURRENCY_BYSHELBYCODE(GiftCurrencyType)
    and CURRENCYEXCHANGERATE.TOCURRENCYID = @BASECURRENCYID
    and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
    and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
    and dateadd(ms, 86399996, DateAdded) >= CURRENCYEXCHANGERATE.ASOFDATESDTZ
        and dateadd(ms, 86399996, DateAdded) <= CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ
) LATESTORGANIZATIONEXCHANGERATE
outer apply
(
  select
    RATE
  from
    dbo.CURRENCYEXCHANGERATE
  where
    CURRENCYEXCHANGERATE.FROMCURRENCYID = dbo.UFN_GETCURRENCY_BYSHELBYCODE(GiftCurrencyType)
    and CURRENCYEXCHANGERATE.TOCURRENCYID = @BASECURRENCYID
    and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
    and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
    and dateadd(ms, 86399996, DateAdded) >= CURRENCYEXCHANGERATE.ASOFDATESDTZ
        and dateadd(ms, 86399996, DateAdded) <= CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ
) LATESTINVERSEORGANIZATIONEXCHANGERATE
where 
dbo.UFN_GETCURRENCY_BYSHELBYCODE(GiftCurrencyType) <> @BASECURRENCYID
AND MEMBERSHIPTRANSACTIONs.[Status] = 1 AND MEMBERSHIPTRANSACTIONs.IsDeleted = 0

declare @ALLRESPONSES table(EMAILID integer, UNIQUERESPONSES integer, RESPONSES integer );

  insert into @ALLRESPONSES
              (EMAILID, UNIQUERESPONSES, RESPONSES)
  select distinct E.EMAILID,
                  case
                    when count(distinct DT.EMAILJOBRECIPIENTID) is null then 0
                    else count(distinct DT.EMAILJOBRECIPIENTID)
                  end,
                  case
                    when count(DT.EMAILJOBRECIPIENTID) is null then 0
                    else count(DT.EMAILJOBRECIPIENTID)
                  end
  from   @bbisemails E
         left join DONATIONTRANSACTIONS DT on E.EMAILID = DT.EMAILID
  group  by E.EMAILID

  insert into @ALLRESPONSES
              (EMAILID, UNIQUERESPONSES, RESPONSES)
  select distinct E.EMAILID,
                  case
                    when count(distinct ET.EMAILJOBRECIPIENTID) is null then 0
                    else count(distinct ET.EMAILJOBRECIPIENTID)
                  end,
                  case
                    when count(ET.EMAILJOBRECIPIENTID) is null then 0
                    else count(ET.EMAILJOBRECIPIENTID)
                  end
  from   @bbisemails E
         left join EVENTTRANSACTIONS ET on E.EMAILID = ET.EMAILID
  group  by E.EMAILID

  insert into @ALLRESPONSES
              (EMAILID, UNIQUERESPONSES, RESPONSES)
  select distinct E.EMAILID,
                  case
                    when count(distinct MT.EMAILJOBRECIPIENTID) is null then 0
                    else count(distinct MT.EMAILJOBRECIPIENTID)
                  end,
                  case
                    when count(MT.EMAILJOBRECIPIENTID) is null then 0
                    else count(MT.EMAILJOBRECIPIENTID)
                  end
  from   @bbisemails E
         left join MEMBERSHIPTRANSACTIONS MT on E.EMAILID = MT.EMAILID
  group  by E.EMAILID

declare @TMPRESPONSE table (EMAILID integer, RESPONSES integer, UNIQUERESPONSES integer)
insert into @TMPRESPONSE(EMAILID, RESPONSES,UNIQUERESPONSES)
select
EMAILID, SUM(responses), SUM(uniqueresponses)
from @ALLRESPONSES 
group by EMAILID


select 
 e.SENDDATE, 
  e.NAME as EMAILNAME, 
  --dbo.UFN_BBNC_URL() + 'adminpage.aspx?edit=3&eid=' + cast(E.EMAILID as nvarchar) + '&cid=' + cast(E.EMAILID as nvarchar) + '&ecatid=' + cast(E.EMAILTEMPLATEID as nvarchar) + '&ctid=84' as MEDIAURL,

  e.URL as MEDIAURL,
  E.RECIPIENTS as EMAILSSENT,
  r.UNIQUERESPONSES,
  case when E.RECIPIENTS = 0 then '0%'
    else replace(convert(varchar,convert(decimal(19,1),cast(r.UNIQUERESPONSES as numeric) / cast(e.RECIPIENTS as numeric) * 100)) + '%','.0','')
    end as RESPONSERATE,    
  r.RESPONSES,
  sum(giftamount) as TOTAL,
  case
    when ( r.RESPONSES ) = 0 then 0
    else convert(decimal(19,2),convert(numeric, SUM(GIFTAMOUNT)) / convert(numeric, r.RESPONSES))
  end as AVERAGE,
  case
    when E.RECIPIENTS = 0 or E.TOTALSENT = 0 then '0%'
  else
      replace(convert(varchar, convert(decimal(19,1), (cast(E.OPENS as numeric)/(cast(E.TOTALSENT as numeric)))* 100)) + '%','.0','')
  end as OPENRATE,
  e.CLICKS as CLICKTHROUGHS,
  e.EMAILID,
  @BASECURRENCYID
from 
  @BBISEMAILS e
  left join @ALLTRANSACTIONS t on e.EMAILID = t.EMAILID
  left join @TMPRESPONSE r on e.EMAILID = r.EMAILID 
group by e.EMAILID, e.SENDDATE, e.NAME, e.EMAILTEMPLATEID, e.URL, e.RECIPIENTS, e.CLICKs,r.RESPONSES,r.UNIQUERESPONSES, e.OPENS, e.TOTALSENT