Exemplo n.º 1
0
def manage_supervisors(request, grad_slug):
    grad = get_object_or_404(GradStudent, slug=grad_slug, program__unit__in=request.units)
    supervisors = Supervisor.objects.filter(student=grad).select_related('supervisor')
    supervisor_people = [s.supervisor for s in supervisors if s.supervisor]

    if request.method == 'POST':
        form = SupervisorForm(request.POST)
        form.set_supervisor_choices(possible_supervisors([grad.program.unit], extras=supervisor_people, null=True))
        if form.is_valid():
            s = form.save(commit=False)
            s.modified_by = request.user.username
            s.student = grad
            s.save()
            
            messages.success(request, "Added committee member for %s." % (grad))
            l = LogEntry(userid=request.user.username,
                  description="Added committee member %s for %s." % (s, grad.person.userid),
                  related_object=s)
            l.save()              
            return HttpResponseRedirect(reverse('grad:manage_supervisors', kwargs={'grad_slug':grad_slug}))
    else:
        form = SupervisorForm()
        form.set_supervisor_choices(possible_supervisors([grad.program.unit], extras=supervisor_people, null=True))

    context = {
               'form': form,
               'supervisors': supervisors,
               'grad': grad,
               'can_edit': True,
               }
    return render(request, 'grad/manage_supervisors.html', context)
Exemplo n.º 2
0
def browse(request):
    units = request.units
    hiring_choices = [('all', 'All')] + possible_supervisors(units)
    project_choices = [('all', 'All')] + [
        (p.id, unicode(p))
        for p in Project.objects.filter(unit__in=units, hidden=False)
    ]
    account_choices = [('all', 'All')] + [
        (a.id, unicode(a))
        for a in Account.objects.filter(unit__in=units, hidden=False)
    ]
    if 'data' in request.GET:
        # AJAX query for data
        ras = RAAppointment.objects.filter(unit__in=units, deleted=False) \
                .select_related('person', 'hiring_faculty', 'project', 'account')
        if 'hiring_faculty' in request.GET and request.GET[
                'hiring_faculty'] != 'all':
            ras = ras.filter(hiring_faculty__id=request.GET['hiring_faculty'])
        if 'project' in request.GET and request.GET['project'] != 'all':
            ras = ras.filter(project__id=request.GET['project'],
                             project__unit__in=units)
        if 'account' in request.GET and request.GET['account'] != 'all':
            ras = ras.filter(account__id=request.GET['account'],
                             account__unit__in=units)

        truncated = False
        if ras.count() > 200:
            ras = ras[:200]
            truncated = True
        data = []
        for ra in ras:
            radata = {
                'slug': ra.slug,
                'name': ra.person.sortname(),
                'hiring': ra.hiring_faculty.sortname(),
                'project': unicode(ra.project),
                'project_hidden': ra.project.hidden,
                'account': unicode(ra.account),
                'account_hidden': ra.account.hidden,
                'start': datefilter(ra.start_date, settings.GRAD_DATE_FORMAT),
                'end': datefilter(ra.end_date, settings.GRAD_DATE_FORMAT),
                'amount': '$' + unicode(ra.lump_sum_pay),
            }
            data.append(radata)

        response = HttpResponse(content_type="application/json")
        json.dump({'truncated': truncated, 'data': data}, response, indent=1)
        return response

    else:
        # request for page
        form = RABrowseForm()
        form.fields['hiring_faculty'].choices = hiring_choices
        form.fields['account'].choices = account_choices
        form.fields['project'].choices = project_choices
        context = {'form': form}
        return render(request, 'ra/browse.html', context)
Exemplo n.º 3
0
def manage_supervisors(request, grad_slug):
    grad = get_object_or_404(GradStudent,
                             slug=grad_slug,
                             program__unit__in=request.units)
    supervisors = Supervisor.objects.filter(
        student=grad).select_related('supervisor')
    supervisor_people = [s.supervisor for s in supervisors if s.supervisor]

    if request.method == 'POST':
        form = SupervisorForm(request.POST)
        form.set_supervisor_choices(
            possible_supervisors([grad.program.unit],
                                 extras=supervisor_people,
                                 null=True))
        if form.is_valid():
            s = form.save(commit=False)
            s.modified_by = request.user.username
            s.student = grad
            s.save()

            messages.success(request,
                             "Added committee member for %s." % (grad))
            l = LogEntry(userid=request.user.username,
                         description="Added committee member %s for %s." %
                         (s, grad.person.userid),
                         related_object=s)
            l.save()
            return HttpResponseRedirect(
                reverse('grad:manage_supervisors',
                        kwargs={'grad_slug': grad_slug}))
    else:
        form = SupervisorForm()
        form.set_supervisor_choices(
            possible_supervisors([grad.program.unit],
                                 extras=supervisor_people,
                                 null=True))

    context = {
        'form': form,
        'supervisors': supervisors,
        'grad': grad,
        'can_edit': True,
    }
    return render(request, 'grad/manage_supervisors.html', context)
