public async Task CreateEmployeeVacation(CreateEmployeeVacationInput input)
        {
            input.Status = VacationStatus.PendingForManager;
            var vacationtype = _vacationTypeRepository.GetAll().Where(x => x.TypeOfVacation == "Permission").FirstOrDefault();


            if (input.VacationTypeId == vacationtype.Id)
            {
                double period = EmployeeVacationRulesCheck(input, vacationtype);
                if (period > Convert.ToDouble(vacationtype.Limit))
                {
                    throw new Abp.UI.UserFriendlyException("Error!", "Sorry, you can't take more than " + Convert.ToDouble(vacationtype.Limit) + " " + vacationtype.Unit.ToString() + " as permissions.");
                }
                else
                {
                    var employeevacation = ObjectMapper.Map <EmployeeVacation>(input);
                    await _employeeVacationsRepository.InsertAsync(employeevacation);
                }
            }
            else
            {
                var employeevacation = ObjectMapper.Map <EmployeeVacation>(input);
                await _employeeVacationsRepository.InsertAsync(employeevacation);
            }
        }
        public double EmployeeVacationRulesCheck(CreateEmployeeVacationInput input, VacationType vacationtype)
        {
            var employeeperiod = _employeeVacationsRepository
                                 .GetAll()
                                 .ToList()
                                 .Where(x => x.EmpSAPCode == input.EmpSAPCode &&
                                        x.VacationTypeId == input.VacationTypeId &&
                                        x.VacationFrom.Month == input.VacationFrom.Month &&
                                        x.VacationFrom.Year == input.VacationFrom.Year &&
                                        (x.Status == VacationStatus.Done || x.Status == VacationStatus.ManagerApproved));

            TimeSpan ts;
            double   period = 0;

            foreach (var vac in employeeperiod)
            {
                ts = (vac.VacationTo - vac.VacationFrom);
                if (vacationtype.Unit == VacationUnit.Minute)
                {
                    period += ts.TotalMinutes;
                }
                else if (vacationtype.Unit == VacationUnit.Hour)
                {
                    period += ts.TotalHours;
                }
                else if (vacationtype.Unit == VacationUnit.Day)
                {
                    period += ts.TotalDays;
                }
            }

            ts = (input.VacationTo - input.VacationFrom);
            if (vacationtype.Unit == VacationUnit.Minute)
            {
                period += ts.TotalMinutes;
            }
            else if (vacationtype.Unit == VacationUnit.Hour)
            {
                period += ts.TotalHours;
            }
            else if (vacationtype.Unit == VacationUnit.Day)
            {
                period += ts.TotalDays;
            }

            return(period);
        }