// GET: Manager/Statistics public ActionResult Index(int?campaignId) { IndexStatisticsModel result = new IndexStatisticsModel(); string userId = this.User.Identity.GetUserId(); if (campaignId != null) { Campaign campaign = this.data.Campaigns.Find(campaignId); if ((campaign != null) && (campaign.ManagerId == userId)) { CampaignStatisticsModel campaignStatistics = GetCampaignStatistics(campaign.CampaignId); result.CampaignStatistics = new[] { campaignStatistics }; result.CampaignId = campaign.CampaignId; result.OperatorsStatistics = this.GetOperatorStatistics(campaign.CampaignId); } else { this.TempData["ErrorMessage"] = "Invalid campaign"; } } var campaings = this.data.Campaigns.All() .Where(c => c.ManagerId == userId) .Select(c => new SelectListItem() { Text = c.Description, Value = c.CampaignId.ToString() }) .ToList(); campaings.Insert(0, new SelectListItem() { Text = "Select campaign", Value = "0" }); result.Campaigns = campaings; return(View(result)); }
private CampaignStatisticsModel GetCampaignStatistics(int campaignId) { var calls = this.data.CallResults.All() .Where(c => c.CampaignId == campaignId); int callsCount = calls.Count(); int statusSoldId = this.data.Statuses.All() .First(s => s.Description == "Sold") .StatusId; var soldCalls = calls.Where(c => c.StatusId == statusSoldId); int soldCount = soldCalls.Count(); CampaignStatisticsModel campaignStatistics = new CampaignStatisticsModel(); campaignStatistics.SoldToTotalCalls = (decimal)soldCount / callsCount; int callsTotalTime = calls.Sum(c => c.Duration); campaignStatistics.SoldToTotalTime = (decimal)soldCount / callsTotalTime; decimal price = this.data.Campaigns.Find(campaignId).Price *soldCount; campaignStatistics.TotelSoldPriceToTotalTime = callsTotalTime / price; int notAnswered = calls.Count(c => c.Status.Description == "No answer"); campaignStatistics.NotAnsweredToTotalCalls = (decimal)notAnswered / callsCount; return(campaignStatistics); }