Exemplo n.º 4
0
def _appointment_defaults(units, emplid=None):
    hiring_faculty_choices = possible_supervisors(units)
    unit_choices = [(u.id, u.name) for u in units]
    project_choices = [(p.id, unicode(p)) for p in Project.objects.filter(unit__in=units, hidden=False)]
    account_choices = [(a.id, unicode(a)) for a in Account.objects.filter(unit__in=units, hidden=False)]
    scholarship_choices = [("", u'\u2014')]
    if emplid:
        for s in Scholarship.objects.filter(student__person__emplid=emplid):
            scholarship_choices.append((s.pk, s.scholarship_type.unit.label + ": " + s.scholarship_type.name + " (" + s.start_semester.name + " to " + s.end_semester.name + ")"))

    return (scholarship_choices, hiring_faculty_choices, unit_choices, project_choices, account_choices)
Exemplo n.º 5
0
def _appointment_defaults(units, emplid=None):
    hiring_faculty_choices = possible_supervisors(units)
    unit_choices = [(u.id, u.name) for u in units]
    project_choices = [(p.id, unicode(p)) for p in Project.objects.filter(unit__in=units, hidden=False)]
    account_choices = [(a.id, unicode(a)) for a in Account.objects.filter(unit__in=units, hidden=False)]
    scholarship_choices = [("", u'\u2014')]
    if emplid:
        for s in Scholarship.objects.filter(student__person__emplid=emplid):
            scholarship_choices.append((s.pk, s.scholarship_type.unit.label + ": " + s.scholarship_type.name + " (" + s.start_semester.name + " to " + s.end_semester.name + ")"))

    return (scholarship_choices, hiring_faculty_choices, unit_choices, project_choices, account_choices)
Exemplo n.º 6
0
def browse(request):
    units = Unit.sub_units(request.units)
    hiring_choices = [('all', 'All')] + possible_supervisors(units)
    project_choices = [('all', 'All')] + [(p.id, unicode(p)) for p in Project.objects.filter(unit__in=units, hidden=False)]
    account_choices = [('all', 'All')] + [(a.id, unicode(a)) for a in Account.objects.filter(unit__in=units, hidden=False)]
    if 'data' in request.GET:
        # AJAX query for data
        ras = RAAppointment.objects.filter(unit__in=units, deleted=False) \
                .select_related('person', 'hiring_faculty', 'project', 'account')
        if 'hiring_faculty' in request.GET and request.GET['hiring_faculty'] != 'all':
            ras = ras.filter(hiring_faculty__id=request.GET['hiring_faculty'])
        if 'project' in request.GET and request.GET['project'] != 'all':
            ras = ras.filter(project__id=request.GET['project'], project__unit__in=units)
        if 'account' in request.GET and request.GET['account'] != 'all':
            ras = ras.filter(account__id=request.GET['account'], account__unit__in=units)

        truncated = False
        if ras.count() > 200:
            ras = ras[:200]
            truncated = True
        data = []
        for ra in ras:
            radata = {
                'slug': ra.slug,
                'name': ra.person.sortname(),
                'hiring': ra.hiring_faculty.sortname(),
                'project': unicode(ra.project),
                'project_hidden': ra.project.hidden,
                'account': unicode(ra.account),
                'account_hidden': ra.account.hidden,
                'start': datefilter(ra.start_date, settings.GRAD_DATE_FORMAT),
                'end': datefilter(ra.end_date, settings.GRAD_DATE_FORMAT),
                'amount': '$'+unicode(ra.lump_sum_pay),
                }
            data.append(radata)
        
        response = HttpResponse(content_type="application/json")
        json.dump({'truncated': truncated, 'data': data}, response, indent=1)
        return response

    else:
        # request for page
        form = RABrowseForm()
        form.fields['hiring_faculty'].choices = hiring_choices
        form.fields['account'].choices = account_choices
        form.fields['project'].choices = project_choices
        context = {
            'form': form
            }
        return render(request, 'ra/browse.html', context)
