Пример #1
0
def index(request, **kwargs):
    bad = restricted(request, 5)
    if bad:
        return bad
    context = {
        'courses': Courses.filter(year=getyear()).order_by('tradition__order'),
        'year': getyear(),
    }
    return render(request, 'reports/index.html', context)
Пример #2
0
def courses(request, **kwargs):
	me = getme(request)
	if not me or not me.owner or not me.owner.children_eligible_in(getyear()):
		return redirect('/register')
	if request.GET.get('action') == u'add':
		return add(request, **kwargs)
	elif request.GET.get('action') == u'defer':
		return defer(request, **kwargs)
	current_id = kwargs.setdefault('id',0)
	if 'id' in kwargs:
		current_id = kwargs['id']
		current_student = me.owner.children.fetch(id=current_id)
		if not current_student:
			return redirect('/')
	else:
		current_student = me.owner.children_eligible_in(getyear())[0]
	reg_year = getyear()
	cart = me.owner.enrollments_in(reg_year).filter(course__tradition__e=True)
	cart = cart.filter(status__in=['aud_pass','aud_pend','invoiced','deferred','maydefer','enrolled','need_pay','pend_pub','aud_lock'])
	cart_pend = cart.filter(status__in=['aud_pend','invoiced','deferred'])
	cart_paid = cart.filter(status='enrolled')
	# cart_unpaid = cart.difference(cart_pend,cart_paid) # Use this line instead of next in Django 1.11+
	cart_unpaid = cart.exclude(status__in=['aud_pend','invoiced','deferred','enrolled'])
	volunteer_total = me.owner.volunteer_total_in(reg_year)
	context = {
		'ref':kwargs.get('ref'),
		'invoiceable' : bool(cart_unpaid), # TODO: This is simple enough now to be calculated in the HTML page
		'reg_year': reg_year,
		'family'  : me.owner,
		'students': equip(me.owner.children_eligible_in(getyear()), lambda student: student.hst_age_in(reg_year), attr='age'),
		'current_student' : current_student,
		'menu'    : current_student.course_menu(year=reg_year),
		'cart'    : cart,
		'nCourses': {
			'total' : len(cart),
			'pend'  : len(cart_pend),
			'paid'  : len(cart_paid),
			'unpaid': len(cart_unpaid),
		},
		'tuition' : {
			'total' : sum(collect(cart,        lambda enr: enr.course.tuition())),
			'pend'  : sum(collect(cart_pend,   lambda enr: enr.course.tuition())),
			'paid'  : sum(collect(cart_paid,   lambda enr: enr.course.tuition())),
			'unpaid': sum(collect(cart_unpaid, lambda enr: enr.course.tuition())),
		},
		'hours' : {
			'total' : me.owner.volunteer_total_in(reg_year),
			'pend'  : me.owner.hours_signed_in(reg_year),
			'paid'  : me.owner.hours_worked_in(reg_year),
			'unpaid': me.owner.volunteer_total_in(reg_year) 
					- me.owner.hours_signed_in(reg_year) 
					- me.owner.hours_worked_in(reg_year),
		},
	}
	return render(request, 'courses.html', context)
Пример #3
0
def get_stat(show_id, status):
	if type(status) is not list:
		status = [status]
	x  = len(Enrollments.filter(course__year=getyear(),course__tradition=K[show_id]['10'],status__in=status))
	xv = len(Enrollments.filter(course__year=getyear(),course__tradition=K[show_id]['15'],status__in=status))
	xx = len(Enrollments.filter(course__year=getyear(),course__tradition=K[show_id]['20'],status__in=status))
	return {
		'10':x,
		'15':xv,
		'20':xx,
		'total': (x * 10) + (xv * 15) + (xx * 20)
	}
