Exemplo n.º 1
0
        public async Task <ActionResult <CallTrendChart> > CallTrendChartData([Required][FromQuery] string labName, [FromQuery] DateTime?fromDate = null, [FromQuery] DateTime?toDate = null)
        {
            if (fromDate == null)
            {
                fromDate = DateTime.Now.AddDays(Convert.ToDouble(config.GetValue <string>("DefaultReportFromDate")));
            }

            if (toDate == null)
            {
                toDate = DateTime.Now;
            }


            TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");

            fromDate = TimeZoneInfo.ConvertTimeFromUtc(fromDate.GetValueOrDefault().ToUniversalTime(), cstZone);

            toDate = TimeZoneInfo.ConvertTimeFromUtc(toDate.GetValueOrDefault().ToUniversalTime(), cstZone);

            toDate = toDate?.AddHours(23).AddMinutes(59).AddSeconds(59);

            labName = labName.Equals("All", StringComparison.InvariantCultureIgnoreCase) ? null: labName.ToUpper();

            CallTrendChart response = new CallTrendChart();

            var labs = GetLabs().Result.Value;

            var months = GetMonths(fromDate.GetValueOrDefault(), toDate.GetValueOrDefault());

            response.labs = labs;

            response.period = months;

            response.labName = labName ?? "All";

            var callTypes = new List <string>()
            {
                "MISSED", "INCOMING", "OUTGOING"
            };

            response.callTypes = callTypes;

            Dictionary <string, List <ChartMetrics> > callTrendDictionary = new Dictionary <string, List <ChartMetrics> >();

            foreach (var item in callTypes)
            {
                var callType = new List <ChartMetrics>();

                foreach (var month in months)
                {
                    ChartMetrics chartV2 = new ChartMetrics();

                    chartV2.Name = month;

                    callType.Add(chartV2);
                }

                callTrendDictionary.Add(item, callType);
            }

            var validCalls = await context.ValidCalls
                             .Where(s => s.EventTime >= fromDate && s.EventTime <= toDate && s.LabName.ToUpper() == (labName ?? s.LabName.ToUpper()))
                             .Select(x => new { x.EventTime, x.ValidCallId, CallType = x.CallType.ToUpper() })
                             .ToListAsync();

            var missedCalls = await context.MissedCalls
                              .Where(s => s.EventTime >= fromDate && s.EventTime <= toDate && s.LabName.ToUpper() == (labName ?? s.LabName.ToUpper()))
                              .Select(x => new { x.EventTime, x.Id, CallType = "MISSED" })
                              .ToListAsync();

            var groupedValidCalls = validCalls.GroupBy(vc => new { vc.EventTime.Month, vc.EventTime.Year, vc.CallType })
                                    .Select(group => new
            {
                Metric = group.Key,
                Count  = group.Count()
            }).ToList();

            var groupedMissedCalls = missedCalls.GroupBy(vc => new { vc.EventTime.Month, vc.EventTime.Year, vc.CallType })
                                     .Select(group => new
            {
                Metric = group.Key,
                Count  = group.Count()
            }).ToList();

            foreach (var item in groupedValidCalls)
            {
                if (item.Metric.CallType == null)
                {
                    continue;
                }

                var purpose = callTrendDictionary[item.Metric.CallType] as List <ChartMetrics>;

                purpose.Where(m => m.Name == CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthGenitiveNames[item.Metric.Month - 1] + " " + item.Metric.Year).ToList().ForEach(s => s.count = item.Count);
            }

            foreach (var item in groupedMissedCalls)
            {
                if (item.Metric.CallType == null)
                {
                    continue;
                }

                var purpose = callTrendDictionary[item.Metric.CallType] as List <ChartMetrics>;

                purpose.Where(m => m.Name == CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthGenitiveNames[item.Metric.Month - 1] + " " + item.Metric.Year).ToList().ForEach(s => s.count = item.Count);
            }

            response.trendData = callTrendDictionary;

            response.countData = new List <List <string> >();

            foreach (var item in callTrendDictionary.Values)
            {
                response.countData.Add(item.Select(m => m.count.ToString()).ToList());
            }

            return(response);
        }