Exemplo n.º 7
0
def reappoint(request, ra_slug):
    appointment = get_object_or_404(RAAppointment, slug=ra_slug, deleted=False, unit__in=request.units)
    semester = Semester.next_starting()
    semesterconfig = SemesterConfig.get_config(request.units, semester)
    raform = RAForm(instance=appointment, initial={'person': appointment.person.emplid, 'reappointment': True,
                    'start_date': semesterconfig.start_date(), 'end_date': semesterconfig.end_date(), 'hours': 80,
                    'use_hourly': appointment.use_hourly() })
    raform.fields['hiring_faculty'].choices = possible_supervisors(request.units)
    scholarship_choices = [("", "---------")]
    for s in Scholarship.objects.filter(student__person__emplid = appointment.person.emplid):
            scholarship_choices.append((s.pk, s.scholarship_type.unit.label + ": " + s.scholarship_type.name + " (" + s.start_semester.name + " to " + s.end_semester.name + ")"))
    raform.fields['scholarship'].choices = scholarship_choices
    raform.fields['unit'].choices = [(u.id, u.name) for u in request.units]
    raform.fields['project'].choices = [(p.id, unicode(p.project_number)) for p in Project.objects.filter(unit__in=request.units)]
    raform.fields['account'].choices = [(a.id, u'%s (%s)' % (a.account_number, a.title)) for a in Account.objects.filter(unit__in=request.units)]
    return render(request, 'ra/new.html', { 'raform': raform, 'appointment': appointment })
Exemplo n.º 8
0
def reappoint(request, ra_slug):
    appointment = get_object_or_404(RAAppointment, slug=ra_slug, deleted=False)
    semester = Semester.next_starting()
    semesterconfig = SemesterConfig.get_config(request.units, semester)
    raform = RAForm(instance=appointment, initial={'person': appointment.person.emplid, 'reappointment': True,
                    'start_date': semesterconfig.start_date(), 'end_date': semesterconfig.end_date(), 'hours': 80,
                    'use_hourly': appointment.use_hourly() })
    raform.fields['hiring_faculty'].choices = possible_supervisors(request.units)
    scholarship_choices = [("", "---------")]
    for s in Scholarship.objects.filter(student__person__emplid = appointment.person.emplid):
            scholarship_choices.append((s.pk, s.scholarship_type.unit.label + ": " + s.scholarship_type.name + " (" + s.start_semester.name + " to " + s.end_semester.name + ")"))
    raform.fields['scholarship'].choices = scholarship_choices
    raform.fields['unit'].choices = [(u.id, u.name) for u in request.units]
    raform.fields['project'].choices = [(p.id, unicode(p.project_number)) for p in Project.objects.filter(unit__in=request.units)]
    raform.fields['account'].choices = [(a.id, u'%s (%s)' % (a.account_number, a.title)) for a in Account.objects.filter(unit__in=request.units)]
    return render(request, 'ra/new.html', { 'raform': raform, 'appointment': appointment })
