public void TestDashboardRegistrationByOtherHttpMethod(HttpMethod inputType) { var handler = new DashboardManager(DashboardHelpers.DashboardRegistrationEndPoint); var response = handler.SendDashboard <object>(DashboardHelpers.DashboardRegistrationDefaultParameters(UserIds), inputType.ToNetHttpMethod()); PrAssert.That(response, PrIs.ErrorResponse().And.HttpCode(System.Net.HttpStatusCode.BadRequest)); }
public object GetSiteData(int siteId, string period, bool cache = true) { DashboardHelpers.EnsureCurrentUserCulture(); try { // Get the site IDashboardSite site = DashboardContext.Current.GetSiteById(siteId); if (site == null) { throw new DashboardException(HttpStatusCode.NotFound, "Site ikke fundet", "Et site det angivne ID blev ikke fundet"); } // Get analytics information IAnalyticsSite analytics = site as IAnalyticsSite; if (analytics == null || !analytics.HasAnalytics) { throw new DashboardException(HttpStatusCode.InternalServerError, "Analytics", "Det valgte side understøtter eller er ikke konfigureret til visning af statistik fra Google Analytics"); } // Build the query DataQuery query = DataQuery.GetFromPeriod(analytics, period, cache); query.Type = DataQueryType.Site; // Generate the response object DataResponse res = query.GetResponse(); // Return a nice JSON response return(JsonMetaResponse.GetSuccess(res)); } catch (DashboardException ex) { return(JsonMetaResponse.GetError(HttpStatusCode.InternalServerError, ex.Title + ": " + ex.Message)); } catch (Exception ex) { return(JsonMetaResponse.GetError(HttpStatusCode.InternalServerError, "Oopsie (" + ex.GetType() + "): " + ex.Message, ex.StackTrace.Split('\n'))); } }
public async Task DashboardItemIgnoredAnswer_Create_DoesCreate() { // Arrange var dashboardItemIgnoredAnswer = await DashboardHelpers.CreateDashboardItemIgnoredAnswer(DbContext); // Assert DashboardItemIgnoredAnswer dbDashboardItemIgnoredAnswer = DbContext.DashboardItemIgnoredAnswers.AsNoTracking().First(); List <DashboardItemIgnoredAnswer> dashboardItemIgnoredAnswers = DbContext.DashboardItemIgnoredAnswers.AsNoTracking().ToList(); Assert.NotNull(dbDashboardItemIgnoredAnswer); Assert.AreEqual(1, dashboardItemIgnoredAnswers.Count); Assert.AreEqual(dashboardItemIgnoredAnswer.Id, dbDashboardItemIgnoredAnswer.Id); Assert.AreEqual(1, dbDashboardItemIgnoredAnswer.Version); Assert.AreEqual(dashboardItemIgnoredAnswer.WorkflowState, dbDashboardItemIgnoredAnswer.WorkflowState); Assert.AreEqual(dashboardItemIgnoredAnswer.CreatedAt.ToString(CultureInfo.InvariantCulture), dbDashboardItemIgnoredAnswer.CreatedAt.ToString(CultureInfo.InvariantCulture)); Assert.AreEqual(dashboardItemIgnoredAnswer.CreatedByUserId, dbDashboardItemIgnoredAnswer.CreatedByUserId); Assert.AreEqual(dashboardItemIgnoredAnswer.UpdatedAt.ToString(), dbDashboardItemIgnoredAnswer.UpdatedAt.ToString()); Assert.AreEqual(dashboardItemIgnoredAnswer.UpdatedByUserId, dbDashboardItemIgnoredAnswer.UpdatedByUserId); Assert.AreEqual(dashboardItemIgnoredAnswer.AnswerId, dbDashboardItemIgnoredAnswer.AnswerId); Assert.AreEqual(dashboardItemIgnoredAnswer.DashboardItemId, dbDashboardItemIgnoredAnswer.DashboardItemId); }
public async Task DashboardItemCompare_Create_DoesCreate() { // Arrange var dashboardItemCompare = await DashboardHelpers.CreateDashboardItemCompare(DbContext); // Assert DashboardItemCompare dbDashboardItemCompare = DbContext.DashboardItemCompares.AsNoTracking().First(); List <DashboardItemCompare> dashboardItemCompares = DbContext.DashboardItemCompares.AsNoTracking().ToList(); Assert.NotNull(dbDashboardItemCompare); Assert.AreEqual(1, dashboardItemCompares.Count); Assert.AreEqual(dashboardItemCompare.Id, dbDashboardItemCompare.Id); Assert.AreEqual(1, dbDashboardItemCompare.Version); Assert.AreEqual(dashboardItemCompare.WorkflowState, dbDashboardItemCompare.WorkflowState); Assert.AreEqual(dashboardItemCompare.CreatedAt.ToString(CultureInfo.InvariantCulture), dbDashboardItemCompare.CreatedAt.ToString(CultureInfo.InvariantCulture)); Assert.AreEqual(dashboardItemCompare.CreatedByUserId, dbDashboardItemCompare.CreatedByUserId); Assert.AreEqual(dashboardItemCompare.UpdatedAt.ToString(), dbDashboardItemCompare.UpdatedAt.ToString()); Assert.AreEqual(dashboardItemCompare.UpdatedByUserId, dbDashboardItemCompare.UpdatedByUserId); Assert.AreEqual(dashboardItemCompare.Position, dbDashboardItemCompare.Position); Assert.AreEqual(dashboardItemCompare.LocationId, dbDashboardItemCompare.LocationId); Assert.AreEqual(dashboardItemCompare.TagId, dbDashboardItemCompare.TagId); Assert.AreEqual(dashboardItemCompare.DashboardItemId, dbDashboardItemCompare.DashboardItemId); }
public async Task DashboardItem_Create_DoesCreate() { // Arrange var dashboardItem = await DashboardHelpers.CreateDashboardItem(DbContext); // Assert DashboardItem dbDashboardItem = DbContext.DashboardItems.AsNoTracking().First(); List <DashboardItem> dashboardItems = DbContext.DashboardItems.AsNoTracking().ToList(); DashboardItemVersion dbDashboardItemVersion = DbContext.DashboardItemVersions.AsNoTracking().First(); List <DashboardItemVersion> dashboardItemVersions = DbContext.DashboardItemVersions.AsNoTracking().ToList(); Assert.NotNull(dbDashboardItem); Assert.NotNull(dbDashboardItemVersion); Assert.AreEqual(1, dashboardItems.Count); Assert.AreEqual(1, dashboardItemVersions.Count); Assert.AreEqual(dashboardItem.Id, dbDashboardItem.Id); Assert.AreEqual(1, dbDashboardItem.Version); Assert.AreEqual(dashboardItem.WorkflowState, dbDashboardItem.WorkflowState); Assert.AreEqual(dashboardItem.CreatedAt.ToString(CultureInfo.InvariantCulture), dbDashboardItem.CreatedAt.ToString(CultureInfo.InvariantCulture)); Assert.AreEqual(dashboardItem.CreatedByUserId, dbDashboardItem.CreatedByUserId); Assert.AreEqual(dashboardItem.UpdatedAt.ToString(), dbDashboardItem.UpdatedAt.ToString()); Assert.AreEqual(dashboardItem.UpdatedByUserId, dbDashboardItem.UpdatedByUserId); Assert.AreEqual(dashboardItem.Position, dbDashboardItem.Position); Assert.AreEqual(dashboardItem.CalculateAverage, dbDashboardItem.CalculateAverage); Assert.AreEqual(dashboardItem.ChartType, dbDashboardItem.ChartType); Assert.AreEqual(dashboardItem.CompareEnabled, dbDashboardItem.CompareEnabled); Assert.AreEqual(dashboardItem.FilterAnswerId, dbDashboardItem.FilterAnswerId); Assert.AreEqual(dashboardItem.FilterQuestionId, dbDashboardItem.FilterQuestionId); Assert.AreEqual(dashboardItem.Period, dbDashboardItem.Period); }
public object GetDashboard(string section) { DashboardHelpers.EnsureCurrentUserCulture(); // Initialize a new list for the tabs List <DashboardTab> tabs = new List <DashboardTab>(); // Iterate through each of the added plugins foreach (IDashboardPlugin plugin in DashboardContext.Current.Plugins) { try { plugin.GetDashboard(section, tabs); } catch (Exception ex) { LogHelper.Error <DashboardController>("Plugin of type " + plugin.GetType() + " has failed for GetDashboard()", ex); } } // Update the "Id" and "IsActive" properties int i = 0; foreach (DashboardTab tab in tabs) { tab.IsActive = (i == 0); tab.Id = i++; } // Return the list and let JSON.net do the magic return(tabs); }
public void TestValidSpecialDashboardRegistration(ValidSpecialDashboardRegistration inputType) { var handler = new DashboardManager(DashboardHelpers.DashboardRegistrationEndPoint); var originalRequest = new Dictionary <string, object>(DashboardHelpers.DashboardRegistrationDefaultParameters(UserIds)); var request = originalRequest["settings"] as Dictionary <string, object>; if (inputType == ValidSpecialDashboardRegistration.AbstractAgents) { request["owners"] = new Dictionary <string, List <int> > { ["agents"] = new List <int> { -1 } }; } else { request["owners"] = new Dictionary <string, List <int> > { ["depts"] = new List <int> { -1 } }; } originalRequest["settings"] = request; var response = handler.SendDashboard <object>(originalRequest, HttpMethod.Put); PrAssert.That(response, PrIs.SuccessfulResponse().And.HttpCode(System.Net.HttpStatusCode.NoContent)); PrAssert.That(response.Result, PrIs.Null.Or.Empty); //Verify owners data VerifyOwnersData(-1, -1); }
private Dictionary <string, object> GetRequestDashboardRegistrationValid(DashboardHelpers.Options option, Owners owner, DashboardHelpers.SearchOwners searchOwner, DashboardHelpers.TimePeriod timePeriod, DashboardHelpers.Types type) { var originalRequest = new Dictionary <string, object>(DashboardHelpers.DashboardRegistrationDefaultParameters(UserIds)); var request = originalRequest["settings"] as Dictionary <string, object>; if (option == DashboardHelpers.Options.Array) { request["options"] = DashboardHelpers.OptionValues.Select(item => item.Value).ToList(); } else if (option == DashboardHelpers.Options.Random) { request["options"] = RandOptionList; } else { request["options"] = new List <int> { DashboardHelpers.OptionValues[option] }; } request["owners"] = new Dictionary <string, List <int> > { ["agents"] = OwnerValues[owner](), ["depts"] = new List <int>() }; request["searchOwners"] = SearchOwnerValues[searchOwner](); request["timePeriod"] = new Dictionary <string, string> { ["type"] = timePeriod.ToString() }; originalRequest["type"] = type.ToString().ToLower(); originalRequest["settings"] = request; return(originalRequest); }
public ConversionRangeDataResponse GetConversionPerformanceData([FromBody]Filter filters) { using (SqlConnection sqlCon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["CC_ProdConn"].ConnectionString)) { string userName = HttpContext.Current.GetUserName(); Filter f = new Filter() { filters = filters.filters, range = filters.range }; #pragma warning disable CS0436 // Type conflicts with imported type SqlCommand sqlComm = DashboardHelpers.GetFiltersParameters(f, "[getConversionPerformanceData]", userName); #pragma warning restore CS0436 // Type conflicts with imported type sqlComm.Connection = sqlCon; ConversionRangeDataResponse performanceData = new ConversionRangeDataResponse(); sqlCon.Open(); try { SqlDataReader reader = sqlComm.ExecuteReader(); performanceData = ConversionRangeDataResponse.Create(reader); } catch (Exception ex) { throw ex; } return performanceData; } }
public ConversionTotalAndAvgData GetConversionStatsData([FromBody]Filter filters) { using (SqlConnection sqlCon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["CC_ProdConn"].ConnectionString)) { var userName = HttpContext.Current.GetUserName(); Filter f = new Filter() { filters = filters.filters, range = filters.range }; #pragma warning disable CS0436 // Type conflicts with imported type SqlCommand sqlComm = DashboardHelpers.GetFiltersParameters(f, "[getConversionStatistics]", userName); #pragma warning restore CS0436 // Type conflicts with imported type sqlComm.Connection = sqlCon; ConversionTotalAndAvgData totals = new ConversionTotalAndAvgData(); sqlCon.Open(); try { SqlDataReader reader = sqlComm.ExecuteReader(); if (reader.Read()) { totals = ConversionTotalAndAvgData.Create(reader); } } catch (Exception ex) { throw ex; } return totals; } }
public async Task Dashboard_Create_DoesCreate() { // Arrange var dashboard = DashboardHelpers.GetNewDashboard(); // Act await dashboard.Create(DbContext); // Assert Dashboard dbDashboard = DbContext.Dashboards.AsNoTracking().First(); List <Dashboard> dashboards = DbContext.Dashboards.AsNoTracking().ToList(); DashboardVersion dbDashboardVersion = DbContext.DashboardVersions.AsNoTracking().First(); List <DashboardVersion> dashboardVersions = DbContext.DashboardVersions.AsNoTracking().ToList(); Assert.NotNull(dbDashboard); Assert.NotNull(dbDashboardVersion); Assert.AreEqual(1, dashboards.Count); Assert.AreEqual(1, dashboardVersions.Count); Assert.AreEqual(dashboard.Id, dbDashboard.Id); Assert.AreEqual(1, dbDashboard.Version); Assert.AreEqual(dashboard.WorkflowState, dbDashboard.WorkflowState); Assert.AreEqual(dashboard.CreatedAt.ToString(CultureInfo.InvariantCulture), dbDashboard.CreatedAt.ToString(CultureInfo.InvariantCulture)); Assert.AreEqual(dashboard.CreatedByUserId, dbDashboard.CreatedByUserId); Assert.AreEqual(dashboard.UpdatedAt.ToString(), dbDashboard.UpdatedAt.ToString()); Assert.AreEqual(dashboard.UpdatedByUserId, dbDashboard.UpdatedByUserId); Assert.AreEqual(dashboard.Name, dbDashboard.Name); Assert.AreEqual(dashboard.SurveyId, dbDashboard.SurveyId); }
public dynamic ExportWebSiteStatistic(Filter filters, string userName) { using (SqlConnection sqlCon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["CC_ProdConn"].ConnectionString)) { SqlCommand sqlComm = DashboardHelpers.GetFiltersParameters(filters, "[GetWebSiteStatisticApi]", userName); sqlComm.CommandTimeout = int.MaxValue; sqlComm.Connection = sqlCon; WebSiteAverage webSiteAverage = new WebSiteAverage(); try { sqlCon.Open(); SqlDataReader reader = sqlComm.ExecuteReader(); while (reader.Read()) { webSiteAverage = new WebSiteAverage() { total = reader.IsDBNull(reader.GetOrdinal("total")) ? 0 : int.Parse(reader.GetValue(reader.GetOrdinal("total")).ToString()), compliant = reader.IsDBNull(reader.GetOrdinal("compliant")) ? 0 : int.Parse(reader.GetValue(reader.GetOrdinal("compliant")).ToString()), bad = reader.IsDBNull(reader.GetOrdinal("bad")) ? 0 : int.Parse(reader.GetValue(reader.GetOrdinal("bad")).ToString()), nonCompliant = reader.IsDBNull(reader.GetOrdinal("nonCompliant")) ? 0 : int.Parse(reader.GetValue(reader.GetOrdinal("nonCompliant")).ToString()), }; } //return webSiteAverage; var propNames = new List <PropertieName> { new PropertieName { propName = "Total", propValue = "total", propPosition = 1 }, new PropertieName { propName = "Compliant", propValue = "compliant", propPosition = 2 }, new PropertieName { propName = "Non compliant", propValue = "nonCompliant", propPosition = 3 }, new PropertieName { propName = "Bad", propValue = "bad", propPosition = 4 } }; List <ExportWebSiteStatisticModel> exportWebSiteStatistic = new List <ExportWebSiteStatisticModel>(); exportWebSiteStatistic.Add(new ExportWebSiteStatisticModel() { bad = webSiteAverage.bad, compliant = webSiteAverage.compliant, nonCompliant = webSiteAverage.nonCompliant, total = webSiteAverage.total }); ExportHelper.Export(propNames, exportWebSiteStatistic, "WebStat" + DateTime.Now.ToString("MM-dd-yyyy") + DateTime.Now.Second.ToString() + ".xlsx", "WebSiteStatistic", userName); } catch (Exception ex) { throw ex; } } return("success"); }
public ActionResult Dashboard() { if (!User.Identity.IsAuthenticated) { return(RedirectToAction("Index", "Home")); } DashboardView dashboardView = new DashboardView(); ViewBag.OutstandingTasks = 0; ViewBag.OutstandingActions = 0; ViewBag.OutstandingOffers = 0; ViewBag.Orders = 0; ViewBag.CurrentRequests = 0; ViewBag.CurrentAvailable = 0; ViewBag.RequestsOutstanding = 0; ViewBag.RequestsFulfilled = 0; ViewBag.RequestsTotal = 0; if (User.Identity.IsAuthenticated) { dashboardView = DashboardHelpers.GetDashboardViewLogin(User); ViewBag.OutstandingActions = UserActionHelpers.GetActionsForUser(User).Count(); if (dashboardView.UserTaskList != null) { ViewBag.OutstandingTasks = dashboardView.UserTaskList.Count(); } if (dashboardView.RequirementListingList != null) { ViewBag.CurrentRequests = dashboardView.RequirementListingList.Count(); ViewBag.RequestsOutstanding = DashboardHelpers.GetRequirementsOutstandingFromDashboardView(dashboardView); ViewBag.RequestsFulfilled = DashboardHelpers.GetRequirementsFulfilledFromDashboardView(dashboardView); ViewBag.RequestsTotal = DashboardHelpers.GetRequirementsTotalFromDashboardView(dashboardView); } if (dashboardView.AvailableListingList != null) { ViewBag.CurrentAvailable = dashboardView.AvailableListingList.Count(); ViewBag.AvailableOutstanding = DashboardHelpers.GetAvailableOutstandingFromDashboardView(dashboardView); ViewBag.AvailableFulfilled = DashboardHelpers.GetAvailableFulfilledFromDashboardView(dashboardView); ViewBag.AvailableTotal = DashboardHelpers.GetAvailableTotalFromDashboardView(dashboardView); } if (dashboardView.OfferList != null) { ViewBag.OutstandingOffers = dashboardView.OfferList.Count(); } if (dashboardView.OrderList != null) { ViewBag.Orders = dashboardView.OrderList.Count(); } } else { dashboardView = DashboardHelpers.GetDashboardView(); } return(View(dashboardView)); }
public async Task DashboardItem_Delete_DoesDelete() { // Arrange var dashboardItem = await DashboardHelpers.CreateDashboardItem(DbContext); // Act var oldUpdatedAt = dashboardItem.UpdatedAt.GetValueOrDefault(); await dashboardItem.Delete(DbContext); // Assert DashboardItem dbDashboardItem = DbContext.DashboardItems.AsNoTracking().First(); List <DashboardItem> dashboardItems = DbContext.DashboardItems.AsNoTracking().ToList(); List <DashboardItemVersion> dashboardItemVersions = DbContext.DashboardItemVersions.AsNoTracking().ToList(); Assert.NotNull(dbDashboardItem); Assert.AreEqual(1, dashboardItems.Count); Assert.AreEqual(2, dashboardItemVersions.Count); Assert.AreEqual(dashboardItem.Id, dbDashboardItem.Id); Assert.AreEqual(2, dbDashboardItem.Version); Assert.AreEqual(Constants.WorkflowStates.Removed, dbDashboardItem.WorkflowState); Assert.AreEqual(dashboardItem.CreatedAt.ToString(CultureInfo.InvariantCulture), dbDashboardItem.CreatedAt.ToString(CultureInfo.InvariantCulture)); Assert.AreEqual(dashboardItem.CreatedByUserId, dbDashboardItem.CreatedByUserId); Assert.AreEqual(dashboardItem.UpdatedByUserId, dbDashboardItem.UpdatedByUserId); Assert.AreEqual(dashboardItem.Id, dashboardItemVersions[0].DashboardItemId); Assert.AreEqual(1, dashboardItemVersions[0].Version); Assert.AreEqual(Constants.WorkflowStates.Created, dashboardItemVersions[0].WorkflowState); Assert.AreEqual(dashboardItem.CreatedAt.ToString(CultureInfo.InvariantCulture), dashboardItemVersions[0].CreatedAt.ToString(CultureInfo.InvariantCulture)); Assert.AreEqual(dashboardItem.CreatedByUserId, dashboardItemVersions[0].CreatedByUserId); Assert.AreEqual(oldUpdatedAt.ToString(), dashboardItemVersions[0].UpdatedAt.ToString()); Assert.AreEqual(dashboardItem.UpdatedByUserId, dashboardItemVersions[0].UpdatedByUserId); Assert.AreEqual(dashboardItem.Position, dashboardItemVersions[0].Position); Assert.AreEqual(dashboardItem.CalculateAverage, dashboardItemVersions[0].CalculateAverage); Assert.AreEqual(dashboardItem.ChartType, dashboardItemVersions[0].ChartType); Assert.AreEqual(dashboardItem.CompareEnabled, dashboardItemVersions[0].CompareEnabled); Assert.AreEqual(dashboardItem.FilterAnswerId, dashboardItemVersions[0].FilterAnswerId); Assert.AreEqual(dashboardItem.FilterQuestionId, dashboardItemVersions[0].FilterQuestionId); Assert.AreEqual(dashboardItem.Period, dashboardItemVersions[0].Period); Assert.AreEqual(dashboardItem.Id, dashboardItemVersions[1].DashboardItemId); Assert.AreEqual(2, dashboardItemVersions[1].Version); Assert.AreEqual(Constants.WorkflowStates.Removed, dashboardItemVersions[1].WorkflowState); Assert.AreEqual(dashboardItem.CreatedAt.ToString(CultureInfo.InvariantCulture), dashboardItemVersions[1].CreatedAt.ToString(CultureInfo.InvariantCulture)); Assert.AreEqual(dashboardItem.CreatedByUserId, dashboardItemVersions[1].CreatedByUserId); Assert.AreEqual(dashboardItem.UpdatedByUserId, dashboardItemVersions[1].UpdatedByUserId); Assert.AreEqual(dashboardItem.Position, dashboardItemVersions[1].Position); Assert.AreEqual(dashboardItem.CalculateAverage, dashboardItemVersions[1].CalculateAverage); Assert.AreEqual(dashboardItem.ChartType, dashboardItemVersions[1].ChartType); Assert.AreEqual(dashboardItem.CompareEnabled, dashboardItemVersions[1].CompareEnabled); Assert.AreEqual(dashboardItem.FilterAnswerId, dashboardItemVersions[1].FilterAnswerId); Assert.AreEqual(dashboardItem.FilterQuestionId, dashboardItemVersions[1].FilterQuestionId); Assert.AreEqual(dashboardItem.Period, dashboardItemVersions[1].Period); }
public void TestDashboardRegistrationAccessEndpoint(AccessState accessState, HttpStatusCode httpStatusCode, ResultCode resultCode) { var handler = new DashboardManager(); var request = new Dictionary <string, object>(DashboardHelpers.DashboardRegistrationDefaultParameters(UserIds)); AccessEndpointManager accessEndpointHandler = new AccessEndpointManager(); var response = accessEndpointHandler.AccessEndpoint <object>(accessState, DashboardRegistrationEndpoint, request, HttpMethod.Put); PrAssert.That(response, PrIs.ErrorResponse().And.HttpCode(httpStatusCode).And.ErrorCode((int)resultCode), $"Still able to send a dashboard."); }
public void TestDuplicateParameters(DashboardHelpers.Parameters parameter, DashboardHelpers.Values value) { var handler = new DashboardManager(DashboardHelpers.DashboardRegistrationEndPoint); var parametersSameValue = DashboardHelpers.DashboardRegistrationSameValueParameters(parameter, UserIds); var parametersNotSameValue = DashboardHelpers.DashboardRegistrationNotSameValueParameters(parameter, UserIds); var response = handler.SendDashboard <object>(value == DashboardHelpers.Values.Same ? parametersSameValue : parametersNotSameValue, System.Net.Http.HttpMethod.Put); PrAssert.That(response, PrIs.ErrorResponse().And.HttpCode(System.Net.HttpStatusCode.BadRequest)); }
public void TestInvalidSpecialDashboardRegistration(DashboardHelpers.InvalidSpecialDashboardRegistration inputType) { var handler = new DashboardManager(DashboardHelpers.DashboardRegistrationEndPoint); var originalRequest = new Dictionary <string, object>(DashboardHelpers.DashboardRegistrationDefaultParameters(UserIds)); var request = RequestContentForInvalidSpecialDashboardRegistration[inputType](originalRequest["settings"] as Dictionary <string, object>); originalRequest["settings"] = request; var response = handler.SendDashboard <object>(originalRequest, System.Net.Http.HttpMethod.Put, inputType == DashboardHelpers.InvalidSpecialDashboardRegistration.WrongContentType ? "html/text" : "application/json"); PrAssert.That(response, PrIs.ErrorResponse().And.HttpCode(System.Net.HttpStatusCode.BadRequest)); }
private Dictionary <string, object> GetRequestContentForInjectionDashboardRegistration(DashboardHelpers.Parameters parameter, InjectionInput inputType) { var orginalRequest = new Dictionary <string, object>(DashboardHelpers.DashboardRegistrationDefaultParameters(UserIds)); var request = orginalRequest["settings"] as Dictionary <string, object>; var injectionData = InjectionInputData.InjectionInputMapper[inputType]; switch (parameter) { case DashboardHelpers.Parameters.Agents: request["owners"] = new Dictionary <string, string> { ["agents"] = injectionData }; break; case DashboardHelpers.Parameters.Depts: request["owners"] = new Dictionary <string, string> { ["depts"] = injectionData }; break; case DashboardHelpers.Parameters.TimePeriodType: request["timePeriod"] = new Dictionary <string, string> { ["type"] = injectionData }; break; case DashboardHelpers.Parameters.Type: orginalRequest["type"] = injectionData; break; default: request[Char.ToLowerInvariant(parameter.ToString()[0]) + parameter.ToString().Substring(1)] = injectionData; break; } if (parameter == DashboardHelpers.Parameters.Settings) { orginalRequest["settings"] = injectionData; } else { orginalRequest["settings"] = request; } return(orginalRequest); }
public async Task Dashboard_Update_DoesUpdate() { // Arrange var dashboard = DashboardHelpers.GetNewDashboard(); await dashboard.Create(DbContext); // Act var oldUpdatedAt = dashboard.UpdatedAt.GetValueOrDefault(); dashboard.Name += " - Updated"; await dashboard.Update(DbContext); // Assert Dashboard dbDashboard = DbContext.Dashboards.AsNoTracking().First(); List <Dashboard> dashboards = DbContext.Dashboards.AsNoTracking().ToList(); List <DashboardVersion> dashboardVersion = DbContext.DashboardVersions.AsNoTracking().ToList(); Assert.NotNull(dbDashboard); Assert.AreEqual(1, dashboards.Count); Assert.AreEqual(2, dashboardVersion.Count); Assert.AreEqual(dashboard.Id, dbDashboard.Id); Assert.AreEqual(2, dbDashboard.Version); Assert.AreEqual(dashboard.WorkflowState, dbDashboard.WorkflowState); Assert.AreEqual(dashboard.UpdatedByUserId, dbDashboard.UpdatedByUserId); Assert.AreEqual(dashboard.Name, dbDashboard.Name); Assert.AreEqual(dashboard.LocationId, dbDashboard.LocationId); Assert.AreEqual(dashboard.TagId, dbDashboard.TagId); Assert.AreEqual(dashboard.Id, dashboardVersion[0].DashboardId); Assert.AreEqual(1, dashboardVersion[0].Version); Assert.AreEqual(dashboard.WorkflowState, dashboardVersion[0].WorkflowState); Assert.AreEqual(dashboard.CreatedAt.ToString(CultureInfo.InvariantCulture), dashboardVersion[0].CreatedAt.ToString(CultureInfo.InvariantCulture)); Assert.AreEqual(dashboard.CreatedByUserId, dashboardVersion[0].CreatedByUserId); Assert.AreEqual("Name", dashboardVersion[0].Name); Assert.AreEqual(oldUpdatedAt.ToString(), dashboardVersion[0].UpdatedAt.ToString()); Assert.AreEqual(dashboard.UpdatedByUserId, dashboardVersion[0].UpdatedByUserId); Assert.AreEqual(dashboard.Id, dashboardVersion[1].DashboardId); Assert.AreEqual(2, dashboardVersion[1].Version); Assert.AreEqual(dashboard.WorkflowState, dashboardVersion[1].WorkflowState); Assert.AreEqual(dashboard.CreatedAt.ToString(CultureInfo.InvariantCulture), dashboardVersion[1].CreatedAt.ToString(CultureInfo.InvariantCulture)); Assert.AreEqual(dashboard.CreatedByUserId, dashboardVersion[1].CreatedByUserId); Assert.AreEqual("Name - Updated", dashboardVersion[1].Name); Assert.AreEqual(dashboard.UpdatedByUserId, dashboardVersion[1].UpdatedByUserId); }
public object GetPageData(int siteId, int pageId, string period, bool cache = true) { DashboardHelpers.EnsureCurrentUserCulture(); try { // Look for the site with the specified ID IDashboardSite site = DashboardContext.Current.GetSiteById(siteId); if (site == null) { throw new DashboardException(HttpStatusCode.NotFound, "Site ikke fundet", "Et site det angivne ID blev ikke fundet"); } // Attempt to cast the site to an Analytics site IAnalyticsSite analytics = site as IAnalyticsSite; if (analytics == null || !analytics.HasAnalytics) { throw new DashboardException(HttpStatusCode.InternalServerError, "Analytics", "Det valgte side understøtter eller er ikke konfigureret til visning af statistik fra Google Analytics"); } // Get the published content of the page IPublishedContent content = UmbracoContext.ContentCache.GetById(pageId); // Build the query DataQuery query = DataQuery.GetFromPeriod(analytics, period, cache); query.Type = DataQueryType.Page; query.PageId = content.Id; // Set the URL for the query. The protocol and domain is stripped so we only have the path query.PageUrl = Regex.Replace(content.Url, "^http(s|)://[a-z0-9-.]+/", "/"); // Google Analytics sees the same URL with and without a trailing slash as two different pages, so we should tell the query to check both string pageUrlTrimmed = query.PageUrl.TrimEnd('/'); string pageUrlSlashed = pageUrlTrimmed + '/'; query.PageUrls = String.IsNullOrEmpty(pageUrlTrimmed) ? new[] { pageUrlSlashed } : new[] { pageUrlTrimmed, pageUrlSlashed }; // Generate the response object DataResponse res = query.GetResponse(); // Return a nice JSON response return(JsonMetaResponse.GetSuccess(res)); } catch (DashboardException ex) { return(JsonMetaResponse.GetError(HttpStatusCode.InternalServerError, ex.Title + ": " + ex.Message)); } catch (Exception ex) { return(JsonMetaResponse.GetError(HttpStatusCode.InternalServerError, "Oopsie (" + ex.GetType() + "): " + ex.Message, ex.StackTrace.Split('\n'))); } }
public void TestInvalidBodyJson(InvalidSpecialCondition inputType) { var handler = new DashboardManager(DashboardHelpers.DashboardRegistrationEndPoint); var request = new Dictionary <string, object>(DashboardHelpers.DashboardRegistrationDefaultParameters(UserIds)); string jsonContent = string.Empty; if (inputType == InvalidSpecialCondition.BrokenJsonFormat) { jsonContent = JsonConvert.SerializeObject(request).Remove(0, 1); } else { jsonContent = DashboardHelpers.InvalidBodyJsonTestCasesMapper[inputType].ToString(); } var response = handler.SendDashboard <object>(jsonContent, System.Net.Http.HttpMethod.Put); PrAssert.That(response, PrIs.ErrorResponse().And.HttpCode(System.Net.HttpStatusCode.BadRequest)); }
public ConversionChartData GetChartData([FromBody]ConversionChartFilter filters) { using (SqlConnection sqlCon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["CC_ProdConn"].ConnectionString)) { string userName = HttpContext.Current.GetUserName(); Filter f = new Filter() { filters = filters.filters, range = filters.range }; #pragma warning disable CS0436 // Type conflicts with imported type SqlCommand sqlComm = DashboardHelpers.GetFiltersParameters(f, "[getConversionChartData]", userName); #pragma warning restore CS0436 // Type conflicts with imported type if (filters.chartType != null && filters.chartType != "") { sqlComm.Parameters.AddWithValue("@chartType", filters.chartType); } sqlComm.Parameters.AddWithValue("@pagerows", filters.paging.pagerows); sqlComm.Parameters.AddWithValue("@pagenum", filters.paging.pagenum); if (filters.sorting?.sortBy != null && filters.sorting.sortOrder != null && filters.sorting.sortBy != "" && filters.sorting.sortOrder != "") { sqlComm.Parameters.AddWithValue("@OrderByColumn", filters.sorting.sortBy); sqlComm.Parameters.AddWithValue("@sortOrder", (filters.sorting.sortOrder != "desc")); } sqlComm.Connection = sqlCon; ConversionChartData chartData = new ConversionChartData(); sqlCon.Open(); try { SqlDataReader reader = sqlComm.ExecuteReader(); chartData = ConversionChartData.Create(reader); } catch (Exception ex) { throw ex; } return chartData; } }
public async Task ChartData_Calculate_Correct() { // Settings CultureInfo.CurrentCulture = new CultureInfo("da"); // Add total tag await DatabaseHelper.AddTotalTag(DbContext); // Arrange var localizationService = MockHelper.GetLocalizationService(); var dashboardViews = DashboardHelpers.GetChartDataDashBoards(); foreach (var(key, value) in dashboardViews) { Console.WriteLine($"Check template: {value}"); // Act foreach (var itemViewModel in key.Items) { var newItemViewModel = DashboardHelpers.CopyDashboardItem(itemViewModel); var dashboardItem = DashboardHelpers.GetDashboardItemFromModel(itemViewModel); await ChartDataHelpers.CalculateDashboardItem( newItemViewModel, DbContext, dashboardItem, localizationService, key.LocationId, key.TagId, key.SurveyId, key.AnswerDates); DashboardHelpers.CheckData(itemViewModel, newItemViewModel, key, value); } } }
public dynamic SectionsExport(Filter filters, string userName) { using (SqlConnection sqlCon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["CC_ProdConn"].ConnectionString)) { #pragma warning disable CS0436 // Type conflicts with imported type SqlCommand sqlComm = DashboardHelpers.GetFiltersParameters(filters, "[GetSectionScores]", userName); #pragma warning restore CS0436 // Type conflicts with imported type sqlComm.Connection = sqlCon; List <CoachingQueue> coachingQueueLst = new List <CoachingQueue>(); List <CoachingQueueCallDetails> cqcd = new List <CoachingQueueCallDetails>(); CoachingQueueResponceData cq = new CoachingQueueResponceData(); var callShortInfo = new CallShortInfov2(); try { sqlCon.Open(); SqlDataReader reader = sqlComm.ExecuteReader(); var sectioInfoRaw = new List <SectionInfoRaw>(); try { sectioInfoRaw = SectionInfoRaw.Create(reader); } catch (Exception ex) { throw ex; } //return scorecardInfo; List <SectionsExportModel> sectionsExportModels = new List <SectionsExportModel>(); var propNames = new List <PropertieName> { new PropertieName { propName = "Scorecard Name", propValue = "scorecardName", propPosition = 1 }, new PropertieName { propName = "Section Name", propValue = "sectionName", propPosition = 2 }, new PropertieName { propName = "Question Name", propValue = "questionName", propPosition = 3 }, new PropertieName { propName = "isLinked", propValue = "isLinked", propPosition = 4 }, new PropertieName { propName = "Total Right", propValue = "totalRight", propPosition = 5 }, new PropertieName { propName = "Right Score, %", propValue = "rightScore", propPosition = 6 }, new PropertieName { propName = "Total Wrong", propValue = "totalWrong", propPosition = 7 }, new PropertieName { propName = "Wrong Score, %", propValue = "wrongScore", propPosition = 8 }, new PropertieName { propName = "Total", propValue = "total", propPosition = 9 } }; foreach (var item in sectioInfoRaw) { sectionsExportModels.Add(new SectionsExportModel { scorecardName = item.scorecardName, sectionName = item.sectionName, questionName = item.questionShortName, isLinked = item.isLinked == true ? "Yes" : "No", totalRight = item.totalRight, totalWrong = item.totalWrong, total = item.totalRight + item.totalWrong, rightScore = (item.totalRight + item.totalWrong) == 0 ? 0 : Math.Round((double)item.totalRight / (item.totalRight + item.totalWrong) * 100, 2), wrongScore = (item.totalRight + item.totalWrong) == 0 ? 0 : Math.Round((double)item.totalWrong / (item.totalRight + item.totalWrong) * 100, 2) }); } ExportHelper.Export(propNames, sectionsExportModels, "Sections" + DateTime.Now.ToString("MM-dd-yyyy") + DateTime.Now.Millisecond.ToString() + ".xlsx", "Sections", userName); return("sucess"); } catch (Exception ex) { throw ex; } } }
/// <summary> /// Initializes a new dashboard block based on the specified <code>alias</code>. /// </summary> /// <param name="alias">The alias of the block.</param> public DashboardBlock(string alias) { Alias = alias; View = DashboardHelpers.GetCachableUrl("/App_Plugins/Skybrud.Dashboard/Views/Blocks/" + alias + ".html"); }
/// <summary> /// Initializes a new dashboard block based on the specified <code>alias</code> and <code>view</code>. /// </summary> /// <param name="alias">The alias of the block.</param> /// <param name="view">The URL of the view.</param> public DashboardBlock(string alias, string view) { Alias = alias; View = DashboardHelpers.GetCachableUrl(view); }
public ActionResult Dashboard() { HomeDashboardView view = DashboardHelpers.CreateHomeDashboardView(db, User); return(View(view)); }
private Dictionary <string, object> GetRequestContentForInvalidDashboardRegistration(DashboardHelpers.Parameters parameter, InvalidTestCases inputType) { var orginalRequest = new Dictionary <string, object>(DashboardHelpers.DashboardRegistrationDefaultParameters(UserIds)); var request = orginalRequest["settings"] as Dictionary <string, object>; var parameterName = Char.ToLowerInvariant(parameter.ToString()[0]) + parameter.ToString().Substring(1); if (inputType != InvalidTestCases.Missing) { switch (parameter) { case DashboardHelpers.Parameters.Agents: request["owners"] = new Dictionary <string, string> { ["agents"] = inputType == InvalidTestCases.Negative ? "-2" : InvalidMaps[inputType].ToString() }; break; case DashboardHelpers.Parameters.Depts: request["owners"] = new Dictionary <string, string> { ["depts"] = InvalidMaps[inputType].ToString() }; break; case DashboardHelpers.Parameters.TimePeriodType: request["timePeriod"] = new Dictionary <string, string> { ["type"] = InvalidMaps[inputType].ToString() }; break; case DashboardHelpers.Parameters.Settings: orginalRequest["settings"] = InvalidMaps[inputType].ToString(); break; case DashboardHelpers.Parameters.Type: orginalRequest["type"] = InvalidMaps[inputType].ToString(); break; default: request[parameterName] = InvalidMaps[inputType].ToString(); break; } } else if (inputType == InvalidTestCases.Missing) { if (DashboardHelpers.Parameters.Settings == parameter || DashboardHelpers.Parameters.Type == parameter) { orginalRequest.Remove(parameterName); } else if (DashboardHelpers.Parameters.Agents == parameter || DashboardHelpers.Parameters.Depts == parameter) { (request["owners"] as Dictionary <string, List <int> >).Remove(parameterName); } else if (DashboardHelpers.Parameters.TimePeriodType == parameter) { (request["timePeriod"] as Dictionary <string, string>).Remove("type"); } else { request.Remove(parameterName); } } orginalRequest["settings"] = request; return(orginalRequest); }
public dynamic AgentRankingExport(AverageFilter filters, string userName) { using (SqlConnection sqlCon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["CC_ProdConn"].ConnectionString)) { string p = Path.Combine(HostingEnvironment.MapPath(@"~\export\")); if (!Directory.Exists(p)) { Directory.CreateDirectory(p); } Filter f = new Filter() { filters = filters.filters, range = filters.range }; SqlCommand sqlComm = new SqlCommand(); if (filters.filters.missedItems != null && filters.filters.missedItems.Count != 0) { sqlComm = DashboardHelpers.GetFiltersParameters(f, "[getAgentRankingJson_v3_ExportForMissedPoints]", userName, filters.comparison); } else { sqlComm = DashboardHelpers.GetFiltersParameters(f, "[getAgentRankingJson_v2]", userName, filters.comparison); } sqlComm.Connection = sqlCon; var aRankingResponseData = new AgentRankingResponseData(); List <AgentMissedPoint> agentRankingInfolst = new List <AgentMissedPoint>(); List <Agent> agentRankinglst = new List <Agent>(); try { sqlCon.Open(); SqlDataReader reader = sqlComm.ExecuteReader(); try { while (reader.Read()) { agentRankingInfolst.Add(new AgentMissedPoint { agentId = reader.GetValue(reader.GetOrdinal("agent")).ToString(), questionShortName = reader.GetValue(reader.GetOrdinal("q_short_name")).ToString(), missedCalls = int.Parse(reader.GetValue(reader.GetOrdinal("missed")).ToString()), totalCalls = int.Parse(reader.GetValue(reader.GetOrdinal("total")).ToString()), isComposite = int.Parse(reader.GetValue(reader.GetOrdinal("hasTemplate")).ToString()) == 1, isLinked = int.Parse(reader.GetValue(reader.GetOrdinal("isLinked")).ToString()) == 1, questionType = reader.GetValue(reader.GetOrdinal("questionType")).ToString(), questionId = reader.IsDBNull(reader.GetOrdinal("question_id")) ? (int?)null : int.Parse(reader.GetValue(reader.GetOrdinal("question_id")).ToString()) }); } } catch (Exception ex) { throw ex; } if (reader.NextResult()) { while (reader.Read()) { try { var temp_ranking = new Agent() { id = reader.GetValue(reader.GetOrdinal("agentID")).ToString(), name = reader.GetValue(reader.GetOrdinal("AgentName")).ToString(), groupNames = new List <string>(), averageScore = reader.IsDBNull(reader.GetOrdinal("averageScore"))? 0:decimal.Parse(reader.GetValue(reader.GetOrdinal("averageScore")).ToString()), previousAverageScore = reader.IsDBNull(reader.GetOrdinal("previousAverageScore")) ? 0 : decimal.Parse(reader.GetValue(reader.GetOrdinal("previousAverageScore")).ToString()), totalCalls = reader.IsDBNull(reader.GetOrdinal("totalCalls")) ? 0 : int.Parse(reader.GetValue(reader.GetOrdinal("totalCalls")).ToString()), totalBadCalls = reader.IsDBNull(reader.GetOrdinal("totalBadCalls")) ? (int?)null : (int?)reader.GetValue(reader.GetOrdinal("totalBadCalls")), earliestCallDate = reader.IsDBNull(reader.GetOrdinal("earlier")) ? (DateTime?)null : (DateTime?)reader.GetDateTime(reader.GetOrdinal("earlier")), // DateTime.Parse(reader.GetValue(reader.GetOrdinal("earlier")).ToString()), }; temp_ranking.top3MissedPoints = (from val in agentRankingInfolst where val.agentId.Trim().Equals(temp_ranking.id.Trim()) select val).ToList(); agentRankinglst.Add(temp_ranking); } catch (Exception ex) { throw ex; } } } List <UserGroupInfo> ugi = new List <UserGroupInfo>(); if (reader.NextResult()) { while (reader.Read()) { try { ugi.Add(new UserGroupInfo() { groupname = reader.GetValue(reader.GetOrdinal("user_group")).ToString(), username = reader.GetValue(reader.GetOrdinal("Agent")).ToString() }); } catch (Exception ex) { throw ex; } } } foreach (var a in agentRankinglst) { a.groupNames = (from val in ugi where a.name.Equals(val.username) select val.groupname).ToList(); } // #region Export //EXPORT Realization aRankingResponseData.agents = agentRankinglst; var propNames = new List <PropertieName>(); PropertieName name = new PropertieName(); List <ExportAgentRanking> exportAgentRanking = new List <ExportAgentRanking>(); List <ExportAgentRankingTopMissedPoints> exportAgentRankingTopMissedPoints = new List <ExportAgentRankingTopMissedPoints>(); if (f.filters.missedItems != null && f.filters.missedItems.Count == 1) { propNames.Add(new PropertieName { propName = "Agent Name", propValue = "name", propPosition = 1 }); propNames.Add(new PropertieName { propName = "Missed Item", propValue = "questionName", propPosition = 2 }); propNames.Add(new PropertieName { propName = "Call Count", propValue = "callCount", propPosition = 3 }); propNames.Add(new PropertieName { propName = "Missed Calls", propValue = "missedCalls", propPosition = 4 }); propNames.Add(new PropertieName { propName = "Missed Percent", propValue = "missedPercent", propPosition = 5 }); //List<int> missed = new List<int>(); //int z = 0; foreach (var item in aRankingResponseData.agents) { item.questionName = new List <string>(); foreach (var i in item.top3MissedPoints) { if (Convert.ToInt32(filters.filters.missedItems[0]) == i.questionId) { //missed.Add(i.missedCalls); item.missedCalls = i.missedCalls; item.totalCalls = i.totalCalls; item.questionName.Add(i.questionShortName); } } //z++; } foreach (var item in aRankingResponseData.agents) { exportAgentRankingTopMissedPoints.Add(new ExportAgentRankingTopMissedPoints { name = item.name, questionName = item.questionName[0], callCount = item.totalCalls, missedCalls = item.missedCalls, missedPercent = Math.Round((double)(item.missedCalls * 100) / item.totalCalls) + "%" //-100 - ((item.averageScore * 100) / item.previousAverageScore) }); } ExportHelper.Export(propNames, exportAgentRankingTopMissedPoints, "AgentRanking " + DateTime.Now.ToString("MM-dd-yyyy") + DateTime.Now.Millisecond.ToString() + ".xlsx", "AgentRanking", userName); } else { propNames.Add(new PropertieName { propName = "Agent Name", propValue = "name", propPosition = 1 }); propNames.Add(new PropertieName { propName = "Start Date", propValue = "startDate", propPosition = 2 }); propNames.Add(new PropertieName { propName = "Score", propValue = "score", propPosition = 3 }); propNames.Add(new PropertieName { propName = "Group Name", propValue = "groupName", propPosition = 4 }); propNames.Add(new PropertieName { propName = "Delta", propValue = "delta", propPosition = 5 }); propNames.Add(new PropertieName { propName = "Total Calls", propValue = "totalCalls", propPosition = 6 }); propNames.Add(new PropertieName { propName = "Top Missed Points", propValue = "top3Agents", propPosition = 7 }); foreach (var item in aRankingResponseData.agents) { List <string> topAgents = new List <string>(); foreach (var i in item.top3MissedPoints) { if (item.id == i.agentId) { topAgents.Add((new StringBuilder().Append(i.questionShortName + ", missed " + i.missedCalls + " of " + i.totalCalls + ";").ToString())); } } exportAgentRanking.Add(new ExportAgentRanking { name = item.name, startDate = item.earliestCallDate, score = item.averageScore, groupName = ExportCodeHelper.GetCSVFromList(item.groupNames), delta = ((item.averageScore - item.previousAverageScore) % 100) + "%", totalCalls = item.totalCalls, top3Agents = ExportCodeHelper.GetCSVFromList(topAgents)//GetCSVFromList(topAgents) as string }); } ExportHelper.Export(propNames, exportAgentRanking, "AgentRanking " + DateTime.Now.ToString("MM-dd-yyyy") + DateTime.Now.Millisecond.ToString() + ".xlsx", "AgentRanking", userName); } } catch (Exception ex) { throw ex; } #endregion return("success"); } }
public dynamic ExportTopQaMissedItems(AverageFilter filters, string userName) { Filter f = new Filter() { filters = filters.filters, range = filters.range }; using (SqlConnection sqlCon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["CC_ProdConn"].ConnectionString)) { if (filters.filters.badCallsOnly == false) { SqlCommand sqlComm = DashboardHelpers.GetFiltersParameters(f, "[getTopqaMissedItemsJson_v2]", userName, filters.comparison); sqlComm.Connection = sqlCon; PageFiltersData pageFiltersData = new PageFiltersData(); sqlCon.Open(); TopMissedItemsResponseData topMissed = new TopMissedItemsResponseData() { missedItems = new List <MissedItem>() }; try { SqlDataReader reader = sqlComm.ExecuteReader(); while (reader.Read()) { try { topMissed.missedItems.Add(new MissedItem() { questionId = int.Parse(reader.GetValue(reader.GetOrdinal("questionId")).ToString()), questionShortName = (reader.GetValue(reader.GetOrdinal("questionShortName")).ToString()), scorecardName = (reader.GetValue(reader.GetOrdinal("scorecardName")).ToString()), totalCalls = int.Parse(reader.GetValue(reader.GetOrdinal("totalCalls")).ToString()), missedCalls = int.Parse(reader.GetValue(reader.GetOrdinal("missedCalls")).ToString()), questionSectionName = reader.GetValue(reader.GetOrdinal("sectionName")).ToString(), isComposite = bool.Parse(reader.GetValue(reader.GetOrdinal("hasTemplate")).ToString()), isLinked = bool.Parse(reader.GetValue(reader.GetOrdinal("isLinked")).ToString()), questionType = reader.GetValue(reader.GetOrdinal("questionType")).ToString(), comparedMissedCalls = int.Parse(reader.GetValue(reader.GetOrdinal("comparedMissedCalls")).ToString()), comparedTotalCalls = int.Parse(reader.GetValue(reader.GetOrdinal("comparedTotalCalls")).ToString()), }); } catch (Exception ex) { } } reader.NextResult(); List <MissedItemAgentInfo> lst = new List <MissedItemAgentInfo>(); while (reader.Read()) { try { lst.Add(new MissedItemAgentInfo() { questionId = int.Parse(reader.GetValue(reader.GetOrdinal("questionId")).ToString()), name = reader.GetValue(reader.GetOrdinal("reviewer")).ToString(), totalCalls = int.Parse(reader.GetValue(reader.GetOrdinal("total_calls")).ToString()), missedCalls = int.Parse(reader.GetValue(reader.GetOrdinal("number_missed")).ToString()), }); } catch (Exception ex) { } } foreach (var item in topMissed.missedItems) { item.top3Agents = new List <MissedItemAgentInfo>(); item.top3Agents.AddRange((from v in lst where v.questionId == item.questionId select v).ToList()); } //return topMissed; List <TopMissedItemsExportModel> topMissedItemsExportModel = new List <TopMissedItemsExportModel>(); var propNames = new List <PropertieName> { new PropertieName { propName = "Missed Point", propValue = "questionShortName", propPosition = 1 }, new PropertieName { propName = "Section", propValue = "questionSectionName", propPosition = 2 }, new PropertieName { propName = "Scorecard", propValue = "scorecardName", propPosition = 3 }, new PropertieName { propName = "Number missed", propValue = "missedCalls", propPosition = 4 }, new PropertieName { propName = "Total calls", propValue = "totalCalls", propPosition = 5 }, new PropertieName { propName = "Occurrence", propValue = "occurrence", propPosition = 6 }, new PropertieName { propName = "Delta", propValue = "delta", propPosition = 7 }, new PropertieName { propName = "Top 3 agents", propValue = "top3Agents", propPosition = 8 } }; foreach (var item in topMissed.missedItems) { List <string> topAgents = new List <string>(); foreach (var i in item.top3Agents) { if (item.questionId == i.questionId) { topAgents.Add((new StringBuilder().Append(i.name + i.missedCalls + "/" + i.totalCalls + ";").ToString())); } } if (item.comparedTotalCalls == 0) { topMissedItemsExportModel.Add(new TopMissedItemsExportModel { questionShortName = item.questionShortName, questionSectionName = item.questionSectionName, scorecardName = item.scorecardName, missedCalls = item.missedCalls, totalCalls = item.totalCalls, occurrence = (float)Math.Round((float)((float)item.missedCalls / (float)item.totalCalls) * 100), delta = (float)Math.Round((float)((float)item.missedCalls / (float)item.totalCalls) * 100), //(item.comparedMissedCalls / item.comparedTotalCalls), top3Agents = ExportCodeHelper.GetCSVFromList(topAgents) }); } else { topMissedItemsExportModel.Add(new TopMissedItemsExportModel { questionShortName = item.questionShortName, questionSectionName = item.questionSectionName, scorecardName = item.scorecardName, missedCalls = item.missedCalls, totalCalls = item.totalCalls, occurrence = (float)Math.Round(((float)item.missedCalls / (float)item.totalCalls) * 100), delta = (float)Math.Round(((float)((float)item.missedCalls / (float)item.totalCalls) * 100) - ((float)((float)item.comparedMissedCalls / (float)item.comparedTotalCalls) * 100)),//(item.missedCalls / item.totalCalls) * 100, top3Agents = ExportCodeHelper.GetCSVFromList(topAgents) }); } } ExportHelper.Export(propNames, topMissedItemsExportModel, "TopQaMissed" + DateTime.Now.ToString("MM-dd-yyyy") + DateTime.Now.Second.ToString() + ".xlsx", "TopQaMissedPoints", userName); } catch (Exception ex) { throw ex; } } return("success"); } }