Exemple #1
0
        public static SalaryScaleViewModel Create(IRepository repository, string titleCode, string effectiveDate, User user)
        {
            Check.Require(repository != null, "Repository must be supplied");

            var viewModel = new SalaryScaleViewModel
            {
                SalaryScale = new SalaryScale(),
                Titles      = repository.OfType <Title>()
                              .Queryable
                              .OrderBy(t => t.AbbreviatedName)
                              // .ThenBy(t => t.TitleCode)
                              .ToList()
            };

            viewModel.TitleCodes = viewModel.Titles
                                   .OrderBy(t => t.TitleCode)
                                   .ToList();

            if (!String.IsNullOrEmpty(titleCode))
            {
                var searchDate = DateTime.Now;
                if (effectiveDate != null)
                {
                    DateTime.TryParse(effectiveDate, out searchDate);
                }
                var salaryScale = SalaryScale.GetEffectiveSalaryScale(repository, titleCode, searchDate);
                if (salaryScale != null)
                {
                    viewModel.SalaryScale = salaryScale;
                }
                viewModel.TitleCode = titleCode;

                var schoolsForUser = user.Units.Select(x => x.DeansOfficeSchoolCode).Distinct().ToArray();
                viewModel.CollegeAverages =
                    repository.OfType <CollegeAverage>().Queryable.Where(x => schoolsForUser.Contains(x.SchoolCode) && x.TitleCode == viewModel.TitleCode).
                    ToList();
            }

            return(viewModel);
        }
        //public IList<Title> TitleCodesList { get; set; }

        //public static EmployeeSalaryComparisonViewModel Create(IRepository repository)
        //{
        //    return EmployeeSalaryComparisonViewModel.Create(repository, null);
        //}

        public static EmployeeSalaryComparisonViewModel Create(IRepository repository, User user, bool isDepartmentUser, SalaryScaleViewModel salaryScaleViewModel)
        {
            Check.Require(repository != null, "Repository must be supplied");

            var anyDepartment = new Department()
            {
                Name = "Any", DepartmentNumber = "Any"
            };
            var anyTitle = new Title()
            {
                AbbreviatedName = "Any", PayrollTitle = "Any", TitleCode = "Any"
            };
            var anyEmployee = new Employee()
            {
                FullName = "Any", EmployeeID = "0"
            };

            if (salaryScaleViewModel == null)
            {
                salaryScaleViewModel = Models.SalaryScaleViewModel.Create(repository);
            }

            var viewModel = new EmployeeSalaryComparisonViewModel
            {
                IsDepartmentUser              = isDepartmentUser,
                SalaryScaleViewModel          = salaryScaleViewModel,
                Employee                      = new Employee(),
                Employees                     = new List <Employee>(),
                SelectedDepartments           = new List <Department>(),
                SelectedTitles                = new List <Title>(),
                SelectedDepartmentCodesString = string.Empty,
                SelectedTitleCodesString      = string.Empty,
                SelectedEmployee              = anyEmployee,
                SelectedEmployeeId            = string.Empty
            };

            if (salaryScaleViewModel.Titles.Count == 0)
            {
                viewModel.TitlesList = repository.OfType <Title>()
                                       .Queryable
                                       .OrderBy(t => t.TitleCode)
                                       .ToList();
            }
            else
            {
                viewModel.TitlesList = salaryScaleViewModel.Titles;
            }

            if (user == null)
            {
                user = Core.Domain.User.GetByLoginId(repository, HttpContext.Current.User.Identity.Name);
            }
            viewModel.User = user;

            var allSchoolDepartments = Department.GetAllForUser(repository, user, false, "Name", true);
            IList <Department> usersDepartmentsList;

            if (isDepartmentUser)
            {
                var usersUnits = user.Units.Select(u => u.PPSCode).ToArray();

                usersDepartmentsList = allSchoolDepartments
                                       .Where(x => usersUnits.Contains(x.Id))
                                       .ToList();
            }
            else
            {
                usersDepartmentsList = allSchoolDepartments;
            }
            viewModel.DepartmentsList = usersDepartmentsList;

            // This will return a list of employees with their IsDepartmentEmployee set appropriately if isDepartmentUser == true.
            var allSchoolEmployees = Employee.GetAllForEmployeeTable(repository, user, isDepartmentUser, "FullName", true, null, null, allSchoolDepartments.Select(x => x.Id).ToArray());

            //var allSchoolEmployees = SchoolEmployees.GetAllForSchoolCodes(repository,
            //                                                             allSchoolDepartments.Select(
            //                                                                 x => x.DeansOfficeSchoolCode).Distinct().
            //                                                                 ToArray());
            viewModel.AllSchoolEmployees = allSchoolEmployees;

            // Assign only those with IsDepartmentEmployee == true to Employees select list or ALL school employees is non-department user, i.e. deans office.
            viewModel.EmployeesList = isDepartmentUser ? allSchoolEmployees.Where(x => x.IsDepartmentEmployee == true).ToList() : allSchoolEmployees;

            viewModel.SelectedDepartments.Add(anyDepartment);
            viewModel.SelectedTitles.Add(anyTitle);

            return(viewModel);
        }