Exemplo n.º 2
0
        public async Task <ActionResult <CallVolumeChart> > GetCallVolumeChartData([FromQuery] DateTime?fromDate = null, [FromQuery] DateTime?toDate = null)
        {
            if (fromDate == null)
            {
                fromDate = DateTime.Now.AddDays(Convert.ToDouble(config.GetValue <string>("DefaultReportFromDate")));
            }

            if (toDate == null)
            {
                toDate = DateTime.Now;
            }

            TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");

            fromDate = TimeZoneInfo.ConvertTimeFromUtc(fromDate.GetValueOrDefault().ToUniversalTime(), cstZone);

            toDate = TimeZoneInfo.ConvertTimeFromUtc(toDate.GetValueOrDefault().ToUniversalTime(), cstZone);

            toDate = toDate?.AddHours(23).AddMinutes(59).AddSeconds(59);

            var labs = GetLabs().Result.Value;

            var callTypes = new List <string>()
            {
                "MISSED", "INCOMING", "OUTGOING"
            };

            Dictionary <string, List <ChartMetrics> > callVolumeDictionary = new Dictionary <string, List <ChartMetrics> >();

            foreach (var item in callTypes)
            {
                var callType = new List <ChartMetrics>();

                foreach (var labName in labs)
                {
                    ChartMetrics chartV2 = new ChartMetrics();

                    chartV2.Name = labName;

                    callType.Add(chartV2);
                }

                callVolumeDictionary.Add(item, callType);
            }

            var validCalls = await context.ValidCalls
                             .Where(s => s.EventTime >= fromDate && s.EventTime <= toDate)
                             .Select(x => new { x.LabName, x.ValidCallId, CallType = x.CallType.ToUpper() })
                             .ToListAsync();

            var missedCalls = await context.MissedCalls
                              .Where(s => s.EventTime >= fromDate && s.EventTime <= toDate)
                              .Select(x => new { x.LabName, x.Id, CallType = "MISSED" })
                              .ToListAsync();

            var groupedValidCalls = validCalls.GroupBy(vc => new { vc.LabName, vc.CallType })
                                    .Select(group => new
            {
                Metric = group.Key,
                Count  = group.Count()
            }).ToList();

            var groupedMissedCalls = missedCalls.GroupBy(vc => new { vc.LabName, vc.CallType })
                                     .Select(group => new
            {
                Metric = group.Key,
                Count  = group.Count()
            }).ToList();

            foreach (var item in groupedMissedCalls)
            {
                if (item.Metric.CallType == null)
                {
                    continue;
                }

                var callType = callVolumeDictionary[item.Metric.CallType] as List <ChartMetrics>;

                callType.Where(m => m.Name.ToUpper() == item.Metric.LabName.ToUpper()).ToList().ForEach(s => s.count = item.Count);
            }

            foreach (var item in groupedValidCalls)
            {
                if (item.Metric.CallType == null)
                {
                    continue;
                }

                var callType = callVolumeDictionary[item.Metric.CallType] as List <ChartMetrics>;

                callType.Where(m => m.Name.ToUpper() == item.Metric.LabName.ToUpper()).ToList().ForEach(s => s.count = item.Count);
            }

            CallVolumeChart response = new CallVolumeChart();

            response.labs = labs;

            response.callTypes = callTypes;

            response.volumeData = callVolumeDictionary;

            response.countData = new List <List <string> >();

            foreach (var item in callVolumeDictionary.Values)
            {
                response.countData.Add(item.Select(m => m.count.ToString()).ToList());
            }

            return(response);
        }
Exemplo n.º 3
0
        public async Task <ActionResult <CallPurposeChart> > GetCallPurposeChartData([FromQuery] DateTime?fromDate = null, [FromQuery] DateTime?toDate = null)
        {
            if (fromDate == null)
            {
                fromDate = DateTime.Now.AddDays(Convert.ToDouble(config.GetValue <string>("DefaultReportFromDate")));
            }


            if (toDate == null)
            {
                toDate = DateTime.Now;
            }


            TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");

            fromDate = TimeZoneInfo.ConvertTimeFromUtc(fromDate.GetValueOrDefault().ToUniversalTime(), cstZone);

            toDate = TimeZoneInfo.ConvertTimeFromUtc(toDate.GetValueOrDefault().ToUniversalTime(), cstZone);

            toDate = toDate?.AddHours(23).AddMinutes(59).AddSeconds(59);

            var labs = GetLabs().Result.Value;

            var callPurpose = await context.CallPurpose.ToListAsync();

            var purposes = callPurpose.Select(m => m.PurposeoftheCall).ToList();

            Dictionary <string, List <ChartMetrics> > purposeDictionary = new Dictionary <string, List <ChartMetrics> >();

            foreach (var item in purposes)
            {
                var purpose = new List <ChartMetrics>();

                foreach (var lab in labs)
                {
                    ChartMetrics chartV2 = new ChartMetrics();

                    chartV2.Name = lab;

                    purpose.Add(chartV2);
                }

                purposeDictionary.Add(item, purpose);
            }

            var validCalls = await context.ValidCalls
                             .Where(s => s.EventTime >= fromDate && s.EventTime <= toDate)
                             .Select(x => new { x.LabName, x.ValidCallId, x.CallPurpose })
                             .ToListAsync();

            var groupedValidCalls = validCalls.GroupBy(vc => new { vc.LabName, vc.CallPurpose })
                                    .Select(group => new
            {
                Metric = group.Key,
                Count  = group.Count()
            }).ToList();

            foreach (var item in groupedValidCalls)
            {
                List <ChartMetrics> purpose = new List <ChartMetrics>();
                //if (item.Metric.CallPurpose == null)
                //    continue;

                if (item.Metric.CallPurpose?.Length > 0)
                {
                    purpose = purposeDictionary[item.Metric.CallPurpose] as List <ChartMetrics>;
                }
                else
                {
                    purpose = purposeDictionary["Blanks"] as List <ChartMetrics>;
                }

                purpose.Where(m => m.Name == item.Metric.LabName).ToList().ForEach(s => s.count = item.Count);
            }

            CallPurposeChart response = new CallPurposeChart();

            response.labs = labs;

            response.purposes = purposeDictionary.Keys.ToList();

            response.purposeData = purposeDictionary;

            response.countData = new List <List <int> >();

            foreach (var item in purposeDictionary.Values)
            {
                response.countData.Add(item.Select(m => m.count).ToList());
            }
            response.sumData = new List <string>();

            foreach (var item in response.countData)
            {
                response.sumData.Add(item.ToList().Sum().ToString());
            }

            return(response);
        }