feat: paid unpaid named course modes

Add executive education variants for paid and unpaid modes.

PROD-2708
This commit is contained in:
uzairr
2022-03-02 19:10:01 +05:00
parent 68e0885ca8
commit 7bc56c46ed
6 changed files with 72 additions and 8 deletions

View File

@@ -136,6 +136,8 @@ class CourseMode(models.Model):
CREDIT_MODE = 'credit'
MASTERS = 'masters'
EXECUTIVE_EDUCATION = 'executive-education'
PAID_EXECUTIVE_EDUCATION = 'paid-executive-education'
UNPAID_EXECUTIVE_EDUCATION = 'unpaid-executive-education'
DEFAULT_MODE = Mode(
settings.COURSE_MODE_DEFAULTS['slug'],
@@ -158,14 +160,18 @@ class CourseMode(models.Model):
PROFESSIONAL,
VERIFIED,
MASTERS,
EXECUTIVE_EDUCATION
EXECUTIVE_EDUCATION,
PAID_EXECUTIVE_EDUCATION,
UNPAID_EXECUTIVE_EDUCATION
]
# Modes utilized for audit/free enrollments
AUDIT_MODES = [AUDIT, HONOR]
AUDIT_MODES = [AUDIT, HONOR, UNPAID_EXECUTIVE_EDUCATION]
# Modes that allow a student to pursue a verified certificate
VERIFIED_MODES = [VERIFIED, PROFESSIONAL, MASTERS, EXECUTIVE_EDUCATION]
VERIFIED_MODES = [
VERIFIED, PROFESSIONAL, MASTERS, EXECUTIVE_EDUCATION, PAID_EXECUTIVE_EDUCATION
]
# Modes that allow a student to pursue a non-verified certificate
NON_VERIFIED_MODES = [HONOR, AUDIT, NO_ID_PROFESSIONAL_MODE]
@@ -174,7 +180,9 @@ class CourseMode(models.Model):
CREDIT_MODES = [CREDIT_MODE]
# Modes that are eligible to purchase credit
CREDIT_ELIGIBLE_MODES = [VERIFIED, PROFESSIONAL, NO_ID_PROFESSIONAL_MODE, EXECUTIVE_EDUCATION]
CREDIT_ELIGIBLE_MODES = [
VERIFIED, PROFESSIONAL, NO_ID_PROFESSIONAL_MODE, EXECUTIVE_EDUCATION, PAID_EXECUTIVE_EDUCATION
]
# Modes for which certificates/programs may need to be updated
CERTIFICATE_RELEVANT_MODES = CREDIT_MODES + CREDIT_ELIGIBLE_MODES + [MASTERS]

View File

@@ -0,0 +1,28 @@
# Generated by Django 3.2.12 on 2022-03-07 11:00
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('certificates', '0032_change_certificatedateoverride_date'),
]
operations = [
migrations.AlterField(
model_name='certificatetemplate',
name='mode',
field=models.CharField(blank=True, choices=[('verified', 'verified'), ('honor', 'honor'), ('audit', 'audit'), ('professional', 'professional'), ('no-id-professional', 'no-id-professional'), ('masters', 'masters'), ('executive-education', 'executive-education'), ('paid-executive-education', 'paid-executive-education')], default='honor', help_text='The course mode for this template.', max_length=125, null=True),
),
migrations.AlterField(
model_name='generatedcertificate',
name='mode',
field=models.CharField(choices=[('verified', 'verified'), ('honor', 'honor'), ('audit', 'audit'), ('professional', 'professional'), ('no-id-professional', 'no-id-professional'), ('masters', 'masters'), ('executive-education', 'executive-education'), ('paid-executive-education', 'paid-executive-education')], default='honor', max_length=32),
),
migrations.AlterField(
model_name='historicalgeneratedcertificate',
name='mode',
field=models.CharField(choices=[('verified', 'verified'), ('honor', 'honor'), ('audit', 'audit'), ('professional', 'professional'), ('no-id-professional', 'no-id-professional'), ('masters', 'masters'), ('executive-education', 'executive-education'), ('paid-executive-education', 'paid-executive-education')], default='honor', max_length=32),
),
]

View File

@@ -211,10 +211,14 @@ class GeneratedCertificate(models.Model):
'professional',
'no-id-professional',
'masters',
'executive-education'
'executive-education',
'paid-executive-education',
)
VERIFIED_CERTS_MODES = [CourseMode.VERIFIED, CourseMode.CREDIT_MODE, CourseMode.MASTERS, CourseMode.EXECUTIVE_EDUCATION] # pylint: disable=line-too-long
VERIFIED_CERTS_MODES = [
CourseMode.VERIFIED, CourseMode.CREDIT_MODE, CourseMode.MASTERS, CourseMode.EXECUTIVE_EDUCATION,
CourseMode.PAID_EXECUTIVE_EDUCATION
]
user = models.ForeignKey(User, on_delete=models.CASCADE)
course_id = CourseKeyField(max_length=255, blank=True, default=None)

View File

@@ -216,7 +216,9 @@ def get_enrollments_for_courses_in_program(user, program):
return CourseEnrollment.objects.filter(
user=user,
course_id__in=course_keys,
mode__in=[CourseMode.VERIFIED, CourseMode.MASTERS, CourseMode.EXECUTIVE_EDUCATION],
mode__in=[
CourseMode.VERIFIED, CourseMode.MASTERS, CourseMode.EXECUTIVE_EDUCATION, CourseMode.PAID_EXECUTIVE_EDUCATION
],
is_active=True,
)

View File

@@ -4579,7 +4579,19 @@ COURSE_ENROLLMENT_MODES = {
"slug": "executive-educations",
"display_name": _("Executive Education"),
"min_price": 1
}
},
"unpaid-executive-education": {
"id": 9,
"slug": "unpaid-executive-education",
"display_name": _("Unpaid Executive Education"),
"min_price": 0
},
"paid-executive-education": {
"id": 10,
"slug": "paid-executive-education",
"display_name": _("Paid Executive Education"),
"min_price": 1
},
}
CONTENT_TYPE_GATE_GROUP_IDS = {

View File

@@ -29,6 +29,16 @@ from openedx.core.djangolib.markup import HTML, Text
<th scope="row">${_("Executive Education")}</th><td>${modes['executive-education']}</td>
</tr>
%endif
%if modes["unpaid-executive-education"] > 0:
<tr>
<th scope="row">${_("Unpaid Executive Education")}</th><td>${modes['unpaid-executive-education']}</td>
</tr>
%endif
%if modes["paid-executive-education"] > 0:
<tr>
<th scope="row">${_("Paid Executive Education")}</th><td>${modes['paid-executive-education']}</td>
</tr>
%endif
%if modes['masters'] > 0:
<tr>
<th scope="row">${_("Master's")}</th><td>${modes['masters']}</td>