Пример #4
0
def students_edit(request, ref, id):
    me = getme(request)
    if not me or not me.owner or not (me.owner.mother or me.owner.father):
        return redirect('/register/redirect/')
    student = Students.fetch(id=id)
    if not student:
        return redirect('/{}/students/new/'.format(ref))
    forminit(request, 'student', student_fields, obj=student)
    context = {
        'new':
        False,
        'reg_year':
        getyear(),
        'family':
        me.owner,
        't_shirt_sizes':
        collect(
            Students.model.t_shirt_sizes, lambda obj: dict(
                collect(obj, lambda val, index: ['no' + str(index), val]))),
        'students':
        me.owner.children.all(),
        'ref':
        ref,
        'current_student':
        student,
        'e':
        request.session['e'],
        'p':
        request.session['p'],
    }
    return render(request, 'students2.html', context)
Пример #5
0
def deferred(request, **kwargs):
	families = Families.filter(
		children__enrollment__course__year=getyear(),
		children__enrollment__course__tradition__id__startswith='K',
		children__enrollment__status='deferred'
	).distinct().order_by('last','name_num').prefetch_related('children__enrollment')
	agg = []
	for family in families:
		row = {}
		for show in K:
			tix = 0
			for qty in K[show]:
				tix += sum(Each(family.children).enrollment.filter(status='deferred',course__tradition__id=K[show][qty]).count()) * int(qty)
			row[show] = tix
		row['amount'] = sum(row.values()) * 10.00
		row['o'] = family
		agg.append(row)
	context = {
		'families':agg
	}
	for show_id in K:
		total = 0
		context[show_id] = {}
		for status in ['enrolled','invoiced','deferred']:
			new = get_stat(show_id, status)
			total += new['total']
			context[show_id][status] = new
		new = get_stat(show_id,['need_pay','maydefer'])
		context[show_id]['in_cart'] = get_stat(show_id,['need_pay','maydefer'])
		context[show_id]['total'] = total + new['total']
	return render(request, 'radmin/deferred.html', context)
Пример #6
0
def students_new(request, ref):
    me = getme(request)
    if not me or not me.owner or not (me.owner.mother or me.owner.father):
        return redirect('/register/redirect/')
    students = list(me.owner.children.all())
    students.append(new_student)
    print students
    context = {
        'new':
        True,
        'reg_year':
        getyear(),
        'family':
        me.owner,
        't_shirt_sizes':
        collect(
            Students.model.t_shirt_sizes, lambda obj: dict(
                collect(obj, lambda val, index: ['no' + str(index), val]))),
        'students':
        students,
        'ref':
        ref,
        'current_student':
        new_student,
        'e':
        request.session['e'],
        'p':
        request.session['p'],
    }
    return render(request, 'students2.html', context)
Пример #7
0
def signin(request):
    day = request.GET.get('day')
    if not day:
        context = {
            'today': datetime.datetime.today(),
        }
        return render(request, 'reports/signin_home.html', context)
    else:
        start = cleandate(request.GET.get('start'))
        qset = Enrollments.filter(
            course__tradition__m=True,
            course__tradition__day=day,
            course__year=getyear(start),
        ).order_by(
            'student__family__last',
            'student__family__name_num',
            'student__birthday',
            'course__tradition__start',
        ).distinct()
        weeks = request.GET.get('weeks')

        starts = list(set(Each(qset).course.tradition.start))
        starts.sort()
        context = {
            'qset': starts,
        }
        return render(request, 'reports/signin.html', context)
Пример #8
0
def refresh_summary(request, **kwargs):
    bad = restricted(request, 5)
    if bad:
        return bad
    kwargs.setdefault('year', getyear())
    for course in Courses.filter(year__in=[kwargs['year'], kwargs['year'] - 1],
                                 tradition__action='trig'):
        for student in Students.filter(enrollment__course=course):
            course.trig(student)
    return redirect('/reports/summary/')
Пример #9
0
 def course_menu(self, year=getyear()):
     courses = Courses.filter(year=year,
                              tradition__e=True,
                              tradition__m=True)
     courses = courses.order_by('tradition__order')
     for course in courses:
         enrollment = Enrollments.fetch(student=self, course=course)
         if not enrollment or enrollment.status == 'nonexist':
             enrollment = Enrollments.model(student=self, course=course)
             enrollment.status = calc_status(enrollment)
         yield enrollment
