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));
        }
Exemple #3
0
        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)
            });
        }