public ActionResult Index(int?month, int?year) { var viewModel = new PmsSummaryIndexViewModel(); var yearActive = _pmsSummaryService.GetYearActive(); var request = new GetPmsSummaryReportRequest { Month = month.HasValue ? month.Value : DateTime.Now.Month, Year = year.HasValue ? year.Value : yearActive }; var response = _pmsSummaryService.GetPmsSummaryReport(request); if (response.IsSuccess) { viewModel.PmsSummaries = response.KpiDatas.MapTo <PmsSummaryViewModel>(); viewModel.Year = request.Year; viewModel.Month = request.Month; viewModel.Title = response.Title; viewModel.YearList = _dropdownService.GetYearsForPmsSummary().MapTo <SelectListItem>(); return(View(viewModel)); } return(base.ErrorPage(response.Message)); }
public ActionResult IndexGridPartial(int?month, int?year) { var viewModel = new PmsSummaryIndexViewModel(); var request = new GetPmsSummaryReportRequest { Month = month.HasValue ? month.Value : DateTime.Now.Month, Year = year.HasValue ? year.Value : DateTime.Now.Year }; var response = _pmsSummaryService.GetPmsSummaryReport(request); viewModel.PmsSummaries = response.KpiDatas.MapTo <PmsSummaryViewModel>(); viewModel.Year = request.Year; viewModel.Month = request.Month; return(PartialView("_IndexGridPartial", viewModel)); }
public GetPmsSummaryReportResponse GetPmsSummaryReport(GetPmsSummaryReportRequest request) { var response = new GetPmsSummaryReportResponse(); try { //var xxx = DataContext.PmsSummaries.Include(x => x.PmsSummaryScoringIndicators.Select(a => a.)).ToList(); var pmsSummary = DataContext.PmsSummaries .Include(x => x.ScoreIndicators) .Include("PmsConfigs.Pillar") .Include("PmsConfigs.ScoreIndicators") .Include("PmsConfigs.PmsConfigDetailsList.Kpi.Measurement") .Include("PmsConfigs.PmsConfigDetailsList.Kpi.KpiAchievements") .Include("PmsConfigs.PmsConfigDetailsList.Kpi.KpiTargets") .Include("PmsConfigs.PmsConfigDetailsList.Kpi.Pillar") .Include("PmsConfigs.PmsConfigDetailsList.ScoreIndicators") .FirstOrDefault(x => x.IsActive && x.Year == request.Year); if (pmsSummary != null) { response.Title = pmsSummary.Title; foreach (var pmsConfig in pmsSummary.PmsConfigs) { foreach (var pmsConfigDetails in pmsConfig.PmsConfigDetailsList) { var kpiData = new GetPmsSummaryReportResponse.KpiData(); kpiData.Id = pmsConfigDetails.Id; kpiData.Pillar = pmsConfig.Pillar.Name; kpiData.PillarId = pmsConfig.Pillar.Id; kpiData.Kpi = pmsConfigDetails.Kpi.Name; kpiData.Unit = pmsConfigDetails.Kpi.Measurement.Name; kpiData.Weight = pmsConfigDetails.Weight; kpiData.PillarOrder = pmsConfigDetails.Kpi.Pillar.Order; kpiData.KpiOrder = pmsConfigDetails.Kpi.Order; kpiData.PillarWeight = pmsConfig.Weight; kpiData.ScoringType = pmsConfigDetails.ScoringType; kpiData.YtdFormula = pmsConfigDetails.Kpi.YtdFormula; kpiData.ScoreIndicators = ParseScoreIndicator(pmsConfigDetails.ScoreIndicators); #region KPI Achievement var kpiAchievementYearly = pmsConfigDetails.Kpi.KpiAchievements.FirstOrDefault(x => x.PeriodeType == PeriodeType.Yearly && x.Periode.Year == request.Year); if (kpiAchievementYearly != null && kpiAchievementYearly.Value != null) { kpiData.ActualYearly = kpiAchievementYearly.Value.Value; } var kpiAchievementMonthly = pmsConfigDetails.Kpi.KpiAchievements.FirstOrDefault( x => x.PeriodeType == PeriodeType.Monthly && x.Periode.Month == request.Month && x.Periode.Year == request.Year); if (kpiAchievementMonthly != null && kpiAchievementMonthly.Value.HasValue) { kpiData.ActualMonthly = kpiAchievementMonthly.Value.Value; } var kpiAchievementYtd = pmsConfigDetails.Kpi.KpiAchievements.Where( x => x.PeriodeType == PeriodeType.Monthly && x.Value.HasValue && (x.Periode.Month >= 1 && x.Periode.Month <= request.Month && x.Periode.Year == request.Year)).ToList(); if (kpiAchievementYtd.Count > 0) { kpiData.ActualYtd = 0; } foreach (var achievementYtd in kpiAchievementYtd) { if (achievementYtd.Value.HasValue) { kpiData.ActualYtd += achievementYtd.Value; } } if (kpiData.YtdFormula == YtdFormula.Average) { if (kpiData.ActualYtd.HasValue) { kpiData.ActualYtd = kpiData.ActualYtd / kpiAchievementYtd.Count; } } #endregion #region KPI Target var kpiTargetYearly = pmsConfigDetails.Kpi.KpiTargets.FirstOrDefault(x => x.PeriodeType == PeriodeType.Yearly && x.Periode.Year == request.Year); if (kpiTargetYearly != null && kpiTargetYearly.Value != null) { kpiData.TargetYearly = kpiTargetYearly.Value.Value; } var kpiTargetMonthly = pmsConfigDetails.Kpi.KpiTargets.FirstOrDefault( x => x.PeriodeType == PeriodeType.Monthly && x.Periode.Month == request.Month && x.Periode.Year == request.Year); if (kpiTargetMonthly != null && kpiTargetMonthly.Value.HasValue) { kpiData.TargetMonthly = kpiTargetMonthly.Value.Value; } var kpiTargetYtd = pmsConfigDetails.Kpi.KpiTargets.Where( x => x.PeriodeType == PeriodeType.Monthly && x.Value.HasValue && (x.Periode.Month >= 1 && x.Periode.Month <= request.Month && x.Periode.Year == request.Year)).ToList(); if (kpiTargetYtd.Count > 0) { kpiData.TargetYtd = 0; } foreach (var targetYtd in kpiTargetYtd) { if (targetYtd.Value.HasValue) { kpiData.TargetYtd += targetYtd.Value; } } if (kpiData.YtdFormula == YtdFormula.Average) { if (kpiData.TargetYtd.HasValue) { kpiData.TargetYtd = kpiData.TargetYtd / kpiTargetYtd.Count; } } #endregion #region Score if (kpiData.ActualYtd.HasValue && kpiData.TargetYtd.HasValue) { //var indexYtd = (kpiData.ActualYtd.Value / kpiData.TargetYtd.Value); switch (pmsConfigDetails.ScoringType) { case ScoringType.Positive: kpiData.Score = pmsConfigDetails.Weight * kpiData.IndexYtd; break; case ScoringType.Negative: if (kpiData.IndexYtd.Equals(0)) { response.IsSuccess = false; response.Message = string.Format( @"KPI {0} memiliki nilai index YTD 0 dengan Nilai Scoring Type negative yang mengakibatkan terjadinya nilai infinity", pmsConfigDetails.Kpi.Name); return(response); } kpiData.Score = pmsConfigDetails.Weight / kpiData.IndexYtd; break; case ScoringType.Boolean: bool isMoreThanZero = false; var kpiAchievement = pmsConfigDetails.Kpi.KpiAchievements.Where(x => x.Value.HasValue && x.Periode.Year == request.Year).ToList(); bool isNull = kpiAchievement.Count == 0; foreach (var achievement in kpiAchievement) { if (achievement.Value > 0) { isMoreThanZero = true; break; } } if (!isNull) { kpiData.Score = isMoreThanZero ? 0 : Double.Parse(kpiData.Weight.ToString()); } break; } } #endregion kpiData.KpiColor = GetScoreColor(kpiData.ActualYtd, pmsConfigDetails.ScoreIndicators); response.KpiDatas.Add(kpiData); } response.KpiDatas = SetPmsConfigColor(response.KpiDatas, pmsConfig.ScoreIndicators, pmsConfig.Pillar.Id); } response.KpiDatas = SetPmsSummaryColor(response.KpiDatas, pmsSummary.ScoreIndicators); } response.IsSuccess = true; } catch (InvalidOperationException invalidOperationException) { response.Message = invalidOperationException.Message; } catch (NullReferenceException nullReferenceException) { response.Message = nullReferenceException.Message; } return(response); }