public int retrieveNewOrAvailableDisbursementIdForDept(int deliveredEmployeeId, int receivedEmployeeId) { Disbursement availableDisbursement = disbursementRepo.FindBy(x => x.DeliveredEmployeeId == deliveredEmployeeId && x.ReceivedEmployeeId == receivedEmployeeId && x.Signature == null).FirstOrDefault();; int targetDisbursementId; if (availableDisbursement == null) { Disbursement newDisbursement = new Disbursement(); newDisbursement.DeliveredEmployeeId = deliveredEmployeeId; newDisbursement.ReceivedEmployeeId = receivedEmployeeId; newDisbursement.AdHoc = false; int deptId = (int)employeeRepo.FindOneBy(x => x.Id == receivedEmployeeId).DepartmentId; int cPId = (int)departmentRepo.FindOneBy(x => x.Id == deptId).CollectionPointId; newDisbursement.CollectionPoint = collectionPointRepo.FindById(cPId).NameTime; DateTime tomorrow = DateTime.Today.AddDays(1); int daysUntilMonday = ((int)DayOfWeek.Monday - (int)tomorrow.DayOfWeek + 7) % 7; DateTime nextMonday = tomorrow.AddDays(daysUntilMonday); PublicHoliday holidayConflict = publicHolidayRepo.FindOneBy(x => x.Date == nextMonday); while (holidayConflict != null) { daysUntilMonday = daysUntilMonday + 7; nextMonday = tomorrow.AddDays(daysUntilMonday); holidayConflict = publicHolidayRepo.FindOneBy(x => x.Date == nextMonday); } newDisbursement.DeliveryDateTime = nextMonday; newDisbursement = disbursementRepo.Create(newDisbursement); targetDisbursementId = disbursementRepo.FindOneBy(x => x.DeliveredEmployeeId == deliveredEmployeeId && x.ReceivedEmployeeId == receivedEmployeeId && x.Signature == null).Id; } else { targetDisbursementId = availableDisbursement.Id; } return(targetDisbursementId); }