Exemplo n.º 9
0
def manage_defence(request, grad_slug):
    """
    Page for managing all defence-related stuff.
    
    Slightly complicated since this info cuts across several models.
    """
    grad = get_object_or_404(GradStudent,
                             slug=grad_slug,
                             program__unit__in=request.units)
    supervisors = Supervisor.objects.filter(
        student=grad).select_related('supervisor')
    supervisor_people = [s.supervisor for s in supervisors if s.supervisor]
    supervisor_choices = possible_supervisors(units=request.units,
                                              extras=supervisor_people,
                                              null=True)

    if request.method == 'POST':
        form = GradDefenceForm(request.POST)
        form.set_supervisor_choices(supervisor_choices)
        if form.is_valid():
            with transaction.atomic():
                grad.config['thesis_type'] = form.cleaned_data['thesis_type']
                grad.config['work_title'] = form.cleaned_data['work_title']
                grad.config['exam_date'] = form.cleaned_data['exam_date']
                grad.config['thesis_outcome'] = form.cleaned_data[
                    'thesis_outcome']
                grad.config['thesis_location'] = form.cleaned_data[
                    'thesis_location']
                grad.save()

                if form.cleaned_data['internal']:
                    p = form.cleaned_data['internal']
                    # remove any old ones
                    remove_sup = Supervisor.objects.filter(
                        student=grad, removed=False,
                        supervisor_type='SFU').exclude(supervisor=p)
                    for sup in remove_sup:
                        sup.removed = True
                        sup.save()

                    existing_sup = Supervisor.objects.filter(
                        student=grad,
                        removed=False,
                        supervisor_type='SFU',
                        supervisor=p)
                    if not existing_sup:
                        # doesn't exist: create
                        sup = Supervisor(student=grad,
                                         supervisor_type='SFU',
                                         supervisor=p)
                        sup.save()
                    # else: already there, so nothing to change

                if form.cleaned_data['chair']:
                    p = form.cleaned_data['chair']
                    # remove any old ones
                    remove_sup = Supervisor.objects.filter(
                        student=grad, removed=False,
                        supervisor_type='CHA').exclude(supervisor=p)
                    for sup in remove_sup:
                        sup.removed = True
                        sup.save()

                    existing_sup = Supervisor.objects.filter(
                        student=grad,
                        removed=False,
                        supervisor_type='CHA',
                        supervisor=p)
                    if not existing_sup:
                        # doesn't exist: create
                        sup = Supervisor(student=grad,
                                         supervisor_type='CHA',
                                         supervisor=p)
                        sup.save()
                    # else: already there, so nothing to change

                if form.cleaned_data['external']:
                    name = form.cleaned_data['external']
                    # remove any old ones
                    remove_sup = Supervisor.objects.filter(
                        student=grad, removed=False,
                        supervisor_type='EXT').exclude(external=name)
                    for sup in remove_sup:
                        sup.removed = True
                        sup.save()

                    # creqate/update
                    existing_sup = Supervisor.objects.filter(
                        student=grad,
                        removed=False,
                        supervisor_type='EXT',
                        external=name)
                    if existing_sup:
                        sup = existing_sup[0]
                    else:
                        sup = Supervisor(student=grad,
                                         supervisor_type='EXT',
                                         external=name)

                    sup.config['email'] = form.cleaned_data['external_email']
                    sup.config['contact'] = form.cleaned_data[
                        'external_contact']
                    sup.config['attend'] = form.cleaned_data['external_attend']
                    sup.save()

            messages.success(request,
                             "Updated defence info for %s." % (grad.person))
            l = LogEntry(userid=request.user.username,
                         description="Updated grad defence info for %s." %
                         (grad),
                         related_object=grad)
            l.save()
            return HttpResponseRedirect(
                reverse('grad.views.view', kwargs={'grad_slug': grad.slug}))
    else:
        initial = {}
        if 'thesis_type' in grad.config:
            initial['thesis_type'] = grad.config['thesis_type']
        if 'work_title' in grad.config:
            initial['work_title'] = grad.config['work_title']
        if 'exam_date' in grad.config:
            initial['exam_date'] = grad.config['exam_date']
        if 'thesis_outcome' in grad.config:
            initial['thesis_outcome'] = grad.config['thesis_outcome']
        if 'thesis_location' in grad.config:
            initial['thesis_location'] = grad.config['thesis_location']
        internals = Supervisor.objects.filter(student=grad,
                                              removed=False,
                                              supervisor_type='SFU')
        if internals:
            initial['internal'] = internals[0].supervisor_id
        chairs = Supervisor.objects.filter(student=grad,
                                           removed=False,
                                           supervisor_type='CHA')
        if chairs:
            initial['chair'] = chairs[0].supervisor_id
        externals = Supervisor.objects.filter(student=grad,
                                              removed=False,
                                              supervisor_type='EXT')
        if externals:
            ext = externals[0]
            initial['external'] = ext.external
            initial['external_email'] = ext.config.get('email', '')
            initial['external_contact'] = ext.config.get('contact', '')
            initial['external_attend'] = ext.config.get('attend', '')

        form = GradDefenceForm(initial=initial)
        form.set_supervisor_choices(supervisor_choices)

    context = {
        'form': form,
        'grad': grad,
    }
    return render(request, 'grad/manage_defence.html', context)
