Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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();
        }