示例#1
0
def main():
    if ClearingHouseResult.objects.count()!=0:
        if "--force" not in sys.argv:
            print 'old results exist; use --force, to replace'
            quit()
        else:
            ClearingHouseResult.objects.delete()

    majors = Major.get_all_majors()
    mdict = dict([(int(m.number),m) for m in majors])

    lines = open(sys.argv[1]).readlines()
    for l in lines:
        items = l.strip().split(',')

        if len(items)!=3:
            print 'BAD LINE:', l
            continue
        
        nat,maj,pwd = items

        a = Applicant.objects.get(national_id=nat)

        ch = ClearingHouseResult(applicant=a,
                                 password=pwd)
        
        if maj!='0':
            m = mdict[int(maj)]
            ch.admitted_major = m
            ch.is_additional_result = False
        else:
            ch.is_additional_result = True

        ch.save()
        print a.national_id, ch.password
示例#2
0
def result_index(request):
    submission_info = request.applicant.submission_info
    applicant = request.applicant
    current_round = AdmissionRound.get_recent()

    admission_result = None
    admitted_major = None

    if current_round:
        results = list(applicant.admission_results.filter(round_number=current_round.number).all())
        if len(results)!=0:
            admission_result = results[0]
            if admission_result.admitted_major_id != None:
                admitted_major = Major.get_major_by_id(admission_result.admitted_major_id)

    confirmation_start_date = settings.CONFIRMATION_START_DATE

    last_round = settings.LAST_ROUND_RESULT
    return render_to_response("application/status/index_result_only.html",
                              {'applicant': applicant,
                               'submission_info': submission_info,
                               'current_round': current_round,
                               'admission_result': admission_result,
                               'admitted_major': admitted_major,
                               'confirmation_start_date':
                                   confirmation_start_date,
                               'last_round': last_round,
                               'can_log_out': True })
示例#3
0
文件: form_views.py 项目: jittat/adm2
def applicant_major(request):
    max_major_rank = settings.MAX_MAJOR_RANK

    if max_major_rank == 1:
        return applicant_major_single_choice(request)

    applicant = request.applicant
    form_data = { 'majors': Major.get_all_majors() }

    if (request.method == 'POST') and ('cancel' not in request.POST):

        result, pref_list, errors = handle_major_form(request, max_major_rank)

        if result:
            return HttpResponseRedirect(reverse('apply-confirm'))

        selections = prepare_major_selections(pref_list, max_major_rank)
        form_data['errors'] = errors

    else:
        if applicant.has_major_preference():
            pref_list = applicant.preference.get_major_list()
        else:
            pref_list = [None] * max_major_rank

        selections = prepare_major_selections(pref_list, max_major_rank)

    # add step info
    form_step_info = build_form_step_info(3, applicant)
    form_data['form_step_info'] = form_step_info
    form_data['selections'] = selections
    form_data['max_major_rank'] = max_major_rank
    return render_to_response('application/majors.html',
                              form_data)
示例#4
0
def applicant_major_single_choice(request):
    applicant = request.applicant

    if (request.method == 'POST') and ('cancel' not in request.POST):

        form = SingleMajorPreferenceForm(request.POST)
        if form.is_valid():
            assign_major_pref_to_applicant(applicant,
                                           [form.cleaned_data['major'].number])
            return HttpResponseRedirect(reverse('apply-doc-menu'))
    else:
        prev_major = None
        if applicant.has_major_preference():
            pref = applicant.preference.majors
            if len(pref) == 0:
                prev_major = None
            else:
                majors = dict([(int(m.number), m)
                               for m in Major.get_all_majors()])
                prev_major = majors[pref[0]]
        if prev_major != None:
            form = SingleMajorPreferenceForm(initial={'major': prev_major.id})
        else:
            form = SingleMajorPreferenceForm()

    # add step info
    form_data = {}
    form_step_info = build_form_step_info(3, applicant)
    form_data['form_step_info'] = form_step_info
    form_data['form'] = form
    return render_to_response('application/majors_single.html', form_data)
