コード例 #1
0
        public ActionResult <GenericHourEntry> RegisterPaidOvertime([FromBody] GenericHourEntry request)
        {
            if (request.Hours < 0)
            {
                return(BadRequest("Input value must be positive number"));
            }
            if (request.Hours % 0.5M != 0)
            {
                return(BadRequest("Input value must be a multiple of a half hour (0.5)"));
            }

            var user = _userRetriever.RetrieveUser();

            var response = _storage.RegisterPaidOvertime(request, user.Id);

            if (response is OkObjectResult)
            {
                return(Ok(new
                {
                    Date = request.Date.ToDateOnly(),
                    Value = request.Hours
                }));
            }

            return(BadRequest(response.Value));
        }
コード例 #2
0
    public ObjectResult RegisterPaidOvertime(GenericHourEntry request, int userId)
    {
        var user      = _context.User.SingleOrDefault(u => u.Id == userId);
        var startDate = user.StartDate;

        List <DateEntry> entriesByDate = GetTimeEntries(startDate, request.Date, userId);
        var registeredPayouts          = GetRegisteredPayouts(userId);

        List <OvertimeEntry> overtimeEntries = GetOvertimeEntries(entriesByDate, startDate, request.Date);

        CompensateForOffTime(overtimeEntries, entriesByDate, startDate, request.Date, userId);
        CompensateForRegisteredPayouts(overtimeEntries, registeredPayouts);

        var availableOvertimeEquivalents = GetOvertimeEquivalents(startDate, request.Date, userId);

        if (request.Hours <= availableOvertimeEquivalents)
        {
            PaidOvertime paidOvertime = new PaidOvertime
            {
                Date  = request.Date,
                User  = userId,
                Value = request.Hours
            };

            _context.PaidOvertime.Add(paidOvertime);
            _context.SaveChanges();

            return(new OkObjectResult(paidOvertime));
        }

        return(new BadRequestObjectResult("Not enough available hours"));
    }
コード例 #3
0
        public ActionResult <GenericHourEntry> RegisterPaidOvertime([FromBody] GenericHourEntry request)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState.Values));
            }

            var user = _userRetriever.RetrieveUser();

            var response = _storage.RegisterPaidOvertime(new GenericHourEntry
            {
                Hours = request.Hours,
                Date  = request.Date
            }, user.Id);

            return(Ok(new GenericHourEntry
            {
                Date = response.Date,
                Hours = response.HoursBeforeCompensation
            }));
        }
コード例 #4
0
    public PaidOvertimeEntry RegisterPaidOvertime(GenericHourEntry request, int userId)
    {
        var user                   = _context.User.SingleOrDefault(u => u.Id == userId);
        var userStartDate          = user.StartDate;
        var dateToStartCalculation = userStartDate > _startOfOvertimeSystem ? userStartDate : _startOfOvertimeSystem;

        var overtimeEntries = GetOvertimeEntriesAfterOffTimeAndPayouts(dateToStartCalculation, request.Date, userId);

        var availableForPayout = overtimeEntries.Sum(ot => ot.Hours);

        var hoursAfterCompRate = GetHoursAfterCompRate(overtimeEntries, request.Hours);

        if (request.Hours <= availableForPayout)
        {
            PaidOvertime paidOvertime = new PaidOvertime
            {
                Date = request.Date,
                User = userId,
                HoursBeforeCompRate = request.Hours,
                HoursAfterCompRate  = hoursAfterCompRate
            };

            _context.PaidOvertime.Add(paidOvertime);
            _context.SaveChanges();

            return(new PaidOvertimeEntry()
            {
                UserId = paidOvertime.Id,
                Date = paidOvertime.Date,
                HoursBeforeCompensation = paidOvertime.HoursBeforeCompRate,
                HoursAfterCompensation = paidOvertime.HoursAfterCompRate
            });
        }

        throw new ValidationException("Not enough available hours");
    }