Beispiel #1
0
        public async Task <Absence> AddNewAbsence(NewAbsenceAsset asset)
        {
            Absence newAbsence = new Absence()
            {
                AbsenceStart = asset.AbsenceStart,
                AbsenceEnd   = asset.AbsenceEnd,
                WorkerID     = _dataContext.Workers.First(x => x.Name == asset.Worker).ID,
                L4           = asset.isL4
            };

            if (!asset.isL4)
            {
                var absenceSpan = asset.AbsenceEnd.Subtract(asset.AbsenceStart);
                if (absenceSpan.Days > 0)
                {
                    _dataContext.Workers.First(x => x.Name == asset.Worker).AbsenceLimit -=
                        (absenceSpan.Days + 1) - FreeDaysCounter.CountFreeDays(asset.AbsenceStart, asset.AbsenceEnd);
                }
                else
                {
                    _dataContext.Workers.First(x => x.Name == asset.Worker).AbsenceLimit -= 1;
                }
            }

            await _dataContext.Absences.AddAsync(newAbsence);

            await _dataContext.SaveChangesAsync();

            return(newAbsence);
        }
        public async Task <IActionResult> ApplyNewAbsence(NewAbsenceAsset asset)
        {
            var veryficator = new NewAbsenceVeryficators();

            if (veryficator.DateVeryficator(asset.AbsenceStart, asset.AbsenceEnd))
            {
                if (asset.isL4)
                {
                    var absence = await _repo.AddNewAbsence(asset);

                    return(StatusCode(201));
                }

                else
                {
                    var workers = await _repo.GetWorkers();

                    var limit = workers.First(x => x.Name == asset.Worker).AbsenceLimit;
                    if (veryficator.AbsenceLimitVeryficator(limit, asset.AbsenceStart, asset.AbsenceEnd))
                    {
                        var absence = await _repo.AddNewAbsence(asset);

                        return(StatusCode(201));
                    }
                    else
                    {
                        return(BadRequest("Leave time exceeded the remaining days of employee limit"));
                    }
                }
            }

            else
            {
                return(BadRequest("Can't add new absence. Check data correctness."));
            }
        }