Merge lp:~rorymcc/loco-team-portal/bug-600134 into lp:loco-team-portal

Proposed by Rory McCann
Status: Rejected
Rejected by: Chris Johnston
Proposed branch: lp:~rorymcc/loco-team-portal/bug-600134
Merge into: lp:loco-team-portal
Diff against target: 236 lines (+152/-5)
6 files modified
INSTALL (+1/-1)
loco_directory/events/models.py (+41/-0)
loco_directory/events/urls.py (+5/-0)
loco_directory/events/views.py (+53/-1)
loco_directory/media/css/newstyle.css (+4/-0)
loco_directory/templates/events/team_event_detail_attendees.inc.html (+48/-3)
To merge this branch: bzr merge lp:~rorymcc/loco-team-portal/bug-600134
Reviewer Review Type Date Requested Status
Chris Johnston Disapprove
Michael Hall (community) Needs Fixing
Review via email: mp+33995@code.launchpad.net
To post a comment you must log in.
264. By Michael Hall

Add User Profiles, merge from Daniel Holbach

265. By Michael Hall

Redesign of Global Events to match Team Event redesign, merge from Chris Johnston

267. By Rory McCann

Allow one to update the number of guests one is bringing

268. By Rory McCann

Changes for user profile

269. By Rory McCann

more fixes for supporting user profiles

270. By Rory McCann

changes to fix for profiles

Revision history for this message
Michael Hall (mhall119) wrote :

Traceback:
File "/usr/lib/pymodules/python2.6/django/core/handlers/base.py" in get_response
  92. response = callback(request, *callback_args, **callback_kwargs)
File "/home/mhall/projects/LD/loco-directory/loco_directory/events/views.py" in team_event_detail
  123. 'user_has_rsvped': team_event_object.has_rsvped(request.user),
File "/home/mhall/projects/LD/loco-directory/loco_directory/events/models.py" in has_rsvped
  153. return self.attendee_set.filter(attendee=user).count() > 0
File "/usr/lib/pymodules/python2.6/django/db/models/manager.py" in filter
  129. return self.get_query_set().filter(*args, **kwargs)
File "/usr/lib/pymodules/python2.6/django/db/models/query.py" in filter
  498. return self._filter_or_exclude(False, *args, **kwargs)
File "/usr/lib/pymodules/python2.6/django/db/models/query.py" in _filter_or_exclude
  516. clone.query.add_q(Q(*args, **kwargs))
File "/usr/lib/pymodules/python2.6/django/db/models/sql/query.py" in add_q
  1675. can_reuse=used_aliases)
File "/usr/lib/pymodules/python2.6/django/db/models/sql/query.py" in add_filter
  1569. negate=negate, process_extras=process_extras)
File "/usr/lib/pymodules/python2.6/django/db/models/sql/query.py" in setup_joins
  1737. "Choices are: %s" % (name, ", ".join(names)))

Exception Type: FieldError at /events/team/13/detail/
Exception Value: Cannot resolve keyword 'attendee' into field. Choices are: attendee_profile, guests, id, promise, team_event

review: Needs Fixing
Revision history for this message
Chris Johnston (cjohnston) wrote :

Rejecting due to how old code is.

review: Disapprove

Unmerged revisions

270. By Rory McCann

changes to fix for profiles

269. By Rory McCann

more fixes for supporting user profiles

268. By Rory McCann

Changes for user profile

267. By Rory McCann

Allow one to update the number of guests one is bringing

266. By Rory McCann

