예제 #1
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"));
    }
예제 #2
0
    private bool CanBeDeleted(PaidOvertime payout)
    {
        var allActivePayouts = _context.PaidOvertime
                               .Where(p => p.Date.Month >= DateTime.Now.Month &&
                                      p.Date.Year == DateTime.Now.Year).ToList();

        if (!allActivePayouts.Any())
        {
            throw new ValidationException("There are no active payouts");
        }

        var latestId = allActivePayouts.OrderBy(p => p.Id).Last().Id;

        if (payout.Id < latestId)
        {
            return(false);
        }

        return(true);
    }
예제 #3
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");
    }