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")); }
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); }
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"); }