protected virtual async Task Create(CreateOrEditEmployeePermitDto input) { input.UserId = GetCurrentUser().Id; var employeePermit = ObjectMapper.Map <EmployeePermit>(input); await _employeePermitRepository.InsertAsync(employeePermit); }
public async Task CreateOrEdit(CreateOrEditEmployeePermitDto input) { await ValidateEmployeePermit(input); if (input.Id == null) { await Create(input); } else { await Update(input); } }
protected virtual async Task Update(CreateOrEditEmployeePermitDto input) { var employeePermit = await _employeePermitRepository.FirstOrDefaultAsync((int)input.Id); ObjectMapper.Map(input, employeePermit); }
private async Task ValidateEmployeePermit(CreateOrEditEmployeePermitDto input) { var permit = await _lookup_permitRepository.FirstOrDefaultAsync(x => x.Id == input.PermitId); var timeReuested = (input.ToTime / 60) - (input.FromTime / 60); var permitsDay = input.Id == null ? await _employeePermitRepository.GetAllListAsync(x => x.PermitDate == input.PermitDate) : await _employeePermitRepository.GetAllListAsync(x => x.PermitDate == input.PermitDate && x.PermitId != input.PermitId); int days = input.PermitDate.DayOfWeek - DayOfWeek.Sunday; var permitDate = input.PermitDate; DateTime weekStart = permitDate.AddDays(-days); DateTime weekEnd = permitDate.AddDays(6); var permitsWeek = input.Id == null ? await _employeePermitRepository.GetAllListAsync(x => x.PermitDate <= weekEnd && x.PermitDate >= weekStart) : await _employeePermitRepository.GetAllListAsync(x => (x.PermitDate <= weekEnd && x.PermitDate >= weekStart) && x.PermitId != input.PermitId); var permitsMonth = input.Id == null ? await _employeePermitRepository.GetAllListAsync(x => x.PermitDate.Month == input.PermitDate.Month) : await _employeePermitRepository.GetAllListAsync(x => (x.PermitDate.Month == input.PermitDate.Month) && x.PermitId != input.PermitId); #region Check allow time //check time per day var totalEmployeePermitsHourPerDay = permitsDay.Select(x => (x.ToTime - x.FromTime) / 60).Sum(); var allowedHoursPerDay = permit.TotalHoursPerDay - totalEmployeePermitsHourPerDay; if (timeReuested > allowedHoursPerDay) { throw new UserFriendlyException(L($"Sorry only {permit.TotalHoursPerDay} hour/hours are Allowed per day")); } //check time per week var totalEmployeePermitsHourPerWeek = permitsWeek.Select(x => (x.ToTime - x.FromTime) / 60).Sum(); var allowedHoursPerWeek = permit.TotalHoursPerWeek - totalEmployeePermitsHourPerWeek; if (timeReuested > allowedHoursPerWeek) { throw new UserFriendlyException(L($"Sorry only {permit.TotalHoursPerDay} hour/hours are Allowed per week")); } //check time per month var totalEmployeePermitsHourPerMonth = permitsMonth.Select(x => (x.ToTime - x.FromTime) / 60).Sum(); var allowedHoursPerMonth = permit.TotalHoursPerMonth - totalEmployeePermitsHourPerMonth; if (timeReuested > allowedHoursPerMonth) { throw new UserFriendlyException(L($"Sorry only {permit.TotalHoursPerDay} hour/hours are Allowed per month")); } #endregion #region Check total count //check time per week var empPermitsPerDay = permitsDay.Count; if (empPermitsPerDay >= permit.MaxNumberPerDay) { throw new UserFriendlyException(L($"Sorry only {permit.MaxNumberPerDay} Permits are Allowed per day")); } //check time per week var empPermitsPerWeek = permitsWeek.Count; //if (empPermitsPerDay >= int.Parse(permit.MaxNumberPerWeek)) // throw new UserFriendlyException(L($"Sorry only {permit.MaxNumberPerWeek} hour/hours are Allowed")); //check time per month var empPermitsPerMonth = permitsMonth.Count; if (empPermitsPerMonth >= permit.MaxNumberPerMonth) { throw new UserFriendlyException(L($"Sorry only {permit.MaxNumberPerMonth} hour/hours are Allowed")); } #endregion }