def applicant_major_single_choice(request):
    applicant = request.applicant

    if (request.method == 'POST') and ('cancel' not in request.POST):

        form = SingleMajorPreferenceForm(request.POST)
        if form.is_valid():
            assign_major_pref_to_applicant(applicant,
                                           [form.cleaned_data['major'].number])
            return HttpResponseRedirect(reverse('apply-doc-menu'))
    else:
        prev_major = None
        if applicant.has_major_preference():
            pref = applicant.preference.majors
            if len(pref)==0:
                prev_major = None
            else:
                majors = dict([(int(m.number), m) for m in Major.get_all_majors()])
                prev_major = majors[pref[0]]
        if prev_major!=None:
            form = SingleMajorPreferenceForm(initial={'major': prev_major.id})
        else:
            form = SingleMajorPreferenceForm()

    # add step info
    form_data = {}
    form_step_info = build_form_step_info(3, applicant)
    form_data['form_step_info'] = form_step_info
    form_data['form'] = form
    return render_to_response('application/majors_single.html',
                              form_data)
示例#6
0
def show_major_pref_stat(request):
    all_submission_infos = SubmissionInfo.objects.all()
    submitted_ids = set([s.applicant_id for s in all_submission_infos])

    from django.conf import settings
    max_rank = settings.MAX_MAJOR_RANK

    majors = Major.get_all_majors()
    major_stat = dict([(int(m.number), {
        'major': m,
        'stat': [0] * max_rank
    }) for m in majors])

    all_major_prefs = MajorPreference.objects.all()
    for mp in all_major_prefs:
        if mp.applicant_id in submitted_ids:
            r = 0
            for m in mp.majors:
                major_stat[m]['stat'][r] += 1
                r += 1

    major_stat_data = [(major_stat[m]['major'], major_stat[m]['stat'])
                       for m in sorted(major_stat.keys())]
    return render_to_response('review/major_pref_stat.html', {
        'ranks': range(1, max_rank + 1),
        'major_stat_data': major_stat_data
    })
示例#7
0
文件: update.py 项目: jittat/adm2
def update_major_single_choice(request):
    applicant = request.applicant

    if request.method == 'POST':

        if 'cancel' not in request.POST:
            form = SingleMajorPreferenceForm(request.POST)
            if form.is_valid():
                assign_major_pref_to_applicant(applicant,
                                               [form.cleaned_data['major'].number])
                request.session['notice'] = 'การแก้ไขอันดับสาขาวิชาเรียบร้อย'
                return HttpResponseRedirect(reverse('status-index'))
        else:
            request.session['notice'] = 'อันดับสาขาวิชาไม่ถูกแก้ไข'
            return HttpResponseRedirect(reverse('status-index'))

    else:
        if applicant.has_major_preference():
            pref = applicant.preference.majors
            if len(pref)==0:
                prev_major = None
            else:
                majors = dict([(int(m.number), m) for m in Major.get_all_majors()])
                prev_major = majors[pref[0]]
        form = SingleMajorPreferenceForm(initial={'major': prev_major.id})

    # add step info
    form_data = {}
    form_data['step_name'] = 'แก้ไขอันดับสาขาวิชา'
    form_data['can_log_out'] = True
    form_data['form'] = form
    return render_to_response('application/update/majors_single.html',
                              form_data)
示例#8
0
def applicant_major(request):
    max_major_rank = settings.MAX_MAJOR_RANK

    if max_major_rank == 1:
        return applicant_major_single_choice(request)

    applicant = request.applicant
    form_data = {'majors': Major.get_all_majors()}

    if (request.method == 'POST') and ('cancel' not in request.POST):

        result, pref_list, errors = handle_major_form(request, max_major_rank)

        if result:
            return HttpResponseRedirect(reverse('apply-confirm'))

        selections = prepare_major_selections(pref_list, max_major_rank)
        form_data['errors'] = errors

    else:
        if applicant.has_major_preference():
            pref_list = applicant.preference.get_major_list()
        else:
            pref_list = [None] * max_major_rank

        selections = prepare_major_selections(pref_list, max_major_rank)

    # add step info
    form_step_info = build_form_step_info(3, applicant)
    form_data['form_step_info'] = form_step_info
    form_data['selections'] = selections
    form_data['max_major_rank'] = max_major_rank
    return render_to_response('application/majors.html', form_data)