Added simple way to mark if you are coming to an event or not

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'INSTALL'
2--- INSTALL 2010-07-01 06:27:09 +0000
3+++ INSTALL 2010-08-28 16:20:56 +0000
4@@ -1,4 +1,4 @@
5-For Postgresql:
6+ For Postgresql:
7 - sudo apt-get install postgresql-8.3 python-psycopg2
8 # not sure if necessary
9 # - sudo passwd postgres
10
11=== modified file 'loco_directory/events/models.py'
12--- loco_directory/events/models.py 2010-08-24 15:24:24 +0000
13+++ loco_directory/events/models.py 2010-08-28 16:20:56 +0000
14@@ -124,6 +124,46 @@
15 else:
16 return False
17
18+ def has_rsvped(self, user):
19+ """
20+ Has this user 'RSVPed'? i.e. has this user given us an answer if they
21+ will or will not be coming?
22+ """
23+ if user.is_authenticated():
24+ return self.attendee_set.filter(attendee_profile__user=user).count() > 0
25+ else:
26+ return False
27+
28+ def attendee(self, user):
29+ """
30+ The attendee for this user for this event. If they are not logged in,
31+ or they have not RSVPed, then None is returned
32+ """
33+ if user.is_authenticated() and self.has_rsvped(user):
34+ return self.attendee_set.get(attendee_profile__user=user)
35+ else:
36+ return None
37+
38+ def has_rsvped(self, user):
39+ """
40+ Has this user 'RSVPed'? i.e. has this user given us an answer if they
41+ will or will not be coming?
42+ """
43+ if user.is_authenticated():
44+ return self.attendee_set.filter(attendee=user).count() > 0
45+ else:
46+ return False
47+
48+ def attendee(self, user):
49+ """
50+ The attendee for this user for this event. If they are not logged in,
51+ or they have not RSVPed, then None is returned
52+ """
53+ if user.is_authenticated() and self.has_rsvped(user):
54+ return self.attendee_set.get(attendee=user)
55+ else:
56+ return None
57+
58 def total_attending(self):
59 total_attending_guests = queryset_sum('guests', Attendee.objects.filter(team_event__id__exact=self.id).filter(promise="sure"))
60 total_attending_registered = queryset_count('attendee', Attendee.objects.filter(team_event__id__exact=self.id).filter(promise="sure"))
61@@ -169,3 +209,4 @@
62 return self.attendee_profile.user.username
63
64
65+
66
67=== modified file 'loco_directory/events/urls.py'
68--- loco_directory/events/urls.py 2010-08-17 12:00:55 +0000
69+++ loco_directory/events/urls.py 2010-08-28 16:20:56 +0000
70@@ -7,7 +7,12 @@
71 #team events
72 url(r'^team/ical/$', 'events.views.teams_event_list_ical', name='teams-event-list-ical'),
73 url(r'^team/(?P<team_event_id>\d+)/detail/ical/$', 'events.views.event_ical', name='event-ical'),
74+
75 url(r'^team/(?P<team_event_id>\d+)/register/$', 'events.views.team_event_register', name='team-event-register'),
76+
77+ 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'),
78+ url(r'^team/(?P<team_event_id>\d+)/register/guests/$', 'events.views.team_event_register_guests', name='team-event-register-guests'),
79+
80 url(r'^team/(?P<team_event_id>\d+)/detail/$', 'events.views.team_event_detail', name='team-event-detail'),
81 url(r'^team/(?P<team_event_id>\d+)/delete/$', 'events.views.team_event_delete', name='team-event-delete'),
82 url(r'^team/(?P<team_event_id>\d+)/update/$', 'events.views.team_event_update', name='team-event-update'),
83
84=== modified file 'loco_directory/events/views.py'
85--- loco_directory/events/views.py 2010-08-24 15:24:24 +0000
86+++ loco_directory/events/views.py 2010-08-28 16:20:56 +0000
87@@ -8,7 +8,7 @@
88 from events.models import TeamEvent
89 from events.models import GlobalEvent
90 from teams.models import Team, Country, Continent
91-from events.models import Attendee
92+from events.models import Attendee, ATTENDEE_PROMISE_CHOICES
93
94 from forms import TeamEventForm
95 from forms import TeamEventCommentForm
96@@ -120,6 +120,8 @@
97 context = {
98 'team_event_object': team_event_object,
99 'user_is_attending': team_event_object.is_attending(request.user),
100+ 'user_has_rsvped': team_event_object.has_rsvped(request.user),
101+ 'user_attendee': team_event_object.attendee(request.user),
102 'user_is_team_member': is_member,
103 }
104 return render_to_response('events/team_event_detail.html',
105@@ -332,6 +334,56 @@
106 context, RequestContext(request))
107
108
109+@login_required
110+def team_event_register_attending_status(request, team_event_id, promise):
111+ """
112+ Simple one-shot view to change you attending status. 'promise' is the
113+ 'sure'/'maybe'/'not' which is your status. This can be used to update your
114+ existing status
115+ You are redirect back to the event page when done.
116+ """
117+ team_event_object = get_object_or_404(TeamEvent, pk=team_event_id)
118+ if team_event_object.has_rsvped(request.user):
119+ attendee_object = team_event_object.attendee_set.get(attendee_profile__user=request.user)
120+ else:
121+ from userprofiles.models import create_profile
122+ profile = create_profile(request.user.username)
123+ attendee_object = Attendee(team_event=team_event_object, attendee_profile=profile, guests=0)
124+
125+ if request.method == 'POST':
126+ if promise in [x[0] for x in ATTENDEE_PROMISE_CHOICES]:
127+ attendee_object.promise = str(promise)
128+ attendee_object.save()
129+ request.user.message_set.create(message=_('Your registration has been saved.'))
130+
131+ return redirect( team_event_object )
132+
133+@login_required
134+def team_event_register_guests(request, team_event_id):
135+ """
136+ Updates the number of guests that a person is bringing
137+ """
138+ team_event_object = get_object_or_404(TeamEvent, pk=team_event_id)
139+ if team_event_object.has_rsvped(request.user):
140+ attendee_object = team_event_object.attendee_set.get(attendee_profile__user=request.user)
141+ else:
142+ from userprofiles.models import create_profile
143+ profile = create_profile(request.user.username)
144+ attendee_object = Attendee(team_event=team_event_object, attendee_profile=profile, guests=0)
145+
146+ if request.method == 'POST':
147+ try:
148+ guests = int(request.POST['guests'])
149+ if 0 <= guests <= 10:
150+ attendee_object.guests = guests
151+ attendee_object.save()
152+ request.user.message_set.create(message=_('Saved your number of guests'))
153+ except:
154+ pass
155+
156+
157+ return redirect( team_event_object )
158+
159 def team_event_comment_new(request, team_event_id):
160 """
161 create a comment for a team event
162
163=== modified file 'loco_directory/media/css/newstyle.css'
164--- loco_directory/media/css/newstyle.css 2010-08-27 07:21:09 +0000
165+++ loco_directory/media/css/newstyle.css 2010-08-28 16:20:56 +0000
166@@ -175,3 +175,7 @@
167 -webkit-box-shadow: 0px 0px 1px #FFE4B6;
168 }
169
170+form.inline {
171+ display: inline;
172+}
173+
174
175=== modified file 'loco_directory/templates/events/team_event_detail_attendees.inc.html'
176--- loco_directory/templates/events/team_event_detail_attendees.inc.html 2010-08-24 15:24:24 +0000
177+++ loco_directory/templates/events/team_event_detail_attendees.inc.html 2010-08-28 16:20:56 +0000
178@@ -4,10 +4,55 @@
179 <tr>
180 <td colspan="2">
181 {% if user.is_authenticated %}
182- {% if user_is_attending %}
183- <a href="{% url team-event-register team_event_object.id %}">{% trans 'Change your Registration Status' %}</a>
184+ {% if user_has_rsvped %}
185+ {% ifequal user_attendee.promise 'sure' %}
186+ <p>{% trans 'You are registered to come to this event' %}
187+ <form class="inline" method="POST" action="{% url team-event-register-guests team_event_object.id %}">
188+ {% blocktrans with user_attendee.guests as guests %}I am bringing <input name="guests" type="number" min="0" max="10" width="2" value="{{ guests }}" /> guests.{% endblocktrans %}
189+ <button submit="submit">{% trans 'Update' %}</button>
190+ </form>
191+ </p>
192+ <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'maybe' %}">
193+ <button submit="submit">{% trans "I might be coming to this event" %}</button>
194+ </form>
195+ <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'not'%}">
196+ <button submit="submit">{% trans "&#9785; I'm not coming to this event" %}</button>
197+ </form>
198+ {% endifequal %}
199+ {% ifequal user_attendee.promise 'maybe' %}
200+ <p>{% trans 'You have registered that you might come to this event' %}
201+ <form class="inline" method="POST" action="{% url team-event-register-guests team_event_object.id %}">
202+ {% blocktrans with user_attendee.guests as guests %}I am bringing <input name="guests" type="number" min="0" max="10" width="2" value="{{ guests }}" /> guests.{% endblocktrans %}
203+ <button submit="submit">{% trans 'Update' %}</button>
204+ </form>
205+ </p>
206+ <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'sure' %}">
207+ <button submit="submit">{% trans "&#9786; I'm coming to this event" %}</button>
208+ </form>
209+ <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'not' %}">
210+ <button submit="submit">{% trans "&#9785; I'm not coming to this event" %}</button>
211+ </form>
212+ {% endifequal %}
213+ {% ifequal user_attendee.promise 'not' %}
214+ <p>{% trans 'You have registered that you will not be coming to this event' %}</p>
215+ <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'sure' %}">
216+ <button submit="submit">{% trans "&#9786; I'm coming to this event" %}</button>
217+ </form>
218+ <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'maybe' %}">
219+ <button submit="submit">{% trans "I might be coming to this event" %}</button>
220+ </form>
221+ {% endifequal %}
222 {% else %}
223- <a href="{% url team-event-register team_event_object.id %}">{% trans 'Register for this Event' %}</a>
224+ <p>{% trans 'Are you coming to this event?' %}</p>
225+ <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'sure' %}">
226+ <button submit="submit">{% trans "&#9786; I'm coming to this event" %}</button>
227+ </form>
228+ <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'maybe' %}">
229+ <button submit="submit">{% trans "I might be coming to this event" %}</button>
230+ </form>
231+ <form class="inline" method="POST" action="{% url team-event-register-attending-status team_event_object.id 'not' %}">
232+ <button submit="submit">{% trans "&#9785; I'm not coming to this event" %}</button>
233+ </form>
234 {% endif %}
235 {% endif %}
236 </td>

Subscribers

People subscribed via source and target branches