def registration(request):
    if (request.user.is_authenticated()):
        return redirect('/account/login')
    
    errors = None
    form = NewCandidateForm(request.POST or None)
    if (request.method == 'POST'):
        if form.is_valid():
            submited_candidate = form.save(commit=False) # get a candidate object without saving to the database
            submited_candidate.set_password(form.cleaned_data['confirm_password']) # hash and set the supplied password
            
            # make a request rather than manually set the jurisdiction
            submited_candidate.Request_Jurisdiction_Transfer(form.cleaned_data['jurisdiction'])
            submited_candidate.jurisdiction = None
            
            submited_candidate.save()   # Now save to the database
            new_user = auth.authenticate(
                username = form.cleaned_data['email_address'],
                password = form.cleaned_data['confirm_password'],
            )
            auth.login(request, new_user)
            return redirect('/account/modification')
        else:
            errors = form.errors
            
    template_file = 'candidate_registration_template.djt'
    context_dict = {}
    context_dict['invalid_login'] = errors
    context_dict['path'] = request.path
    context_dict['nav_links'] = create_navlinks(request.user)
    context_dict['login_form'] = form.as_ul()
    context_dict.update(csrf(request))
    return render_to_response(template_file, context_dict)
def modify(request):
    if not request.user.is_authenticated():
        return redirect('/account/login')
        

    
    errors = None
    cand = request.user
    form = ChangeCandidateForm(request.POST or None, instance = cand)
    if (request.method == 'POST'):
        if form.is_valid() and cand.check_password(form.cleaned_data['old_password']):
            print "PASSED"
            if form.cleaned_data['new_password'] and form.cleaned_data['new_password'] == form.cleaned_data['confirm_password']:
                # update password
                print "Changing password to: '" + form.cleaned_data['new_password'] +"'"
                cand.set_password(form.cleaned_data['new_password'])
            
            
            orig = Candidate.objects.get(pk = cand.pk)
            if orig.jurisdiction ==  form.cleaned_data['jurisdiction']:
                cand.Revoke_Transfer_Request()
            else:
                cand.Request_Jurisdiction_Transfer(form.cleaned_data['jurisdiction'])
                errors = "Transfer Request Submitted"                
            
            form.save()
            

            

    template_file = 'account_info_template.djt'
    context_dict = {}
    context_dict['invalid_login'] = errors
    context_dict['path'] = request.path
    context_dict['nav_links'] = create_navlinks(cand)
    if False:
        form = ChangeCandidateForm(initial = {
            'email_address':    cand.email_address,
            'first_name':       cand.first_name,
            'middle_initial':   cand.middle_initial,
            'last_name':        cand.last_name,
            'suffix':           cand.suffix,
            'phone_number':     cand.phone_number,
            'street_address':   cand.street_address,
            'city_name':        cand.city_name,
            'postal_code':      cand.postal_code,
            'state_abrv':       cand.street_address,
            'jurisdiction':     cand.jurisdiction,
        })
    
    context_dict['login_form'] = form.as_ul()
    
    context_dict.update(csrf(request))
    return render_to_response(template_file, context_dict)
def display(request):

    if not request.user.is_authenticated():
        return redirect('/login')
    
    
    context_dict = {}
    context_dict['nav_links'] = create_navlinks(request.user)
    context_dict['ps_form'] = PreScreenForm(Officer=request.user).as_ul()
    context_dict['form_handel'] = "/certifying/filter"
    context_dict.update(csrf(request))

    return render_to_response('certifying_view_template.djt', context_dict)
def definition(request):
    if (not request.user.is_authenticated()):
        return redirect('/login')

    if (not request.user.Is_Administrator()):
        return redirect('/account_info') 

    context_dict = {}
    context_dict['nav_links'] = create_navlinks(request.user)
    context_dict.update(csrf(request))
    context_dict['requirement_form'] = {
        'elements': RequirementDefinitionForm(),
        'push_addr': "/administrator/definition/push/requirement",
        'pull_addr': "/administrator/definition/pull/requirement",
    }
    context_dict['certification_form'] = {
        'elements': CertificationDefinitionForm(),
        'push_addr': "/administrator/definition/push/certification",
        'pull_addr': "/administrator/definition/pull/certification",
    }
    return render_to_response('admin_definition.djt', context_dict)