示例#9
0
文件: handlers.py 项目: jittat/adm2
def handle_major_form(request, max_major_rank, applicant=None):
    if applicant==None:
        applicant = request.applicant

    majors = Major.get_all_majors()
    mdict = dict([(int(m.number),m) for m in majors])

    errors = None

    pref_list = []
    used = set()
    is_dupplicate = False
    for r in range(1, max_major_rank+1):
        name = "major-%d" % r
        try:
            major_num = int(request.POST[name])
            if major_num!=0:
                if major_num not in used:
                    pref_list.append(mdict[major_num])
                    used.add(major_num)
                else:
                    is_dupplicate = True
        except:
            pass

    if len(pref_list)==0:
        # chooses no majors
        errors = ['ต้องเลือกอย่างน้อยหนึ่งอันดับ']
    elif is_dupplicate:
        errors = ['เลือกสาขาซ้ำกันในสองอันดับ กรุณาเลือกใหม่ ระบบได้ตัดสาขาที่ซ้ำกันทิ้งให้แล้ว']
    else:
        assign_major_pref_to_applicant(applicant, pref_list)
        return (True, pref_list, None)

    return (False, pref_list, errors)
def import_results(round_number, applicant_data):
    print 'Importing results...'

    delete_old_admission_results(round_number)

    majors = Major.get_all_majors()
    major_dict = dict([(m.number, m) for m in majors])

    app_order = 1
    for a in applicant_data:
        applicant = Applicant.objects.get(national_id=a['national_id'])
        aresult = AdmissionResult()
        aresult.applicant = applicant
        aresult.round_number = round_number
        if a['major']=='wait':
            aresult.is_admitted = False
            aresult.is_waitlist = True
            aresult.admitted_major = None
        else:
            major_number = standardize_major_number(a['major'])
            major = major_dict[major_number]
            
            aresult.is_admitted = True
            aresult.is_waitlist = False
            aresult.admitted_major = major

        aresult.save()

        print a['national_id']
示例#11
0
def update_major_single_choice(request):
    applicant = request.applicant

    if request.method == 'POST':

        if 'cancel' not in request.POST:
            form = SingleMajorPreferenceForm(request.POST)
            if form.is_valid():
                assign_major_pref_to_applicant(
                    applicant, [form.cleaned_data['major'].number])
                request.session['notice'] = 'การแก้ไขอันดับสาขาวิชาเรียบร้อย'
                return HttpResponseRedirect(reverse('status-index'))
        else:
            request.session['notice'] = 'อันดับสาขาวิชาไม่ถูกแก้ไข'
            return HttpResponseRedirect(reverse('status-index'))

    else:
        if applicant.has_major_preference():
            pref = applicant.preference.majors
            if len(pref) == 0:
                prev_major = None
            else:
                majors = dict([(int(m.number), m)
                               for m in Major.get_all_majors()])
                prev_major = majors[pref[0]]
        form = SingleMajorPreferenceForm(initial={'major': prev_major.id})

    # add step info
    form_data = {}
    form_data['step_name'] = 'แก้ไขอันดับสาขาวิชา'
    form_data['can_log_out'] = True
    form_data['form'] = form
    return render_to_response('application/update/majors_single.html',
                              form_data)
