|
18 | 18 | from ietf.meeting.forms import duration_string |
19 | 19 | from ietf.meeting.helpers import get_meeting, make_materials_directories |
20 | 20 | from ietf.meeting.models import Meeting, Session, Room, TimeSlot, SchedTimeSessAssignment, Schedule |
| 21 | +from ietf.name.models import SessionStatusName |
21 | 22 | from ietf.group.models import Group, GroupEvent |
22 | 23 | from ietf.person.models import Person |
23 | 24 | from ietf.secr.meetings.blue_sheets import create_blue_sheets |
@@ -517,26 +518,30 @@ def non_session(request, meeting_id, schedule_name): |
517 | 518 | @role_required('Secretariat') |
518 | 519 | def non_session_delete(request, meeting_id, schedule_name, slot_id): |
519 | 520 | ''' |
520 | | - This function deletes the non-session TimeSlot. For "other" and "plenary" timeslot |
521 | | - types we need to delete the corresponding Session object as well. Check for uploaded |
| 521 | + This function deletes the non-session TimeSlot. Check for uploaded |
522 | 522 | material first. SchedTimeSessAssignment objects get deleted as well. |
523 | 523 | ''' |
524 | | - meeting = get_object_or_404(Meeting, number=meeting_id) |
525 | | - # schedule = get_object_or_404(Schedule, meeting=meeting, name=schedule_name) |
526 | 524 | slot = get_object_or_404(TimeSlot, id=slot_id) |
527 | | - if slot.type_id in ('other','plenary','lead'): |
528 | | - assignments = slot.sessionassignments.filter(schedule__meeting=meeting) |
| 525 | + assert slot.type_id in ('other','plenary','lead', 'reg') |
| 526 | + |
| 527 | + if request.method == 'POST' and request.POST['post'] == 'yes': |
| 528 | + assignments = slot.sessionassignments.all() |
529 | 529 | session_objects = [ x.session for x in assignments ] |
| 530 | + |
530 | 531 | for session in session_objects: |
531 | 532 | if session.materials.exclude(states__slug='deleted'): |
532 | 533 | messages.error(request, 'Materials have already been uploaded for "%s". You must delete those before deleting the timeslot.' % slot.name) |
533 | 534 | return redirect('ietf.secr.meetings.views.non_session', meeting_id=meeting_id, schedule_name=schedule_name) |
534 | | - else: |
535 | | - Session.objects.filter(pk__in=[ x.pk for x in session_objects ]).delete() |
536 | | - slot.delete() |
| 535 | + |
| 536 | + # delete high order assignments, then sessions and slots |
| 537 | + assignments.delete() |
| 538 | + Session.objects.filter(pk__in=[ x.pk for x in session_objects ]).delete() |
| 539 | + slot.delete() |
| 540 | + |
| 541 | + messages.success(request, 'The entry was deleted successfully') |
| 542 | + return redirect('ietf.secr.meetings.views.non_session', meeting_id=meeting_id, schedule_name=schedule_name) |
537 | 543 |
|
538 | | - messages.success(request, 'Non-Session timeslot deleted successfully') |
539 | | - return redirect('ietf.secr.meetings.views.non_session', meeting_id=meeting_id, schedule_name=schedule_name) |
| 544 | + return render(request, 'confirm_delete.html', {'object': slot}) |
540 | 545 |
|
541 | 546 | @role_required('Secretariat') |
542 | 547 | def non_session_edit(request, meeting_id, schedule_name, slot_id): |
@@ -1004,11 +1009,24 @@ def times_delete(request, meeting_id, schedule_name, time): |
1004 | 1009 |
|
1005 | 1010 | parts = [ int(x) for x in time.split(':') ] |
1006 | 1011 | dtime = datetime.datetime(*parts) |
1007 | | - |
1008 | | - TimeSlot.objects.filter(meeting=meeting,time=dtime).delete() |
1009 | | - |
1010 | | - messages.success(request, 'Timeslot deleted') |
1011 | | - return redirect('ietf.secr.meetings.views.times', meeting_id=meeting_id,schedule_name=schedule_name) |
| 1012 | + status = SessionStatusName.objects.get(slug='schedw') |
| 1013 | + |
| 1014 | + if request.method == 'POST' and request.POST['post'] == 'yes': |
| 1015 | + for slot in TimeSlot.objects.filter(meeting=meeting,time=dtime): |
| 1016 | + for assignment in slot.sessionassignments.all(): |
| 1017 | + if assignment.session: |
| 1018 | + session = assignment.session |
| 1019 | + session.status = status |
| 1020 | + session.save() |
| 1021 | + assignment.delete() |
| 1022 | + slot.delete() |
| 1023 | + messages.success(request, 'The entry was deleted successfully') |
| 1024 | + return redirect('ietf.secr.meetings.views.times', meeting_id=meeting_id,schedule_name=schedule_name) |
| 1025 | + |
| 1026 | + return render(request, 'confirm_delete.html', { |
| 1027 | + 'object': '%s timeslots' % dtime.strftime("%A %H:%M"), |
| 1028 | + 'extra': 'Any sessions assigned to this timeslot will be unscheduled' |
| 1029 | + }) |
1012 | 1030 |
|
1013 | 1031 | @role_required('Secretariat') |
1014 | 1032 | def unschedule(request, meeting_id, schedule_name, session_id): |
|
0 commit comments