@@ -124,157 +124,38 @@ GROUP BY
124124 }
125125 }
126126
127- public async Task < List < SentCampaignMetrics > > GetSentCampaignsMetrics ( string userName , int pageNumber , int pageSize , DateTime ? startDate = null , DateTime ? endDate = null , string campaignName = null , string campaignType = null , string fromEmail = null , List < int > labels = null )
127+ public async Task < List < SentCampaignMetrics > > GetSentCampaignsMetrics (
128+ string userName ,
129+ int pageNumber ,
130+ int pageSize ,
131+ DateTime ? startDate = null ,
132+ DateTime ? endDate = null ,
133+ string campaignName = null ,
134+ string campaignType = null ,
135+ string fromEmail = null ,
136+ List < int > labels = null )
128137 {
129- var labelsCount = labels ? . Count ?? 0 ;
130-
131138 using ( var connection = _connectionFactory . GetConnection ( ) )
132139 {
133- var dummyDatabaseQuery = @"
134- DECLARE @timezone INT
135- DECLARE @idUser INT
136-
137- SELECT
138- @timezone = offset
139- ,@idUser = u.IdUser
140- FROM dbo.usertimezone timezone
141- INNER JOIN dbo.[user] u ON u.idusertimezone = timezone.idusertimezone
142- WHERE u.[Email] = @userName;
143-
144- SELECT
145- RPT.[IdUser]
146- ,RPT.[IdCampaign]
147- ,RPT.[Name]
148- ,dateadd(MINUTE, @timezone, RPT.[UTCSentDate]) AS [UTCSentDate]
149- ,RPT.[FromEmail]
150- ,RPT.[CampaignType]
151- ,RPT.[IdTestAB]
152- ,SUM(RPT.[Subscribers]) [Subscribers]
153- ,SUM(RPT.[Sent]) [Sent]
154- ,CASE
155- WHEN SUM(RPT.[Subscribers]) = 0 THEN 0
156- ELSE CAST(SUM(RPT.[Sent]) * 100.0 / SUM(RPT.[Subscribers]) AS DECIMAL(10,2))
157- END AS [DlvRate]
158- ,SUM(RPT.[Opens]) [Opens]
159- ,CASE
160- WHEN SUM(RPT.[Subscribers]) = 0 THEN 0
161- ELSE CAST(SUM(RPT.[Opens]) * 100.0 / SUM(RPT.[Subscribers]) AS DECIMAL(10,2))
162- END AS [OpenRate]
163- ,SUM(RPT.[Unopens]) AS [Unopens]
164- ,CASE
165- WHEN SUM(RPT.[Subscribers]) = 0 THEN 0
166- ELSE CAST(SUM(RPT.[Sent] - RPT.[Opens]) * 100.0 / SUM(RPT.[Subscribers]) AS DECIMAL(10,2))
167- END AS [UnopenRate]
168- ,SUM(RPT.[Clicks]) [Clicks]
169- ,CASE
170- WHEN SUM(RPT.[Opens]) = 0 THEN 0
171- ELSE CAST(SUM(RPT.[Clicks]) * 100.0 / SUM(RPT.[Opens]) AS DECIMAL(10,2))
172- END AS [ClickToOpenRate]
173- ,SUM(RPT.[Hard] + RPT.[Soft]) [Bounces]
174- ,CASE
175- WHEN SUM(RPT.[Subscribers]) = 0 THEN 0
176- ELSE CAST(SUM(RPT.[Hard] + RPT.[Soft]) * 100.0 / SUM(RPT.[Subscribers]) AS DECIMAL(10,2))
177- END AS [BounceRate]
178- ,SUM(RPT.[Unsubscribes]) [Unsubscribes]
179- ,CASE
180- WHEN SUM(RPT.[Sent]) = 0 THEN 0
181- ELSE CAST(SUM(RPT.[Unsubscribes]) * 100.0 / SUM(RPT.[Sent]) AS DECIMAL(10,2))
182- END AS [UnsubscribeRate]
183- ,SUM(RPT.[Spam]) [Spam]
184- ,CASE
185- WHEN SUM(RPT.[Sent]) = 0 THEN 0
186- ELSE CAST(SUM(RPT.[Spam]) * 100.0 / SUM(RPT.[Sent]) AS DECIMAL(10,2))
187- END AS [SpamRate]
188- ,RPT.[LabelName]
189- ,RPT.[LabelColour]
190- FROM(
191- SELECT
192- C.[IdUser]
193- ,C.[IdCampaign]
194- ,C.[Name]
195- ,C.[UTCSentDate]
196- ,C.[FromEmail]
197- ,C.[CampaignType]
198- ,C.[IdTestAB]
199- ,ISNULL(C.[AmountSentSubscribers],0) [Subscribers]
200- ,(ISNULL(C.[DistinctOpenedMailCount],0) + ISNULL(C.[UnopenedMailCount],0)) AS [Sent]
201- ,ISNULL(C.[DistinctOpenedMailCount],0) [Opens]
202- ,ISNULL(C.[UnopenedMailCount], 0) [Unopens]
203- ,ISNULL(C.[DistinctClickCount],0) [Clicks]
204- ,ISNULL(C.[HardBouncedMailCount],0) [Hard]
205- ,ISNULL (C.[SoftBouncedMailCount],0) [Soft]
206- ,ISNULL(C.[UnsubscriptionsCount], Unsubscribes.Unsubscribes) [Unsubscribes]
207- ,Unsubscribes.Spam [Spam]
208- ,L.[Name] [LabelName]
209- ,LC.[Colour] [LabelColour]
210- FROM [dbo].[Campaign] C WITH (NOLOCK)
211- JOIN [dbo].[User] U WITH (NOLOCK)
212- ON C.[IdUser] = U.[IdUser]
213- LEFT JOIN [dbo].[Label] L WITH (NOLOCK)
214- ON C.[IdLabel] = L.[IdLabel]
215- LEFT JOIN [dbo].[Colour] LC WITH (NOLOCK)
216- ON L.[IdColour] = LC.[IdColour]
217- LEFT JOIN (
218- SELECT
219- COUNT(
220- CASE
221- WHEN S.IdUnsubscriptionReason <> 2
222- AND S.UnsubscriptionSubreason NOT IN (2,3,4)
223- THEN 1
224- END
225- ) [Unsubscribes]
226- ,COUNT(
227- CASE
228- WHEN S.IdUnsubscriptionReason = 2
229- OR S.UnsubscriptionSubreason IN (2,3,4)
230- THEN 1
231- END
232- ) [Spam]
233- ,c.IdCampaign
234- FROM dbo.campaign c
235- INNER JOIN dbo.subscriber s ON c.idcampaign = s.IdCampaign
236- WHERE c.iduser = @idUser
237- AND c.STATUS in (5, 9)
238- AND c.IdTestCampaign IS NULL
239- AND s.IdSubscribersStatus = 5
240- GROUP BY c.IdCampaign
241- ) Unsubscribes ON c.idcampaign = Unsubscribes.IdCampaign
242- WHERE
243- U.[Email] = @userName
244- AND C.[Status] IN (5,9)
245- AND C.Active = 1
246- AND (@startDate IS NULL OR C.[UTCSentDate] >= @startDate)
247- AND (@endDate IS NULL OR C.[UTCSentDate] < @endDate)
248- AND (@campaignName IS NULL OR LOWER(LTRIM(RTRIM(C.[Name]))) LIKE '%' + LOWER(LTRIM(RTRIM(@campaignName))) + '%')
249- AND (
250- @campaignType IS NULL
251- OR (LTRIM(RTRIM(@campaignType)) = '')
252- OR (@campaignType = 'TEST_AB' AND C.IdTestAB IS NOT NULL)
253- OR (C.CampaignType = @campaignType AND C.IdTestAB IS NULL)
254- )
255- AND (@fromEmail IS NULL OR LOWER(LTRIM(RTRIM(C.[FromEmail]))) LIKE LOWER(LTRIM(RTRIM(@fromEmail))))
256- AND C.[IdTestCampaign] IS NULL
257- AND C.[IdScheduledTask] IS NULL
258- AND (C.TestABCategory IS NULL OR C.TestABCategory = 3)
259- AND (
260- @labelsCount = 0
261- OR C.[IdLabel] IN @labels
262- )
263- ) RPT
264- GROUP BY RPT.[IdUser]
265- ,RPT.[IdCampaign]
266- ,RPT.[Name]
267- ,RPT.[UTCSentDate]
268- ,RPT.[FromEmail]
269- ,RPT.[CampaignType]
270- ,RPT.[IdTestAB]
271- ,RPT.[LabelName]
272- ,RPT.[LabelColour]
273- ORDER BY RPT.[UTCSentDate] DESC
274- OFFSET @pageNumber * @pageSize ROWS
275- FETCH NEXT @pageSize ROWS ONLY" ;
140+ var labelsStr = ( labels != null && labels . Count > 0 )
141+ ? string . Join ( "," , labels )
142+ : null ;
276143
277- var results = await connection . QueryAsync < SentCampaignMetrics > ( dummyDatabaseQuery , new { userName , pageNumber , pageSize , startDate , endDate , campaignName , campaignType , fromEmail , labelsCount , labels } ) ;
144+ var results = await connection . QueryAsync < SentCampaignMetrics > (
145+ "[dbo].[CampaignsSent_CampaignsMetrics]" ,
146+ new
147+ {
148+ userName ,
149+ startdate = startDate ,
150+ enddate = endDate ,
151+ campaignName ,
152+ campaignType ,
153+ fromEmail ,
154+ labels = labelsStr ,
155+ pageNumber ,
156+ pageSize
157+ } ,
158+ commandType : System . Data . CommandType . StoredProcedure ) ;
278159
279160 return results . ToList ( ) ;
280161 }
@@ -325,139 +206,18 @@ public async Task<List<MonthlyCampaignMetrics>> GetMonthlyCampaignsMetrics(strin
325206 {
326207 using ( var connection = _connectionFactory . GetConnection ( ) )
327208 {
328- var dummyDatabaseQuery = @"
329- DECLARE @timezone INT
330-
331- SELECT @timezone = offset
332- FROM dbo.usertimezone timezone
333- INNER JOIN dbo.[user] u ON u.idusertimezone = timezone.idusertimezone
334- WHERE u.[Email] = @userName
335-
336- SELECT
337- RPT.[IdUser]
338- ,YEAR(dateadd(MINUTE, @timezone, UTCSentDate)) [Year]
339- ,MONTH(dateadd(MINUTE, @timezone, UTCSentDate)) [Month]
340- ,COUNT(DISTINCT RPT.[IdCampaign]) [CampaginsCount]
341- ,SUM(RPT.[Subscribers]) [Subscribers]
342- ,SUM(RPT.[Sent]) [Sent]
343- ,CASE
344- WHEN SUM(RPT.[Subscribers]) = 0 THEN 0
345- ELSE CAST(SUM(RPT.[Sent]) * 100.0 / SUM(RPT.[Subscribers]) AS DECIMAL(5,2))
346- END AS [DlvRate]
347- ,SUM(RPT.[Opens]) [Opens]
348- ,CASE
349- WHEN SUM(RPT.[Subscribers]) = 0 THEN 0
350- ELSE CAST(SUM(RPT.[Opens]) * 100.0 / SUM(RPT.[Subscribers]) AS DECIMAL(5,2))
351- END AS [OpenRate]
352- ,SUM(RPT.[Unopens]) AS [Unopens]
353- ,CASE
354- WHEN SUM(RPT.[Subscribers]) = 0 THEN 0
355- ELSE CAST(SUM(RPT.[Sent] - RPT.[Opens]) * 100.0 / SUM(RPT.[Subscribers]) AS DECIMAL(5,2))
356- END AS [UnopenRate]
357- ,SUM(RPT.[Clicks]) [Clicks]
358- ,CASE
359- WHEN SUM(RPT.[Opens]) = 0 THEN 0
360- ELSE CAST(SUM(RPT.[Clicks]) * 100.0 / SUM(RPT.[Opens]) AS DECIMAL(5,2))
361- END AS [ClickToOpenRate]
362- ,SUM(RPT.[Hard] + RPT.[Soft]) [Bounces]
363- ,CASE
364- WHEN SUM(RPT.[Subscribers]) = 0 THEN 0
365- ELSE CAST(SUM(RPT.[Hard] + RPT.[Soft]) * 100.0 / SUM(RPT.[Subscribers]) AS DECIMAL(5,2))
366- END AS [BounceRate]
367- ,SUM(RPT.[Unsubscribes]) [Unsubscribes]
368- ,CASE
369- WHEN SUM(RPT.[Sent]) = 0 THEN 0
370- ELSE CAST(SUM(RPT.[Unsubscribes]) * 100.0 / SUM(RPT.[Sent]) AS DECIMAL(5,2))
371- END AS [UnsubscribeRate]
372- ,SUM(RPT.[Spam]) [Spam]
373- ,CASE
374- WHEN SUM(RPT.[Sent]) = 0 THEN 0
375- ELSE CAST(SUM(RPT.[Spam]) * 100.0 / SUM(RPT.[Sent]) AS DECIMAL(5,2))
376- END AS [SpamRate]
377- FROM(
378- SELECT
379- C.[IdUser]
380- ,C.[IdCampaign]
381- ,C.[UTCSentDate]
382- ,ISNULL(C.[AmountSentSubscribers],0) [Subscribers]
383- ,(ISNULL(C.AmountSentSubscribers, 0) - (ISNULL(C.HardBouncedMailCount, 0) + ISNULL(C.SoftBouncedMailCount, 0))) AS [Sent]
384- ,ISNULL(C.[DistinctOpenedMailCount],0) [Opens]
385- ,ISNULL(C.[UnopenedMailCount], 0) [Unopens]
386- ,ISNULL(C.[DistinctClickCount],0) [Clicks]
387- ,ISNULL(C.[HardBouncedMailCount],0) [Hard]
388- ,ISNULL(C.[SoftBouncedMailCount],0) [Soft]
389- ,ISNULL(C.[UnsubscriptionsCount],0) [Unsubscribes]
390- ,0 [Spam]
391- FROM [dbo].[Campaign] C WITH (NOLOCK)
392- JOIN [dbo].[User] U WITH (NOLOCK)
393- ON C.[IdUser] = U.[IdUser]
394- WHERE
395- U.[Email] = @userName
396- AND C.[Status] IN (5,9)
397- AND C.Active = 1
398- AND (@startDate IS NULL OR C.[UTCSentDate] >= @startDate)
399- AND (@endDate IS NULL OR C.[UTCSentDate] < @endDate)
400- AND C.[IdTestCampaign] IS NULL
401- AND C.[IdScheduledTask] IS NULL
402- AND (C.TestABCategory IS NULL OR C.TestABCategory = 3)
403- UNION ALL
404- SELECT
405- S.[IdUser]
406- ,S.[IdCampaign]
407- ,C.[UTCSentDate]
408- ,0 [Subscribers]
409- ,0 [Sent]
410- ,0 [Opens]
411- ,0 [Unopens]
412- ,0 [Clicks]
413- ,0 [Hard]
414- ,0 [Soft]
415- ,COUNT(
416- CASE
417- WHEN S.IdUnsubscriptionReason <> 2
418- AND S.UnsubscriptionSubreason NOT IN (2,3,4)
419- THEN 1
420- END
421- ) [Unsubscribes]
422- ,COUNT(
423- CASE
424- WHEN S.IdUnsubscriptionReason = 2
425- OR S.UnsubscriptionSubreason IN (2,3,4)
426- THEN 1
427- END
428- ) [Spam]
429- FROM [dbo].[Subscriber] S WITH (NOLOCK)
430- JOIN [dbo].[Campaign] C WITH (NOLOCK)
431- ON S.[IdUser] = C.[IdUser] AND S.[IdCampaign] = C.[IdCampaign]
432- JOIN [dbo].[User] U WITH (NOLOCK)
433- ON S.[IdUser] = U.[IdUser]
434- WHERE
435- U.[Email] = @userName
436- AND C.[Status] IN (5,9)
437- AND C.Active = 1
438- AND (@startDate IS NULL OR C.[UTCSentDate] >= @startDate)
439- AND (@endDate IS NULL OR C.[UTCSentDate] < @endDate)
440- AND C.[IdTestCampaign] IS NULL
441- AND C.[IdScheduledTask] IS NULL
442- AND (C.TestABCategory IS NULL OR C.TestABCategory = 3)
443- AND S.IdSubscribersStatus = 5
444- GROUP BY
445- S.[IdUser]
446- ,S.[IdCampaign]
447- ,C.[Name]
448- ,C.[UTCSentDate]
449- ,C.[FromEmail]
450- ,C.[CampaignType]
451- ) RPT
452- GROUP BY RPT.[IdUser]
453- ,YEAR(dateadd(MINUTE, @timezone, UTCSentDate))
454- ,MONTH(dateadd(MINUTE, @timezone, UTCSentDate))
455-
456- ORDER BY [Year] DESC, [Month] DESC
457- OFFSET @pageNumber * @pageSize ROWS
458- FETCH NEXT @pageSize ROWS ONLY" ;
459-
460- var results = await connection . QueryAsync < MonthlyCampaignMetrics > ( dummyDatabaseQuery , new { userName , pageNumber , pageSize , startDate , endDate } ) ;
209+ var results = await connection . QueryAsync < MonthlyCampaignMetrics > (
210+ "[dbo].[CampaignsSent_CampaignsByMonthMetrics]" ,
211+ new
212+ {
213+ userName ,
214+ startdate = startDate ,
215+ enddate = endDate ,
216+ pageNumber ,
217+ pageSize
218+ } ,
219+ commandType : System . Data . CommandType . StoredProcedure
220+ ) ;
461221
462222 return results . ToList ( ) ;
463223 }
0 commit comments