Exemple #3
0
        /// <summary>
        /// Given a repository, employee ID, proposed title (optional) and user
        /// or repository, reference number, and user,
        /// Create a Salary Analysis Editor View model.
        /// </summary>
        /// <param name="repository">Database IRepository context</param>
        /// <param name="selectedEmployeeId">Employee ID of the employee for which to perform a new salary review analysis upon</param>
        /// <param name="proposedTitle">The proposed title to be used in conjunction with performing for a reclassification review; otherwise, null when performing an equity review</param>
        /// <param name="referenceNumber">The Salary Review Analysis reference number to be used for looking up an existing analysis</param>
        /// <param name="user">The logged in user either creating a new or viewing an existing analysis.  Used for determining which college average(s) to display on the associated Salary Scale</param>
        /// <returns>A SalaryReviewAnalysisEditorViewModel populated according to the parameters provided</returns>
        public static SalaryReviewAnalysisEditorViewModel Create(IRepository repository, string selectedEmployeeId, string proposedTitle, string referenceNumber, User user)
        {
            Check.Require(repository != null, "Repository must be supplied");

            var viewModel = new SalaryReviewAnalysisEditorViewModel
            {
                ProposedTitles = repository.OfType <Title>()
                                 .Queryable
                                 .OrderBy(t => t.AbbreviatedName)
                                 // .ThenBy(t => t.TitleCode)
                                 .ToList(),

                //SelectionTypes = repository.OfType<SelectionType>()
                //.Queryable
                //.Where(x => x.ShortType != "Step")
                //.OrderBy(s => s.SortOrder)
                //.ToList(),

                ReportDate = DateTime.Today
            };

            var salaryScaleViewModel = new SalaryScaleViewModel();

            SalaryReviewAnalysis salaryReviewAnalysis = null;
            SalaryScale          salaryScale          = null;
            string titleCode = null;  // This title code is used in conjunction with determining colleges averages.

            if (!String.IsNullOrEmpty(referenceNumber) || !String.IsNullOrEmpty(selectedEmployeeId))
            {
                // Assumes either an employee ID or reference number was provided.
                // We should always get here unless someone bypassed the menu page and entered a URL directly into
                // a web browser with some or all parameters missing.
                if (String.IsNullOrEmpty(referenceNumber))
                {
                    // Then an employee ID and proposed title for reclassification (optional) was provided
                    viewModel.ReportDate       = DateTime.Today;
                    viewModel.SelectedEmployee = repository.OfType <Employee>()
                                                 .Queryable
                                                 .Where(e => e.id.Equals(selectedEmployeeId))
                                                 .FirstOrDefault();

                    salaryReviewAnalysis = new SalaryReviewAnalysis {
                        DateInitiated = DateTime.Today
                    };
                    var scenarios = new List <Scenario>();
                    var scenario  = new Scenario
                    {
                        SalaryReviewAnalysis = salaryReviewAnalysis,
                        ScenarioNumber       = 1,
                        SelectionType        = "None",
                        PercentIncrease      = 0,
                        Approved             = false,
                        SalaryAmount         = viewModel.SelectedEmployee.PayRate
                    };
                    scenarios.Add(scenario);
                    salaryReviewAnalysis.Scenarios = scenarios;
                    viewModel.SalaryReviewAnalysis = salaryReviewAnalysis;

                    viewModel.SraEmployee = new SRAEmployee(viewModel.SelectedEmployee);

                    salaryScale = new SalaryScale();

                    if (string.IsNullOrEmpty(proposedTitle) == false && !viewModel.SelectedEmployee.TitleCode.Equals(proposedTitle))
                    {
                        // Then the optional proposed title was provided so this is a reclassification review.
                        titleCode = proposedTitle;

                        viewModel.SalaryReviewAnalysis.IsReclass = true;

                        viewModel.ProposedTitle = repository.OfType <Title>()
                                                  .Queryable
                                                  .Where(p => p.TitleCode.Equals(proposedTitle))
                                                  .FirstOrDefault();

                        //salaryScale = repository.OfType<SalaryScale>()
                        //    .Queryable
                        //    .Where(r => r.TitleCode == proposedTitle)
                        //    .FirstOrDefault();
                        salaryScale = SalaryScale.GetEffectiveSalaryScale(repository, proposedTitle, DateTime.Today);

                        viewModel.SalaryReviewAnalysis.Title = viewModel.ProposedTitle;
                    }
                    else
                    {
                        // Else this is a standard equity review.
                        titleCode = viewModel.SelectedEmployee.TitleCode;

                        //salaryScale = repository.OfType<SalaryScale>()
                        //    .Queryable
                        //    .Where(r => r.TitleCode == viewModel.SelectedEmployee.TitleCode)
                        //    .FirstOrDefault();
                        salaryScale = SalaryScale.GetEffectiveSalaryScale(repository, viewModel.SelectedEmployee.TitleCode, DateTime.Today);

                        viewModel.SalaryReviewAnalysis.Title = viewModel.SelectedEmployee.Title;
                    }
                }
                else if (!String.IsNullOrEmpty(referenceNumber))
                {
                    // Reference number is present so try getting existing review by reference number:
                    viewModel.SalaryReviewAnalysis = repository.OfType <SalaryReviewAnalysis>()
                                                     .Queryable
                                                     .Where(x => x.ReferenceNumber.Equals(referenceNumber))
                                                     .FirstOrDefault();

                    if (viewModel.SalaryReviewAnalysis != null)
                    {
                        titleCode = viewModel.SalaryReviewAnalysis.SalaryScale.TitleCode;

                        viewModel.SraEmployee = viewModel.SalaryReviewAnalysis.Employee;

                        viewModel.ProposedTitle = (viewModel.SalaryReviewAnalysis.IsReclass ? viewModel.SalaryReviewAnalysis.Title : null);

                        salaryScale = SalaryScale.GetEffectiveSalaryScale(repository, viewModel.SalaryReviewAnalysis.SalaryScale.TitleCode, viewModel.SalaryReviewAnalysis.SalaryScale.EffectiveDate);
                    }
                }

                if (salaryScale != null)
                {
                    // Determine the user's school(s)
                    var schoolsForUser = user.Units.Select(x => x.DeansOfficeSchoolCode).Distinct().ToArray();
                    // and populate the corresponding college averages:
                    salaryScaleViewModel.CollegeAverages =
                        repository.OfType <CollegeAverage>().Queryable.Where(x => schoolsForUser.Contains(x.SchoolCode) && x.TitleCode == titleCode).
                        ToList();

                    var employeesSchoolCode = viewModel.SraEmployee.HomeDepartment.SchoolCode;
                    var collegeAverage      =
                        salaryScaleViewModel.CollegeAverages.Where(x => x.SchoolCode.Equals(employeesSchoolCode)).Select(x => x.CollegeAverageAnnual).
                        FirstOrDefault();

                    viewModel.CriteriaList           = SalaryReviewAnalysis.GetCriteriaList(repository, salaryScale, collegeAverage);
                    salaryScaleViewModel.SalaryScale = salaryScale;
                }
            }
            viewModel.SalaryScaleViewModel = salaryScaleViewModel;

            return(viewModel);
        }
Exemple #4
0
 public static SalaryScaleViewModel Create(IRepository repository)
 {
     return(SalaryScaleViewModel.Create(repository, null, null, null));
 }