public async Task ModifyMeetDay(int scheduleId, MeetDayModificationRequest request)
        {
            if (request.RescheduleMeetDay)
            {
                var savedSchedule = await GetSchedule(scheduleId);

                if (request.NewMeetDate.CompareTo(savedSchedule.EndDate) > 0)
                {
                    throw new ValidationException($"The New Meet Date cannot fall after the Schedules End Date of {savedSchedule.EndDate.ToShortDateString()}");
                }

                using (var connection = _iocDbConnectionFactory.GetReadOnlyConnection())
                {
                    var rescheduleMeetDayCheckSql = @"
            SELECT COUNT(*)
            FROM [dbo].[Attendance]
            WHERE [ProgramScheduleId] = @ScheduleId
            AND [MeetDay] = @NewMeetDate;
          ";

                    var hasMeetDayOnRescheduledDate = await connection.QueryFirstOrDefaultAsync <int>(rescheduleMeetDayCheckSql, new { scheduleId, request.NewMeetDate }) > 0;

                    if (hasMeetDayOnRescheduledDate)
                    {
                        throw new Exception($"The Program already has a scheduled meet day on {request.NewMeetDate.ToShortDateString()}.");
                    }
                }
            }

            var deleteSql = @"
        DELETE 
        FROM [dbo].[Attendance]
        WHERE [ProgramScheduleId] = @ScheduleId
        AND MeetDay = @MeetDay;
      ";
            var modifySql = @"
        UPDATE [dbo].[Attendance]
        SET [MeetDay] = @NewMeetDay
        WHERE [ProgramScheduleId] = @ScheduleId
        AND [MeetDay] = @MeetDay;
      ";

            using (var connection = _iocDbConnectionFactory.GetReadWriteConnection())
            {
                var affectedRows = await connection.ExecuteAsync(
                    request.CancelMeetDay?deleteSql : modifySql,
                    new
                {
                    ScheduleId = scheduleId,
                    MeetDay    = request.MeetDate,
                    NewMeetday = request.NewMeetDate
                });

                if (affectedRows == 0)
                {
                    throw new Exception("An unknown error occured.");
                }
            }
        }
Esempio n. 2
0
        public async Task <ActionResult> ModifyMeetDay([FromRoute] int scheduleId, [FromBody] MeetDayModificationRequest request)
        {
            await _scheduleService.ModifyMeetDay(scheduleId, request);

            return(Ok(true));
        }