示例#12
0
def import_results(round_number, applicant_data):
    print 'Importing results...'

    delete_old_admission_results(round_number)

    majors = Major.get_all_majors()
    major_dict = dict([(m.number, m) for m in majors])

    app_order = 1
    for a in applicant_data:
        applicant = Applicant.objects.get(national_id=a['national_id'])
        aresult = AdmissionResult()
        aresult.applicant = applicant
        aresult.round_number = round_number
        if a['major'] == 'wait':
            aresult.is_admitted = False
            aresult.is_waitlist = True
            aresult.admitted_major = None
        else:
            major_number = standardize_major_number(a['major'])
            major = major_dict[major_number]

            aresult.is_admitted = True
            aresult.is_waitlist = False
            aresult.admitted_major = major

        aresult.save()

        print a['national_id']
示例#13
0
def main():
    if ClearingHouseResult.objects.count() != 0:
        if "--force" not in sys.argv:
            print 'old results exist; use --force, to replace'
            quit()
        else:
            ClearingHouseResult.objects.delete()

    majors = Major.get_all_majors()
    mdict = dict([(int(m.number), m) for m in majors])

    lines = open(sys.argv[1]).readlines()
    for l in lines:
        items = l.strip().split(',')

        if len(items) != 3:
            print 'BAD LINE:', l
            continue

        nat, maj, pwd = items

        a = Applicant.objects.get(national_id=nat)

        ch = ClearingHouseResult(applicant=a, password=pwd)

        if maj != '0':
            m = mdict[int(maj)]
            ch.admitted_major = m
            ch.is_additional_result = False
        else:
            ch.is_additional_result = True

        ch.save()
        print a.national_id, ch.password
示例#14
0
def main():
    applicants = load_applicants_with_scores()
    nat_dict = load_nat_id_index()
    read_interview_data(applicants, nat_dict)

    applicants = filter_out_withdrawn_first_admitted_applicants(applicants)

    print len(applicants.keys()), 'left after 1st round'

    print 'Loading preferences...'

    preferences = dict([(p.applicant_id, p.get_major_list()) 
                        for p in MajorPreference.objects.all()])

    for mp in AdmissionMajorPreference.objects.all():
        preferences[mp.applicant_id] = mp.get_accepted_majors()
        #print preferences[mp.applicant_id]

    print 'Find highest missed...'

    highest_missed = {}
    highest_missed_app = {}
    for m in Major.get_all_majors():
        highest_missed[m.id] = 0

    for a in applicants.itervalues():
        try:
            score = a.score
        except:
            score = 0
        try:
            ar = a.admission_result
        except:
            ar = None
        for m in preferences[a.id]:
            if (ar!=None and 
                ar.is_final_admitted and 
                m.id == ar.final_admitted_major_id):
                break
            if score > highest_missed[m.id]:
                highest_missed[m.id] = score
                highest_missed_app[m.id] = a
    for m in Major.get_all_majors():
        print m.number, m.name, highest_missed[m.id], highest_missed_app[m.id].full_name()
def prepare_major_form(applicant, pref_ranks=None, errors=None):
    majors = Major.get_all_majors()
    max_major_rank = settings.MAX_MAJOR_RANK

    if pref_ranks==None:
        pref_ranks = [None] * len(majors) 

    ranks = [i+1 for i in range(max_major_rank)]

    return { 'majors_prefs': zip(majors,pref_ranks),
             'ranks': ranks,
             'max_major_rank': max_major_rank,
             'errors': errors }
示例#16
0
def prepare_major_form(applicant, pref_ranks=None, errors=None):
    majors = Major.get_all_majors()
    max_major_rank = settings.MAX_MAJOR_RANK

    if pref_ranks == None:
        pref_ranks = [None] * len(majors)

    ranks = [i + 1 for i in range(max_major_rank)]

    return {
        'majors_prefs': zip(majors, pref_ranks),
        'ranks': ranks,
        'max_major_rank': max_major_rank,
        'errors': errors
    }
示例#17
0
def handle_major_form(request, applicant=None):
    if applicant==None:
        applicant = request.applicant

    majors = Major.get_all_majors()

    errors = None

    #print extract_ranks(request.POST, majors)

    major_ranks = extract_ranks(request.POST, majors)
    if len(major_ranks)==0:
        # chooses no majors
        errors = ['ต้องเลือกอย่างน้อยหนึ่งอันดับ']
    else:
        assign_major_pref_to_applicant(applicant, major_ranks)
        return (True, major_ranks, None)

    return (False, major_ranks, errors)
