public void UpdateSchedule(ScheduleWithDateTransfer scheduleWithDateTransfer) { if (!IsCorrectScheduleTimesOfWorkDay(scheduleWithDateTransfer)) { throw new WarningException(ExceptionMessages.TimeOfWorkDayIsNonCorrect); } if (!IsCorrectScheduleTimes(scheduleWithDateTransfer)) { throw new WarningException(ExceptionMessages.WorkDayIsNotCorrect); } lock (_locker.GetOrAdd(scheduleWithDateTransfer.DoctorId)) { if (HasConflictSession(scheduleWithDateTransfer)) { throw new WarningException(ExceptionMessages.DateOfChangeWorkDayNotOptimal); } SetWorkDaysId(scheduleWithDateTransfer); _scheduleRepository.AddOrUpdateSchedule(new Schedule { ActualisationDate = scheduleWithDateTransfer.ActualisationDate, DoctorId = scheduleWithDateTransfer.DoctorId, MondayId = scheduleWithDateTransfer.Monday?.Id ?? 0, TuesdayId = scheduleWithDateTransfer.Tuesday?.Id ?? 0, WednesdayId = scheduleWithDateTransfer.Wednesday?.Id ?? 0, ThursdayId = scheduleWithDateTransfer.Thursday?.Id ?? 0, FridayId = scheduleWithDateTransfer.Friday?.Id ?? 0, SaturdayId = scheduleWithDateTransfer.Saturday?.Id ?? 0, SundayId = scheduleWithDateTransfer.Sunday?.Id ?? 0, IsApproved = true }); } }
private bool HasConflictSession(ScheduleWithDateTransfer scheduleWithDateTransfer) { var nextSchedule = _scheduleRepository.GetSchedulesByDoctorId(scheduleWithDateTransfer.DoctorId) .OrderByDescending(s => s.ActualisationDate) .FirstOrDefault(s => s.ActualisationDate > scheduleWithDateTransfer.ActualisationDate); var sessionsInNewSchedule = _sessionRepository.GetSessionsByDoctorId(scheduleWithDateTransfer.DoctorId) .Where(s => s.Date >= scheduleWithDateTransfer.ActualisationDate); if (nextSchedule != null) { sessionsInNewSchedule = sessionsInNewSchedule.Where(s => s.Date < nextSchedule.ActualisationDate); } if (sessionsInNewSchedule.Equals(default))
private void SetWorkDaysId(ScheduleWithDateTransfer transfer) { if (transfer.Monday != null) { transfer.Monday.Id = _workDayRepository.GetOrAddNewWorkDay(transfer.Monday.BeginOfDay, transfer.Monday.EndOfDay); } if (transfer.Tuesday != null) { transfer.Tuesday.Id = _workDayRepository.GetOrAddNewWorkDay(transfer.Tuesday.BeginOfDay, transfer.Tuesday.EndOfDay); } if (transfer.Wednesday != null) { transfer.Wednesday.Id = _workDayRepository.GetOrAddNewWorkDay(transfer.Wednesday.BeginOfDay, transfer.Wednesday.EndOfDay); } if (transfer.Thursday != null) { transfer.Thursday.Id = _workDayRepository.GetOrAddNewWorkDay(transfer.Thursday.BeginOfDay, transfer.Thursday.EndOfDay); } if (transfer.Friday != null) { transfer.Friday.Id = _workDayRepository.GetOrAddNewWorkDay(transfer.Friday.BeginOfDay, transfer.Friday.EndOfDay); } if (transfer.Saturday != null) { transfer.Saturday.Id = _workDayRepository.GetOrAddNewWorkDay(transfer.Saturday.BeginOfDay, transfer.Saturday.EndOfDay); } if (transfer.Sunday != null) { transfer.Sunday.Id = _workDayRepository.GetOrAddNewWorkDay(transfer.Sunday.BeginOfDay, transfer.Sunday.EndOfDay); } }
public void UpdateSchedule(ScheduleWithDateTransfer scheduleWithDateTransfer) { SetWorkDaysId(scheduleWithDateTransfer); lock (_locker.GetOrAdd(scheduleWithDateTransfer.DoctorId)) { _scheduleRepository.AddOrUpdateSchedule(new Schedule { ActualisationDate = scheduleWithDateTransfer.ActualisationDate, DoctorId = scheduleWithDateTransfer.DoctorId, MondayId = scheduleWithDateTransfer.Monday?.Id ?? 0, TuesdayId = scheduleWithDateTransfer.Tuesday?.Id ?? 0, WednesdayId = scheduleWithDateTransfer.Wednesday?.Id ?? 0, ThursdayId = scheduleWithDateTransfer.Thursday?.Id ?? 0, FridayId = scheduleWithDateTransfer.Friday?.Id ?? 0, SaturdayId = scheduleWithDateTransfer.Saturday?.Id ?? 0, SundayId = scheduleWithDateTransfer.Sunday?.Id ?? 0, IsApproved = scheduleWithDateTransfer.IsApproved }); UpdateDoctorStatus(scheduleWithDateTransfer.DoctorId); } }