Exemplo n.º 1
0
        public StatusChangeHistoryDC ConvertToDataContract(EmployeeRepository empRepo)
        {
            var ret = new StatusChangeHistoryDC();

            ret.Id         = Id;
            ret.EmployeeId = EmployeeId;
            ret.Date       = Date;
            ret.ManagerId  = ManagerId;
            ret.Title      = Title;
            ret.Level      = Level;
            ret.Salary     = Salary;
            ret.Bonus      = Bonus;
            ret.Action     = Action;

            if (ManagerId != Guid.Empty)
            {
                Employee manager = empRepo.GetEmployeeRaw(ManagerId);
                ret.ManagerName = manager.FirstName + " " + manager.LastName;
            }

            return(ret);
        }
        public DateTime?GetMyNextReviewDate(EmployeeDC emp)
        {
            if (emp.ResignDate != null)
            {
                return(null);
            }
            StatusChangeHistoryDC lastPerformanceReview = emp.History.LastOrDefault(his => his.Action == Entities.ActionType.ANNUAL_PERFORMANCE_REVIEW);

            if (lastPerformanceReview == null)
            {
                if (emp.OnboardDate.Month <= 6)
                {
                    return(GetNextReviewDate());
                }
                else
                {
                    return(GetNextReviewDate().AddYears(1));
                }
            }
            else
            {
                return(GetNextReviewDate());
            }
        }
        /// <summary>
        /// It takes the baseline from the onboard date or the previous review date, to calculate the next review date based on the policy.
        /// </summary>
        /// <param name="emp"></param>
        /// <returns></returns>
        public DateTime?GetMyNextReviewDate(EmployeeDC emp)
        {
            if (emp.ResignDate != null)
            {
                return(null);
            }
            StatusChangeHistoryDC lastPerformanceReview = emp.History.LastOrDefault(his => his.Action == Entities.ActionType.ANNUAL_PERFORMANCE_REVIEW);

            if (lastPerformanceReview == null)
            {
                // New employee
                int reviewMonth = 1;
                int reviewYear  = emp.OnboardDate.Year + 1;
                switch (emp.OnboardDate.Month)
                {
                case 1:
                case 2:
                case 3:
                    reviewMonth = 4;
                    break;

                case 4:
                case 5:
                case 6:
                    reviewMonth = 7;
                    break;

                case 7:
                case 8:
                case 9:
                    reviewMonth = 10;
                    break;

                case 10:
                case 11:
                case 12:
                    reviewMonth = 1;
                    reviewYear++;
                    break;
                }
                return(new DateTime(reviewYear, reviewMonth, 1));
            }
            else
            {
                // Employee with at least one previous annual performance review.
                if (new int[] { 1, 4, 7, 10 }.Contains(lastPerformanceReview.Date.Month))
                {
                    // The review was conducted on time last year
                    return(new DateTime(lastPerformanceReview.Date.Year + 1, lastPerformanceReview.Date.Month, 1));
                }
                else
                {
                    // The review wasn't on time, so that we have to calculate the next review based on onboard date.
                    int reviewMonth = 1;
                    int reviewYear  = lastPerformanceReview.Date.Year + 1;
                    switch (emp.OnboardDate.Month)
                    {
                    case 1:
                    case 2:
                    case 3:
                        reviewMonth = 4;
                        break;

                    case 4:
                    case 5:
                    case 6:
                        reviewMonth = 7;
                        break;

                    case 7:
                    case 8:
                    case 9:
                        reviewMonth = 10;
                        break;

                    case 10:
                    case 11:
                    case 12:
                        reviewMonth = 1;
                        break;
                    }
                    return(new DateTime(reviewYear, reviewMonth, 1));
                }
            }
        }