示例#18
0
文件: update.py 项目: jittat/adm2
def update_majors(request):
    max_major_rank = settings.MAX_MAJOR_RANK
    if max_major_rank == 1:
        return update_major_single_choice(request)

    from form_views import prepare_major_selections

    applicant = request.applicant
    form_data = { 'majors': Major.get_all_majors() }

    if request.method == 'POST': 

        if 'cancel' not in request.POST:
            result, pref_list, errors = handle_major_form(request, 
                                                          max_major_rank)

            log = Log.create("Update major pref: %s from %s" % 
                             (applicant.id,request.META['REMOTE_ADDR']))
            if result:
                request.session['notice'] = 'การแก้ไขอันดับสาขาวิชาเรียบร้อย'
                return HttpResponseRedirect(reverse('status-index'))

            selections = prepare_major_selections(pref_list, max_major_rank)
            form_data['errors'] = errors
        else:
            request.session['notice'] = 'อันดับสาขาวิชาไม่ถูกแก้ไข'
            return HttpResponseRedirect(reverse('status-index'))
    else:
        if applicant.has_major_preference():
            pref_list = applicant.preference.get_major_list()
        else:
            pref_list = [None] * max_major_rank

        selections = prepare_major_selections(pref_list, max_major_rank)

    # add step info
    form_data['step_name'] = 'แก้ไขอันดับสาขาวิชา'
    form_data['can_log_out'] = True
    form_data['selections'] = selections
    form_data['max_major_rank'] = max_major_rank
    return render_to_response('application/update/majors.html',
                              form_data)
示例#19
0
def get_confirming_apps_with_majors():
    majors = Major.get_all_majors()
    confirmations = AdmissionConfirmation.objects.select_related(depth=1).all() 
    results = AdmissionResult.objects.filter(
        applicant__in=[c.applicant for c in confirmations])
    res_dict = dict([(r.applicant_id,r) for r in results])

    apps = dict([(m.id, []) for m in majors])
    for con in confirmations:
        app = con.applicant
        admission_result = res_dict[app.id]
        app.admission_result = admission_result
        if admission_result.is_final_admitted:
            major_id = admission_result.final_admitted_major_id
            apps[major_id].append(app)

    stat = []
    for major in majors:
        stat.append((major, apps[major.id]))
    return stat
示例#20
0
def get_confirming_apps_with_majors():
    majors = Major.get_all_majors()
    confirmations = AdmissionConfirmation.objects.select_related(depth=1).all()
    results = AdmissionResult.objects.filter(
        applicant__in=[c.applicant for c in confirmations])
    res_dict = dict([(r.applicant_id, r) for r in results])

    apps = dict([(m.id, []) for m in majors])
    for con in confirmations:
        app = con.applicant
        admission_result = res_dict[app.id]
        app.admission_result = admission_result
        if admission_result.is_final_admitted:
            major_id = admission_result.final_admitted_major_id
            apps[major_id].append(app)

    stat = []
    for major in majors:
        stat.append((major, apps[major.id]))
    return stat
