def award_pdf(request, slug, school_id, cqs_name): profile = request.user.profile cert_dir = os.path.join(_user_file_path(profile, os.path.join(slug, school_id))) cert_fname = cqs_name + '.pdf' cert_path = os.path.join(cert_dir, cert_fname) cert_full_fname = os.path.join(settings.MEDIA_ROOT, cert_path) try: # print "f:", os.path.join(settings.MEDIA_ROOT, cert_path) assert os.path.isfile(cert_full_fname) except: try: cert_full_dir = os.path.join(settings.MEDIA_ROOT, cert_dir) os.makedirs(cert_full_dir) except Exception, e: pass # print e # regenerate award. Ignore the template template_file = os.path.join(AWARD_TEMPLATE_DIR, 'all_si.svg') #print "generating..." data = [] competition = SchoolCompetition.get_cached_by_slug(slug=slug) #print cqs_name #for i in profile.schoolteachercode_set.all(): # print " ", i.competition_questionset.name #print profile.schoolteachercode_set.filter(school_id = school_id, # competition_questionset__name=cqs_name) stcs = profile.schoolteachercode_set.filter( code__codegenerator = competition.competitor_code_generator, competition_questionset__name = cqs_name, school_id = school_id ).order_by( 'code' ).prefetch_related( 'code') # print stcs for stc in stcs: stc.assign_si_awards(revoked_by = profile) awards = stc.attempt_awards().order_by( 'attempt__competitor__last_name', 'attempt__competitor__first_name' ).select_related( 'award') for award in awards: data.append( { 'name': award.competitor_name, 'school': award.school_name, 'group': award.group_name, 'serial': award.serial, 'template': award.award.template, } ) generate_award_pdf(cert_full_fname, data, template_file)
def revalidate_awards(request, attempt_id, *args, **kwargs): attempt = get_object_or_404(Attempt, id=attempt_id) # TODO check permissions, determine the actual teacher teacher = request.user.profile # TODO update all possible awards files containing this attempt # print attempt __update_juniorattempt(attempt) awards_changed = False sct = teacher.schoolteachercode_set.get( code__value = attempt.access_code, competition_questionset = attempt.competitionquestionset ) cqs = sct.competition_questionset school = sct.school awards_changed = [] serials = set() for aaward in attempt.attemptaward_set.filter(revoked_by = None): serials.add(aaward.serial) competitor_name = u"{} {}".format(attempt.competitor.first_name, attempt.competitor.last_name) # print " ", aaward.competitor_name, competitor_name if aaward.competitor_name != competitor_name or \ aaward.school_name != school.name or \ aaward.group_name != cqs.name: # print "changed!" aaward.revoked_by = teacher aaward.save() aaward.id = None aaward.competitor_name = competitor_name aaward.school_name = school.name aaward.revoked_by = None aaward.group_name = cqs.name awards_changed.append(aaward) for award in awards_changed: base_serial = award.serial p = base_serial.rfind('-') if p >= 0: base_serial = base_serial[:p] new_serial = base_serial i = 1 # print serials while new_serial in serials: new_serial = "{}-{}".format(base_serial, i) i += 1 award.serial = new_serial # print "created award", award.serial, award, award.revoked_by award.save() serials.add(new_serial) if True or len(awards_changed): cert_dir = os.path.join(_user_file_path(teacher, os.path.join(cqs.competition.slug, str(school.id)))) cert_fname = cqs.name + '.pdf' cert_path = os.path.join(cert_dir, cert_fname) cert_full_fname = os.path.join(settings.MEDIA_ROOT, cert_path) new_cert_full_fname = cert_full_fname i = 0 while os.path.isfile(new_cert_full_fname): i += 1 new_cert_full_fname = u'{}-{}'.format(cert_full_fname, i) # print "new file name:", new_cert_full_fname os.rename(cert_full_fname, new_cert_full_fname) return JsonResponse({'status': 'success'})