USP_GET_EMAILS_USAGE_TRACKING_DATA

Parameters

Parameter Parameter Type Mode Description
@LastProcessingDate datetime IN
@ProductName varchar(4) IN

Definition

Copy


    CREATE PROCEDURE dbo.USP_GET_EMAILS_USAGE_TRACKING_DATA (
        @LastProcessingDate DateTime,
        @ProductName varchar(4)
    )
    AS
    BEGIN

        DECLARE @OrganizationDetails NVARCHAR(400)
        DECLARE @UpperLimitDate DateTime

        SET @UpperLimitDate = DATEADD(DAY,-2,GETUTCDATE())

        SELECT @OrganizationDetails = CLARIFYSITEID,
               @OrganizationDetails = @OrganizationDetails + ' - '
                                      + INSTALLATIONNAME
        FROM   dbo.INSTALLATIONINFO;

        WITH
             --Get all distinct email link clicks for all Emails

             DISTINCT_EMAIL_CLICKS_CTE (EmailId, TotalDistinctClicks)
             AS (SELECT EMAIL.id,
                        Count(DISTINCT( STATS.EmailJobRecipientID )) AS TotalDistinctClicks
                 FROM   dbo.EMAILLINK
                        INNER JOIN dbo.EMAIL
                                ON EMAILLINK.EmailId = EMAIL.Id
                        LEFT OUTER JOIN dbo.SITEPAGES
                                ON SITEPAGES.Id = EMAILLINK.PId
                        LEFT OUTER JOIN dbo.STATS
                                ON (STATS.pageid = EMAILLINK.pid
                                    AND STATS.sourceid = EMAILLINK.emailid
                                    AND STATS.sourcetypeid = 1 -- 1 means source is email.

                                    AND EMAILLINK.PID IS NOT NULL )
                                    OR ( STATS.URL = EMAILLINK.URL
                                        AND STATS.sourceid = EMAILLINK.emailid
                                        AND STATS.sourcetypeid = 1 -- 1 means source is email.

                                        AND EMAILLINK.[URL] IS NOT NULL )
                                    OR ( STATS.DocumentId = EMAILLINK.DocumentID
                                        AND STATS.sourceid = EMAILLINK.emailid
                                        AND STATS.sourcetypeid = 0 -- 0 means source is page.

                                        AND EMAILLINK.[DocumentID] IS NOT NULL )
                 WHERE  EMAILLINK.EmailId = EMAIL.Id
                            AND EMAIL.Deleted = 0
                            AND EMAIL.Type NOT IN ( 1, 7, 15, 18
                            AND EMAIL.SendAfterDate >  @LastProcessingDate  
                        AND EMAIL.SendAfterDate < @UpperLimitDate  
                 GROUP BY 
                        EMAIL.id),
             --Get the Emails which are actually sent. Actually sent means, they are not bounced, opted out etc.

             EMAILS_REALLY_SENT_CTE(EmailId, Sent)
             AS (SELECT EMAILJOB.emailId,
                        COALESCE(Sum(CASE
                                       WHEN EMAILJOB_RECIPIENT.Sent = 1
                                            AND EMAILJOB_RECIPIENT.dsned <> 1 
                                       THEN 1
                                       ELSE 0
                                     END), 0) AS Sent
                 FROM   dbo.EMAILJOB
                        LEFT OUTER JOIN dbo.EMAILJOB_RECIPIENT
                                ON EMAILJOB_RECIPIENT.EmailJobID = EMAILJOB.ID
                                   AND EMAILJOB_RECIPIENT.[Current] = 1
                                INNER JOIN dbo.EMAIL 
                                ON EMAIL.ID = EMAILJOB.EmailID
                 WHERE  EMAILJOB.[Current] = 1
                        AND EMAILJOB.[Status] = 7 -- 7 means completed.

                                AND EMAIL.Deleted = 0
                                AND EMAIL.Type NOT IN ( 1, 7, 15, 18
                                AND EMAIL.SendAfterDate >  @LastProcessingDate    
                        AND EMAIL.SendAfterDate < @UpperLimitDate 
                 GROUP BY 
                        EMAILJOB.EmailID),
             -- Gets the emails which are not sent due to any reason

             EMAILS_NOT_SENT_CTE(EmailId, NotSent)
             AS (SELECT EMAIL_RECIPIENT.EmailID,
                        Count(EMAIL_RECIPIENT.EmailID)
                 FROM   dbo.EMAIL_RECIPIENT
                        LEFT OUTER JOIN dbo.EmailJob_Recipient
                                ON EMAIL_RECIPIENT.iD = EMAILJOB_RECIPIENT.EmailRecipientID
                        INNER JOIN dbo.Email
                                ON EMAIL.ID = EMAIL_RECIPIENT.EmailID
                 WHERE  ( ( EMAILJOB_RECIPIENT.DSNed = 'true'
                            AND EMAILJOB_RECIPIENT.Sent = 'true' )
                           OR EMAIL_RECIPIENT.InvalidAddress = 'true'
                           OR EMAIL_RECIPIENT.InvalidAccount = 'true'
                           OR EMAIL_RECIPIENT.OptOut = 'true' )
                                AND EMAIL.Deleted = 0
                                AND EMAIL.Type NOT IN ( 1, 7, 15, 18
                                AND EMAIL.SendAfterDate >  @LastProcessingDate   
                        AND EMAIL.SendAfterDate < @UpperLimitDate 
                 GROUP BY 
                        EMAIL_RECIPIENT.EmailID)

        --Now get the Usage tracking data by joining the required tables and CTE's

        SELECT @ProductName + '-' + 'Emails' + '-' + @OrganizationDetails AS 'Group',
               CASE
                 WHEN EMAIL.Type = 0 THEN 'Blast'
                 WHEN EMAIL.Type = 2 THEN 'Newsletter'
                 WHEN EMAIL.Type = 3 THEN 'Campaign'
                 WHEN EMAIL.Type = 4 THEN 'FundraiserBlast'
                 WHEN EMAIL.Type = 5 THEN 'Chapter'
                 WHEN EMAIL.Type = 6 THEN 'PersonalPageBlast'
                 WHEN EMAIL.Type = 8 THEN 'ProjectAppealBlastFinal'
                 WHEN EMAIL.Type = 9 THEN 'ProjectAppealSeed'
                 WHEN EMAIL.Type = 10 THEN 'SignupNotification'
                 WHEN EMAIL.Type = 11 THEN 'DonationNotification'
                 WHEN EMAIL.Type = 12 THEN 'PageSharing'
                 WHEN EMAIL.Type = 13 THEN 'SiteNotification'
                 WHEN EMAIL.Type = 14 THEN 'ECard'
                 WHEN EMAIL.Type = 16 THEN 'BBDM'
                 WHEN EMAIL.Type = 17 THEN 'Schedule'
                 WHEN EMAIL.Type = 19 THEN 'Sponsorship'
                 WHEN EMAIL.Type = 17 THEN 'Schedule'
                 WHEN EMAIL.Type = 20 THEN 'AdvocacyTarget'
                 WHEN EMAIL.Type = 21 THEN 'FAFParticipantCommunication'
                 ELSE 'OTHERS'
               END                                                  AS TypeOfEmail,
               EMAIL.ID                                             AS 'EmailID',
               EMAIL.NAME                                           AS 'EmailName',
               EMAIL.SUBJECT                                        AS 'EmailSubject',
               MAX(EMAIL.SendAfterDate)                             AS 'DateSent',
               Isnull(EMAILS_REALLY_SENT_CTE.Sent, 0)               AS 'TotalEmailsDelivered',
               Isnull(EMAILS_NOT_SENT_CTE.NotSent, 0)               AS 'TotalEmailsNotDelivered',
               Sum(EMAIL_STATS.Opened)                              AS 'TotalEmailsOpened',
               DISTINCT_EMAIL_CLICKS_CTE.TotalDistinctClicks        AS 'TotalEmailsClicked'
        FROM   dbo.EMAIL     
               LEFT OUTER JOIN dbo.EMAIL_STATS
                            ON EMAIL_STATS.ID = EMAIL.ID
               LEFT OUTER JOIN DISTINCT_EMAIL_CLICKS_CTE
                            ON DISTINCT_EMAIL_CLICKS_CTE.EmailId = EMAIL.ID
               LEFT OUTER JOIN EMAILS_NOT_SENT_CTE
                            ON EMAILS_NOT_SENT_CTE.EmailId = Email.ID
               LEFT OUTER JOIN EMAILS_REALLY_SENT_CTE
                            ON EMAILS_REALLY_SENT_CTE.EmailId = Email.ID
        WHERE  EMAIL.SendAfterDate > @LastProcessingDate   
               AND EMAIL.SendAfterDate < @UpperLimitDate 
               AND Email.Type NOT IN ( 1, 7, 15, 18 )   -- These types have been excluded as per the requirements of the Usage Tracking feature

                 AND EMAIL.Deleted = 0
        GROUP  BY EMAIL.Type,
                  EMAIL.ID,
                  EMAIL.NAME,
                  EMAIL.Subject,        
                  EMAILS_REALLY_SENT_CTE.Sent,
                  EMAILS_NOT_SENT_CTE.NotSent,
                  DISTINCT_EMAIL_CLICKS_CTE.TotalDistinctClicks
        ORDER  BY Email.type 

    END