Пример #10
0
def summary(request, **kwargs):
    bad = restricted(request, 5)
    if bad:
        return bad
    kwargs.setdefault('year', getyear())
    context = {
        'year': Year(int(kwargs['year'])),
        'prev': Year(int(kwargs['year']) - 1),
        'date': datetime.datetime.now(),
    }
    return render(request, 'reports/summary.html', context)
Пример #11
0
	def title_kwargs(self):
		return {
			'student' : self.student.family if self.course.tradition.byFamily() else self.student,
			'family'  : self.student.family,
			'course'  : self.course.title,
			'year'    : self.course.year,
			'invoice' : self.invoice.id if self.invoice else 0,
			'pronoun' : 'he' if self.student.sex == 'M' else 'she',
			'proverb' : 'was' if self.course.year < getyear() else 'is',
			'audskil' : 'audition' if self.course.id[2] in 'SC' else 'skill assessment',
			'article' : 'an' if self.course.id[2] in 'SC' else 'a',		
		}
Пример #12
0
def account(request):
    me = getme(request)
    if not me:
        return redirect('/')
    password = unicode(me.password.html)
    context = {
        'me': me,
        'password': password,
        'year': getyear(),
        'policy': Policies.current,
    }
    return render(request, 'main/account.html', context)
Пример #13
0
def registration(request, **kwargs):
    bad = restricted(request, 1)
    if bad:
        return bad
    year = int(request.GET.copy().setdefault('year', getyear()))
    context = {
        'year': year,
        'now': datetime.datetime.now(),
        'sc': Courses.fetch(year=year, tradition=CourseTrads.fetch(id='SC')),
    }
    context.update(layered_students_and_families(year, enrollments=True))
    return render(request, 'reports/registration.html', context)
Пример #14
0
def directory(request, **kwargs):
    bad = restricted(request, 1)
    if bad:
        return bad
    year = getyear()
    # families = Families.filter(children__enrollment__course__year=year).order_by('last').distinct()
    families = layered_students_and_families(year)['families']
    context = {
        'families': families,
        'year': year,
    }
    return render(request, 'reports/directory.html', context)
Пример #15
0
def address(request, **kwargs):
    bad = restricted(request, 1)
    if bad:
        return bad
    year = getyear()
    context = {
        'families':
        Families.filter(children__enrollment__course__year=year).order_by(
            'last').distinct(),
        'year':
        year,
    }
    return render(request, 'reports/addresses.html', context)
Пример #16
0
def edit(request, **kwargs):
    bad = restricted(request, 5)
    if bad:
        return bad
    year = int(kwargs.get('year') or getyear())
    policy = Policies.fetch(year=year)
    if not policy:
        policy = Policies.fetch(year=year - 1)
    context = {
        'current': policy.markdown,
        'year': year,
    }
    return render(request, 'radmin/policy/edit.html', context)
Пример #17
0
def index(request):
    if 'course' in request.GET:
        course = request.GET['course']
        if course:
            return redirect('/reports/roster/{}'.format(course))
        else:
            return redirect('/')
    me = getme(request)
    context = {
        'year':
        getyear(),
        'me':
        me,
        'name':
        me.owner if me else None,
        'incomplete_registration':
        me and me.owner and not me.owner.children,
        'sudo':
        Users.fetch(id=request.session.get('sudo')),
        'courses':
        Courses.filter(year=getyear(),
                       tradition__m=True).order_by('tradition__order')
    }
    return render(request, 'main/index.html', context)
Пример #18
0
 def fate(self, year=None):
     if not year:
         year = getyear()
     for enrollment in self.enrollments_in(year):
         if not eligible(enrollment.course, self):
             enrollment.delete()
     while True:
         drops = self.enrollments_in(year)
         for drop in drops:
             if eligible(drop.course, self):
                 drops = drops.exclude(id=drop.id)
             else:
                 drop.delete()
         if not drops:
             break
Пример #19
0
def mass_enroll(request, **kwargs):
    bad = restricted(request, 5)
    if bad:
        return bad
    year = kwargs.setdefault('year', getyear())
    courses = Courses.filter(year=kwargs['year'])
    students = []
    for x in request.POST:
        if x.isdigit():
            students.append(Students.fetch(id=int(x)))
    students.sort(key=lambda student: student.last)
    context = {
        'students': students,
        'courses': courses,
        'status_choices': dict(status_choices).keys(),
    }
    return render(request, 'reports/mass_enroll.html', context)
