/// <summary> /// Insert metric daily data to M3metricClientKpiDaily /// </summary> /// <param name="clients"></param> /// <param name="m3MetricDataDaily"></param> /// <param name="kpiConfig"></param> private void PerformM3MetricClientKPIDeviation(List <Client> clients, DataTable m3MetricDataDaily, DataTable kpiConfig) { bool isDataExist = _m3PactContext.M3metricClientKpiDaily.Where(x => x.InsertedDate == DateTime.Now.Date).Any(); if (!isDataExist) { List <M3metricClientKpiDaily> m3metricClientKpiDailyData = new List <M3metricClientKpiDaily>(); List <Kpi> metricKPIs = _m3PactContext.Kpi.Include(h => h.CheckListType) .Where(h => h.RecordStatus == DomainConstants.RecordStatusActive && h.CheckListType.CheckListTypeCode == DomainConstants.M3).ToList(); foreach (Client client in clients) { DataRow m3MetricClientData = m3MetricDataDaily.Select("client='" + client.ClientCode + "'").FirstOrDefault(); List <Kpi> clientMetricKPIs = (from k in metricKPIs join ck in _m3PactContext.ClientKpimap on k.Kpiid equals ck.Kpiid where ck.ClientId == client.ClientId select k).ToList(); foreach (Kpi metricKPI in clientMetricKPIs) { M3metricsQuestion m3MetricsQuestion = _m3PactContext.M3metricsQuestion.Where(m => m.M3metricsQuestionId.ToString() == metricKPI.Measure).FirstOrDefault(); if (m3MetricsQuestion != null) { string kpiTargetColumn = GetKPITargetColumn(kpiConfig, m3MetricsQuestion.M3metricsQuestionCode); if (kpiTargetColumn != "" && m3MetricClientData != null) { string alertLevel = GetKPIAlertLevelWithOperatorForClient(client.ClientId, metricKPI); string standardAlertValue = GetStandardAlertValueForClient(alertLevel); string alertCompare = GetKPIAlertOperatorForClient(alertLevel); string actualkpiValue = GetActualAlertValueForClient(m3MetricClientData, kpiTargetColumn); bool isDeviation = IsKPIDeviated(standardAlertValue, alertCompare, actualkpiValue); M3metricClientKpiDaily m3metricKpi = new M3metricClientKpiDaily(); m3metricKpi.ClientId = client.ClientId; m3metricKpi.KpiId = metricKPI.Kpiid; m3metricKpi.IsDeviated = isDeviation ? true : false; m3metricKpi.RecordStatus = DomainConstants.RecordStatusActive; m3metricKpi.InsertedDate = DateTime.Now.Date; m3metricKpi.CreatedDate = DateTime.Now; m3metricKpi.CreatedBy = DomainConstants.Admin; m3metricKpi.ModifiedDate = DateTime.Now; m3metricKpi.ModifiedBy = DomainConstants.Admin; m3metricKpi.ActualValue = actualkpiValue; m3metricKpi.AlertLevel = alertCompare + " " + standardAlertValue; m3metricClientKpiDailyData.Add(m3metricKpi); } } } } if (m3metricClientKpiDailyData != null && m3metricClientKpiDailyData.Count > 0) { _m3PactContext.M3metricClientKpiDaily.AddRange(m3metricClientKpiDailyData); _m3PactContext.SaveChanges(); } } }
/// <summary> /// Check and insert into deviatedclient KPI table /// </summary> /// <param name="kpis"></param> /// <param name="metrictype"></param> /// <param name="kpiConfig"></param> /// <param name="m3MetricClientData"></param> /// <param name="clientId"></param> /// <param name="m3MetricChecklistTypeId"></param> private void KPistoBeinDeviated(List <Kpi> kpis, string metrictype, DataTable kpiConfig, DataRow m3MetricClientData, int clientId, int m3MetricChecklistTypeId) { foreach (Kpi k in kpis) { M3metricsQuestion m3MetricsQuestion = _m3PactContext.M3metricsQuestion.Where(m => m.M3metricsQuestionId.ToString() == k.Measure).FirstOrDefault(); DateTime checklistDate = new DateTime(); DeviatedClientKpi deviatedClientKpi = new DeviatedClientKpi(); if (metrictype == DomainConstants.Monthly) { GetPreviousMonthAndYear(out int previousYear, out int previousMonth); deviatedClientKpi = _m3PactContext.DeviatedClientKpi.Where(d => d.ChecklistTypeId == m3MetricChecklistTypeId && d.CheckListDate.Month == previousMonth && d.CheckListDate.Year == previousYear && d.ClientId == clientId && d.QuestionCode == m3MetricsQuestion.M3metricsQuestionCode && d.RecordStatus == DomainConstants.RecordStatusActive)?.FirstOrDefault(); if (deviatedClientKpi != null) { break; } checklistDate = new DateTime(previousYear, previousMonth, 1).Date; } else { deviatedClientKpi = _m3PactContext.DeviatedClientKpi.Where(d => d.ChecklistTypeId == m3MetricChecklistTypeId && d.CheckListDate == DateTime.Now.Date && d.ClientId == clientId && d.QuestionCode == m3MetricsQuestion.M3metricsQuestionId.ToString() && d.RecordStatus == DomainConstants.RecordStatusActive)?.FirstOrDefault(); if (deviatedClientKpi != null) { break; } } string kpiTargetColumn = GetKPITargetColumn(kpiConfig, m3MetricsQuestion.M3metricsQuestionCode); if (kpiTargetColumn != "" && m3MetricClientData != null) { string alertLevel = GetKPIAlertLevelWithOperatorForClient(clientId, k); string standardAlertValue = GetStandardAlertValueForClient(alertLevel); string alertCompare = GetKPIAlertOperatorForClient(alertLevel); string actualkpiValue = GetActualAlertValueForClient(m3MetricClientData, kpiTargetColumn); bool isDeviation = IsKPIDeviated(standardAlertValue, alertCompare, actualkpiValue); if (isDeviation) { DeviatedKPI(k.Kpiid, clientId, standardAlertValue, actualkpiValue, metrictype == DomainConstants.Monthly ? checklistDate : DateTime.Now.Date, m3MetricChecklistTypeId, m3MetricsQuestion.M3metricsQuestionId.ToString()); } } } }