Michael Hall has proposed merging lp:~mhall119/loco-directory/meeting-feature
into lp:loco-directory with lp:~chrisjohnston/loco-directory/meeting-feature as
a prerequisite.
Requested reviews:
loco-directory-dev (loco-directory-dev)
Related bugs:
#686268 Add the ability to add agenda items
https://bugs.launchpad.net/bugs/686268
Adds agenda to the meetings app
--
https://code.launchpad.net/~mhall119/loco-directory/meeting-feature/+merge/43014
Your team loco-directory-dev is requested to review the proposed merge of
lp:~mhall119/loco-directory/meeting-feature into lp:loco-directory.
=== modified file 'loco_directory/media/css/newstyle.css'
--- loco_directory/media/css/newstyle.css 2010-10-08 21:43:14 +0000
+++ loco_directory/media/css/newstyle.css 2010-12-07 21:40:48 +0000
@@ -66,6 +66,10 @@
list-style-image: url(../img/unapproved.png); /* Grey Ubuntu Logo */
}
+ol.agenda-list, .agenda-list ol, .agenda-list li {
+ padding: 2px 10px !important;
+}
+
br.clear {
clear: left;
}
=== modified file 'loco_directory/meetings/admin.py'
--- loco_directory/meetings/admin.py 2010-12-07 21:40:48 +0000
+++ loco_directory/meetings/admin.py 2010-12-07 21:40:48 +0000
@@ -2,3 +2,5 @@
from meetings.models import *
admin.site.register(TeamMeeting)
+admin.site.register(AgendaItem)
+
=== added file 'loco_directory/meetings/migrations/0003_add_chair.py'
--- loco_directory/meetings/migrations/0003_add_chair.py 1970-01-01 00:00:00 +0000
+++ loco_directory/meetings/migrations/0003_add_chair.py 2010-12-07 21:40:48 +0000
@@ -0,0 +1,130 @@
+
+from south.db import db
+from django.db import models
+from meetings.models import *
+
+class Migration:
+
+ def forwards(self, orm):
+
+ # Adding field 'BaseMeeting.chair'
+ db.add_column('meetings_basemeeting', 'chair', orm['meetings.basemeeting:chair'])
+
+
+
+ def backwards(self, orm):
+
+ # Deleting field 'BaseMeeting.chair'
+ db.delete_column('meetings_basemeeting', 'chair_id')
+
+
+
+ models = {
+ 'auth.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': {'unique_together': "(('content_type', 'codename'),)"},
+ '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': {
+ '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', 'blank': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ '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': {'unique_together': "(('app_label', 'model'),)", '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.basemeeting': {
+ 'chair': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True', 'blank': 'True'}),
+ 'channel': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'}),
+ 'date_begin': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
+ 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 12, 7, 20, 0, 18, 626730)', 'db_index': 'True'}),
+ 'date_end': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'logs': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'meetings.teammeeting': {
+ 'basemeeting_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['meetings.BaseMeeting']", 'unique': 'True', 'primary_key': 'True'}),
+ 'teams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Team']", 'db_index': 'True', 'symmetrical': 'False'})
+ },
+ 'teams.continent': {
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'})
+ },
+ 'teams.country': {
+ 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']", 'symmetrical': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'})
+ },
+ 'teams.language': {
+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'})
+ },
+ 'teams.team': {
+ 'Meta': {'db_table': "'teams'"},
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+ 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']", 'symmetrical': 'False'}),
+ 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']", 'symmetrical': 'False'}),
+ 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']", 'symmetrical': 'False'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'flickr_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
+ 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
+ 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']", 'symmetrical': 'False'}),
+ 'lp_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True'}),
+ 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True'}),
+ 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}),
+ 'picasa_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
+ 'pixie_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
+ 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+ 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
+ },
+ 'userprofiles.userprofile': {
+ 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
+ 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
+ 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
+ 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
+ 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
+ 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}),
+ 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
+ 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),
+ 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
+ }
+ }
+
+ complete_apps = ['meetings']
=== added file 'loco_directory/meetings/migrations/0004_add_agenda.py'
--- loco_directory/meetings/migrations/0004_add_agenda.py 1970-01-01 00:00:00 +0000
+++ loco_directory/meetings/migrations/0004_add_agenda.py 2010-12-07 21:40:48 +0000
@@ -0,0 +1,152 @@
+
+from south.db import db
+from django.db import models
+from meetings.models import *
+
+class Migration:
+
+ def forwards(self, orm):
+
+ # Adding model 'AgendaItem'
+ db.create_table('meetings_agendaitem', (
+ ('id', orm['meetings.agendaitem:id']),
+ ('meeting', orm['meetings.agendaitem:meeting']),
+ ('parent', orm['meetings.agendaitem:parent']),
+ ('order', orm['meetings.agendaitem:order']),
+ ('owner', orm['meetings.agendaitem:owner']),
+ ('created_date', orm['meetings.agendaitem:created_date']),
+ ('title', orm['meetings.agendaitem:title']),
+ ('description', orm['meetings.agendaitem:description']),
+ ('log', orm['meetings.agendaitem:log']),
+ ))
+ db.send_create_signal('meetings', ['AgendaItem'])
+
+
+
+ def backwards(self, orm):
+
+ # Deleting model 'AgendaItem'
+ db.delete_table('meetings_agendaitem')
+
+
+
+ models = {
+ 'auth.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': {'unique_together': "(('content_type', 'codename'),)"},
+ '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': {
+ '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', 'blank': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ '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': {'unique_together': "(('app_label', 'model'),)", '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.agendaitem': {
+ 'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'log': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meetings.BaseMeeting']"}),
+ 'order': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']"}),
+ 'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['meetings.AgendaItem']"}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'meetings.basemeeting': {
+ 'chair': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['userprofiles.UserProfile']", 'null': 'True', 'blank': 'True'}),
+ 'channel': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'}),
+ 'date_begin': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
+ 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 12, 7, 20, 37, 42, 549244)', 'db_index': 'True'}),
+ 'date_end': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'logs': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'meetings.teammeeting': {
+ 'basemeeting_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['meetings.BaseMeeting']", 'unique': 'True', 'primary_key': 'True'}),
+ 'teams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Team']", 'db_index': 'True', 'symmetrical': 'False'})
+ },
+ 'teams.continent': {
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '50'})
+ },
+ 'teams.country': {
+ 'continents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Continent']", 'symmetrical': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.TextField', [], {'max_length': '100'})
+ },
+ 'teams.language': {
+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True'})
+ },
+ 'teams.team': {
+ 'Meta': {'db_table': "'teams'"},
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+ 'admin_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']", 'symmetrical': 'False'}),
+ 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'approved_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'city': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'contact_profiles': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['userprofiles.UserProfile']", 'symmetrical': 'False'}),
+ 'countries': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Country']", 'symmetrical': 'False'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'expires_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'flickr_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
+ 'forum_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'irc_chan': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
+ 'languages': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['teams.Language']", 'symmetrical': 'False'}),
+ 'lp_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True'}),
+ 'ml_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'mugshot_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'null': 'True'}),
+ 'owner_profile': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'owner'", 'null': 'True', 'to': "orm['userprofiles.UserProfile']"}),
+ 'picasa_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
+ 'pixie_id': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
+ 'provides_support': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+ 'spr': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'wiki_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
+ },
+ 'userprofiles.userprofile': {
+ 'aim': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
+ 'blog': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
+ 'flickr': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'identica': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
+ 'irc': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
+ 'picasa': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
+ 'realname': ('django.db.models.fields.CharField', [], {'max_length': '150', 'blank': 'True'}),
+ 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
+ 'tz': ('django.db.models.fields.CharField', [], {'default': "'UTC'", 'max_length': '32'}),
+ 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),
+ 'xmpp': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
+ }
+ }
+
+ complete_apps = ['meetings']
=== modified file 'loco_directory/meetings/models.py'
--- loco_directory/meetings/models.py 2010-12-07 21:40:48 +0000
+++ loco_directory/meetings/models.py 2010-12-07 21:40:48 +0000
@@ -16,6 +16,7 @@
channel = models.CharField(max_length=150, verbose_name=_('Meeting Channel'), help_text=_('Channel that the meeting will be held in. Include #'), null=True)
logs = models.URLField(verbose_name=_('Meeting Log'), help_text=_('After the meeting, add a link to the meeting log'), max_length=200, verify_exists=False, blank=True, null=True)
date_created = models.DateTimeField(help_text=_('the date and time when the event was created'), default=datetime.datetime.now(), db_index=True)
+ chair = models.ForeignKey(UserProfile, blank=True, null=True)
def __unicode__(self):
return self.name
@@ -64,3 +65,69 @@
#add manager
objects = TeamMeetingManager()
+
+class AgendaItemNode(object):
+
+ def __init__(self, item):
+ self.item = item
+ self.parent = None
+ self.children = []
+
+ def as_ol(self):
+ if len(self.children) > 0:
+ return '<li>%s - %s</li>\n<ol>\n%s</ol>\n' % (self.item.title, self.item.sig, '\n'.join([c.as_ol() for c in self.children]))
+ else:
+ return '<li>%s - %s</li>\n' % (self.item.title, self.item.sig)
+
+ def as_ul(self):
+ if len(self.children) > 0:
+ return '<li>%s - %s</li>\n<ul>\n%s</ul>\n' % (self.item.title, self.item.sig, '\n'.join([c.as_ul() for c in self.children]))
+ else:
+ return '<li>%s - %s</li>\n' % (self.item.title, self.item.sig)
+
+ def __unicode__(self):
+ return self.item.title
+
+class AgendaItemManager(models.Manager):
+
+ def as_tree(self):
+ cache = {}
+ tree = []
+ all_items = self.order_by('parent__id', 'order')
+ for i in all_items:
+ node = AgendaItemNode(i)
+ cache[i.pk] = node
+ if i.parent is None or i.parent.pk == 0:
+ tree.append(node)
+ else:
+ node.parent = cache[i.parent.pk]
+ node.parent.children.append(node)
+ return tree
+
+class AgendaItem(models.Model):
+
+ class Meta:
+ ordering = ('parent__id', 'order')
+
+ meeting = models.ForeignKey(BaseMeeting, verbose_name=_('Meeting'), related_name='agenda', help_text=_('meeting during which this agenda item is to be discussed'))
+ parent = models.ForeignKey('self', verbose_name=_('Parent Agenda Item'), related_name='children', help_text=_('agenda item that contains this item'), blank=True, null=True)
+ order = models.PositiveIntegerField(verbose_name=_('Order'), help_text=_('index number of where this item falls in the agenda'))
+ owner = models.ForeignKey(UserProfile, verbose_name=_('Owner'), help_text=_('person proposing or responsible for this item'))
+ created_date = models.DateTimeField(verbose_name=_('Created Date'), auto_now_add=True, help_text=_('timestamp of when this item was created'))
+ title = models.CharField(verbose_name=_('Title'), max_length = 150, help_text=_('descriptive name for this item'))
+ description = models.TextField(verbose_name=_('Description'), help_text=_('detailed description of this item'), blank=True, null=True)
+ log = models.URLField(verbose_name=_('Log URL'), max_length=200, verify_exists=False, help_text=_('URL to this item\'s discussion'), blank=True, null=True)
+
+ objects = AgendaItemManager()
+
+ def get_sig(self):
+ return '<a href="http://launchpad.net/~%s">%s</a> %s' % (self.owner.user.username, self.owner.realname, self.created_date)
+
+ sig = property(get_sig)
+
+ def __unicode__(self):
+ if self.parent is None:
+ return '%s: %s' % (self.meeting, self.title)
+ else:
+ return '%s->%s' % (self.parent, self.title)
+
=== modified file 'loco_directory/templates/meetings/team_meeting_detail.inc.html'
--- loco_directory/templates/meetings/team_meeting_detail.inc.html 2010-12-07 21:40:48 +0000
+++ loco_directory/templates/meetings/team_meeting_detail.inc.html 2010-12-07 21:40:48 +0000
@@ -7,3 +7,9 @@
<h3>{% trans "Details" %}</h3>
{% include "meetings/team_meeting_detail_basic.inc.html" %}
</article>
+
+<article class="main-content">
+ <h3>{% trans "Agenda" %}</h3>
+ {% include "meetings/team_meeting_detail_agenda.inc.html" %}
+</article>
+
=== added file 'loco_directory/templates/meetings/team_meeting_detail_agenda.inc.html'
--- loco_directory/templates/meetings/team_meeting_detail_agenda.inc.html 1970-01-01 00:00:00 +0000
+++ loco_directory/templates/meetings/team_meeting_detail_agenda.inc.html 2010-12-07 21:40:48 +0000
@@ -0,0 +1,8 @@
+{% load i18n %}
+{% if team_meeting_object %}
+<ol class="agenda-list">
+{% for item in team_meeting_object.agenda.as_tree %}
+{{item.as_ol|safe}}
+{% endfor %}
+</ol>
+{% endif %}
_______________________________________________
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