Пример #20
0
def enrollment_matrix(request, **kwargs):
    bad = restricted(request, 5)
    if bad:
        return bad
    year = int(kwargs['year']) if 'year' in kwargs else getyear()
    kwargs.update(request.GET)
    everyone = kwargs.setdefault('everyone', False) == [u'True']
    siblings = kwargs.setdefault('siblings', False) == [u'True']
    siblings |= everyone
    families = Families.all()
    if not everyone:
        families = families.filter(
            children__enrollment__course__year=year).distinct()
    families = families.order_by('last', 'name_num')
    table = []
    blank = {'content': '', 'rowspan': 1, 'class': 'enr'}
    ctids = {'SB': 'TT', 'SG': 'GB', 'SJ': 'JR'}
    for family in families:
        oldest = True
        children = family.children.all(
        ) if siblings else family.children_enrolled_in(year)
        for student in children:
            row = {
                'family': family,
                'last': family.unique_last_in(year),
                'student': student,
                'age': student.hst_age_in(year),
                'nchild': len(children),
                'oldest': oldest,
                'XW': [],
            }
            oldest = False
            for enrollment in student.enrollments_in(year):
                ctid = enrollment.course.tradition.id
                row[enrollment.course.genre] = {
                    'enr': enrollment,
                    'ctid': sub(ctid, ctids)
                }
                if ctid[0] in 'XW':
                    row['XW'].append(enrollment)
            table.append(row)
    context = {
        'year': year,
        'table': table,
    }
    return render(request, 'reports/enrollment_matrix_edit.html', context)
Пример #21
0
	def create(self, **kwargs):
		kwargs.setdefault('year', getyear())
		year0000 = (int(kwargs['year']) % 100) * 10000
		qset = self.filter(id__gte=year0000,id__lte=year0000+9999)
		kwargs.setdefault('id',max([year0000]+list(Each(qset).id)) + 1)
		# kwargs.setdefault('amount', kwargs['family'].total_tuition_in(kwargs['year']))
		this = super(InvoiceManager, self).create(**kwargs)
		qset = Enrollments.filter(
			student__family=kwargs['family'],
			course__year=kwargs['year'],
			status__in=['aud_pass','aud_lock','need_pay','maydefer'])
		for q in qset:
			q.invoice = this
			q.status = 'invoiced'
			q.save()
		amount = this.update_amount()
		this.update_amount()
		return this
Пример #22
0
def new(request, method=None):
	bad = restricted(request,5)
	if bad:
		return bad
	context = {
		'year': getyear(),
	}
	if 'year' in request.GET:
		year = request.GET['year']
		context.update({
			'year'   : year,
			'year2'  : year[-2:],
			'courses': equip(CourseTrads.filter(alias=None).order_by('order'), lambda trad: bool(Courses.filter(year=year,tradition=trad)), attr='already'),
		})
	elif request.GET:
		for key in request.GET:
			if request.GET[key] == 'on':
				Courses.create_by_id(key)
		return redirect('/admin/year/')
	return render(request, 'radmin/newyear/year.html', context)
Пример #23
0
 def grade(self):
     return self.grade_in(getyear())
Пример #24
0
 def hst_age(self):
     return self.hst_age_in(getyear())
Пример #25
0
 def infolock(self):
     return getyear() != 2019 and self.family.policyDate > self.created_at
Пример #26
0
 def fate(self, year=None):
     if not year:
         year = getyear()
     Each(self.children.all()).fate(year)
Пример #27
0
 def live_enrollments(self):
     return self.live_enrollments_in(getyear())
Пример #28
0
 def enrollments(self):
     return self.enrollments_in(getyear())
Пример #29
0
 def all_enrollments(self):
     return self.all_enrollments_in(getyear())
Пример #30
0
 def has_accepted_policy(self, year=getyear()):
     policy = Policies.fetch(year=year)
     return not policy or self.policyYear == year and self.policyPage == policy.nPages