Exemple #1
0
def association_display(request, association_name):
    """
    Displays public information about an association.

    This view gives all public information about an association : its
    activities, organized events and members.

    :param request : request object
    :param association_name: association's name
    """

    association = get_object_or_404(Association, name=association_name)
    activities = Activity.objects.filter(association=association)
    events = Event.objects.filter(organizer=association,
                                  day__gte=datetime.today())

    current_year = association.signing_year  # util.get_current_year()

    members = Member.objects.filter(
        association=association,
        year=util.get_current_year()).order_by('status')

    if request.user.is_authenticated():
        if Member.objects.filter(
            user=request.user.id,
            association=association.id,
            year=current_year).exists():

            member = Member.objects.get(
                user=request.user.id,
                association=association.id, year=current_year)

        elif Member.objects.filter(
            user=request.user.id,
            association=association.id,
            year=util.get_current_year()).exists():

            member = Member.objects.get(
                user=request.user.id,
                association=association.id, year=util.get_current_year())

        else:
            member = None
    else:
        member = None

    return render_to_response(
        "association2.html",
        {
            'request': request,
            'association': association,
            'members': members,
            'member': member,
            'activities': activities,
            'events': events,
        })
Exemple #2
0
    def get_members(self):
        """
        Returns a query set containing all the current year's members that are
        not in the board.
        """

        # TODO add options to optionaly order this set (by activity, or name
        # for instance).
        if self.signing_year == util.get_current_year():
            return Member.objects.filter(
                association=self.id, year=util.get_current_year(), status__gt=4)

        return Member.objects.filter(
                association=self.id, year=util.get_current_year())
Exemple #3
0
def register_member(request, association_name):
    """
    Adds a registered user to the list of an association's members.

    If the user is already a member of the association, this view does nothing.

    :param request: request object
    :param association_name: association in which the user becomes a member
    """

    association = get_object_or_404(Association, name=association_name)
    current_year = util.get_current_year()

    already_member = Member.objects.filter(
        user=request.user, association=association, year=current_year).exists()

    if not already_member:
        new_member = Member(
            user=request.user,
            association=association,
            year=current_year,
            status=10)
        new_member.save()

    return HttpResponseRedirect(reverse_lazy(
        'associations.views.association_display', args=(association_name,)))
Exemple #4
0
    def setUp(self):
        """
        Set up a few variables for the tests.
        """
        self.test_user = User.objects.create_user(
            'foobar',
            '*****@*****.**',
            'usertest')

        self.test_association = Association.objects.create(
            name="Cutie Mark Crusader",
            description="yay",
            campus=0)

        self.test_membre = Member.objects.create(
            user=self.test_user,
            association=self.test_association,
            status=0,
            # (member for member in Member.MEMBER_STATUS
            # if member[1] == 'Member').next()[0],
            year=get_current_year(),
            subscription_paid=True
        )

        self.test_building = Buildind.objects.create(
            name="Building",
            abbreviation="B0",
            campus=0,
            nb_floors=4)

        self.test_room = Room.objects.create(
            name="REDRUM",
            floor=1,
            building=self.test_building)
Exemple #5
0
    def get_all_members_id(self):
        """
        Returns a list containing the IDs of all the current year's members,
        board members and simple members alike.
        """

        return Member.objects.filter(
            association=self.id,
            year=util.get_current_year()).values_list('user', flat=True)
Exemple #6
0
    def get_all_members(self):
        """
        Returns a list containing all the current year's members.
        """

        return Member.objects.filter(
            association=self.id,
            year=util.get_current_year()).order_by(
                'status', 'user__last_name', 'user__first_name')
Exemple #7
0
def membership_conditions(request, association_name):
    """
    Displays the terms and conditions to join an association and asks the user
    his agreement.

    Those conditions may concern registration fees or any kind of conditions
    the board has decided. A member can consult those conditions, but he should
    not be able to accept it twice (not making much sense, does it ?).

    :param request: request object
    :param association_name: association the user wants to join
    """

    association = get_object_or_404(Association, name=association_name)
    current_year = util.get_current_year()

    already_member = Member.objects.filter(
        user=request.user, association=association, year=current_year).exists()
    agreement_form = ConditionsAgreementForm(request.POST or None)

    if not already_member and agreement_form.is_valid():

        if agreement_form.cleaned_data['agreement'].upper() == "J'ACCEPTE":
            new_member = Member(
                user=request.user,
                association=association,
                year=current_year,
                status=10)
            new_member.save()

            return HttpResponseRedirect(reverse_lazy(
                'associations.views.association_display',
                args=(association_name,)))

    if already_member:
        tooltip.content(request,
            title="""Consultation des conditions d'adhésion à
                {{ association.name }}""",
            text="""En tant que membre de l'association
                {{ association.name }}, vous avez déjà accepté les conditions
                énoncées ci-dessous pour l'année en cours. Vous pouvez
                consulter cette page à loisir afin de savoir tout ce que
                l'association peut attendre de vous.""")
        tooltip.icon(request, 'question-circle')

    return render_to_response(
        "membership_conditions.html",
        {
            'request': request,
            'association': association,
            'already_member': already_member,
            'agreement_form': agreement_form,
        },
        context_instance=RequestContext(request))
