Exemplo n.º 1
0
        public long Create(BusinessUnitKPIScorecard entity)
        {
            CommonHelper.ValidateArgumentNotNull(entity, nameof(entity));
            Helper.ValidateTodayIsAllowedUpdateDate(entity.Year, entity.Month, InputAllowedInDays);

            int count = BusinessUnitKPIScorecardService.Search(new BusinessUnitKPIScorecardSearchCriteria
            {
                // use PageNumber=1 and PageSize=0 to get count only
                PageNumber     = 1,
                BusinessUnitId = entity.BusinessUnit?.Id,
                YearId         = entity.Year.Id,
                MonthId        = entity.Month.Id
            }).TotalRecords;

            if (count > 0)
            {
                throw new BusinessProcessingException(
                          "BusinessUnitKPIScorecard already exists for the given year and month.");
            }

            // populate audit fields
            PopulateAuditFields(entity, null, creating: true);

            return(BusinessUnitKPIScorecardService.Create(entity).Id);
        }
        public void TestGetAccuracy()
        {
            // arrange
            long id = 1;

            // act
            BusinessUnitKPIScorecard result = instance.Get(id);

            // assert
            AssertResult(result);
        }
Exemplo n.º 3
0
        public BusinessUnitKPIScorecard Update(long id, BusinessUnitKPIScorecard entity)
        {
            CommonHelper.ValidateArgumentNotNull(entity, nameof(entity));
            Helper.ValidateTodayIsAllowedUpdateDate(entity.Year, entity.Month, InputAllowedInDays);

            var existing = BusinessUnitKPIScorecardService.Get(id);

            if (!IsAdmin())
            {
                Helper.ValidateStatusIsDraft(existing.Status);
            }

            // populate audit fields
            PopulateAuditFields(entity, existing);

            entity.Id = id;
            return(BusinessUnitKPIScorecardService.Update(entity));
        }
        public void TestUpdateAccuracy2()
        {
            // arrange
            BusinessUnitKPIScorecard entity = CreateTestEntity <BusinessUnitKPIScorecard>(3);

            entity.Id = 2;
            entity.OperationPerformanceScores       = null;
            entity.BusinessContinuityPlanningScores = null;
            entity.ConcentrationRiskScores          = null;
            entity.FinancialIndicatorScores         = null;
            entity.SecurityScores = null;

            // act
            BusinessUnitKPIScorecard result = instance.Update(entity);

            // assert
            AssertEntityExists(entity);
            AssertResult(result);
        }
        /// <summary>
        /// Asserts that the given entity exists in DB.
        /// </summary>
        /// <param name="entity">The entity to check.</param>
        protected static void AssertEntityExists(BusinessUnitKPIScorecard entity)
        {
            var parameters = new Dictionary <string, object>();

            parameters["BusinessUnit_Id"] = entity.BusinessUnit?.Id;
            parameters["Status_Id"]       = entity.Status?.Id;
            parameters["Year_Id"]         = entity.Year?.Id;
            parameters["Month_Id"]        = entity.Month?.Id;
            parameters["DueDate"]         = entity.DueDate;
            parameters["CompletionType"]  = entity.CompletionType;
            parameters["CreatedBy"]       = entity.CreatedBy;
            parameters["CreatedTime"]     = entity.CreatedTime;
            parameters["LastUpdatedBy"]   = entity.LastUpdatedBy;
            parameters["LastUpdatedTime"] = entity.LastUpdatedTime;
            parameters["Id"] = entity.Id;

            TestHelper.AssertDatabaseRecordExists(typeof(BusinessUnitKPIScorecard).Name, parameters);

            AssertManyToManyMappings(entity.Id, entity.OperationPerformanceScores,
                                     "BusinessUnitKPIScorecard_OperationPerformanceScore",
                                     "BusinessUnitKPIScorecardId", "KPIVolumeScoreId");

            AssertManyToManyMappings(entity.Id, entity.FinancialIndicatorScores,
                                     "BusinessUnitKPIScorecard_FinancialIndicatorScore",
                                     "BusinessUnitKPIScorecardId", "KPIScoreId");

            AssertManyToManyMappings(entity.Id, entity.BusinessContinuityPlanningScores,
                                     "BusinessUnitKPIScorecard_BusinessContinuityPlanningScore",
                                     "BusinessUnitKPIScorecardId", "KPIScoreId");

            AssertManyToManyMappings(entity.Id, entity.SecurityScores,
                                     "BusinessUnitKPIScorecard_SecurityScore",
                                     "BusinessUnitKPIScorecardId", "KPIScoreId");

            AssertManyToManyMappings(entity.Id, entity.ConcentrationRiskScores,
                                     "BusinessUnitKPIScorecard_ConcentrationRiskScore",
                                     "BusinessUnitKPIScorecardId", "KPIScoreId");
        }
        public void TestUpdateAccuracy()
        {
            // arrange
            BusinessUnitKPIScorecard entity = CreateTestEntity <BusinessUnitKPIScorecard>(5);

            entity.Id = 2;
            entity.OperationPerformanceScores[0].Id = 14;
            entity.OperationPerformanceScores[1].Id = 11;

            // act
            BusinessUnitKPIScorecard result = instance.Update(entity);

            foreach (var item in result.BusinessContinuityPlanningScores)
            {
                item.Id = 0;
            }
            foreach (var item in result.ConcentrationRiskScores)
            {
                item.Id = 0;
            }
            foreach (var item in result.FinancialIndicatorScores)
            {
                item.Id = 0;
            }
            foreach (var item in result.OperationPerformanceScores)
            {
                item.Id = 0;
            }
            foreach (var item in result.SecurityScores)
            {
                item.Id = 0;
            }

            // assert
            AssertEntityExists(entity);
            AssertResult(result);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Gets the statistics summary.
        /// </summary>
        ///
        /// <param name="businessUnitId">The business unit Id to get summary for.</param>
        /// <param name="yearId">The year Id to get summary for.</param>
        /// <param name="monthId">The month Id to get summary for.</param>
        /// <returns>The statistics summary.</returns>
        ///
        /// <exception cref="ArgumentException">
        /// If any of the arguments is not positive.
        /// </exception>
        /// <exception cref="PersistenceException">
        /// If error occurs while accessing the persistence.
        /// </exception>
        /// <exception cref="ServiceException">
        /// If any other errors occur while performing this operation.
        /// </exception>
        public Summary GetSummary(long businessUnitId, long yearId, long monthId)
        {
            return(Logger.Process(() =>
            {
                CommonHelper.ValidateArgumentPositive(businessUnitId, nameof(businessUnitId));
                CommonHelper.ValidateArgumentPositive(yearId, nameof(yearId));
                CommonHelper.ValidateArgumentPositive(monthId, nameof(monthId));

                var summary = new Summary();

                // get scorecard for the given parameters
                BusinessUnitKPIScorecard kpiScorecard = BusinessUnitKPIScorecardService.Search(
                    new BusinessUnitKPIScorecardSearchCriteria
                {
                    BusinessUnitId = businessUnitId,
                    YearId = yearId,
                    MonthId = monthId
                }).Items.FirstOrDefault();

                if (kpiScorecard == null)
                {
                    // indicate that there is no scorecard for given criteria
                    return null;
                }

                summary.BusinessUnit = kpiScorecard.BusinessUnit;
                summary.Year = kpiScorecard.Year;
                summary.Month = kpiScorecard.Month;
                summary.Status = kpiScorecard.Status;
                summary.DueDate = kpiScorecard.DueDate;

                // Get the number of auditFindings, operationIncidents, and privacyIncidents for the given parameters
                summary.AuditFindingsNumber = AuditFindingService.Search(
                    new AuditFindingSearchCriteria
                {
                    // (!) Important: use PageNumber=1 and PageSize=0 to get count only,
                    // otherwise there will be huge performance impact due to loading all entities
                    PageNumber = 1,
                    BusinessUnitId = businessUnitId,
                    AuditYearId = yearId,
                    AuditMonthId = monthId,
                }).TotalRecords;

                summary.OperationalIncidentsNumber = OperationalIncidentService.Search(
                    new OperationalIncidentSearchCriteria
                {
                    PageNumber = 1,
                    BusinessUnitId = businessUnitId,
                    IncidentYearId = yearId,
                    IncidentMonthId = monthId
                }).TotalRecords;

                summary.PrivacyIncidentsNumber = PrivacyIncidentService.Search(
                    new PrivacyIncidentSearchCriteria
                {
                    PageNumber = 1,
                    BusinessUnitId = businessUnitId,
                    IncidentYearId = yearId,
                    IncidentMonthId = monthId
                }).TotalRecords;

                // calculate overall scores
                summary.OperationalPerformanceOverallScore = GetOverallScore(kpiScorecard.OperationPerformanceScores);
                summary.SecurityOverallScore = GetOverallScore(kpiScorecard.SecurityScores);
                summary.ConcentrationRiskOverallScore = GetOverallScore(kpiScorecard.ConcentrationRiskScores);
                summary.BusinessContinuityPlanningOverallScore =
                    GetOverallScore(kpiScorecard.BusinessContinuityPlanningScores);

                // get scorecards for the whole year
                IList <BusinessUnitKPIScorecard> kpiScorecards = BusinessUnitKPIScorecardService.Search(
                    new BusinessUnitKPIScorecardSearchCriteria
                {
                    BusinessUnitId = businessUnitId,
                    YearId = yearId
                }).Items;

                summary.OverallThresholdAnalysis = new OverallThresholdAnalysis
                {
                    OperationalPerformanceValues = new List <OverallThresholdAnalysisMonthValue>(),
                    BusinessContinuityPlanningValues = new List <OverallThresholdAnalysisMonthValue>(),
                    ConcentrationRiskValues = new List <OverallThresholdAnalysisMonthValue>(),
                    SecurityValues = new List <OverallThresholdAnalysisMonthValue>()
                };

                // calculate overall score for every scorecard
                foreach (var scorecard in kpiScorecards)
                {
                    summary.OverallThresholdAnalysis.BusinessContinuityPlanningValues.Add(
                        GetAnalysisMonthValue(scorecard.Month, scorecard.BusinessContinuityPlanningScores));

                    summary.OverallThresholdAnalysis.ConcentrationRiskValues.Add(
                        GetAnalysisMonthValue(scorecard.Month, scorecard.ConcentrationRiskScores));

                    summary.OverallThresholdAnalysis.OperationalPerformanceValues.Add(
                        GetAnalysisMonthValue(scorecard.Month, scorecard.OperationPerformanceScores));

                    summary.OverallThresholdAnalysis.SecurityValues.Add(
                        GetAnalysisMonthValue(scorecard.Month, scorecard.SecurityScores));
                }

                return summary;
            },
                                  "retrieving summary",
                                  parameters: new object[] { businessUnitId, yearId, monthId }));
        }