示例#1
0
        /// <summary>
        /// Method to update status and goal for monthly entry
        /// </summary>
        /// <param name="targetId">The target identifier.</param>
        /// <param name="selectedDate">The selected date.</param>
        /// <param name="userName">logged in user name</param>
        public virtual void UpdateMonthlyActualStatusAndGoalForMonth(int targetId, DateTime selectedDate, string userName)
        {
            //get logged in user id
            int loggedInUserId = userRepository.GetAll().FirstOrDefault(
                x => x.AccountName == userName)?.Id ?? 0;

            var target = targetRepository.Get(targetId);

            //Update corresponding monthly actual
            var existingMonthlyActual = monthlyActualRepository.GetAll().FirstOrDefault(x => x.TargetId == targetId && x.Month == selectedDate.Month);

            if (existingMonthlyActual != null)
            {
                existingMonthlyActual.LastModifiedBy = loggedInUserId;
                existingMonthlyActual.LastModifiedOn = TimeZoneUtility.GetCurrentTimestamp();
                decimal?monthlyTarget = goalCalculator.GetMonthlyGoal(targetId,
                                                                      selectedDate.Month);
                existingMonthlyActual.Status = TargetActualComparer.GetActualStatus(monthlyTarget,
                                                                                    existingMonthlyActual.ActualValue, target.Metric.GoalTypeId);

                // Add the history as well
                existingMonthlyActual.MonthlyActualHistory.Add(
                    ActualConverters.ConvertMonthlyActualToMonthlyActualHistory(existingMonthlyActual));
            }

            monthlyActualRepository.Save();
        }
示例#2
0
        /// <summary>
        /// Method to update monthly actual entry
        /// </summary>
        /// <param name="actualRequest">daily actual request</param>
        /// <param name="goalTypeId">metric goal type id</param>
        /// <param name="userName">logged in user name</param>
        public virtual void UpdateMonthlyActual(ActualItem actualRequest, int goalTypeId, string userName)
        {
            //get logged in user id
            int loggedInUserId = userRepository.GetAll().FirstOrDefault(
                x => x.AccountName == userName)?.Id ?? 0;
            var monthlyActual = monthlyActualRepository.Get(actualRequest.Id.Value);

            monthlyActual.ActualValue = actualRequest.ActualValue;
            monthlyActual.Status      = TargetActualComparer.GetActualStatus(actualRequest.GoalValue,
                                                                             actualRequest.ActualValue, goalTypeId);
            monthlyActual.LastModifiedOn = TimeZoneUtility.GetCurrentTimestamp();
            monthlyActual.LastModifiedBy = loggedInUserId;
            monthlyActual.MonthlyActualHistory.Add(
                ActualConverters.ConvertMonthlyActualToMonthlyActualHistory(monthlyActual));
            monthlyActualRepository.Save();
        }
示例#3
0
        /// <summary>
        /// Create MonthlyActual entity from ActualEntry request
        /// </summary>
        /// <param name="actualRequest">Actual entry</param>
        /// <param name="goalTypeId">Goal type id</param>
        /// <param name="loggedInUserId">Logged in user id</param>
        /// <returns></returns>
        private MonthlyActual CreateMonthlyActual(ActualItem actualRequest, int goalTypeId,
                                                  int loggedInUserId)
        {
            DateTime curTimestamp  = TimeZoneUtility.GetCurrentTimestamp();
            var      monthlyActual = new MonthlyActual()
            {
                Month       = actualRequest.Date.Month,
                ActualValue = actualRequest.ActualValue,
                Status      = TargetActualComparer.GetActualStatus(actualRequest.GoalValue,
                                                                   actualRequest.ActualValue, goalTypeId),
                TargetId       = actualRequest.TargetId,
                CreatedOn      = curTimestamp,
                LastModifiedOn = curTimestamp,
                CreatedBy      = loggedInUserId,
                LastModifiedBy = loggedInUserId
            };

            monthlyActual.MonthlyActualHistory = new List <MonthlyActualHistory>()
            {
                ActualConverters.ConvertMonthlyActualToMonthlyActualHistory(monthlyActual)
            };
            return(monthlyActual);
        }
