def open_eligible(month, year): """ Checks whether a month is eligible to be opened. That is, it has not passed yet and is in the current semester. """ now = core_utils.now() month = int(month) year = int(year) # whether the month is in the current semester in_current_semester = (core_utils.current_semester(now) == core_utils.current_semester(datetime.datetime(year, month, 1))) and year == now.year # month is in the current semester, and is the current month or in the future, and the month is initialized if in_current_semester and month >= now.month and is_initialized(month=month, year=year): return True else: return False
def inactive(self, semester=None, year=None): """ Includes only members who are inactive for the given semester and year """ if semester is None: semester = core_utils.current_semester() if year is None: year = core_utils.now().year else: year = int(year) semester = semester.lower() return self.filter(inactive_semesters__year__exact=year, inactive_semesters__semester=semester)
def member_latest_semester(person): """ Finds the latest semester a member was in Crimson Key. For graduated members, this means the spring of their senior year. Otherwise, it's usually latest semester (as in current_semester()). Raises a ValueError if something goes wrong (e.g., a person in the db is not yet a member, i.e. member_since > current year). """ member_since = person.member_since_year grad_year = person.year semester = current_semester() year = now().year latest_semester = None latest_year = None if semester == 'fall': # if has graduated, return spring of their grad year if year >= grad_year: latest_semester = 'spring' latest_year = grad_year # if hasn't graduated else: if member_since > year: latest_semester = semester latest_year = member_since else: latest_semester = semester latest_year = year elif semester == 'spring': # if has graduated, return spring of their grad year if year > grad_year: latest_semester = 'spring' latest_year = grad_year # if hasn't graduated else: if member_since >= year: latest_semester = semester latest_year = member_since else: latest_semester = semester latest_year = year return latest_year, latest_semester
def get_context_data(self, **kwargs): context = super(EditPersonView, self).get_context_data(**kwargs) semester = current_semester() year = now().year initial_data = {'semester': semester, 'year': year, 'person': self.object} try: override_req = OverrideRequirement.objects.get(semester=semester, year=year, person=self.object) initial_data['tours_required'] = override_req.tours_required initial_data['shifts_required'] = override_req.shifts_required except OverrideRequirement.DoesNotExist: pass context['special_requirements_form'] = SpecialRequirementsForm(initial_data) context['semester'] = semester context['year'] = year context['site_admins_count'] = Person.objects.filter(site_admin=True).count() return context
def get(self, request, *args, **kwargs): year = kwargs.get('year') semester = kwargs.get('semester') year, semester = parse_year_semester(year=year, semester=semester) prev_semester = delta_semester(semester=semester, year=year, delta=-1, as_dict=True) next_semester = delta_semester(semester=semester, year=year, delta=1, as_dict=True) collect_dues = dues_required(semester=semester, year=year) people = self.get_people(semester=semester, year=year) is_current_semester = semester == current_semester() and year == now().year # cache requirements status results so that we don't have to keep hitting the db for person in people: dues_status = person.dues_status(semester=semester, year=year) person.cached_status = { 'tours_status': person.tours_status(semester=semester, year=year), 'shifts_status': person.shifts_status(semester=semester, year=year), 'dues_status': dues_status, 'active': person.is_active(semester=semester, year=year) } # dues payments if collect_dues: paid = dues_status == 'complete' person.dues_payment_form = DuesPaymentForm(initial={'pk': person.pk, 'paid': paid}, prefix='pk_{}'.format(person.pk)) context = { 'semester': semester, 'year': year, 'people': people, 'prev_semester': prev_semester, 'next_semester': next_semester, 'collect_dues': collect_dues, 'is_current_semester': is_current_semester, } return render(request, 'profiles/roster.html', context)
def current_members(self, semester=None, year=None): if semester is None: semester = core_utils.current_semester() if year is None: year = core_utils.now().year else: year = int(year) semester = semester.lower() senior_year, freshman_year = core_utils.class_years(semester=semester, year=year, bookends_only=True) kwargs = {} if semester == 'fall': kwargs['member_since_year__lte'] = year else: kwargs['member_since_year__lt'] = year kwargs['year__lte'] = freshman_year kwargs['year__gte'] = senior_year return self.filter(**kwargs)