Ejemplo n.º 1
0
        public static SupervisorViewResponse GetSupervisorView(string supervisorId)
        {
            List <KPIItem> supervisorView = new List <KPIItem>();

            List <KPIInfo>      kpis      = KPIReader.GetKPIInfo();
            List <AgentKPIInfo> agentKpis = KPIReader.GetAgentKPI();
            List <AgentInfo>    agents    = AgentReader.GetAgentsForSupervisor(supervisorId);

            var result = from k in kpis
                         join ak in agentKpis on k.KpiId equals ak.KpiId
                         join a in agents on ak.AgentId equals a.AgentId
                         orderby a.AgentName, ak.KpiValue ascending
                select new { a.AgentName, k.KpiName, ak.KpiValue };

            var agentGroups = result.GroupBy(a => a.AgentName).Select(g => g.FirstOrDefault());

            foreach (var agentGroup in agentGroups)
            {
                var    agentRows       = result.Where(a => a.AgentName.Equals(agentGroup.AgentName));
                double avgKpi          = agentRows.Average(a => a.KpiValue);
                string topKpiString    = string.Empty;
                string bottomKpiString = string.Empty;

                var topKPI = agentRows.OrderByDescending(a => a.KpiValue).Take(2);
                foreach (var row in topKPI)
                {
                    topKpiString += string.Format("{0}: {1};", row.KpiName, row.KpiValue);
                }

                var bottomKPI = agentRows.OrderBy(a => a.KpiValue).Take(2);
                foreach (var row in bottomKPI)
                {
                    bottomKpiString += string.Format("{0}: {1};", row.KpiName, row.KpiValue);
                }

                supervisorView.Add(new KPIItem()
                {
                    AgentName = agentGroup.AgentName,
                    Score     = Convert.ToInt32(avgKpi),
                    TopKPI    = topKpiString,
                    BottomKPI = bottomKpiString
                });
            }

            return(new SupervisorViewResponse()
            {
                SupervisorName = AgentReader.GetSupervisorName(supervisorId),
                SupervisorView = supervisorView.OrderByDescending(i => i.Score).ToList()
            });
        }
Ejemplo n.º 2
0
        public static HeatMapViewResponse GetHeatMapView(string supervisorId)
        {
            var heatMapItems = new List <Dictionary <string, string> >();

            List <KPIInfo>      kpis      = KPIReader.GetAllKPIInfo();
            List <AgentKPIInfo> agentKpis = KPIReader.GetAgentKPI();
            List <AgentInfo>    agents    = AgentReader.GetAgentsForSupervisor(supervisorId);

            string           centerId     = AgentReader.GetCenterIdForSupervisor(supervisorId);
            List <AgentInfo> centerAgents = AgentReader.GetAgentsForCenter(centerId);

            var result = from k in kpis
                         join ak in agentKpis on k.KpiId equals ak.KpiId
                         join a in agents on ak.AgentId equals a.AgentId
                         orderby k.Category, k.KpiId, a.AgentName
                select new { a.AgentId, a.AgentName, a.Date, k.KpiId, k.KpiName, ak.KpiValue, k.Category };

            var kpiGroups = result.GroupBy(a => a.KpiName).Select(g => g.FirstOrDefault());

            foreach (var kpiGroup in kpiGroups)
            {
                var kpiRows = from a in result
                              where a.KpiName.Equals(kpiGroup.KpiName)
                              group a by a.AgentName into g
                              select g.OrderByDescending(i => i.Date).FirstOrDefault();

                var item = new Dictionary <string, string>();
                item.Add("..Category", kpiGroup.Category);
                item.Add(".Behavior Attribute", kpiGroup.KpiName);

                var centerResult = from ak in agentKpis
                                   join ca in centerAgents on ak.AgentId equals ca.AgentId
                                   where ak.KpiId == kpiGroup.KpiId
                                   group ak by ak.KpiId into g
                                   select new { CenterAverage = g.Average(a => a.KpiValue) };

                var sdResult = from ak in agentKpis
                               join ca in centerAgents on ak.AgentId equals ca.AgentId
                               where ak.KpiId == kpiGroup.KpiId
                               select new { ak.KpiValue };
                List <double> sdList = new List <double>();
                foreach (var row in sdResult)
                {
                    sdList.Add(row.KpiValue);
                }

                double centerAverage = Convert.ToInt32(centerResult.First().CenterAverage);
                item.Add(".Center Average", centerAverage.ToString("F"));

                double standardDeviation = StatisticsHelper.GetStandardDeviation(sdList);
                item.Add(".Standard Deviation", standardDeviation.ToString("F"));

                foreach (var row in kpiRows)
                {
                    item.Add(row.AgentName, row.KpiValue.ToString("F"));
                }

                heatMapItems.Add(item);
            }

            return(new HeatMapViewResponse()
            {
                SupervisorName = AgentReader.GetSupervisorName(supervisorId),
                HeatMapView = heatMapItems
            });
        }