def login(request):
    if (request.user.is_authenticated()):
        return redirect('/account/modification')
    
    errors = []
    if (request.method == 'POST'):
        user = auth.authenticate(username=request.POST.get('email_address',''), password=request.POST.get('password',''))

        if user is not None and user.is_active:
            auth.login(request, user)
            return redirect('/account/modification')
        else:
            errors.append('Invalid login credentials')
            
    template_file = 'login_template.djt'
    context_dict = {}
    context_dict['invalid_login'] = errors
    context_dict['path'] = request.path
    context_dict['nav_links'] = create_navlinks(request.user)
    context_dict['login_form'] = CandidateLoginForm().as_ul()
    context_dict.update(csrf(request))
    return render_to_response(template_file, context_dict)
def display(request):
    nav_links = create_navlinks(request.user)
    context_dict = {}
    context_dict['nav_links'] = nav_links
    
    debug = []
    if (request.user.is_authenticated()):
        
        full_arr = []
        for cert in Certification.objects.filter(candidate = request.user).distinct().prefetch_related('child_requirements', 'child_certifications'):
            full_arr.append({
                'name': cert.name,
                'description':cert.description,
                'expiration':candidate_earned_certification.objects.filter(certification = cert, candidate = request.user).values('expiration_date')[0]['expiration_date'],
                'sub_reqs': cert.child_requirements.values('name'),
                'sub_certs': cert.child_certifications.values('name'),
            })
        debug = full_arr
        
        part_arr = []
        for cert in Certification.objects.exclude(candidate = request.user).filter(Q(child_requirements__candidate = request.user) | Q(child_certifications__candidate = request.user)).distinct().prefetch_related('child_requirements', 'child_certifications'):
            all_child_req_list = []
            earned_child_req_list = [{'name':req['name'], 'earned':True} for req in Requirement.objects.filter(candidate = request.user).filter(parent_certification = cert).values('name')]
            unearned_child_req_list = Requirement.objects.exclude(candidate = request.user).filter(parent_certification = cert).values('name')
            all_child_req_list.extend(earned_child_req_list)
            all_child_req_list.extend(unearned_child_req_list)
            
            
            all_child_cert_list = []
            earned_child_cert_list = [{'name':c['name'], 'earned':True} for c in Certification.objects.filter(candidate = request.user).filter(parent_certification = cert).values('name')]
            unearned_child_cert_list = Certification.objects.exclude(candidate = request.user).filter(parent_certification = cert).values('name')
            all_child_cert_list.extend(earned_child_cert_list)
            all_child_cert_list.extend(unearned_child_cert_list)
            
            part_arr.append({
                'name': cert.name,
                'description':cert.description,

                'sub_reqs': all_child_req_list,
                'sub_certs': all_child_cert_list,
            })
        
        none_arr = []
        for cert in Certification.objects.exclude(candidate = request.user).exclude(child_requirements__candidate = request.user).exclude(child_certifications__candidate = request.user).distinct().prefetch_related('child_requirements', 'child_certifications'):
            none_arr.append({
                'name': cert.name,
                'description':cert.description,
                'sub_reqs': cert.child_requirements.values('name'),
                'sub_certs': cert.child_certifications.values('name'),
            })
            
#        debug = none_arr
            
        
        context_dict['full_cert'] = full_arr
        context_dict['part_cert'] = part_arr
        context_dict['none_cert'] = none_arr
    else:
        none_arr = []
        for cert in Certification.objects.all().distinct().prefetch_related('child_requirements', 'child_certifications'):
            none_arr.append({
                'name': cert.name,
                'description':cert.description,
                'sub_reqs': cert.child_requirements.values('name'),
                'sub_certs': cert.child_certifications.values('name'),
            })
        context_dict['none_cert'] = none_arr   
            
        
    context_dict['x'] = debug
    return render_to_response('public_certs_template.djt', context_dict)
def display(request):
    nav_links = create_navlinks(request.user)
    context_dict = {'nav_links': nav_links}
    return render_to_response('training_template.djt', context_dict)