Example #1
0
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
Example #2
0
    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)
Example #3
0
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
Example #4
0
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
Example #5
0
 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
Example #6
0
 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
Example #7
0
    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)
Example #8
0
    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)
Example #9
0
    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)