// GET: VacationRequestController/Create public async Task <ActionResult> Create() { var vacationtypes = await _typerepo.FindAll(); var vacationtypeItems = vacationtypes.Select(q => new SelectListItem { Text = q.Name, Value = q.Id.ToString() }); var model = new CreateVacationRequestVM { VacationTypes = vacationtypeItems }; return(View(model)); }
public async Task <ActionResult> Create(CreateVacationRequestVM model) { var startDate = Convert.ToDateTime(model.StartDate); var endDate = Convert.ToDateTime(model.EndDate); var vacationtypes = await _typerepo.FindAll(); var vacationtypeItems = vacationtypes.Select(q => new SelectListItem { Text = q.Name, Value = q.Id.ToString() }); model.VacationTypes = vacationtypeItems; try { if (!ModelState.IsValid) { return(View(model)); } if (DateTime.Compare(startDate, endDate) > 1) { ModelState.AddModelError("", "Start Date cannot be further in the fiuture than the End Date..."); return(View(model)); } var employee = await _userManager.GetUserAsync(User); var allocation = await _allocationrepo.GetVacationAllocationsByEmployeeAndType(employee.Id, model.VacationTypeId); int daysRequested = (int)(endDate - startDate).TotalDays; if (daysRequested > allocation.NumberOfDays) { ModelState.AddModelError("", "You don't have sufficient days for this request..."); return(View(model)); } var VacationRequestModel = new VacationRequestVM { RequestingEmployeeId = employee.Id, StartDate = startDate, EndDate = endDate, Approved = null, Cancelled = false, DateRequested = DateTime.Now, DateActioned = DateTime.Now, VacationTypeId = model.VacationTypeId }; var vacationrequest = _mapper.Map <VacationRequest>(VacationRequestModel); var isSuccess = await _requestrepo.Create(vacationrequest); if (!isSuccess) { ModelState.AddModelError("", "Something went wrong when submitting your record..."); return(View(model)); } return(RedirectToAction(nameof(MyLeave))); } catch (Exception ex) { ModelState.AddModelError("", "Something went wrong..."); return(View(model)); } }