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); }
/// <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); }
public static SalaryScaleViewModel Create(IRepository repository) { return(SalaryScaleViewModel.Create(repository, null, null, null)); }