示例#4
0
        /// <summary>
        /// Update existing monthly actual while adding or updating daily actuals
        /// </summary>
        /// <param name="existingActual">existing monthly actual</param>
        /// <param name="actualUpdRequest">Actual update request</param>
        /// <param name="goalTypeId">goal type id</param>
        /// <param name="dataTypeId">data type id</param>
        /// <param name="loggedInUserId">logged in user id</param>
        /// <returns>Updated monthly actual</returns>
        public virtual MonthlyActual UpdateExistingMonthlyActualOfDailyActual(
            MonthlyActual existingActual, ActualItem actualUpdRequest,
            int goalTypeId, int dataTypeId, int loggedInUserId)
        {
            //set monthly actual value as sum of daily actuals in case
            //metric data type is amount/whole number
            if (dataTypeId == Constants.DataTypeAmount ||
                dataTypeId == Constants.DataTypeWholeNumber ||
                dataTypeId == Constants.DataTypeDecimalNumber)
            {
                if (actualUpdRequest.ActualValue != null)
                {
                    existingActual.ActualValue = FindSumOfDailyActualsExcludingCurrentEntryDate
                                                     (actualUpdRequest.TargetId, actualUpdRequest.Date) +
                                                 actualUpdRequest.ActualValue.Value;
                }
            }
            else
            {
                existingActual.ActualValue = actualUpdRequest.ActualValue;
            }

            existingActual.LastModifiedBy = loggedInUserId;
            existingActual.LastModifiedOn = TimeZoneUtility.GetCurrentTimestamp();
            decimal?monthlyTarget = goalCalculator.GetMonthlyGoal(actualUpdRequest.TargetId,
                                                                  actualUpdRequest.Date.Month);

            existingActual.Status = TargetActualComparer.GetActualStatus(monthlyTarget,
                                                                         existingActual.ActualValue, goalTypeId);

            // Add the history as well
            existingActual.MonthlyActualHistory.Add(
                ActualConverters.ConvertMonthlyActualToMonthlyActualHistory(existingActual));

            return(existingActual);
        }
示例#5
0
        /// <summary>
        /// Method to update status and goal for daily actual and monthly entry
        /// </summary>
        /// <param name="targetId">The target identifier.</param>
        /// <param name="selectedDate">The selected date.</param>
        /// <param name="userName">logged in user name</param>
        public virtual void UpdateDailyActualStatusAndGoalForMonth(int targetId, DateTime selectedDate, string userName)
        {
            //get logged in user id. Default NdmsAdmin
            int loggedInUserId = userRepository.GetAll().FirstOrDefault(
                x => x.AccountName == userName)?.Id ?? 0;

            //get existing daily actual
            var existingDailyActuals = dailyActualRepository.GetAll().Where(x => x.TargetId == targetId &&
                                                                            x.Date.Month == selectedDate.Month && x.Date.Year == selectedDate.Year)?.ToList();

            if (existingDailyActuals == null || !existingDailyActuals.Any())
            {
                return;
            }

            var target = targetRepository.Get(targetId);

            foreach (var dailyActual in existingDailyActuals)
            {
                decimal?actualValueToBeCompared = dailyActual.ActualValue;
                decimal?goalValueToBeCompared;
                decimal?goalValueToBeSaved;
                dailyActual.GoalValue = goalCalculator.GetDailyGoal(dailyActual.TargetId,
                                                                    dailyActual.Date.Month, dailyActual.Date.Day);
                goalValueToBeCompared = goalValueToBeSaved = dailyActual.GoalValue;
                //get cumulative actual & goal value that needs to be compared in case of cumulative plotting
                if (target.GraphPlottingMethodId == Constants.GraphPlottingMethodCumulative)
                {
                    actualValueToBeCompared = actualCalculator.CalculateCumulativeActual(
                        dailyActual.TargetId, dailyActual.Date, dailyActual.ActualValue);
                    goalValueToBeCompared = goalCalculator.CalculateCumulativeGoal(
                        target, dailyActual.Date);
                }

                //update daily actual with new changes
                dailyActual.GoalValue = goalValueToBeSaved;
                dailyActual.Status    = (actualValueToBeCompared.HasValue) ?
                                        TargetActualComparer.GetActualStatus(goalValueToBeCompared,
                                                                             actualValueToBeCompared, target.Metric.GoalTypeId) : ActualStatus.NotEntered;
                dailyActual.LastModifiedOn = TimeZoneUtility.GetCurrentTimestamp();
                dailyActual.LastModifiedBy = loggedInUserId;
                //add history of daily actual
                dailyActual.DailyActualHistory.Add(
                    ActualConverters.ConvertDailyActualToDailyActualHistory(dailyActual));
            }


            //Update corresponding monthly actual
            var existingMonthlyActual = monthlyActualRepository.GetAll().FirstOrDefault(x => x.TargetId == targetId && x.Month == selectedDate.Month);

            if (existingMonthlyActual != null)
            {
                existingMonthlyActual.LastModifiedBy = loggedInUserId;
                existingMonthlyActual.LastModifiedOn = TimeZoneUtility.GetCurrentTimestamp();
                decimal?monthlyTarget = goalCalculator.GetMonthlyGoal(targetId,
                                                                      selectedDate.Month);
                existingMonthlyActual.Status = TargetActualComparer.GetActualStatus(monthlyTarget,
                                                                                    existingMonthlyActual.ActualValue, target.Metric.GoalTypeId);

                // Add the history as well
                existingMonthlyActual.MonthlyActualHistory.Add(
                    ActualConverters.ConvertMonthlyActualToMonthlyActualHistory(existingMonthlyActual));
            }

            dailyActualRepository.Save();
        }