USP_GET_CRM_INTEGRATION_STATS

Parameters

Parameter Parameter Type Mode Description
@CRMIntegrationRecordsXML xml IN

Definition

Copy


CREATE procedure dbo.USP_GET_CRM_INTEGRATION_STATS
(
@CRMIntegrationRecordsXML AS XML
)
AS
BEGIN

    DECLARE @RecordCount AS INT;
    DECLARE @Counter as INT =1
    DECLARE @RecordTypeCount AS INT;
    DECLARE @RecordTypeCode INT;
    DECLARE @DownloadStartPoint DATETIME;
    DECLARE @LastId INT;

    DECLARE @CrmIntegrationStatsTempTable AS TABLE (PendingRecordCount INT,RecordType INT,UpdateDate DATETIME);

    DECLARE @CRMIntegrationTokenTempTable AS TABLE (Rownumber INT IDENTITY (1,1), RecordTypeCode INT, DownloadStartPoint DATETIME, LastId NVARCHAR(50))

    INSERT INTO @CRMIntegrationTokenTempTable
    SELECT   col.value('data(@TypeCode[1])', 'INT') AS RecordTypeCode
            ,col.value('data(DownloadStartPoint[1])', 'DATETIME') AS DownloadStartPoint
            ,col.value('data(LastId[1])', 'NVARCHAR(100)') AS LastId

    FROM    @CRMIntegrationRecordsXML.nodes('/RecordTypes/RecordType') tbl(col)

    SELECT @RecordTypeCount =Max(RowNumber) FROM @CRMIntegrationTokenTempTable

    WHILE(@Counter <=@RecordTypeCount)
    BEGIN
    select @RecordTypeCode =RecordTypeCode,@DownloadStartPoint = DownloadStartPoint,@LastId = LastId FROM @CRMIntegrationTokenTempTable WHERE RowNumber = @Counter

    /*For Client User*/
        IF @RecordTypeCode = 0
        BEGIN
            SELECT @RecordCount = COUNT(*
            FROM dbo.Clients C, dbo.ClientUsers CU 
            LEFT JOIN dbo.backofficesystemusers BOSU ON CU.ID = BOSU.ClientUsersID
            LEFT JOIN dbo.backofficesystempeople BOSP ON BOSU.BackOfficePeopleID = BOSP.ID
            WHERE 
            ISNULL(BOSP.BackOfficeSystemId, 0) = 0
            AND (CU.UpdateDate > @DownloadStartPoint) or (CU.UpdateDate = @DownloadStartPoint and CU.id > @LastId)            
        END

        /*For PersonalPages*/
        IF @RecordTypeCode = 1
        BEGIN
            SELECT @RecordCount = COUNT(*)
            FROM dbo.fundraisersolicitors fs
            INNER JOIN dbo.fundraiserpages fp 
            ON fs.fundraiserid = fp.fundraiserid
            INNER JOIN dbo.sitepages sp 
            ON fp.sitepageid = sp.id
            LEFT OUTER JOIN dbo.stats s 
            ON s.pageid = sp.id and s.frsolicitorid = fs.id
            WHERE fs.backofficeid IS NOT NULL
            AND s.requestdate > @DownloadStartpoint
            GROUP BY fs.id,fs.clientusersID,fp.DisplayName,sp.PublishDate,sp.id
        End

        /*For EmailInfo*/
        IF @RecordTypeCode = 2
                BEGIN
            SELECT @RecordCount = COUNT(*)
                FROM dbo.ClientUserMailForwarding cumf
                WHERE cumf.ClientUsersID IS NOT NULL
                AND cumf.UpdateDate > @DownloadStartpoint
        End

        /*For EmailRecipients*/
        IF @RecordTypeCode = 3
        BEGIN

    IF OBJECT_ID('tempdb..#ResultTable') IS NOT NULL 
        BEGIN
              drop table #ResultTable
        END        

            CREATE TABLE #ResultTable(ejrid INT, updatedate DATETIME, emailid INT, bospid INT, reid INT, userid INT)

            INSERT INTO #ResultTable(ejrid, updatedate, emailid, bospid, userid, reid)  
         SELECT  ejr.id,  
         coalesce(EJRD.DONATIONDATE,ejr.updatedate) UpdateDate,  
         ejr.emailid,  
         ejr.backofficesystempeopleid,  
         ejr.userid,  
         bosp.backofficerecordid  
         FROM dbo.emailjob_recipient ejr WITH (nolock)  
         INNER JOIN dbo.backofficesystempeople BOSP WITH (nolock) ON ejr.BackOfficeSystemPeopleID = BOSP.ID and BOSP.BackOfficeSystemID = 0  
         LEFT JOIN dbo.EMAILJOB_RECIPIENT_DONATED EJRD WITH (nolock) ON ejr.ID = EJRD.EMAILJOBRECIPIENTID  
         WHERE (BOSP.BackofficeRecordID <> 0 and ejr.UpdateDate >= @DownloadStartpoint and NOT (ejr.UpdateDate = @DownloadStartpoint and ejr.ID <= @LastID))  

        UNION

        SELECT  ejr.id,  
         coalesce(EJRD.DONATIONDATE,ejr.updatedate) UpdateDate,  
         ejr.emailid,  
         ejr.backofficesystempeopleid,  
         ejr.userid,  
         bosp.backofficerecordid  
         FROM dbo.emailjob_recipient ejr WITH (nolock)  
         INNER JOIN dbo.backofficesystempeople BOSP WITH (nolock) ON ejr.BackOfficeSystemPeopleID = BOSP.ID and BOSP.BackOfficeSystemID = 0  
         LEFT JOIN dbo.EMAILJOB_RECIPIENT_DONATED EJRD WITH (nolock) ON ejr.ID = EJRD.EMAILJOBRECIPIENTID  
         WHERE  EJRD.ID is not null  
         ORDER BY coalesce(EJRD.DONATIONDATE,ejr.updatedate) , ejr.ID  

            SELECT @RecordCount = Count(*)
            FROM #ResultTable r
            INNER JOIN dbo.EmailJob_Recipient ejr with (nolock) on ejr.id = r.ejrid
            INNER JOIN dbo.email e ON e.id = ejr.EmailID;

            DROP TABLE #ResultTable
        End

        /*For Newsletters*/
        IF @RecordTypeCode = 4
        BEGIN
        SELECT @RecordCount = COUNT(*)
            FROM EmailList_Subscription els 
            inner join BackOfficeSystemPeople bosp on els.BackofficeSystempeopleID=bosp.id and bosp.backofficeSystemid = 0 
            LEFT OUTER JOIN
                SELECT els.id AS"ELSID", MAX(ejr.id) AS "EJRID" 
                    FROM emailjob_recipient ejr  
                        inner JOIN email e ON e.id = ejr.emailid 
                        inner JOIN email_emaillist eel ON eel.emailid = e.id 
                        inner JOIN emaillist el ON el.id = eel.emaillistid 
                        inner JOIN emaillist_subscription els ON els.backofficesystempeopleid = ejr.backofficesystempeopleid AND els.emaillistid = el.id 
                    GROUP BY els.id 
                ) AS subLastIssue ON subLastIssue.elsid = els.id 
            LEFT OUTER JOIN EmailJob_Recipient ejr2 ON ejr2.id = subLastIssue.ejrid 
            LEFT OUTER JOIN email e2 ON e2.id = ejr2.emailid  
            LEFT OUTER join dbo.[Email_Recipient] er on er.ID=ejr2.EmailRecipientID
            inner JOIN emaillist el2 ON el2.id = els.emaillistid 
            WHERE (e2.type IS NULL OR e2.type = 2) AND (ejr2.sent IS NULL OR ejr2.sent = 1
            AND (((ejr2.updatedate > @DownloadStartpoint) OR (els.UpdateDate > @DownloadStartPoint))
                OR (ejr2.updatedate IS NULL AND els.UpdateDate = @DownloadStartPoint AND els.EmailListID > @LastID)) 
        End

        /*For Stats*/
        IF @RecordTypeCode = 5
        BEGIN
        select @RecordCount =COUNT(*
            FROM dbo.stats s
            LEFT JOIN dbo.sitepages sp on s.pageid = sp.id
            WHERE UserID > 0 AND s.RequestDate > @DownloadStartpoint
        End

        INSERT INTO @crmIntegrationStatsTempTable(PendingRecordCount,RecordType,UpdateDate) 
        select ISNULL(@RecordCount,0) as PendingRecordCount, @RecordTypeCode  as RecordType, @DownloadStartpoint as UpdateDate
        SET @RecordCount = null

    SET @Counter = @Counter+1

    /*Reset variables for next row*/
    SET @RecordTypeCode = NULL
    SET @DownloadStartPoint = NULL
    SET @LastId = NULL
    END



    SELECT PendingRecordCount as PendingRecordCount,RecordType as RecordType,UpdateDate as UpdateDate FROM @crmIntegrationStatsTempTable            
END