Exemple #8
0
def admin_signing(request, association_name):
    
    association = get_object_or_404(Association, name=association_name)
    current_year = association.signing_year  # util.get_current_year()

    if not Member.objects.filter(
            user=request.user.id, association=association.id,
            year=current_year, status=0).exists():
        raise PermissionDenied

    signing_done = (association.signing_year != util.get_current_year())

    if not signing_done and request.method == 'POST':
        user_id = request.POST.get('user_id', '')

        try:
            association.signing_year = util.get_current_year() + 1
            association.save()

            user = User.objects.get(id=int(user_id, 10))
            member = Member(
                user=user,
                association=association,
                year=association.signing_year,
                status=0)
            member.save()

            return HttpResponseRedirect(reverse_lazy(
                'associations.views.association_display',
                args=(association_name,)))

        except:
            messages.error(request, u'Utilisateur invalide')

    return render_to_response(
        'admin_signing.html', {
            'request': request,
            'association': association,
            'signing_done': signing_done
        }, context_instance=RequestContext(request))
Exemple #9
0
    def test_members(self):
        """
        Tests adding members and board members.
        """

        test_association = Association.objects.create(
            name="Cutie Mark Crusader",
            description="yay",
            campus=0)

        nb_test_members = 50
        test_members = []
        for i in range(nb_test_members):
            m = Member.objects.create(
                user=self.test_user,
                association=test_association,
                year=get_current_year(),
                status=10)
            test_members.append(m)

        nb_board_members = 5
        test_board_members = []
        for i in range(nb_board_members):
            m = Member.objects.create(
                user=self.test_user,
                association=test_association,
                year=get_current_year(),
                status=i)
            test_board_members.append(m)

        self.assertEqual(
            nb_test_members + nb_board_members,
            test_association.get_members().count()
            + test_association.get_board_members().count())

        self.assertEqual(
            nb_board_members,
            test_association.get_board_members().count())
Exemple #10
0
def admin_board_add_member(request, association_name, member_id, role):

    association = get_object_or_404(Association, name=association_name)
    current_year = association.signing_year  # util.get_current_year()

    # The connected user must be a board member (status < 5)
    if not Member.objects.filter(
            user=request.user.id, association=association.id,
            year=current_year, status__lt=5).exists():
        raise PermissionDenied

    member = get_object_or_404(
        Member, user=member_id, association=association.id, year=util.get_current_year())

    try:
        role = int(role)

        # Only one president per association per year
        if role != 0:
            # If it is the next board being created
            if association.signing_year != util.get_current_year():
                user = get_object_or_404(User, id=member_id)
                new_member = Member(
                    user=user,
                    association=association,
                    year=association.signing_year,
                    status=role)
                new_member.save()
            else:
                member.status = role
                member.save()
    except:
        pass

    return HttpResponseRedirect(reverse_lazy(
        'associations.views.admin_board', args=(association.name,)))
Exemple #11
0
def admin_members_set_subscription(request, association_name, member_id):

    association = get_object_or_404(Association, name=association_name)
    current_year = association.signing_year  # util.get_current_year()

    # The connected user must be a board member (status < 5)
    if not Member.objects.filter(
            user=request.user.id, association=association.id,
            year=current_year, status__lt=5).exists():
        raise PermissionDenied

    member = get_object_or_404(
        Member, user=member_id, association=association.id, year=util.get_current_year())

    member.subscription_paid = not member.subscription_paid
    member.save()

    return HttpResponseRedirect(reverse_lazy(
        'associations.views.admin_members',
        args=(association_name,)))
Exemple #12
0
 def is_passation_done(self):
     return Member.objects.filter(
         association=self.id,
         year=util.get_current_year()+1, status=0).exists()