datatracker/ietf/liaisons/views.py
Emilio A. Sánchez López ed0277cdb9 Create liaison manager group.
Users in that group can send outgoing liaisons from any ietf entity.
Users in that group can send incoming liaisons from any sdo.
Fixes #356
 - Legacy-Id: 2467
2010-08-06 17:41:42 +00:00

150 lines
6 KiB
Python

# Copyright The IETF Trust 2007, All Rights Reserved
import datetime
from django.conf import settings
from django.core.urlresolvers import reverse
from django.db.models import Q
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.utils import simplejson
from django.views.generic.list_detail import object_list, object_detail
from ietf.liaisons.accounts import (get_person_for_user, can_add_outgoing_liaison,
can_add_incoming_liaison)
from ietf.liaisons.decorators import can_submit_liaison
from ietf.liaisons.forms import liaison_form_factory
from ietf.liaisons.models import LiaisonDetail, OutgoingLiaisonApproval
from ietf.liaisons.utils import IETFHM
@can_submit_liaison
def add_liaison(request):
if request.method == 'POST':
form = liaison_form_factory(request, data=request.POST.copy(),
files = request.FILES)
if form.is_valid():
liaison = form.save()
if request.POST.get('send', None):
if not settings.DEBUG:
liaison.send_by_mail()
else:
return _fake_email_view(request, liaison)
return HttpResponseRedirect(reverse('liaison_list'))
else:
form = liaison_form_factory(request)
return render_to_response(
'liaisons/liaisondetail_edit.html',
{'form': form},
context_instance=RequestContext(request),
)
@can_submit_liaison
def get_info(request):
person = get_person_for_user(request.user)
to_entity_id = request.GET.get('to_entity_id', None)
from_entity_id = request.GET.get('from_entity_id', None)
result = {'poc': [], 'cc': [], 'needs_approval': False}
to_error = 'Invalid TO entity id'
if to_entity_id:
to_entity = IETFHM.get_entity_by_key(to_entity_id)
if to_entity:
to_error = ''
from_error = 'Invalid FROM entity id'
if from_entity_id:
from_entity = IETFHM.get_entity_by_key(from_entity_id)
if from_entity:
from_error = ''
if to_error or from_error:
result.update({'error': '\n'.join([to_error, from_error])})
else:
result.update({'error': False,
'cc': [i.email() for i in to_entity.get_cc(person=person)] +\
[i.email() for i in from_entity.get_from_cc(person=person)],
'poc': [i.email() for i in to_entity.get_poc()],
'needs_approval': from_entity.needs_approval(person=person)})
json_result = simplejson.dumps(result)
return HttpResponse(json_result, mimetype='text/javascript')
def _fake_email_view(request, liaison):
mail = liaison.send_by_email(fake=True)
return render_to_response('liaisons/liaison_mail_detail.html',
{'mail': mail,
'message': mail.message(),
'liaison': liaison},
context_instance=RequestContext(request))
def liaison_list(request):
user = request.user
can_send_outgoing = can_add_outgoing_liaison(user)
can_send_incoming = can_add_incoming_liaison(user)
can_approve = False
person = get_person_for_user(request.user)
if person:
approval_codes = IETFHM.get_all_can_approve_codes(person)
can_approve = LiaisonDetail.objects.filter(approval__isnull=False, approval__approved=False, from_raw_code__in=approval_codes).count()
public_liaisons = LiaisonDetail.objects.filter(Q(approval__isnull=True)|Q(approval__approved=True)).order_by("-submitted_date")
return object_list(request, public_liaisons,
allow_empty=True,
template_name='liaisons/liaisondetail_list.html',
extra_context={'can_manage': can_approve or can_send_incoming or can_send_outgoing,
'can_approve': can_approve,
'can_send_incoming': can_send_incoming,
'can_send_outgoing': can_send_outgoing},
)
@can_submit_liaison
def liaison_approval_list(request):
person = get_person_for_user(request.user)
approval_codes = IETFHM.get_all_can_approve_codes(person)
to_approve = LiaisonDetail.objects.filter(approval__isnull=False, approval__approved=False, from_raw_code__in=approval_codes).order_by("-submitted_date")
return object_list(request, to_approve,
allow_empty=True,
template_name='liaisons/liaisondetail_approval_list.html',
)
@can_submit_liaison
def liaison_approval_detail(request, object_id):
person = get_person_for_user(request.user)
approval_codes = IETFHM.get_all_can_approve_codes(person)
to_approve = LiaisonDetail.objects.filter(approval__isnull=False, approval__approved=False, from_raw_code__in=approval_codes).order_by("-submitted_date")
if request.method=='POST' and request.POST.get('do_approval', False):
try:
liaison = to_approve.get(pk=object_id)
approval = liaison.approval
if not approval:
approval = OutgoingLiaisonApproval.objects.create(approved=True, approval_date=datetime.datetime.now())
liaison.approval = approval
liaison.save()
else:
approval.approved=True
approval.save()
if not settings.DEBUG:
liaison.send_by_mail()
else:
return _fake_email_view(request, liaison)
except LiaisonDetail.DoesNotExist:
pass
return HttpResponseRedirect(reverse('liaison_list'))
return object_detail(request,
to_approve,
object_id=object_id,
template_name='liaisons/liaisondetail_approval_detail.html',
)