コード例 #1
0
        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));
        }
コード例 #2
0
        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')));
            }
        }
コード例 #3
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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;
            }                
        }
コード例 #10
0
        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;
            }

        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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");
        }
コード例 #13
0
        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));
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        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.");
        }
コード例 #16
0
        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));
        }
コード例 #17
0
        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));
        }
コード例 #18
0
        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);
        }
コード例 #19
0
        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);
        }
コード例 #20
0
        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')));
            }
        }
コード例 #21
0
        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));
        }
コード例 #22
0
		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;
            }
        }
コード例 #23
0
        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);
                }
            }
        }
コード例 #24
0
        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;
                }
            }
        }
コード例 #25
0
 /// <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");
 }
コード例 #26
0
 /// <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);
 }
コード例 #27
0
        public ActionResult Dashboard()
        {
            HomeDashboardView view = DashboardHelpers.CreateHomeDashboardView(db, User);

            return(View(view));
        }
コード例 #28
0
        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);
        }
コード例 #29
0
        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");
            }
        }
コード例 #30
0
        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");
            }
        }