Merged in [17044] from valery@smyslov.net:

Make it clearer that a chair can't revise materials for a meeting once the proceedings deadline has passed

    Fixes issue #2612.
 - Legacy-Id: 17067
Note: SVN reference [17044] has been migrated to Git commit 182dae28a8
This commit is contained in:
Henrik Levkowetz 2019-11-20 10:10:31 +00:00
commit 19eb5de983
7 changed files with 24 additions and 13 deletions

View file

@ -1349,12 +1349,12 @@ def all_presentations(request, name):
sessions = doc.session_set.filter(status__in=['sched','schedw','appr','canceled'],
type__in=['session','plenary','other'])
future, in_progress, past = group_sessions(sessions)
future, in_progress, recent, past = group_sessions(sessions)
return render(request, 'doc/material/all_presentations.html', {
'user': request.user,
'doc': doc,
'future': future,
'in_progress': in_progress,
'past' : past,
'past' : past+recent,
})

View file

@ -135,6 +135,9 @@ def milestone_reviewer_for_group_type(group_type):
def can_manage_materials(user, group):
return has_role(user, 'Secretariat') or group.has_role(user, group.features.matman_roles)
def can_manage_session_materials(user, group, session):
return has_role(user, 'Secretariat') or (group.has_role(user, group.features.matman_roles) and not session.is_material_submission_cutoff())
def can_provide_status_update(user, group):
if not group.features.acts_like_wg:
return False

View file

@ -112,7 +112,6 @@ from ietf.review.utils import (can_manage_review_requests_for_team,
from ietf.doc.models import LastCallDocEvent
from ietf.name.models import ReviewAssignmentStateName
from ietf.utils.mail import send_mail_text, parse_preformatted, get_payload
@ -754,17 +753,20 @@ def meetings(request, acronym=None, group_type=None):
meeting__date__gt=four_years_ago,
type__in=['session','plenary','other'])
future, in_progress, past = group_sessions(sessions)
future, in_progress, recent, past = group_sessions(sessions)
can_edit = has_role(request.user,["Secretariat","Area Director"]) or group.has_role(request.user,["Chair","Secretary"])
can_edit = group.has_role(request.user,["Chair","Secretary"])
can_always_edit = has_role(request.user,["Secretariat","Area Director"])
return render(request,'group/meetings.html',
construct_group_menu_context(request, group, "meetings", group_type, {
'group':group,
'future':future,
'in_progress':in_progress,
'recent':recent,
'past':past,
'can_edit':can_edit,
'can_always_edit':can_always_edit,
}))
def chair_photos(request, group_type=None):

View file

@ -39,12 +39,15 @@ def group_sessions(sessions):
today = datetime.date.today()
future = []
in_progress = []
recent = []
past = []
for s in sessions:
if s.meeting.date > today:
future.append(s)
elif s.meeting.end_date() >= today:
in_progress.append(s)
elif not s.is_material_submission_cutoff():
recent.append(s)
else:
past.append(s)
@ -52,7 +55,7 @@ def group_sessions(sessions):
# meetings with descending time
past.reverse()
return future, in_progress, past
return future, in_progress, recent, past
def get_upcoming_manageable_sessions(user):
""" Find all the sessions for meetings that haven't ended that the user could affect """

View file

@ -48,7 +48,7 @@ from django.views.generic import RedirectView
from ietf.doc.fields import SearchableDocumentsField
from ietf.doc.models import Document, State, DocEvent, NewRevisionDocEvent, DocAlias
from ietf.group.models import Group
from ietf.group.utils import can_manage_materials
from ietf.group.utils import can_manage_session_materials
from ietf.ietfauth.utils import role_required, has_role
from ietf.mailtrigger.utils import gather_address_lists
from ietf.meeting.models import Meeting, Session, Schedule, FloorPlan, SessionPresentation, TimeSlot, SlideSubmission
@ -1120,8 +1120,8 @@ def session_details(request, num, acronym ):
session.type_counter.update([p.document.type.slug for p in qs])
# we somewhat arbitrarily use the group of the last session wet get from
# get_sessions() above when checking can_manage_materials()
can_manage = can_manage_materials(request.user, session.group)
# get_sessions() above when checking can_manage_session_materials()
can_manage = can_manage_session_materials(request.user, session.group, session)
scheduled_sessions=[s for s in sessions if s.status_id=='sched']
unscheduled_sessions = [s for s in sessions if s.status_id!='sched']

View file

@ -50,7 +50,7 @@
<td>{% if s.minutes %}<a href="{{ s.minutes.get_absolute_url }}">Minutes</a>{% endif %}</td>
<td>
<a href="{% url 'ietf.meeting.views.session_details' num=s.meeting.number acronym=s.group.acronym %}">
{% if can_edit %}Edit {% endif %}Materials
{% if can_always_edit or can_edit_materials %}Edit {% endif %}Materials
</a>
</td>
{% endfor %}

View file

@ -23,7 +23,7 @@
Meetings in progress
</div>
<div class="panel-body">
{% with sessions=in_progress show_request=True show_ical=True %}
{% with sessions=in_progress show_request=True show_ical=True can_edit_materials=can_edit %}
{% include "group/meetings-row.html" %}
{% endwith %}
</div>
@ -37,7 +37,7 @@
<a class="regular pull-right" title="icalendar entry for all scheduled future {{group.acronym}} meetings" href="{% url 'ietf.meeting.views.upcoming_ical' %}?filters={{group.acronym}}"><span class="fa fa-calendar"></span></a>
</div>
<div class="panel-body">
{% with sessions=future show_request=True show_ical=True %}
{% with sessions=future show_request=True show_ical=True can_edit_materials=can_edit %}
{% include "group/meetings-row.html" %}
{% endwith %}
</div>
@ -50,7 +50,10 @@
Past Meetings
</div>
<div class="panel-body">
{% with past as sessions %}
{% with sessions=recent can_edit_materials=can_edit %}
{% include "group/meetings-row.html" %}
{% endwith %}
{% with sessions=past can_edit_materials=False %}
{% include "group/meetings-row.html" %}
{% endwith %}
</div>