Commit 24ca8d5a by McKenzie Welter Committed by McKenzie Welter

Added ability to specify total hours of effort for a program

parent fdb7405e
...@@ -898,7 +898,7 @@ class ProgramSerializer(MinimalProgramSerializer): ...@@ -898,7 +898,7 @@ class ProgramSerializer(MinimalProgramSerializer):
class Meta(MinimalProgramSerializer.Meta): class Meta(MinimalProgramSerializer.Meta):
model = Program model = Program
fields = MinimalProgramSerializer.Meta.fields + ( fields = MinimalProgramSerializer.Meta.fields + (
'overview', 'weeks_to_complete', 'weeks_to_complete_min', 'weeks_to_complete_max', 'overview', 'total_hours_of_effort', 'weeks_to_complete', 'weeks_to_complete_min', 'weeks_to_complete_max',
'min_hours_effort_per_week', 'max_hours_effort_per_week', 'video', 'expected_learning_items', 'min_hours_effort_per_week', 'max_hours_effort_per_week', 'video', 'expected_learning_items',
'faq', 'credit_backing_organizations', 'corporate_endorsements', 'job_outlook_items', 'faq', 'credit_backing_organizations', 'corporate_endorsements', 'job_outlook_items',
'individual_endorsements', 'languages', 'transcript_languages', 'subjects', 'price_ranges', 'individual_endorsements', 'languages', 'transcript_languages', 'subjects', 'price_ranges',
......
...@@ -685,6 +685,7 @@ class ProgramSerializerTests(MinimalProgramSerializerTests): ...@@ -685,6 +685,7 @@ class ProgramSerializerTests(MinimalProgramSerializerTests):
'job_outlook_items': [item.value for item in program.job_outlook_items.all()], 'job_outlook_items': [item.value for item in program.job_outlook_items.all()],
'languages': [serialize_language_to_code(l) for l in program.languages], 'languages': [serialize_language_to_code(l) for l in program.languages],
'weeks_to_complete': program.weeks_to_complete, 'weeks_to_complete': program.weeks_to_complete,
'total_hours_of_effort': program.total_hours_of_effort,
'weeks_to_complete_min': program.weeks_to_complete_min, 'weeks_to_complete_min': program.weeks_to_complete_min,
'weeks_to_complete_max': program.weeks_to_complete_max, 'weeks_to_complete_max': program.weeks_to_complete_max,
'max_hours_effort_per_week': program.max_hours_effort_per_week, 'max_hours_effort_per_week': program.max_hours_effort_per_week,
......
...@@ -124,9 +124,9 @@ class ProgramAdmin(admin.ModelAdmin): ...@@ -124,9 +124,9 @@ class ProgramAdmin(admin.ModelAdmin):
# ordering the field display on admin page. # ordering the field display on admin page.
fields = ( fields = (
'uuid', 'title', 'subtitle', 'status', 'type', 'partner', 'banner_image', 'banner_image_url', 'card_image_url', 'uuid', 'title', 'subtitle', 'status', 'type', 'partner', 'banner_image', 'banner_image_url', 'card_image_url',
'marketing_slug', 'overview', 'credit_redemption_overview', 'video', 'weeks_to_complete', 'marketing_slug', 'overview', 'credit_redemption_overview', 'video', 'total_hours_of_effort',
'min_hours_effort_per_week', 'max_hours_effort_per_week', 'courses', 'order_courses_by_start_date', 'weeks_to_complete', 'min_hours_effort_per_week', 'max_hours_effort_per_week', 'courses',
'custom_course_runs_display', 'excluded_course_runs', 'authoring_organizations', 'order_courses_by_start_date', 'custom_course_runs_display', 'excluded_course_runs', 'authoring_organizations',
'credit_backing_organizations', 'one_click_purchase_enabled', 'hidden', 'corporate_endorsements', 'faq', 'credit_backing_organizations', 'one_click_purchase_enabled', 'hidden', 'corporate_endorsements', 'faq',
'individual_endorsements', 'individual_endorsements',
) )
......
# -*- coding: utf-8 -*-
# Generated by Django 1.11.3 on 2017-10-20 13:40
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('course_metadata', '0064_auto_20171018_1528'),
]
operations = [
migrations.AddField(
model_name='program',
name='total_hours_of_effort',
field=models.PositiveSmallIntegerField(blank=True, help_text='Total estimated time needed to complete all courses belonging to this program. This field is intended for display on program certificates.', null=True),
),
]
...@@ -809,6 +809,10 @@ class Program(TimeStampedModel): ...@@ -809,6 +809,10 @@ class Program(TimeStampedModel):
excluded_course_runs = models.ManyToManyField(CourseRun, blank=True) excluded_course_runs = models.ManyToManyField(CourseRun, blank=True)
partner = models.ForeignKey(Partner, null=True, blank=False) partner = models.ForeignKey(Partner, null=True, blank=False)
overview = models.TextField(null=True, blank=True) overview = models.TextField(null=True, blank=True)
total_hours_of_effort = models.PositiveSmallIntegerField(
null=True, blank=True,
help_text='Total estimated time needed to complete all courses belonging to this program. This field is '
'intended for display on program certificates.')
# The weeks_to_complete field is now deprecated # The weeks_to_complete field is now deprecated
weeks_to_complete = models.PositiveSmallIntegerField( weeks_to_complete = models.PositiveSmallIntegerField(
null=True, blank=True, null=True, blank=True,
......
...@@ -258,6 +258,7 @@ class ProgramFactory(factory.django.DjangoModelFactory): ...@@ -258,6 +258,7 @@ class ProgramFactory(factory.django.DjangoModelFactory):
card_image_url = FuzzyText(prefix='https://example.com/program/card') card_image_url = FuzzyText(prefix='https://example.com/program/card')
partner = factory.SubFactory(PartnerFactory) partner = factory.SubFactory(PartnerFactory)
overview = FuzzyText() overview = FuzzyText()
total_hours_of_effort = FuzzyInteger(2)
weeks_to_complete = FuzzyInteger(1) weeks_to_complete = FuzzyInteger(1)
min_hours_effort_per_week = FuzzyInteger(2) min_hours_effort_per_week = FuzzyInteger(2)
max_hours_effort_per_week = FuzzyInteger(4) max_hours_effort_per_week = FuzzyInteger(4)
......
...@@ -288,12 +288,12 @@ class ProgramAdminFunctionalTests(SiteMixin, LiveServerTestCase): ...@@ -288,12 +288,12 @@ class ProgramAdminFunctionalTests(SiteMixin, LiveServerTestCase):
expected = [ expected = [
'field-uuid', 'field-title', 'field-subtitle', 'field-status', 'field-type', 'field-partner', 'field-uuid', 'field-title', 'field-subtitle', 'field-status', 'field-type', 'field-partner',
'field-banner_image', 'field-banner_image_url', 'field-card_image_url', 'field-marketing_slug', 'field-banner_image', 'field-banner_image_url', 'field-card_image_url', 'field-marketing_slug',
'field-overview', 'field-credit_redemption_overview', 'field-video', 'field-weeks_to_complete', 'field-overview', 'field-credit_redemption_overview', 'field-video', 'field-total_hours_of_effort',
'field-min_hours_effort_per_week', 'field-max_hours_effort_per_week', 'field-courses', 'field-weeks_to_complete', 'field-min_hours_effort_per_week', 'field-max_hours_effort_per_week',
'field-order_courses_by_start_date', 'field-custom_course_runs_display', 'field-excluded_course_runs', 'field-courses', 'field-order_courses_by_start_date', 'field-custom_course_runs_display',
'field-authoring_organizations', 'field-credit_backing_organizations', 'field-one_click_purchase_enabled', 'field-excluded_course_runs', 'field-authoring_organizations', 'field-credit_backing_organizations',
'field-hidden', 'field-corporate_endorsements', 'field-faq', 'field-individual_endorsements', 'field-one_click_purchase_enabled', 'field-hidden', 'field-corporate_endorsements', 'field-faq',
'field-job_outlook_items', 'field-expected_learning_items', 'field-individual_endorsements', 'field-job_outlook_items', 'field-expected_learning_items',
] ]
self.assertEqual(actual, expected) self.assertEqual(actual, expected)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment