@@ -13,6 +13,7 @@ import {
1313 getConversationSelector ,
1414 getFilterSelector ,
1515 getTimezone ,
16+ noConversationSelector ,
1617} from './utils' ;
1718
1819import { addCell , addHeader , convertTime , dateToString , fixNumber , nextTime } from './exportUtils' ;
@@ -57,7 +58,7 @@ const insightExportQueries = {
5758 const { start, end } = fixDates ( startDate , endDate , diffCount ) ;
5859 const conversationSelector = {
5960 createdAt : { $gte : start , $lte : end } ,
60- $or : [ { userId : { $exists : true } , messageCount : { $gt : 1 } } , { userId : { $exists : false } } ] ,
61+ ... noConversationSelector ,
6162 } ;
6263
6364 const mainSelector = await getConversationSelector ( args , conversationSelector ) ;
@@ -80,9 +81,6 @@ const insightExportQueries = {
8081 $group : {
8182 _id : '$date' ,
8283 uniqueCustomerIds : { $addToSet : '$customerId' } ,
83- resolvedCount : {
84- $sum : { $cond : [ { $eq : [ '$status' , 'closed' ] } , 1 , 0 ] } ,
85- } ,
8684 totalCount : { $sum : 1 } ,
8785 totalResponseTime : { $sum : '$firstRespondTime' } ,
8886 totalCloseTime : { $sum : '$closeTime' } ,
@@ -94,7 +92,6 @@ const insightExportQueries = {
9492 totalCount : 1 ,
9593 totalCloseTime : 1 ,
9694 totalResponseTime : 1 ,
97- resolvedCount : 1 ,
9895 percentage : {
9996 $multiply : [
10097 {
@@ -107,6 +104,35 @@ const insightExportQueries = {
107104 } ,
108105 ] ) ;
109106
107+ const resolvedSelector = {
108+ closedAt : { $gte : start , $lte : end } ,
109+ status : 'closed' ,
110+ ...noConversationSelector ,
111+ } ;
112+
113+ const mainResolvedSelector = await getConversationSelector ( args , resolvedSelector , 'closedAt' ) ;
114+
115+ const resolvedAggregatedData = await Conversations . aggregate ( [
116+ {
117+ $match : mainResolvedSelector ,
118+ } ,
119+ {
120+ $project : {
121+ date : await getDateFieldAsStr ( {
122+ fieldName : '$closedAt' ,
123+ timeFormat : aggregationTimeFormat ,
124+ timeZone : getTimezone ( user ) ,
125+ } ) ,
126+ } ,
127+ } ,
128+ {
129+ $group : {
130+ _id : '$date' ,
131+ resolvedCount : { $sum : 1 } ,
132+ } ,
133+ } ,
134+ ] ) ;
135+
110136 const volumeDictionary = { } ;
111137
112138 let totalCustomerCount = 0 ;
@@ -133,7 +159,6 @@ const insightExportQueries = {
133159 {
134160 $project : {
135161 date : await getDateFieldAsStr ( { timeFormat : aggregationTimeFormat , timeZone : getTimezone ( user ) } ) ,
136- status : 1 ,
137162 } ,
138163 } ,
139164 {
@@ -150,38 +175,38 @@ const insightExportQueries = {
150175 totalConversationMessages += row . totalCount ;
151176 } ) ;
152177
178+ const resolvedDictionary = { } ;
179+ resolvedAggregatedData . forEach ( row => {
180+ resolvedDictionary [ row . _id ] = row . resolvedCount ;
181+ totalResolved += row . resolvedCount ;
182+ } ) ;
183+
153184 const data : IVolumeReportExportArgs [ ] = [ ] ;
154185
155186 let begin = start ;
156187 const generateData = async ( ) => {
157188 const next = nextTime ( begin , type ) ;
158189 const dateKey = moment ( begin ) . format ( timeFormat ) ;
159- const {
160- resolvedCount,
161- totalCount,
162- totalResponseTime,
163- totalCloseTime,
164- uniqueCustomerCount,
165- percentage,
166- } = volumeDictionary [ dateKey ] || {
167- resolvedCount : 0 ,
190+ const { totalCount, totalResponseTime, totalCloseTime, uniqueCustomerCount, percentage } = volumeDictionary [
191+ dateKey
192+ ] || {
168193 totalCount : 0 ,
169194 totalResponseTime : 0 ,
170195 totalCloseTime : 0 ,
171196 uniqueCustomerCount : 0 ,
172197 percentage : 0 ,
173198 } ;
174199 const messageCount = conversationDictionary [ dateKey ] || 0 ;
200+ const resolvedCount = resolvedDictionary [ dateKey ] || 0 ;
175201
176202 totalCustomerCount += totalCount ;
177- totalResolved += resolvedCount ;
178203
179204 totalUniqueCount += uniqueCustomerCount ;
180205
181206 totalClosedTime += totalCloseTime ;
182207 totalRespondTime += totalResponseTime ;
183208
184- averageResponseDuration = fixNumber ( totalCloseTime / resolvedCount ) ;
209+ averageResponseDuration = fixNumber ( totalCloseTime / totalCount ) ;
185210 firstResponseDuration = fixNumber ( totalResponseTime / totalCount ) ;
186211
187212 data . push ( {
@@ -211,7 +236,7 @@ const insightExportQueries = {
211236 customerCountPercentage : `${ ( ( totalUniqueCount / totalCustomerCount ) * 100 ) . toFixed ( 0 ) } %` ,
212237 messageCount : totalConversationMessages ,
213238 resolvedCount : totalResolved ,
214- averageResponseDuration : convertTime ( fixNumber ( totalClosedTime / totalResolved ) ) ,
239+ averageResponseDuration : convertTime ( fixNumber ( totalClosedTime / totalCustomerCount ) ) ,
215240 firstResponseDuration : convertTime ( fixNumber ( totalRespondTime / totalCustomerCount ) ) ,
216241 } ) ;
217242
@@ -524,7 +549,7 @@ const insightExportQueries = {
524549 const tagData = await Conversations . aggregate ( [
525550 {
526551 $match : {
527- $or : [ { userId : { $exists : true } , messageCount : { $gt : 1 } } , { userId : { $exists : false } } ] ,
552+ ... noConversationSelector ,
528553 integrationId : { $in : rawIntegrationIds } ,
529554 createdAt : filterSelector . createdAt ,
530555 } ,
0 commit comments