Rory McCann has proposed merging lp:~rorymcc/loco-directory/bug-600134 into 
lp:loco-directory.

Requested reviews:
  loco-directory-dev (loco-directory-dev)
Related bugs:
  #600134 Signing up for an event is too long and non-obvious
  https://bugs.launchpad.net/bugs/600134

-- 
https://code.launchpad.net/~rorymcc/loco-directory/bug-600134/+merge/33995
Your team loco-directory-dev is requested to review the proposed merge of 
lp:~rorymcc/loco-directory/bug-600134 into lp:loco-directory.
=== modified file 'loco_directory/events/models.py'
--- loco_directory/events/models.py	2010-08-18 16:18:41 +0000
+++ loco_directory/events/models.py	2010-08-28 14:46:38 +0000
@@ -124,6 +124,26 @@
         else:
             return False
 
+    def has_rsvped(self, user):
+        """
+        Has this user 'RSVPed'? i.e. has this user given us an answer if they
+        will or will not be coming?
+        """
+        if user.is_authenticated():
+            return self.attendee_set.filter(attendee=user).count() > 0
+        else:
+            return False
+
+    def attendee(self, user):
+        """
+        The attendee for this user for this event. If they are not logged in,
+        or they have not RSVPed, then None is returned
+        """
+        if user.is_authenticated() and self.has_rsvped(user):
+            return self.attendee_set.get(attendee=user)
+        else:
+            return None
+
     def total_attending(self):
         total_attending_guests = queryset_sum('guests', Attendee.objects.filter(team_event__id__exact=self.id).filter(promise="sure"))
         total_attending_registered = queryset_count('attendee', Attendee.objects.filter(team_event__id__exact=self.id).filter(promise="sure"))
@@ -166,6 +186,6 @@
     guests = models.PositiveSmallIntegerField(verbose_name=_('Additional Guests'))
     
     def __unicode__(self):
-        return self.attendee
+        return unicode(self.attendee)
 
 

=== modified file 'loco_directory/events/urls.py'
--- loco_directory/events/urls.py	2010-08-17 12:00:55 +0000
+++ loco_directory/events/urls.py	2010-08-28 14:46:38 +0000
@@ -7,7 +7,11 @@
     #team events
     url(r'^team/ical/$', 'events.views.teams_event_list_ical', name='teams-event-list-ical'),
     url(r'^team/(?P<team_event_id>\d+)/detail/ical/$', 'events.views.event_ical', name='event-ical'),
+    
     url(r'^team/(?P<team_event_id>\d+)/register/$', 'events.views.team_event_register', name='team-event-register'),
+    
+    url(r'^team/(?P<team_event_id>\d+)/register/attending/(?P<promise>\w+)$', 'events.views.team_event_register_attending_status', name='team-event-register-attending-status'),
+
     url(r'^team/(?P<team_event_id>\d+)/detail/$', 'events.views.team_event_detail', name='team-event-detail'),
     url(r'^team/(?P<team_event_id>\d+)/delete/$', 'events.views.team_event_delete', name='team-event-delete'),
     url(r'^team/(?P<team_event_id>\d+)/update/$', 'events.views.team_event_update', name='team-event-update'),

=== modified file 'loco_directory/events/views.py'
--- loco_directory/events/views.py	2010-08-17 14:40:36 +0000
+++ loco_directory/events/views.py	2010-08-28 14:46:38 +0000
@@ -8,7 +8,7 @@
 from events.models import TeamEvent
 from events.models import GlobalEvent
 from teams.models import Team, Country, Continent
-from events.models import Attendee
+from events.models import Attendee, ATTENDEE_PROMISE_CHOICES
 
 from forms import TeamEventForm
 from forms import TeamEventCommentForm
@@ -120,6 +120,8 @@
     context = {
         'team_event_object': team_event_object,
         'user_is_attending': team_event_object.is_attending(request.user),
+        'user_has_rsvped': team_event_object.has_rsvped(request.user),
+        'user_attendee': team_event_object.attendee(request.user),
         'user_is_team_member': is_member,
     }
     return render_to_response('events/team_event_detail.html', 
@@ -330,6 +332,28 @@
                                      context, RequestContext(request))
 
 
