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
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 })
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)
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)
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 })
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)
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)
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']
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)
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']
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
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 }
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 }
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)
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)
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
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
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)
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
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 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 })