Ejemplo n.º 1
0
        protected virtual async Task Create(CreateOrEditEmployeePermitDto input)
        {
            input.UserId = GetCurrentUser().Id;
            var employeePermit = ObjectMapper.Map <EmployeePermit>(input);



            await _employeePermitRepository.InsertAsync(employeePermit);
        }
Ejemplo n.º 2
0
        public async Task CreateOrEdit(CreateOrEditEmployeePermitDto input)
        {
            await ValidateEmployeePermit(input);

            if (input.Id == null)
            {
                await Create(input);
            }
            else
            {
                await Update(input);
            }
        }
Ejemplo n.º 3
0
        protected virtual async Task Update(CreateOrEditEmployeePermitDto input)
        {
            var employeePermit = await _employeePermitRepository.FirstOrDefaultAsync((int)input.Id);

            ObjectMapper.Map(input, employeePermit);
        }
Ejemplo n.º 4
0
        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
        }