diff --git a/lms/envs/common.py b/lms/envs/common.py index 1dd14627bd..ed92ba16ca 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -2241,8 +2241,8 @@ INSTALLED_APPS = ( # Unusual migrations 'database_fixups', - # Waffle related utilities 'openedx.core.djangoapps.waffle_utils', + 'openedx.core.djangoapps.schedules', # Features 'openedx.features.course_bookmarks', @@ -2251,7 +2251,6 @@ INSTALLED_APPS = ( 'openedx.features.enterprise_support', 'openedx.features.learner_profile', - # Experiments 'experiments', # DRF filters diff --git a/openedx/core/djangoapps/schedules/__init__.py b/openedx/core/djangoapps/schedules/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openedx/core/djangoapps/schedules/admin.py b/openedx/core/djangoapps/schedules/admin.py new file mode 100644 index 0000000000..dc4cabb732 --- /dev/null +++ b/openedx/core/djangoapps/schedules/admin.py @@ -0,0 +1,27 @@ +from django.contrib import admin +from django.utils.translation import ugettext_lazy as _ + +from . import models + + +@admin.register(models.Schedule) +class ScheduleAdmin(admin.ModelAdmin): + list_display = ('username', 'course_id', 'active', 'start', 'upgrade_deadline') + raw_id_fields = ('enrollment',) + readonly_fields = ('modified',) + search_fields = ('enrollment__user__username', 'enrollment__course_id',) + + def username(self, obj): + return obj.enrollment.user.username + + username.short_description = _('Username') + + def course_id(self, obj): + return obj.enrollment.course_id + + course_id.short_description = _('Course ID') + + def get_queryset(self, request): + qs = super(ScheduleAdmin, self).get_queryset(request) + qs = qs.select_related('enrollment', 'enrollment__user') + return qs diff --git a/openedx/core/djangoapps/schedules/migrations/0001_initial.py b/openedx/core/djangoapps/schedules/migrations/0001_initial.py new file mode 100644 index 0000000000..61de8d7a32 --- /dev/null +++ b/openedx/core/djangoapps/schedules/migrations/0001_initial.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import django_extensions.db.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('student', '0010_auto_20170207_0458'), + ] + + operations = [ + migrations.CreateModel( + name='Schedule', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), + ('active', models.BooleanField(default=True, help_text='Indicates if this schedule is actively used')), + ('start', models.DateTimeField(help_text='Date this schedule went into effect')), + ('upgrade_deadline', models.DateTimeField(help_text='Deadline by which the learner must upgrade to a verified seat', null=True, blank=True)), + ('enrollment', models.OneToOneField(to='student.CourseEnrollment')), + ], + options={ + 'verbose_name': 'Schedule', + 'verbose_name_plural': 'Schedules', + }, + ), + ] diff --git a/openedx/core/djangoapps/schedules/migrations/__init__.py b/openedx/core/djangoapps/schedules/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/openedx/core/djangoapps/schedules/models.py b/openedx/core/djangoapps/schedules/models.py new file mode 100644 index 0000000000..682b025d0e --- /dev/null +++ b/openedx/core/djangoapps/schedules/models.py @@ -0,0 +1,18 @@ +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from django_extensions.db.models import TimeStampedModel + + +class Schedule(TimeStampedModel): + enrollment = models.OneToOneField('student.CourseEnrollment', null=False) + active = models.BooleanField(default=True, help_text=_('Indicates if this schedule is actively used')) + start = models.DateTimeField(help_text=_('Date this schedule went into effect')) + upgrade_deadline = models.DateTimeField( + blank=True, + null=True, + help_text=_('Deadline by which the learner must upgrade to a verified seat') + ) + + class Meta(object): + verbose_name = _('Schedule') + verbose_name_plural = _('Schedules')