// GET: LeaveRequest/Create
        public async Task <ActionResult> Create()
        {
            var varLeaveTypeRepositoryClass = await _ILeaveTypeRepository.findAll();

            var varSelectListItem = varLeaveTypeRepositoryClass.Select(x => new SelectListItem
            {
                Text  = x.Name,
                Value = x.LeaveTypeID.ToString()
            });

            var varLeaveTypesModel = new CreateLeaveRequestVMClass
            {
                selectLeaveTypes = varSelectListItem
            };
            var varLeaveTypeRepositoryClassList = _IMapper.Map <List <LeaveTypeVMClass> >(varLeaveTypeRepositoryClass);

            return(View(varLeaveTypesModel));
        }
        public async Task <ActionResult> Create(CreateLeaveRequestVMClass parCreateLeaveRequestVMClass)
        {
            try
            {
                var varStartDate = Convert.ToDateTime(parCreateLeaveRequestVMClass.StartDate);
                var varEndDate   = Convert.ToDateTime(parCreateLeaveRequestVMClass.EndDate);

                var varLeaveTypeRepositoryClass = await _ILeaveTypeRepository.findAll();

                var varSelectListItem = varLeaveTypeRepositoryClass.Select(x => new SelectListItem
                {
                    Text  = x.Name,
                    Value = x.LeaveTypeID.ToString()
                });

                parCreateLeaveRequestVMClass.selectLeaveTypes = varSelectListItem;

                if (!ModelState.IsValid)
                {
                    return(View(parCreateLeaveRequestVMClass));
                }


                int intWTF = (int)DateTime.Compare(varEndDate, varStartDate);
                if ((int)DateTime.Compare(varEndDate, varStartDate) < 0)
                {
                    ModelState.AddModelError("", "To Date < then From Date");
                    return(View(parCreateLeaveRequestVMClass));
                }



                var varEmployeeLoggedIn     = _userManager.GetUserAsync(User).Result;
                var varLeaveAllocationClass = await _ILeaveAllocationRepository.getEmployeeTypeAllocation(varEmployeeLoggedIn.Id, parCreateLeaveRequestVMClass.LeaveTypeID);

                if (varLeaveAllocationClass.LeaveAllocationID == 0)
                {
                    ModelState.AddModelError("", "No Leave Allocated");
                    return(View(parCreateLeaveRequestVMClass));
                }

                double dblDaysRequested = (double)(varEndDate.Date - varStartDate.Date).TotalDays;
                if (dblDaysRequested > varLeaveAllocationClass.NumberOfDays)
                {
                    ModelState.AddModelError("", "Exceeds Leave Allocated");
                    return(View(parCreateLeaveRequestVMClass));
                }

                var varLeaveRequestVMClass = new LeaveRequestVMClass
                {
                    StartDate           = varStartDate,
                    EndDate             = varEndDate,
                    LeaveTypeID         = parCreateLeaveRequestVMClass.LeaveTypeID,
                    DateRequested       = DateTime.Now,
                    DateActioned        = DateTime.Now,
                    RequestedEmployeeID = varEmployeeLoggedIn.Id
                };

                var  varLeaveRequestDataModel = _IMapper.Map <LeaveRequest>(varLeaveRequestVMClass);
                bool isSuccess = await _ILeaveRequestRepository.Create(varLeaveRequestDataModel);

                if (!isSuccess)
                {
                    ModelState.AddModelError("", "Insert Applivation Error");
                    return(View(parCreateLeaveRequestVMClass));
                }


                // TODO: Add insert logic here

                return(RedirectToAction(nameof(Index), "Home"));
            }
            catch (Exception exError)
            {
                ModelState.AddModelError("", exError.Message);
                return(View(parCreateLeaveRequestVMClass));
            }
        }