Exemplo n.º 10
0
def manage_defence(request, grad_slug):
    """
    Page for managing all defence-related stuff.
    
    Slightly complicated since this info cuts across several models.
    """
    grad = get_object_or_404(GradStudent, slug=grad_slug, program__unit__in=request.units)
    supervisors = Supervisor.objects.filter(student=grad).select_related('supervisor')
    supervisor_people = [s.supervisor for s in supervisors if s.supervisor]
    supervisor_choices = possible_supervisors(units=request.units, extras=supervisor_people, null=True)
        
    if request.method == 'POST':
        form = GradDefenceForm(request.POST)
        form.set_supervisor_choices(supervisor_choices)
        if form.is_valid():
            with transaction.atomic():
                grad.config['thesis_type'] = form.cleaned_data['thesis_type']
                grad.config['work_title'] = form.cleaned_data['work_title']
                grad.config['exam_date'] = form.cleaned_data['exam_date']
                grad.config['thesis_outcome'] = form.cleaned_data['thesis_outcome']
                grad.config['thesis_location'] = form.cleaned_data['thesis_location']
                grad.save()
                
                if form.cleaned_data['internal']:
                    p = form.cleaned_data['internal']
                    # remove any old ones
                    remove_sup = Supervisor.objects.filter(student=grad, removed=False, supervisor_type='SFU').exclude(supervisor=p)
                    for sup in remove_sup:
                        sup.removed = True
                        sup.save()
                    
                    existing_sup = Supervisor.objects.filter(student=grad, removed=False, supervisor_type='SFU', supervisor=p)
                    if not existing_sup:
                        # doesn't exist: create
                        sup = Supervisor(student=grad, supervisor_type='SFU', supervisor=p)
                        sup.save()
                    # else: already there, so nothing to change
                
                if form.cleaned_data['chair']:
                    p = form.cleaned_data['chair']
                    # remove any old ones
                    remove_sup = Supervisor.objects.filter(student=grad, removed=False, supervisor_type='CHA').exclude(supervisor=p)
                    for sup in remove_sup:
                        sup.removed = True
                        sup.save()
                    
                    existing_sup = Supervisor.objects.filter(student=grad, removed=False, supervisor_type='CHA', supervisor=p)
                    if not existing_sup:
                        # doesn't exist: create
                        sup = Supervisor(student=grad, supervisor_type='CHA', supervisor=p)
                        sup.save()
                    # else: already there, so nothing to change

                if form.cleaned_data['external']:
                    name = form.cleaned_data['external']
                    # remove any old ones
                    remove_sup = Supervisor.objects.filter(student=grad, removed=False, supervisor_type='EXT').exclude(external=name)
                    for sup in remove_sup:
                        sup.removed = True
                        sup.save()
                    
                    # creqate/update
                    existing_sup = Supervisor.objects.filter(student=grad, removed=False, supervisor_type='EXT', external=name)
                    if existing_sup:
                        sup = existing_sup[0]
                    else:
                        sup = Supervisor(student=grad, supervisor_type='EXT', external=name)
                    
                    sup.config['email'] = form.cleaned_data['external_email']
                    sup.config['contact'] = form.cleaned_data['external_contact']
                    sup.config['attend'] = form.cleaned_data['external_attend']
                    sup.save()

            messages.success(request, "Updated defence info for %s." % (grad.person))
            l = LogEntry(userid=request.user.username,
                  description="Updated grad defence info for %s." % (grad),
                  related_object=grad)
            l.save()    
            return HttpResponseRedirect(reverse('grad.views.view', kwargs={'grad_slug':grad.slug}))
    else:
        initial = {}
        if 'thesis_type' in grad.config:
            initial['thesis_type'] = grad.config['thesis_type']
        if 'work_title' in grad.config:
            initial['work_title'] = grad.config['work_title']
        if 'exam_date' in grad.config:
            initial['exam_date'] = grad.config['exam_date']
        if 'thesis_outcome' in grad.config:
            initial['thesis_outcome'] = grad.config['thesis_outcome']
        if 'thesis_location' in grad.config:
            initial['thesis_location'] = grad.config['thesis_location']
        internals = Supervisor.objects.filter(student=grad, removed=False, supervisor_type='SFU')
        if internals:
            initial['internal'] = internals[0].supervisor_id
        chairs = Supervisor.objects.filter(student=grad, removed=False, supervisor_type='CHA')
        if chairs:
            initial['chair'] = chairs[0].supervisor_id
        externals = Supervisor.objects.filter(student=grad, removed=False, supervisor_type='EXT')
        if externals:
            ext = externals[0]
            initial['external'] = ext.external
            initial['external_email'] = ext.config.get('email', '')
            initial['external_contact'] = ext.config.get('contact', '')
            initial['external_attend'] = ext.config.get('attend', '')

        form = GradDefenceForm(initial=initial)
        form.set_supervisor_choices(supervisor_choices)        

    context = {
               'form': form,
               'grad': grad,
               }
    return render(request, 'grad/manage_defence.html', context)