Skip to content

Commit

Permalink
Add a cancel field to a meeting
Browse files Browse the repository at this point in the history
  • Loading branch information
mjumbewu committed Jun 5, 2012
1 parent 645ca28 commit 29de9c4
Show file tree
Hide file tree
Showing 4 changed files with 131 additions and 8 deletions.
25 changes: 17 additions & 8 deletions publicmeeting/meetings/forms.py
Expand Up @@ -78,6 +78,18 @@ def clean(self, value):
return tags


class DatepickerInput (forms.DateInput):
template_name = 'floppyforms/meetings_datepicker.html'


class GeoBBInput (forms.DateInput):
template_name = 'floppyforms/meetings_bbmap_google.html'


class CancelMeetingInput (forms.CheckboxInput):
template_name = 'floppyforms/meetings_cancel_box.html'


class FillInMeetingInfoForm (forms.ModelForm):
begin_time = forms.SplitDateTimeField(
label="Start time",
Expand Down Expand Up @@ -114,6 +126,7 @@ class Meta:
'region': forms.Select(attrs={'class':'span6'}),
'venue': forms.Select(attrs={'class':'span4'}),
'venue_additional': forms.Textarea(attrs={'class':'span6', 'rows':'3'}),
'canceled': CancelMeetingInput(),
}

def __init__(self, *args, **kwargs):
Expand All @@ -133,6 +146,10 @@ def __init__(self, *args, **kwargs):
'Step 2: Enter the location',
'region', 'venue', 'venue_additional'
),
Fieldset(
'Cancellation',
'canceled'
),
ButtonHolder(
Submit('check', 'Save', css_class='btn btn-primary pull-right')
)
Expand Down Expand Up @@ -162,14 +179,6 @@ class DefaultFilters (forms.Form):
)


class DatepickerInput (forms.DateInput):
template_name = 'floppyforms/meetings_datepicker.html'


class GeoBBInput (forms.DateInput):
template_name = 'floppyforms/meetings_bbmap_google.html'


class MeetingFilters (forms.Form):
region = forms.ModelChoiceField(queryset=models.Region.objects.all(), to_field_name='slug', required=False, empty_label='All regions')
center = forms.CharField(required=False)
Expand Down
@@ -0,0 +1,104 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models


class Migration(SchemaMigration):

def forwards(self, orm):
# Adding field 'Meeting.canceled'
db.add_column('meetings_meeting', 'canceled',
self.gf('django.db.models.fields.BooleanField')(default=False),
keep_default=False)


def backwards(self, orm):
# Deleting field 'Meeting.canceled'
db.delete_column('meetings_meeting', 'canceled')


models = {
'auth.group': {
'Meta': {'object_name': 'Group'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
'auth.permission': {
'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
'meetings.meeting': {
'Meta': {'object_name': 'Meeting'},
'attendees': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'attending_meetings'", 'blank': 'True', 'to': "orm['auth.User']"}),
'begin_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'created_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'region': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meetings.Region']", 'null': 'True'}),
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'blank': 'True'}),
'speakers': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'speaking_meetings'", 'blank': 'True', 'to': "orm['auth.User']"}),
'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'meetings'", 'blank': 'True', 'to': "orm['meetings.MeetingTopic']"}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '1023'}),
'updated_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'venue': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'meetings'", 'null': 'True', 'to': "orm['meetings.Venue']"}),
'venue_additional': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'venue_name': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
},
'meetings.meetingtopic': {
'Meta': {'object_name': 'MeetingTopic'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'blank': 'True'})
},
'meetings.region': {
'Meta': {'object_name': 'Region'},
'created_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'blank': 'True'}),
'updated_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
},
'meetings.venue': {
'Meta': {'object_name': 'Venue'},
'address': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
'created_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'location': ('django.contrib.gis.db.models.fields.PointField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'}),
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'blank': 'True'}),
'updated_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
}
}

complete_apps = ['meetings']
3 changes: 3 additions & 0 deletions publicmeeting/meetings/models.py
Expand Up @@ -137,6 +137,9 @@ class Meeting (SlugifiedModelMixin, TimestampedModelMixin, models.Model):
attendees = models.ManyToManyField('auth.User', related_name='attending_meetings', blank=True)
"""Who is attending and/or speaking at the meeting"""

canceled = models.BooleanField(default=False, blank=True)
"""Whether the meeting is canceled"""

# Meeting has no geo fields, but we want to be able to do geo queries on
# meetings, so we need a GeoManager.
objects = models.GeoManager()
Expand Down
@@ -0,0 +1,7 @@
<div class="alert alert-error">
{% include "floppyforms/input.html" %}
<p>Note that marking a meeting as cancelled will not delete it from the
database, but it will stop the meeting from showing up in search
results. If you have the meeting's URL you will be able to uncancel it
at a later time.</p>
</div>

0 comments on commit 29de9c4

Please sign in to comment.