+...@login_required
+def team_event_register_attending_status(request, team_event_id, promise):
+    """
+    Simple one-shot view to change you attending status. 'promise' is the
+    'sure'/'maybe'/'not' which is your status. This can be used to update your
+    existing status
+    You are redirect back to the event page when done.
+    """
+    team_event_object = get_object_or_404(TeamEvent, pk=team_event_id)
+    if team_event_object.has_rsvped(request.user):
+        attendee_object = team_event_object.attendee_set.get(attendee=request.user)
+    else:
+        attendee_object = Attendee(team_event=team_event_object, attendee=request.user, guests=0)
+        
+    if request.method == 'POST':
+        if promise in [x[0] for x in ATTENDEE_PROMISE_CHOICES]:
+            attendee_object.promise = str(promise)
+            attendee_object.save()
+            request.user.message_set.create(message=_('Your registration has been saved.'))
+    
+    return redirect( team_event_object )
+
 def team_event_comment_new(request, team_event_id):
     """
     create a comment for a team event

=== modified file 'loco_directory/media/css/newstyle.css'
--- loco_directory/media/css/newstyle.css	2010-08-27 07:21:09 +0000
+++ loco_directory/media/css/newstyle.css	2010-08-28 14:46:38 +0000
@@ -175,3 +175,7 @@
 	-webkit-box-shadow:          0px 0px 1px #FFE4B6;
 }
 
+form.inline {
+    display: inline;
+}
+

=== modified file 'loco_directory/templates/events/team_event_detail_attendees.inc.html'
--- loco_directory/templates/events/team_event_detail_attendees.inc.html	2010-08-16 18:14:57 +0000
+++ loco_directory/templates/events/team_event_detail_attendees.inc.html	2010-08-28 14:46:38 +0000
@@ -4,10 +4,45 @@
     <tr>
         <td colspan="2">
             {% if user.is_authenticated %}
-                {% if user_is_attending %}
-                    <a href="{% url team-event-register team_event_object.id %}">{% trans 'Change your Registration Status' %}</a>
+                {% if user_has_rsvped %}
+                    {% ifequal user_attendee.promise 'sure' %}
+                        <p>{% trans 'You are registered to come to this event' %}</p>
+                        <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'maybe' %}">
+                            <button submit="submit">{% trans "I might be coming to this event" %}</button>
+                        </form>
+                        <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'not'%}">
+                            <button submit="submit">{% trans "&#9785; I'm not coming to this event" %}</button>
+                        </form>
+                    {% endifequal %}
+                    {% ifequal user_attendee.promise 'maybe' %}
+                        <p>{% trans 'You have registered that you might come to this event' %}</p>
+                        <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'sure' %}">
+                            <button submit="submit">{% trans "&#9786; I'm coming to this event" %}</button>
+                        </form>
+                        <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'not' %}">
+                            <button submit="submit">{% trans "&#9785; I'm not coming to this event" %}</button>
+                        </form>
+                    {% endifequal %}
+                    {% ifequal user_attendee.promise 'not' %}
+                        <p>{% trans 'You have registered that you will not be coming to this event' %}</p>
+                        <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'sure' %}">
+                            <button submit="submit">{% trans "&#9786; I'm coming to this event" %}</button>
+                        </form>
+                        <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'maybe' %}">
+                            <button submit="submit">{% trans "I might be coming to this event" %}</button>
+                        </form>
+                    {% endifequal %}
                 {% else %}
-                    <a href="{% url team-event-register team_event_object.id %}">{% trans 'Register for this Event' %}</a>
+                    <p>{% trans 'Are you coming to this event?' %}</p>
+                    <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'sure' %}">
+                        <button submit="submit">{% trans "&#9786; I'm coming to this event" %}</button>
+                    </form>
+                    <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'maybe' %}">
+                        <button submit="submit">{% trans "I might be coming to this event" %}</button>
+                    </form>
+                    <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'not' %}">
+                        <button submit="submit">{% trans "&#9785; I'm not coming to this event" %}</button>
+                    </form>
                 {% endif %}
             {% endif %}
         </td>

_______________________________________________
Mailing list: https://launchpad.net/~loco-directory-dev
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~loco-directory-dev
More help   : https://help.launchpad.net/ListHelp

Reply via email to