示例#21
0
def update_majors(request):
    max_major_rank = settings.MAX_MAJOR_RANK
    if max_major_rank == 1:
        return update_major_single_choice(request)

    from form_views import prepare_major_selections

    applicant = request.applicant
    form_data = {'majors': Major.get_all_majors()}

    if request.method == 'POST':

        if 'cancel' not in request.POST:
            result, pref_list, errors = handle_major_form(
                request, max_major_rank)

            log = Log.create("Update major pref: %s from %s" %
                             (applicant.id, request.META['REMOTE_ADDR']))
            if result:
                request.session['notice'] = 'การแก้ไขอันดับสาขาวิชาเรียบร้อย'
                return HttpResponseRedirect(reverse('status-index'))

            selections = prepare_major_selections(pref_list, max_major_rank)
            form_data['errors'] = errors
        else:
            request.session['notice'] = 'อันดับสาขาวิชาไม่ถูกแก้ไข'
            return HttpResponseRedirect(reverse('status-index'))
    else:
        if applicant.has_major_preference():
            pref_list = applicant.preference.get_major_list()
        else:
            pref_list = [None] * max_major_rank

        selections = prepare_major_selections(pref_list, max_major_rank)

    # add step info
    form_data['step_name'] = 'แก้ไขอันดับสาขาวิชา'
    form_data['can_log_out'] = True
    form_data['selections'] = selections
    form_data['max_major_rank'] = max_major_rank
    return render_to_response('application/update/majors.html', form_data)
示例#22
0
def import_results():
    print 'Importing results...'

    majors = Major.get_all_majors()
    major_dict = dict([(m.number, m) for m in majors])

    not_found_list = []

    app_order = 1
    for a in applicants:
        personal_infos = (PersonalInfo.objects
                         .filter(national_id=a['national_id'])
                         .select_related(depth=1))

        if len(personal_infos)==0:
            print "NOT-FOUND:", a['national_id']
            not_found_list.append(a['national_id'])
            continue

        for pinfo in personal_infos:
            
            applicant = pinfo.applicant
            try:
                aresult = applicant.admission_result
            except:
                aresult = AdmissionResult.new_for_applicant(applicant)

            major_number = standardize_major_number(a['major'])
            major = major_dict[major_number]
            
            aresult.is_final_admitted = True
            aresult.final_admitted_major = major

            aresult.save()

        print a['national_id']

    print '-------NOT-FOUND-------'
    for nid in not_found_list:
        print nid
示例#23
0
文件: handlers.py 项目: jittat/adm2
def handle_major_form(request, max_major_rank, applicant=None):
    if applicant == None:
        applicant = request.applicant

    majors = Major.get_all_majors()
    mdict = dict([(int(m.number), m) for m in majors])

    errors = None

    pref_list = []
    used = set()
    is_dupplicate = False
    for r in range(1, max_major_rank + 1):
        name = "major-%d" % r
        try:
            major_num = int(request.POST[name])
            if major_num != 0:
                if major_num not in used:
                    pref_list.append(mdict[major_num])
                    used.add(major_num)
                else:
                    is_dupplicate = True
        except:
            pass

    if len(pref_list) == 0:
        # chooses no majors
        errors = ['ต้องเลือกอย่างน้อยหนึ่งอันดับ']
    elif is_dupplicate:
        errors = [
            'เลือกสาขาซ้ำกันในสองอันดับ กรุณาเลือกใหม่ ระบบได้ตัดสาขาที่ซ้ำกันทิ้งให้แล้ว'
        ]
    else:
        assign_major_pref_to_applicant(applicant, pref_list)
        return (True, pref_list, None)

    return (False, pref_list, errors)
示例#24
0
文件: views.py 项目: jittat/adm2
def show_major_pref_stat(request):
    all_submission_infos = SubmissionInfo.objects.all()
    submitted_ids = set([s.applicant_id for s in all_submission_infos])

    from django.conf import settings
    max_rank = settings.MAX_MAJOR_RANK

    majors = Major.get_all_majors()
    major_stat = dict([(int(m.number), {'major': m, 'stat': [0]*max_rank})
                       for m in majors])

    all_major_prefs = MajorPreference.objects.all()
    for mp in all_major_prefs:
        if mp.applicant_id in submitted_ids:
            r = 0
            for m in mp.majors:
                major_stat[m]['stat'][r] += 1
                r += 1

    major_stat_data = [(major_stat[m]['major'], major_stat[m]['stat']) for
                       m in sorted(major_stat.keys())]
    return render_to_response('review/major_pref_stat.html',
                              { 'ranks': range(1,max_rank+1),
                                'major_stat_data': major_stat_data })