diff --git a/ietf/name/admin.py b/ietf/name/admin.py index 60b1b952a..511bfa6f9 100644 --- a/ietf/name/admin.py +++ b/ietf/name/admin.py @@ -1,10 +1,12 @@ from django.contrib import admin from models import * + class NameAdmin(admin.ModelAdmin): list_display = ["slug", "name", "desc", "used"] - prepopulate_from = { "slug": ("name",) } - + prepopulate_from = {"slug": ("name",)} + + admin.site.register(GroupTypeName, NameAdmin) admin.site.register(GroupStateName, NameAdmin) admin.site.register(RoleName, NameAdmin) @@ -19,3 +21,5 @@ admin.site.register(BallotPositionName, NameAdmin) admin.site.register(SessionStatusName, NameAdmin) admin.site.register(TimeSlotTypeName, NameAdmin) admin.site.register(ConstraintName, NameAdmin) +admin.site.register(NomineePositionState, NameAdmin) +admin.site.register(FeedbackType, NameAdmin) diff --git a/ietf/name/migrations/0006_auto__add_nomineepositionstate__add_feedbacktype.py b/ietf/name/migrations/0006_auto__add_nomineepositionstate__add_feedbacktype.py new file mode 100644 index 000000000..3858fd2d3 --- /dev/null +++ b/ietf/name/migrations/0006_auto__add_nomineepositionstate__add_feedbacktype.py @@ -0,0 +1,194 @@ +# encoding: utf-8 +from south.db import db +from south.v2 import SchemaMigration + + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding model 'NomineePositionState' + db.create_table('name_nomineepositionstate', ( + ('slug', self.gf('django.db.models.fields.CharField')(max_length=8, primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('desc', self.gf('django.db.models.fields.TextField')(blank=True)), + ('used', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('order', self.gf('django.db.models.fields.IntegerField')(default=0)), + )) + db.send_create_signal('name', ['NomineePositionState']) + + # Adding model 'FeedbackType' + db.create_table('name_feedbacktype', ( + ('slug', self.gf('django.db.models.fields.CharField')(max_length=8, primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('desc', self.gf('django.db.models.fields.TextField')(blank=True)), + ('used', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('order', self.gf('django.db.models.fields.IntegerField')(default=0)), + )) + db.send_create_signal('name', ['FeedbackType']) + + def backwards(self, orm): + + # Deleting model 'NomineePositionState' + db.delete_table('name_nomineepositionstate') + + # Deleting model 'FeedbackType' + db.delete_table('name_feedbacktype') + + models = { + 'name.ballotpositionname': { + 'Meta': {'ordering': "['order']", 'object_name': 'BallotPositionName'}, + 'blocking': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.constraintname': { + 'Meta': {'ordering': "['order']", 'object_name': 'ConstraintName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.docrelationshipname': { + 'Meta': {'ordering': "['order']", 'object_name': 'DocRelationshipName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.docremindertypename': { + 'Meta': {'ordering': "['order']", 'object_name': 'DocReminderTypeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.doctagname': { + 'Meta': {'ordering': "['order']", 'object_name': 'DocTagName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.doctypename': { + 'Meta': {'ordering': "['order']", 'object_name': 'DocTypeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.feedbacktype': { + 'Meta': {'ordering': "['order']", 'object_name': 'FeedbackType'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.groupballotpositionname': { + 'Meta': {'ordering': "['order']", 'object_name': 'GroupBallotPositionName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.groupstatename': { + 'Meta': {'ordering': "['order']", 'object_name': 'GroupStateName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.grouptypename': { + 'Meta': {'ordering': "['order']", 'object_name': 'GroupTypeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.intendedstdlevelname': { + 'Meta': {'ordering': "['order']", 'object_name': 'IntendedStdLevelName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.liaisonstatementpurposename': { + 'Meta': {'ordering': "['order']", 'object_name': 'LiaisonStatementPurposeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.meetingtypename': { + 'Meta': {'ordering': "['order']", 'object_name': 'MeetingTypeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.nomineepositionstate': { + 'Meta': {'ordering': "['order']", 'object_name': 'NomineePositionState'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.rolename': { + 'Meta': {'ordering': "['order']", 'object_name': 'RoleName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.sessionstatusname': { + 'Meta': {'ordering': "['order']", 'object_name': 'SessionStatusName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.stdlevelname': { + 'Meta': {'ordering': "['order']", 'object_name': 'StdLevelName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.streamname': { + 'Meta': {'ordering': "['order']", 'object_name': 'StreamName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.timeslottypename': { + 'Meta': {'ordering': "['order']", 'object_name': 'TimeSlotTypeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + } + } + + complete_apps = ['name'] diff --git a/ietf/name/migrations/0007_add_nomineepositionstates.py b/ietf/name/migrations/0007_add_nomineepositionstates.py new file mode 100644 index 000000000..71a3373ab --- /dev/null +++ b/ietf/name/migrations/0007_add_nomineepositionstates.py @@ -0,0 +1,173 @@ +# encoding: utf-8 +from south.v2 import DataMigration + +from name.models import NomineePositionState + + +class Migration(DataMigration): + + def forwards(self, orm): + types = ['Accepted', 'Declined'] + for type in types: + NomineePositionState.objects.get_or_create(slug=type.lower(), name=type, used=True) + + def backwards(self, orm): + pass + + models = { + 'name.ballotpositionname': { + 'Meta': {'ordering': "['order']", 'object_name': 'BallotPositionName'}, + 'blocking': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.constraintname': { + 'Meta': {'ordering': "['order']", 'object_name': 'ConstraintName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.docrelationshipname': { + 'Meta': {'ordering': "['order']", 'object_name': 'DocRelationshipName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.docremindertypename': { + 'Meta': {'ordering': "['order']", 'object_name': 'DocReminderTypeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.doctagname': { + 'Meta': {'ordering': "['order']", 'object_name': 'DocTagName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.doctypename': { + 'Meta': {'ordering': "['order']", 'object_name': 'DocTypeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.feedbacktype': { + 'Meta': {'ordering': "['order']", 'object_name': 'FeedbackType'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.groupballotpositionname': { + 'Meta': {'ordering': "['order']", 'object_name': 'GroupBallotPositionName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.groupstatename': { + 'Meta': {'ordering': "['order']", 'object_name': 'GroupStateName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.grouptypename': { + 'Meta': {'ordering': "['order']", 'object_name': 'GroupTypeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.intendedstdlevelname': { + 'Meta': {'ordering': "['order']", 'object_name': 'IntendedStdLevelName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.liaisonstatementpurposename': { + 'Meta': {'ordering': "['order']", 'object_name': 'LiaisonStatementPurposeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.meetingtypename': { + 'Meta': {'ordering': "['order']", 'object_name': 'MeetingTypeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.nomineepositionstate': { + 'Meta': {'ordering': "['order']", 'object_name': 'NomineePositionState'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.rolename': { + 'Meta': {'ordering': "['order']", 'object_name': 'RoleName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.sessionstatusname': { + 'Meta': {'ordering': "['order']", 'object_name': 'SessionStatusName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.stdlevelname': { + 'Meta': {'ordering': "['order']", 'object_name': 'StdLevelName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.streamname': { + 'Meta': {'ordering': "['order']", 'object_name': 'StreamName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.timeslottypename': { + 'Meta': {'ordering': "['order']", 'object_name': 'TimeSlotTypeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + } + } + + complete_apps = ['name'] diff --git a/ietf/name/migrations/0008_add_feedback_types.py b/ietf/name/migrations/0008_add_feedback_types.py new file mode 100644 index 000000000..8c27ad41f --- /dev/null +++ b/ietf/name/migrations/0008_add_feedback_types.py @@ -0,0 +1,175 @@ +# encoding: utf-8 +from south.v2 import DataMigration + +from name.models import FeedbackType + + +class Migration(DataMigration): + + def forwards(self, orm): + types = {'nomina': 'Nomination', + 'questio': 'Questionnaire', + 'comment': 'Comment'} + for slug, name in types.iteritems(): + FeedbackType.objects.get_or_create(slug=slug, name=name, used=True) + + def backwards(self, orm): + pass + + models = { + 'name.ballotpositionname': { + 'Meta': {'ordering': "['order']", 'object_name': 'BallotPositionName'}, + 'blocking': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.constraintname': { + 'Meta': {'ordering': "['order']", 'object_name': 'ConstraintName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.docrelationshipname': { + 'Meta': {'ordering': "['order']", 'object_name': 'DocRelationshipName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.docremindertypename': { + 'Meta': {'ordering': "['order']", 'object_name': 'DocReminderTypeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.doctagname': { + 'Meta': {'ordering': "['order']", 'object_name': 'DocTagName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.doctypename': { + 'Meta': {'ordering': "['order']", 'object_name': 'DocTypeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.feedbacktype': { + 'Meta': {'ordering': "['order']", 'object_name': 'FeedbackType'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.groupballotpositionname': { + 'Meta': {'ordering': "['order']", 'object_name': 'GroupBallotPositionName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.groupstatename': { + 'Meta': {'ordering': "['order']", 'object_name': 'GroupStateName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.grouptypename': { + 'Meta': {'ordering': "['order']", 'object_name': 'GroupTypeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.intendedstdlevelname': { + 'Meta': {'ordering': "['order']", 'object_name': 'IntendedStdLevelName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.liaisonstatementpurposename': { + 'Meta': {'ordering': "['order']", 'object_name': 'LiaisonStatementPurposeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.meetingtypename': { + 'Meta': {'ordering': "['order']", 'object_name': 'MeetingTypeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.nomineepositionstate': { + 'Meta': {'ordering': "['order']", 'object_name': 'NomineePositionState'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.rolename': { + 'Meta': {'ordering': "['order']", 'object_name': 'RoleName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.sessionstatusname': { + 'Meta': {'ordering': "['order']", 'object_name': 'SessionStatusName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.stdlevelname': { + 'Meta': {'ordering': "['order']", 'object_name': 'StdLevelName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.streamname': { + 'Meta': {'ordering': "['order']", 'object_name': 'StreamName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, + 'name.timeslottypename': { + 'Meta': {'ordering': "['order']", 'object_name': 'TimeSlotTypeName'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + } + } + + complete_apps = ['name'] diff --git a/ietf/name/models.py b/ietf/name/models.py index 672b57004..b9f898874 100644 --- a/ietf/name/models.py +++ b/ietf/name/models.py @@ -11,7 +11,7 @@ class NameModel(models.Model): def __unicode__(self): return self.name - + class Meta: abstract = True ordering = ['order'] @@ -56,3 +56,7 @@ class ConstraintName(NameModel): """Conflict""" class LiaisonStatementPurposeName(NameModel): """For action, For comment, For information, In response, Other""" +class NomineePositionState(NameModel): + """Status of a candidate for a position: None, Accepted, Declined""" +class FeedbackType(NameModel): + """Type of feedback: questionnaires, nominations, comments""" diff --git a/ietf/nomcom/admin.py b/ietf/nomcom/admin.py index 35db6010d..6b0c34a83 100644 --- a/ietf/nomcom/admin.py +++ b/ietf/nomcom/admin.py @@ -1,11 +1,35 @@ from django.contrib import admin -from ietf.group.admin import GroupAdmin -from ietf.nomcom.models import NomComGroup +from ietf.nomcom.models import NomCom, Nomination, Nominee, NomineePosition, \ + Position, Feedback -class NomComGroupAdmin(GroupAdmin): - exclude = ('type',) +class NomComAdmin(admin.ModelAdmin): + pass -admin.site.register(NomComGroup, NomComGroupAdmin) +class NominationAdmin(admin.ModelAdmin): + pass + + +class NomineeAdmin(admin.ModelAdmin): + pass + + +class NomineePositionAdmin(admin.ModelAdmin): + pass + + +class PositionAdmin(admin.ModelAdmin): + pass + + +class FeedbackAdmin(admin.ModelAdmin): + pass + +admin.site.register(NomCom, NomComAdmin) +admin.site.register(Nomination, NominationAdmin) +admin.site.register(Nominee, NomineeAdmin) +admin.site.register(NomineePosition, NomineePositionAdmin) +admin.site.register(Position, PositionAdmin) +admin.site.register(Feedback, FeedbackAdmin) diff --git a/ietf/nomcom/fields.py b/ietf/nomcom/fields.py new file mode 100644 index 000000000..dc4d3685c --- /dev/null +++ b/ietf/nomcom/fields.py @@ -0,0 +1,6 @@ +from django.db import models + + +class EncriptedTextField(models.TextField): + """ TODO: do the logic to store encripted text""" + pass diff --git a/ietf/nomcom/migrations/0001_initial.py b/ietf/nomcom/migrations/0001_initial.py index 3b7e978a0..baf2f7895 100644 --- a/ietf/nomcom/migrations/0001_initial.py +++ b/ietf/nomcom/migrations/0001_initial.py @@ -1,23 +1,114 @@ # encoding: utf-8 from south.db import db from south.v2 import SchemaMigration +from django.db import models class Migration(SchemaMigration): def forwards(self, orm): - # Adding model 'NomComGroup' - db.create_table('nomcom_nomcomgroup', ( - ('group_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['group.Group'], unique=True, primary_key=True)), - ('public_key', self.gf('django.db.models.fields.TextField')(blank=True)), + # Adding model 'NomCom' + db.create_table('nomcom_nomcom', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('public_key', self.gf('django.db.models.fields.files.FileField')(max_length=100)), + ('group', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['group.Group'])), + ('send_questionnaire', self.gf('django.db.models.fields.BooleanField')(default=False)), )) - db.send_create_signal('nomcom', ['NomComGroup']) + db.send_create_signal('nomcom', ['NomCom']) + + # Adding model 'Nomination' + db.create_table('nomcom_nomination', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('position', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['nomcom.Position'])), + ('candidate_name', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('candidate_email', self.gf('django.db.models.fields.EmailField')(max_length=255)), + ('candidate_phone', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)), + ('nominee', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['nomcom.Nominee'])), + ('comments', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['nomcom.Feedback'])), + ('nominator_email', self.gf('django.db.models.fields.EmailField')(max_length=75, blank=True)), + )) + db.send_create_signal('nomcom', ['Nomination']) + + # Adding model 'Nominee' + db.create_table('nomcom_nominee', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('email', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['person.Email'])), + )) + db.send_create_signal('nomcom', ['Nominee']) + + # Adding model 'NomineePosition' + db.create_table('nomcom_nomineeposition', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('position', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['nomcom.Position'])), + ('nominee', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['nomcom.Nominee'])), + ('state', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['name.NomineePositionState'])), + ('questionnaire', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='questionnaire', null=True, to=orm['nomcom.Feedback'])), + )) + db.send_create_signal('nomcom', ['NomineePosition']) + + # Adding unique constraint on 'NomineePosition', fields ['position', 'nominee'] + db.create_unique('nomcom_nomineeposition', ['position_id', 'nominee_id']) + + # Adding M2M table for field feedback on 'NomineePosition' + db.create_table('nomcom_nomineeposition_feedback', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('nomineeposition', models.ForeignKey(orm['nomcom.nomineeposition'], null=False)), + ('feedback', models.ForeignKey(orm['nomcom.feedback'], null=False)) + )) + db.create_unique('nomcom_nomineeposition_feedback', ['nomineeposition_id', 'feedback_id']) + + # Adding model 'Position' + db.create_table('nomcom_position', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('nomcom', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['nomcom.NomCom'])), + ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('description', self.gf('django.db.models.fields.TextField')()), + ('initial_text', self.gf('django.db.models.fields.TextField')(blank=True)), + ('requirement', self.gf('django.db.models.fields.related.ForeignKey')(related_name='requirement', to=orm['dbtemplate.DBTemplate'])), + ('questionnaire', self.gf('django.db.models.fields.related.ForeignKey')(related_name='questionnaire', to=orm['dbtemplate.DBTemplate'])), + ('is_open', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('incumbent', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['person.Email'])), + )) + db.send_create_signal('nomcom', ['Position']) + + # Adding model 'Feedback' + db.create_table('nomcom_feedback', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('author', self.gf('django.db.models.fields.EmailField')(max_length=75)), + ('position', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['nomcom.Position'])), + ('nominee', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['nomcom.Nominee'])), + ('comments', self.gf('ietf.nomcom.fields.EncriptedTextField')()), + ('type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['name.FeedbackType'])), + ('time', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + )) + db.send_create_signal('nomcom', ['Feedback']) def backwards(self, orm): - # Deleting model 'NomComGroup' - db.delete_table('nomcom_nomcomgroup') + # Removing unique constraint on 'NomineePosition', fields ['position', 'nominee'] + db.delete_unique('nomcom_nomineeposition', ['position_id', 'nominee_id']) + + # Deleting model 'NomCom' + db.delete_table('nomcom_nomcom') + + # Deleting model 'Nomination' + db.delete_table('nomcom_nomination') + + # Deleting model 'Nominee' + db.delete_table('nomcom_nominee') + + # Deleting model 'NomineePosition' + db.delete_table('nomcom_nomineeposition') + + # Removing M2M table for field feedback on 'NomineePosition' + db.delete_table('nomcom_nomineeposition_feedback') + + # Deleting model 'Position' + db.delete_table('nomcom_position') + + # Deleting model 'Feedback' + db.delete_table('nomcom_feedback') models = { 'auth.group': { @@ -56,6 +147,16 @@ class Migration(SchemaMigration): 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) }, + 'dbtemplate.dbtemplate': { + 'Meta': {'object_name': 'DBTemplate'}, + 'content': ('django.db.models.fields.TextField', [], {}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}), + 'help_text': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'template_type': ('django.db.models.fields.CharField', [], {'default': "'rst'", 'max_length': '10'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, 'doc.docalias': { 'Meta': {'object_name': 'DocAlias'}, 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}), @@ -160,6 +261,14 @@ class Migration(SchemaMigration): 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) }, + 'name.feedbacktype': { + 'Meta': {'ordering': "['order']", 'object_name': 'FeedbackType'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, 'name.groupstatename': { 'Meta': {'ordering': "['order']", 'object_name': 'GroupStateName'}, 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), @@ -184,6 +293,14 @@ class Migration(SchemaMigration): 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) }, + 'name.nomineepositionstate': { + 'Meta': {'ordering': "['order']", 'object_name': 'NomineePositionState'}, + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), + 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) + }, 'name.stdlevelname': { 'Meta': {'ordering': "['order']", 'object_name': 'StdLevelName'}, 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), @@ -200,10 +317,60 @@ class Migration(SchemaMigration): 'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}), 'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) }, - 'nomcom.nomcomgroup': { - 'Meta': {'object_name': 'NomComGroup', '_ormbases': ['group.Group']}, - 'group_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['group.Group']", 'unique': 'True', 'primary_key': 'True'}), - 'public_key': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + 'nomcom.feedback': { + 'Meta': {'object_name': 'Feedback'}, + 'author': ('django.db.models.fields.EmailField', [], {'max_length': '75'}), + 'comments': ('ietf.nomcom.fields.EncriptedTextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'nominee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['nomcom.Nominee']"}), + 'position': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['nomcom.Position']"}), + 'time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.FeedbackType']"}) + }, + 'nomcom.nomcom': { + 'Meta': {'object_name': 'NomCom'}, + 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'public_key': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'send_questionnaire': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'nomcom.nomination': { + 'Meta': {'object_name': 'Nomination'}, + 'candidate_email': ('django.db.models.fields.EmailField', [], {'max_length': '255'}), + 'candidate_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'candidate_phone': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'comments': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['nomcom.Feedback']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'nominator_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'nominee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['nomcom.Nominee']"}), + 'position': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['nomcom.Position']"}) + }, + 'nomcom.nominee': { + 'Meta': {'object_name': 'Nominee'}, + 'email': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Email']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'nomine_position': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['nomcom.Position']", 'through': "orm['nomcom.NomineePosition']", 'symmetrical': 'False'}) + }, + 'nomcom.nomineeposition': { + 'Meta': {'unique_together': "(('position', 'nominee'),)", 'object_name': 'NomineePosition'}, + 'feedback': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['nomcom.Feedback']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'nominee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['nomcom.Nominee']"}), + 'position': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['nomcom.Position']"}), + 'questionnaire': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'questionnaire'", 'null': 'True', 'to': "orm['nomcom.Feedback']"}), + 'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.NomineePositionState']"}) + }, + 'nomcom.position': { + 'Meta': {'object_name': 'Position'}, + 'description': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'incumbent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Email']"}), + 'initial_text': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'is_open': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'nomcom': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['nomcom.NomCom']"}), + 'questionnaire': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questionnaire'", 'to': "orm['dbtemplate.DBTemplate']"}), + 'requirement': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'requirement'", 'to': "orm['dbtemplate.DBTemplate']"}) }, 'person.email': { 'Meta': {'object_name': 'Email'}, diff --git a/ietf/nomcom/models.py b/ietf/nomcom/models.py index d97716e41..658a41e3a 100644 --- a/ietf/nomcom/models.py +++ b/ietf/nomcom/models.py @@ -1,21 +1,115 @@ +import os + from django.db import models +from django.conf import settings +from django.core.files.storage import FileSystemStorage +from south.modelsinspector import add_introspection_rules + +from ietf.nomcom.fields import EncriptedTextField +from ietf.person.models import Email from ietf.group.models import Group -from ietf.name.models import GroupTypeName +from ietf.name.models import NomineePositionState, FeedbackType +from ietf.dbtemplate.models import DBTemplate -class NomComGroup(Group): - public_key = models.TextField(verbose_name="Public Key", blank=True) +def upload_path_handler(instance, filename): + return os.path.join(instance.group.acronym, filename) + + +class NomCom(models.Model): + public_key = models.FileField(storage=FileSystemStorage(location=settings.PUBLIC_KEYS_URL), + upload_to=upload_path_handler) + + group = models.ForeignKey(Group) + send_questionnaire = models.BooleanField(verbose_name='Send automatically questionnaires"', + help_text='If you check this box, questionnaires are sent automatically after nominations') class Meta: - verbose_name_plural = "NomCom groups" - verbose_name = "NomCom group" + verbose_name_plural = 'NomComs' + verbose_name = 'NomCom' - def save(self, *args, **kwargs): - if not self.id: - try: - self.type = GroupTypeName.objects.get(slug='nomcom') - except GroupTypeName.DoesNotExist: - pass + def __unicode__(self): + return self.group.acronym + + +class Nomination(models.Model): + position = models.ForeignKey('Position') + candidate_name = models.CharField(verbose_name='Candidate name', max_length=255) + candidate_email = models.EmailField(verbose_name='Candidate email', max_length=255) + candidate_phone = models.CharField(verbose_name='Candidate phone', blank=True, max_length=255) + nominee = models.ForeignKey('Nominee') + comments = models.ForeignKey('Feedback') + nominator_email = models.EmailField(verbose_name='Nominator Email', blank=True) + + class Meta: + verbose_name_plural = 'Nominations' + + def __unicode__(self): + return u"%s (%s)" % (self.candidate_name, self.candidate_email) + + +class Nominee(models.Model): + + email = models.ForeignKey(Email) + nomine_position = models.ManyToManyField('Position', through='NomineePosition') + + class Meta: + verbose_name_plural = 'Nominees' + + def __unicode__(self): + return u'%s' % self.email + + +class NomineePosition(models.Model): + + position = models.ForeignKey('Position') + nominee = models.ForeignKey('Nominee') + state = models.ForeignKey(NomineePositionState) + questionnaire = models.ForeignKey('Feedback', + related_name='questionnaire', + blank=True, null=True) + feedback = models.ManyToManyField('Feedback', blank=True, null=True) + + class Meta: + verbose_name = 'Nominee position' + verbose_name_plural = 'Nominee positions' + unique_together = ('position', 'nominee') + + def __unicode__(self): + return u"%s - %s" % (self.nominee, self.position) + + +class Position(models.Model): + nomcom = models.ForeignKey('NomCom') + name = models.CharField(verbose_name='Name', max_length=255) + description = models.TextField(verbose_name='Despcription') + initial_text = models.TextField(verbose_name='Initial text for nominations', + blank=True) + requirement = models.ForeignKey(DBTemplate, related_name='requirement') + questionnaire = models.ForeignKey(DBTemplate, related_name='questionnaire') + is_open = models.BooleanField(verbose_name='Is open') + incumbent = models.ForeignKey(Email) + + class Meta: + verbose_name_plural = 'Positions' + + def __unicode__(self): + return u"%s: %s" % (self.nomcom, self.name) + + +class Feedback(models.Model): + author = models.EmailField(verbose_name='Author') + position = models.ForeignKey('Position') + nominee = models.ForeignKey('Nominee') + comments = EncriptedTextField(verbose_name='Comments') + type = models.ForeignKey(FeedbackType) + time = models.DateTimeField(auto_now_add=True) + + def __unicode__(self): + return u"%s - %s" % (self.author, self.nominee) + +# ----- adding south rules to help introspection ----- + +add_introspection_rules([], ["^ietf\.nomcom\.fields\.EncriptedTextField"]) - super(NomComGroup, self).save(*args, **kwargs) diff --git a/ietf/nomcom/urls.py b/ietf/nomcom/urls.py index e365560dc..6839026ec 100644 --- a/ietf/nomcom/urls.py +++ b/ietf/nomcom/urls.py @@ -1,10 +1,10 @@ from django.conf.urls.defaults import patterns, url -from ietf.nomcom.forms import EditChairForm, EditChairFormPreview, \ - EditMembersForm, EditMembersFormPreview, \ - EditPublicKeyForm, EditPublicKeyFormPreview +#from ietf.nomcom.forms import EditChairForm, EditChairFormPreview, \ + #EditMembersForm, EditMembersFormPreview, \ + #EditPublicKeyForm, EditPublicKeyFormPreview urlpatterns = patterns('ietf.nomcom.views', - url(r'^(?P\d{4})/edit-chair/$', EditChairFormPreview(EditChairForm), name='edit_chair'), - url(r'^(?P\d{4})/edit-members/$', EditMembersFormPreview(EditMembersForm), name='edit_members'), - url(r'^(?P\d{4})/edit-publickey/$', EditPublicKeyFormPreview(EditPublicKeyForm), name='edit_publickey'), + #url(r'^(?P\d{4})/edit-chair/$', EditChairFormPreview(EditChairForm), name='edit_chair'), + #url(r'^(?P\d{4})/edit-members/$', EditMembersFormPreview(EditMembersForm), name='edit_members'), + #url(r'^(?P\d{4})/edit-publickey/$', EditPublicKeyFormPreview(EditPublicKeyForm), name='edit_publickey'), ) diff --git a/ietf/settings.py b/ietf/settings.py index 94e7557a1..ae3f726f8 100644 --- a/ietf/settings.py +++ b/ietf/settings.py @@ -261,6 +261,7 @@ IDSUBMIT_ANNOUNCE_LIST_EMAIL = 'i-d-announce@ietf.org' # NomCom Tool settings ROLODEX_URL = "" +PUBLIC_KEYS_URL = BASE_DIR + "/publick_keys/" # Days from meeting to cut off dates on submit FIRST_CUTOFF_DAYS = 19