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

Reply via email to