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, })
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())
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,)))
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)
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)
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')
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))
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))
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())
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,)))
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,)))
def is_passation_done(self): return Member.objects.filter( association=self.id, year=util.get_current_year()+1, status=0).exists()