public ActionResult TotalByVendor(DateTime?startDate, DateTime?endDate) { const int defaultResultSize = 1000; var viewModel = TotalByWorkgroupViewModel.Create(startDate, endDate, false); if (startDate == null || endDate == null) { Message = "Select a start date and an end date then click apply to view report."; return(View(viewModel)); } //Grab all workgroups for this user var allWorkgroups = _workgroupService.LoadAdminWorkgroups(true).ToList(); //Get every order that matches these workgroups var matchingOrders = _searchService.GetOrdersByWorkgroups(allWorkgroups, startDate.Value, endDate.Value, defaultResultSize); if (matchingOrders.Count == defaultResultSize) { Message = "Max size of 1000 reached. Please adjust filters."; } var workgroupCounts = new List <OrderTotals>(); foreach (var workgroup in allWorkgroups) { if (workgroup.IsActive && !workgroup.Administrative) { var orders = matchingOrders.AsQueryable().Where(a => a.WorkgroupId == workgroup.Id); foreach (var order in orders) { var orderTotal = workgroupCounts.FirstOrDefault(a => a.Vendor == order.Vendor); if (orderTotal == null) { orderTotal = new OrderTotals(); orderTotal.Vendor = order.Vendor; orderTotal.InitiatedOrders = 0; orderTotal.DeniedOrders = 0; orderTotal.CanceledOrders = 0; orderTotal.CompletedOrders = 0; orderTotal.PendingOrders = 0; workgroupCounts.Add(orderTotal); } orderTotal.InitiatedOrders++; switch (order.StatusId) { case OrderStatusCode.Codes.Denied: orderTotal.DeniedOrders++; break; case OrderStatusCode.Codes.Cancelled: orderTotal.CanceledOrders++; break; case OrderStatusCode.Codes.Complete: case OrderStatusCode.Codes.CompleteNotUploadedKfs: orderTotal.CompletedOrders++; break; default: orderTotal.PendingOrders++; break; } } } } viewModel.WorkgroupCounts = workgroupCounts.OrderBy(a => a.Vendor); var columnPreferences = _repositoryFactory.ColumnPreferencesRepository.GetNullableById(CurrentUser.Identity.Name) ?? new ColumnPreferences(CurrentUser.Identity.Name); ViewBag.DataTablesPageSize = columnPreferences.DisplayRows; return(View(viewModel)); }
public ActionResult TotalByPrimaryOrg(DateTime?startDate, DateTime?endDate) { const int defaultResultSize = 1000; var viewModel = TotalByWorkgroupViewModel.Create(startDate, endDate, false); if (startDate == null || endDate == null) { Message = "Select a start date and an end date then click apply to view report."; return(View(viewModel)); } //Grab all workgroups for this user as well as related primary orgs var allWorkgroups = _workgroupService.LoadAdminWorkgroups(true).ToList(); var workgroupIds = allWorkgroups.Select(x => x.Id).ToArray(); var workgroupsWithPrimaryOrgs = _repositoryFactory.WorkgroupRepository.Queryable.Where(x => workgroupIds.Contains(x.Id)) .Select(x => new { Workgroup = x, Primary = x.PrimaryOrganization }).ToList(); //Get every order that matches these workgroups var matchingOrders = _searchService.GetOrdersByWorkgroups(allWorkgroups, startDate.Value, endDate.Value, defaultResultSize); if (matchingOrders.Count == defaultResultSize) { Message = "Max size of 1000 reached. Please adjust filters."; } var workgroupCounts = new List <OrderTotals>(); foreach (var workgroup in allWorkgroups) { if (workgroup.IsActive && !workgroup.Administrative) { var orderTotal = workgroupCounts.FirstOrDefault(a => a.PrimaryOrg == workgroup.PrimaryOrganization.Name); if (orderTotal == null) { orderTotal = new OrderTotals(); orderTotal.PrimaryOrg = workgroupsWithPrimaryOrgs.Single(x => x.Workgroup.Id == workgroup.Id).Primary.Name; orderTotal.InitiatedOrders = 0; orderTotal.DeniedOrders = 0; orderTotal.CanceledOrders = 0; orderTotal.CompletedOrders = 0; orderTotal.PendingOrders = 0; workgroupCounts.Add(orderTotal); } orderTotal.InitiatedOrders += matchingOrders.AsQueryable().Count(a => a.WorkgroupId == workgroup.Id); orderTotal.DeniedOrders += matchingOrders.AsQueryable() .Count(a => a.WorkgroupId == workgroup.Id && a.StatusId == OrderStatusCode.Codes.Denied); orderTotal.CanceledOrders += matchingOrders.AsQueryable() .Count(a => a.WorkgroupId == workgroup.Id && a.StatusId == OrderStatusCode.Codes.Cancelled); orderTotal.CompletedOrders += matchingOrders.AsQueryable() .Count( a => a.WorkgroupId == workgroup.Id && (a.StatusId == OrderStatusCode.Codes.Complete || a.StatusId == OrderStatusCode.Codes.CompleteNotUploadedKfs)); orderTotal.PendingOrders += matchingOrders.AsQueryable() .Count( a => a.WorkgroupId == workgroup.Id && (a.StatusId == OrderStatusCode.Codes.Approver || a.StatusId == OrderStatusCode.Codes.AccountManager || a.StatusId == OrderStatusCode.Codes.Purchaser || a.StatusId == OrderStatusCode.Codes.Requester || a.StatusId == OrderStatusCode.Codes.ConditionalApprover)); } } viewModel.WorkgroupCounts = workgroupCounts.OrderBy(a => a.PrimaryOrg); var columnPreferences = _repositoryFactory.ColumnPreferencesRepository.GetNullableById(CurrentUser.Identity.Name) ?? new ColumnPreferences(CurrentUser.Identity.Name); ViewBag.DataTablesPageSize = columnPreferences.DisplayRows; return(View(viewModel)); }