public async Task <ActionResult> Edit(int weekId, int employeeId) { var currentUserId = await sessionAdapter.EmployeeIdAsync(); if (!User.IsInRole(UserRoleName.Admin) && employeeId != currentUserId) { return(RedirectToAction("Edit", new { weekId, employeeId = currentUserId })); } var req = new WeekOfTimeEntriesRequest() { EmployeeId = employeeId, RequestingUserIsAdmin = User.IsInRole(UserRoleName.Admin), RequestingUserName = User.Identity.Name, WeekId = weekId }; var vm = await weekOfTimeEntriesQuery.GetFullTimeEntryViewModelAsync(req); return(View("Week", vm)); }
private async Task <ActionResult> ReloadPageForErrorCorrection(int weekId, int employeeId, FullTimeEntryViewModel vm, Result res) { var req = new WeekOfTimeEntriesRequest() { EmployeeId = employeeId, RequestingUserIsAdmin = User.IsInRole(UserRoleName.Admin), RequestingUserName = User.Identity.Name, WeekId = weekId }; var vmDefault = await weekOfTimeEntriesQuery.GetFullTimeEntryViewModelAsync(req); foreach (var day in vmDefault.TimeEntryRow) { var match = vm.TimeEntryRow.Single(x => x.RowId == day.RowId); day.Monday.Hours = match.Monday.Hours; day.Tuesday.Hours = match.Tuesday.Hours; day.Wednesday.Hours = match.Wednesday.Hours; day.Thursday.Hours = match.Thursday.Hours; day.Friday.Hours = match.Friday.Hours; day.Saturday.Hours = match.Saturday.Hours; day.Sunday.Hours = match.Sunday.Hours; day.Monday.OvertimeHours = match.Monday.OvertimeHours; day.Tuesday.OvertimeHours = match.Tuesday.OvertimeHours; day.Wednesday.OvertimeHours = match.Wednesday.OvertimeHours; day.Thursday.OvertimeHours = match.Thursday.OvertimeHours; day.Friday.OvertimeHours = match.Friday.OvertimeHours; day.Saturday.OvertimeHours = match.Saturday.OvertimeHours; day.Sunday.OvertimeHours = match.Sunday.OvertimeHours; } NotificationsController.AddNotification(User.SafeUserName(), $"Timesheet was not saved {string.Join("<br />", res.Errors)}"); ModelState.Clear(); foreach (var err in res.Errors) { ModelState.AddModelError("", err); } return(View("Week", vmDefault)); }
public async Task <FullTimeEntryViewModel> GetFullTimeEntryViewModelAsync(WeekOfTimeEntriesRequest request) { var employeeForWeek = await employeeService.GetSingleEmployeeAsync(request.EmployeeId); if (!request.RequestingUserIsAdmin && employeeForWeek.UserName != request.RequestingUserName) { throw new UnauthorizedAccessException($"You are not allowed to view others time sheets"); } var currentWeek = WeekDTO.CreateForWeekId(request.WeekId); var weekOfTimeEntries = await timeService.GetWeekAsync(request.EmployeeId, request.WeekId); //var timeEntries = await timeService.GetAsync(request.WeekId, request.EmployeeId); var allJobList = (await jobService.GetAsync()).ToList(); var taskList = (await taskService.GetTasks()).ToList().OrderBy(x => x.Name).ThenBy(x => x.Description); var entries = new List <TimeEntryViewModel>(); var status = await timeApprovalService.GetAsync(request.WeekId, request.EmployeeId); var existingJobWithTasks = weekOfTimeEntries.AsEnumerable().GroupBy(x => new JobWithTaskDTO() { JobId = x.JobId, TaskId = x.JobTaskId }); foreach (var entry in existingJobWithTasks) { var tasky = taskList.FirstOrDefault(x => x.TaskId == entry.Key.TaskId); var SelectedEntryTaskName = $"{tasky?.LegacyCode} - {tasky?.Name}"; var SelectedEntryJob = allJobList.FirstOrDefault(x => x.JobId == entry.Key.JobId); var jobCode = ""; if (SelectedEntryJob != null) { jobCode = SelectedEntryJob.JobCode; } var item = new TimeEntryViewModel() { SelectedJobId = entry.Key.JobId, SelectedTaskId = entry.Key.TaskId, SelectedEntryTaskName = SelectedEntryTaskName, SelectedEntryJobName = SelectedEntryJob?.JobName, SelectedJobCode = jobCode, SelectedTaskCategory = tasky?.Category?.Name, Monday = MapToViewModel(currentWeek, DayOfWeek.Monday, entry), Tuesday = MapToViewModel(currentWeek, DayOfWeek.Tuesday, entry), Wednesday = MapToViewModel(currentWeek, DayOfWeek.Wednesday, entry), Thursday = MapToViewModel(currentWeek, DayOfWeek.Thursday, entry), Friday = MapToViewModel(currentWeek, DayOfWeek.Friday, entry), Saturday = MapToViewModel(currentWeek, DayOfWeek.Saturday, entry), Sunday = MapToViewModel(currentWeek, DayOfWeek.Sunday, entry), }; entries.Add(item); } entries = entries.OrderBy(x => x.SelectedJobCode).ThenBy(x => x.SelectedTaskId).ToList(); var nextWeek = currentWeek.Next(); var prevWeek = currentWeek.Previous(); return(new FullTimeEntryViewModel() { TimeEntryRow = entries, EmployeeId = employeeForWeek.EmployeeId, EmployeeDisplayName = $"{employeeForWeek.First} {employeeForWeek.Last}", NewEntry = await GenerateEmptyJobTaskAsync(request.WeekId, request.EmployeeId), Week = new WeekIdentifier() { WeekEnd = currentWeek.WeekEnd, WeekStart = currentWeek.WeekStart, WeekId = currentWeek.WeekId.Value, Year = currentWeek.Year }, ApprovalStatus = status.TimeApprovalStatus, Expenses = await _expenseService.GetExpensesForEmployee(request.EmployeeId, request.WeekId) }); }