/// <summary> /// Gets the plan. /// </summary> /// <param name="user">The user.</param> /// <param name="salaries">The salaries.</param> /// <param name="userTarget">The user target.</param> /// <param name="simulationId">The simulation identifier.</param> /// <returns> /// returns plan view model /// </returns> private PlanViewModel GetPlan(UserModel user, Dictionary <FrequencyDetails, decimal> salaries, UserTargetModel userTarget, int simulationId) { var applicationSetting = this.applicationSettings.GetApplicationSettingByKeyName(Constants.ApplicationSettingCodes.CryptoKey); PlanViewModel planViewModel = new PlanViewModel(); planViewModel = new PlanViewModel() { PlanId = user.CurentPlan.Id, UserId = user.Id, CountryId = user.CountryId, BussinessUnitId = user.BusinessUnitId, RoleId = user.CurentPlan.RoleId, Year = user.CurentPlan.Year, Role = user.CurentPlan.Name, PlanName = user.CurentPlan.Name }; UserSimulationModel userSimulation = null; if (userTarget != null && userTarget.UserSimulations.Count > 0) { planViewModel.SimulationId = simulationId; planViewModel.SimulationName = userTarget.UserSimulations.Where(x => x.Id == simulationId).Select(x => x.Name).FirstOrDefault(); planViewModel.TotalPayout = Convert.ToDecimal(this.cryptoService.Decrypt(applicationSetting.Value, userTarget.UserSimulations.Where(x => x.Id == simulationId).Select(x => x.TotalPayout).FirstOrDefault())); userSimulation = userTarget.UserSimulations.Where(x => x.Id == simulationId).FirstOrDefault(); } foreach (var measure in user.CurentPlan.PlanMeasures) { MeassureViewModel meassureViewModel = new MeassureViewModel(); meassureViewModel.Id = measure.Id; meassureViewModel.Name = measure.MeasureName; meassureViewModel.SequenceId = measure.Sequence; meassureViewModel.PayoutCurveId = measure.PayoutCurveId; meassureViewModel.PayoutTypeId = measure.PayoutTypeId; meassureViewModel.PayoutCurve = measure.PayoutCurve; meassureViewModel.Frequency = measure.Frequency.Name; meassureViewModel.MeasureTargetPercentage = Convert.ToString(measure.MeasureWeightage); meassureViewModel.HasGoal = measure.HasGoal; meassureViewModel.DataType = measure.DataType; meassureViewModel.ValueType = measure.ValueType; meassureViewModel.IsKPI = measure.IsKPI; UserSimulationMeasureDetailModel userSimulationMeasureDetail = null; if (userSimulation != null && userSimulation.UserSimulationMeasureDetails != null) { userSimulationMeasureDetail = userSimulation.UserSimulationMeasureDetails.FirstOrDefault(x => x.PlanMeasureId == measure.Id); } if (userSimulationMeasureDetail != null) { meassureViewModel.ActualAchievment = Convert.ToDecimal(this.cryptoService.Decrypt(applicationSetting.Value, userSimulationMeasureDetail.Achievement)); meassureViewModel.ActualAchievmentPercentage = userSimulationMeasureDetail.AchievementPercentage; meassureViewModel.YTDCumilativePayout = Convert.ToDecimal(this.cryptoService.Decrypt(applicationSetting.Value, userSimulationMeasureDetail.PayoutAmount)); } var diffInIncentive = 0.0M; foreach (var payoutPercentageDetail in measure.PayoutPercentage.PayoutPercentageDetails) { MeasureFrequencyDetailViewModel field = new MeasureFrequencyDetailViewModel(); field.Id = payoutPercentageDetail.FrequencyDetailId; field.TargetPer = payoutPercentageDetail.PayoutPercentageWeightage; field.Label = payoutPercentageDetail.FrequencyDetail.Name; field.Incentive = salaries[(FrequencyDetails)payoutPercentageDetail.FrequencyDetailId] * (user.CurentPlan.TargetIncentivePercentage / 100) * (measure.MeasureWeightage / 100) * (payoutPercentageDetail.PayoutPercentageWeightage / 100); field.CurrentIncentive = salaries[FrequencyDetails.Annual] * (user.CurentPlan.TargetIncentivePercentage / 100) * (measure.MeasureWeightage / 100) * (payoutPercentageDetail.PayoutPercentageWeightage / 100); if (measure.PayoutCurve.PayoutCurveTypeId == Convert.ToInt32(PayoutCurveType.Linear)) { field.AdditionalFields.Add("Expense", 0); field.AdditionalFields.Add("Revenue", 0); } diffInIncentive += field.CurrentIncentive - field.Incentive; if (userTarget != null && userTarget.UserTargetDetails != null) { var userTargetDetail = userTarget.UserTargetDetails.FirstOrDefault(x => x.PlanMeasureId == measure.Id && x.FrequencyDetailId == payoutPercentageDetail.FrequencyDetailId); if (userTargetDetail != null) { field.Goal = Convert.ToDecimal(this.cryptoService.Decrypt(applicationSetting.Value, userTargetDetail.Goal)); } } UserSimulationMeasureFrequencyDetailModel userSimulationMeasureFrequencyDetail = null; if (userSimulationMeasureDetail != null && userSimulationMeasureDetail.UserSimulationMeasureFrequencyDetails != null) { userSimulationMeasureFrequencyDetail = userSimulationMeasureDetail.UserSimulationMeasureFrequencyDetails.FirstOrDefault(x => x.FrequencyDetailId == payoutPercentageDetail.FrequencyDetailId); } if (userSimulationMeasureFrequencyDetail != null) { field.ActualAchievment = Convert.ToDecimal(this.cryptoService.Decrypt(applicationSetting.Value, userSimulationMeasureFrequencyDetail.Achievement)); field.ActualAchievmentPercentage = userSimulationMeasureFrequencyDetail.AchievementPercentage; field.YTDCumilativePayout = Convert.ToDecimal(this.cryptoService.Decrypt(applicationSetting.Value, userSimulationMeasureFrequencyDetail.PayoutAmount)); field.CumulativePercentage = Convert.ToDecimal(userSimulationMeasureFrequencyDetail.CumulativePercentage); field.IsValue = userSimulationMeasureFrequencyDetail.IsValue == null ? false : userSimulationMeasureFrequencyDetail.IsValue; if (!string.IsNullOrWhiteSpace(userSimulationMeasureFrequencyDetail.AdditionalFields)) { XmlDocument xdoc = new XmlDocument(); xdoc.LoadXml(userSimulationMeasureFrequencyDetail.AdditionalFields); foreach (XmlElement x in xdoc.DocumentElement.ChildNodes) { field.AdditionalFields[x.Name] = Convert.ToInt32(x.InnerText); } } } meassureViewModel.Fields.Add(field); } if (meassureViewModel.PayoutTypeId == Convert.ToInt32(PayoutType.Cumulative) && meassureViewModel.Fields.Count >= 1) { var lastField = meassureViewModel.Fields[meassureViewModel.Fields.Count - 1]; lastField.Incentive = lastField.CurrentIncentive + diffInIncentive; } planViewModel.RoleMeassures.Add(meassureViewModel); } foreach (var modifier in user.CurentPlan.PlanModifiers) { ModifierViewModel modifierViewModel = new ModifierViewModel(); modifierViewModel.Id = modifier.Id; modifierViewModel.Name = modifier.ModifierName; modifierViewModel.PayoutCurve = modifier.PayoutCurve; modifierViewModel.DataType = modifier.DataType; modifierViewModel.ValueType = modifier.ValueType; if (userSimulation != null) { var targetsimulationmodifierdetail = userSimulation.UserSimulationModifierDetails.FirstOrDefault(x => x.PlanModifierId == modifier.Id); if (targetsimulationmodifierdetail != null) { modifierViewModel.ModifierFieldValue = targetsimulationmodifierdetail.ModifierFieldValue; modifierViewModel.ModifierPayout = Convert.ToDecimal(this.cryptoService.Decrypt(applicationSetting.Value, targetsimulationmodifierdetail.ModifierPayout)); } } planViewModel.Modifiers.Add(modifierViewModel); } planViewModel.UpdateSequence(); return(planViewModel); }
/// <summary> /// Saves the measures details. /// </summary> /// <param name="planViewModel">The plan view model.</param> /// <param name="saveSimulation">if set to <c>true</c> [save simulation].</param> public void SaveMeasuresDetails(PlanViewModel planViewModel, bool saveSimulation) { var applicationSetting = this.applicationSettings.GetApplicationSettingByKeyName(Constants.ApplicationSettingCodes.CryptoKey); var userTarget = this.syngentaSIPContext.UserTargets .Include(x => x.UserTargetDetails) .Where(x => x.PlanId == planViewModel.PlanId && x.UserId == planViewModel.UserId).OrderByDescending(x => x.Id).FirstOrDefault(); if (userTarget == null) { userTarget = new UserTargetModel(); userTarget.PlanId = planViewModel.PlanId; userTarget.UserId = planViewModel.UserId; userTarget.UserTargetDetails = new List <UserTargetDetailModel>(); foreach (var meassure in planViewModel.RoleMeassures) { foreach (var frequencyDetail in meassure.Fields) { var userTargetDetail = new UserTargetDetailModel(); userTargetDetail.PlanMeasureId = meassure.Id; userTargetDetail.FrequencyDetailId = frequencyDetail.Id; userTargetDetail.Incentive = this.cryptoService.Encrypt(applicationSetting.Value, Convert.ToString(frequencyDetail.Incentive)); userTargetDetail.Goal = this.cryptoService.Encrypt(applicationSetting.Value, Convert.ToString(frequencyDetail.Goal)); userTarget.UserTargetDetails.Add(userTargetDetail); } } this.syngentaSIPContext.UserTargets.Add(userTarget); } else { foreach (var meassure in planViewModel.RoleMeassures) { foreach (var frequencyDetail in meassure.Fields) { var userTargetDetail = userTarget.UserTargetDetails.Where(x => x.PlanMeasureId == meassure.Id && x.FrequencyDetailId == frequencyDetail.Id).FirstOrDefault(); if (userTargetDetail == null) { userTargetDetail = new UserTargetDetailModel(); userTargetDetail.PlanMeasureId = meassure.Id; userTargetDetail.FrequencyDetailId = frequencyDetail.Id; userTargetDetail.Incentive = this.cryptoService.Encrypt(applicationSetting.Value, Convert.ToString(frequencyDetail.Incentive)); userTargetDetail.Goal = this.cryptoService.Encrypt(applicationSetting.Value, Convert.ToString(frequencyDetail.Goal)); userTarget.UserTargetDetails.Add(userTargetDetail); } else { userTargetDetail.Incentive = this.cryptoService.Encrypt(applicationSetting.Value, Convert.ToString(frequencyDetail.Incentive)); userTargetDetail.Goal = this.cryptoService.Encrypt(applicationSetting.Value, Convert.ToString(frequencyDetail.Goal)); userTarget.UserTargetDetails.Add(userTargetDetail); } } } } if (saveSimulation) { var userSimulation = new UserSimulationModel(); userSimulation.Name = planViewModel.SimulationName; userSimulation.TotalPayout = this.cryptoService.Encrypt(applicationSetting.Value, Convert.ToString(planViewModel.TotalPayout)); userSimulation.UserSimulationMeasureDetails = new List <UserSimulationMeasureDetailModel>(); foreach (var meassure in planViewModel.RoleMeassures) { var userSimulationMeasureDetail = new UserSimulationMeasureDetailModel(); userSimulationMeasureDetail.PlanMeasureId = meassure.Id; userSimulationMeasureDetail.Achievement = this.cryptoService.Encrypt(applicationSetting.Value, Convert.ToString(meassure.ActualAchievment)); userSimulationMeasureDetail.AchievementPercentage = meassure.ActualAchievmentPercentage; userSimulationMeasureDetail.PayoutAmount = this.cryptoService.Encrypt(applicationSetting.Value, Convert.ToString(meassure.YTDCumilativePayout)); foreach (var frequencyDetail in meassure.Fields) { var userSimulationMeasureFrequencyDetail = new UserSimulationMeasureFrequencyDetailModel(); userSimulationMeasureFrequencyDetail.FrequencyDetailId = frequencyDetail.Id; userSimulationMeasureFrequencyDetail.PayoutAmount = this.cryptoService.Encrypt(applicationSetting.Value, Convert.ToString(frequencyDetail.YTDCumilativePayout)); userSimulationMeasureFrequencyDetail.Achievement = this.cryptoService.Encrypt(applicationSetting.Value, Convert.ToString(frequencyDetail.ActualAchievment)); userSimulationMeasureFrequencyDetail.AchievementPercentage = frequencyDetail.ActualAchievmentPercentage; userSimulationMeasureFrequencyDetail.CumulativePercentage = frequencyDetail.CumulativePercentage; userSimulationMeasureFrequencyDetail.IsValue = frequencyDetail.IsValue; if (frequencyDetail.AdditionalFields != null && frequencyDetail.AdditionalFields.Keys.Count > 0) { XElement xelement = new XElement("root"); foreach (var additionalField in frequencyDetail.AdditionalFields) { xelement.Add(new XElement(additionalField.Key, additionalField.Value)); } userSimulationMeasureFrequencyDetail.AdditionalFields = xelement.ToString(); } userSimulationMeasureDetail.UserSimulationMeasureFrequencyDetails.Add(userSimulationMeasureFrequencyDetail); } userSimulation.UserSimulationMeasureDetails.Add(userSimulationMeasureDetail); } foreach (var modifier in planViewModel.Modifiers) { var userSimulationModifierDetail = new UserSimulationModifierDetailModel(); userSimulationModifierDetail.ModifierFieldValue = modifier.ModifierFieldValue; userSimulationModifierDetail.ModifierPayout = this.cryptoService.Encrypt(applicationSetting.Value, Convert.ToString(modifier.ModifierPayout)); userSimulationModifierDetail.PlanModifierId = modifier.Id; userSimulation.UserSimulationModifierDetails.Add(userSimulationModifierDetail); } userTarget.UserSimulations.Add(userSimulation); } this.syngentaSIPContext.Save(); }