// 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));
            }
        }