From 0622c69d75a2410ac1f9e8e5d0f18ed027d5a20b Mon Sep 17 00:00:00 2001 From: jansenk Date: Thu, 18 Apr 2019 11:45:49 -0400 Subject: [PATCH] add ProgramCourseEnrollment --- ...ourseenrollment_programcourseenrollment.py | 58 +++++++++++++++++++ lms/djangoapps/program_enrollments/models.py | 28 +++++++++ 2 files changed, 86 insertions(+) create mode 100644 lms/djangoapps/program_enrollments/migrations/0002_historicalprogramcourseenrollment_programcourseenrollment.py diff --git a/lms/djangoapps/program_enrollments/migrations/0002_historicalprogramcourseenrollment_programcourseenrollment.py b/lms/djangoapps/program_enrollments/migrations/0002_historicalprogramcourseenrollment_programcourseenrollment.py new file mode 100644 index 0000000000..2a1bdc436e --- /dev/null +++ b/lms/djangoapps/program_enrollments/migrations/0002_historicalprogramcourseenrollment_programcourseenrollment.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-04-19 16:48 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone +import model_utils.fields +import opaque_keys.edx.django.models +import simple_history.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('student', '0020_auto_20190227_2019'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('program_enrollments', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='HistoricalProgramCourseEnrollment', + fields=[ + ('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('course_key', opaque_keys.edx.django.models.CourseKeyField(max_length=255)), + ('status', models.CharField(choices=[('active', 'active'), ('inactive', 'inactive')], max_length=9)), + ('history_id', models.AutoField(primary_key=True, serialize=False)), + ('history_date', models.DateTimeField()), + ('history_change_reason', models.CharField(max_length=100, null=True)), + ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), + ('course_enrollment', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='student.CourseEnrollment')), + ('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), + ('program_enrollment', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='program_enrollments.ProgramEnrollment')), + ], + options={ + 'ordering': ('-history_date', '-history_id'), + 'get_latest_by': 'history_date', + 'verbose_name': 'historical program course enrollment', + }, + bases=(simple_history.models.HistoricalChanges, models.Model), + ), + migrations.CreateModel( + name='ProgramCourseEnrollment', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('course_key', opaque_keys.edx.django.models.CourseKeyField(max_length=255)), + ('status', models.CharField(choices=[('active', 'active'), ('inactive', 'inactive')], max_length=9)), + ('course_enrollment', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='student.CourseEnrollment')), + ('program_enrollment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='program_enrollments.ProgramEnrollment')), + ], + ), + ] diff --git a/lms/djangoapps/program_enrollments/models.py b/lms/djangoapps/program_enrollments/models.py index b2d76c5dc4..aec356b219 100644 --- a/lms/djangoapps/program_enrollments/models.py +++ b/lms/djangoapps/program_enrollments/models.py @@ -7,7 +7,9 @@ from __future__ import unicode_literals from django.contrib.auth.models import User from django.db import models from model_utils.models import TimeStampedModel +from opaque_keys.edx.django.models import CourseKeyField from simple_history.models import HistoricalRecords +from student.models import CourseEnrollment as StudentCourseEnrollment class ProgramEnrollment(TimeStampedModel): # pylint: disable=model-missing-unicode @@ -61,3 +63,29 @@ class ProgramEnrollment(TimeStampedModel): # pylint: disable=model-missing-unic enrollments.update(external_user_key=None) return True + + +class ProgramCourseEnrollment(TimeStampedModel): # pylint: disable=model-missing-unicode + """ + This is a model to represent a learner's enrollment in a course + in the context of a program from the registrar service + + .. no_pii: + """ + STATUSES = ( + ('active', 'active'), + ('inactive', 'inactive'), + ) + + class Meta(object): + app_label = "program_enrollments" + + program_enrollment = models.ForeignKey(ProgramEnrollment, on_delete=models.CASCADE) + course_enrollment = models.OneToOneField( + StudentCourseEnrollment, + null=True, + blank=True, + ) + course_key = CourseKeyField(max_length=255) + status = models.CharField(max_length=9, choices=STATUSES) + historical_records = HistoricalRecords()