Commit b65e75a6 by tasawernawaz Committed by Tasawer Nawaz

added profession certificate field in publisher ECOM-7801

parent 2f06f5f3
...@@ -267,7 +267,14 @@ class CustomCourseRunForm(CourseRunForm): ...@@ -267,7 +267,14 @@ class CustomCourseRunForm(CourseRunForm):
required=False, required=False,
) )
is_professional_certificate = forms.BooleanField(
label=_('Professional Certificate'),
widget=forms.CheckboxInput,
required=False,
)
xseries_name = forms.CharField(label=_('XSeries Name'), required=False) xseries_name = forms.CharField(label=_('XSeries Name'), required=False)
professional_certificate_name = forms.CharField(label=_('Professional Certificate Name'), required=False)
micromasters_name = forms.CharField(label=_('MicroMasters Name'), required=False) micromasters_name = forms.CharField(label=_('MicroMasters Name'), required=False)
lms_course_id = forms.CharField(label=_('Course Run Key'), required=False) lms_course_id = forms.CharField(label=_('Course Run Key'), required=False)
video_language = forms.ModelChoiceField( video_language = forms.ModelChoiceField(
...@@ -280,8 +287,8 @@ class CustomCourseRunForm(CourseRunForm): ...@@ -280,8 +287,8 @@ class CustomCourseRunForm(CourseRunForm):
fields = ( fields = (
'length', 'transcript_languages', 'language', 'min_effort', 'max_effort', 'length', 'transcript_languages', 'language', 'min_effort', 'max_effort',
'target_content', 'pacing_type', 'video_language', 'target_content', 'pacing_type', 'video_language',
'staff', 'start', 'end', 'is_xseries', 'xseries_name', 'is_micromasters', 'staff', 'start', 'end', 'is_xseries', 'xseries_name', 'is_professional_certificate',
'micromasters_name', 'lms_course_id', 'professional_certificate_name', 'is_micromasters', 'micromasters_name', 'lms_course_id',
) )
def save(self, commit=True, course=None, changed_by=None): # pylint: disable=arguments-differ def save(self, commit=True, course=None, changed_by=None): # pylint: disable=arguments-differ
...@@ -327,6 +334,8 @@ class CustomCourseRunForm(CourseRunForm): ...@@ -327,6 +334,8 @@ class CustomCourseRunForm(CourseRunForm):
xseries_name = cleaned_data.get("xseries_name") xseries_name = cleaned_data.get("xseries_name")
is_micromasters = cleaned_data.get("is_micromasters") is_micromasters = cleaned_data.get("is_micromasters")
micromasters_name = cleaned_data.get("micromasters_name") micromasters_name = cleaned_data.get("micromasters_name")
is_professional_certificate = cleaned_data.get("is_professional_certificate")
professional_certificate_name = cleaned_data.get("professional_certificate_name")
if start and end and start > end: if start and end and start > end:
raise ValidationError({'start': _('Start date cannot be after the End date')}) raise ValidationError({'start': _('Start date cannot be after the End date')})
if min_effort and max_effort and min_effort > max_effort: if min_effort and max_effort and min_effort > max_effort:
...@@ -335,6 +344,8 @@ class CustomCourseRunForm(CourseRunForm): ...@@ -335,6 +344,8 @@ class CustomCourseRunForm(CourseRunForm):
raise ValidationError({'xseries_name': _('Enter XSeries program name')}) raise ValidationError({'xseries_name': _('Enter XSeries program name')})
if is_micromasters and not micromasters_name: if is_micromasters and not micromasters_name:
raise ValidationError({'micromasters_name': _('Enter Micromasters program name')}) raise ValidationError({'micromasters_name': _('Enter Micromasters program name')})
if is_professional_certificate and not professional_certificate_name:
raise ValidationError({'professional_certificate_name': _('Enter Professional Certificate program name')})
return cleaned_data return cleaned_data
......
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2017-06-04 15:02
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('publisher', '0052_auto_20170529_1002'),
]
operations = [
migrations.AddField(
model_name='courserun',
name='is_professional_certificate',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='courserun',
name='professional_certificate_name',
field=models.CharField(blank=True, max_length=255, null=True),
),
migrations.AddField(
model_name='historicalcourserun',
name='is_professional_certificate',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='historicalcourserun',
name='professional_certificate_name',
field=models.CharField(blank=True, max_length=255, null=True),
),
]
...@@ -257,6 +257,8 @@ class CourseRun(TimeStampedModel, ChangedByMixin): ...@@ -257,6 +257,8 @@ class CourseRun(TimeStampedModel, ChangedByMixin):
xseries_name = models.CharField(max_length=255, null=True, blank=True) xseries_name = models.CharField(max_length=255, null=True, blank=True)
is_micromasters = models.BooleanField(default=False) is_micromasters = models.BooleanField(default=False)
micromasters_name = models.CharField(max_length=255, null=True, blank=True) micromasters_name = models.CharField(max_length=255, null=True, blank=True)
is_professional_certificate = models.BooleanField(default=False)
professional_certificate_name = models.CharField(max_length=255, null=True, blank=True)
contacted_partner_manager = models.BooleanField(default=False) contacted_partner_manager = models.BooleanField(default=False)
notes = models.TextField( notes = models.TextField(
...@@ -340,6 +342,17 @@ class CourseRun(TimeStampedModel, ChangedByMixin): ...@@ -340,6 +342,17 @@ class CourseRun(TimeStampedModel, ChangedByMixin):
return False return False
@property @property
def is_valid_professional_certificate(self):
""" Check that `professional_certificate_name` is provided if is_professional_certificate is True."""
if not self.is_professional_certificate:
return True
if self.is_professional_certificate and self.professional_certificate_name:
return True
return False
@property
def has_valid_seats(self): def has_valid_seats(self):
""" """
Validate course-run has a valid seats. Validate course-run has a valid seats.
...@@ -644,8 +657,8 @@ class CourseRunState(TimeStampedModel, ChangedByMixin): ...@@ -644,8 +657,8 @@ class CourseRunState(TimeStampedModel, ChangedByMixin):
return all([ return all([
course_run.course.course_state.is_approved, course_run.has_valid_seats, course_run.start, course_run.end, course_run.course.course_state.is_approved, course_run.has_valid_seats, course_run.start, course_run.end,
course_run.pacing_type, course_run.has_valid_staff, course_run.is_valid_micromasters, course_run.pacing_type, course_run.has_valid_staff, course_run.is_valid_micromasters,
course_run.is_valid_xseries, course_run.language, course_run.transcript_languages.all(), course_run.is_valid_professional_certificate, course_run.is_valid_xseries, course_run.language,
course_run.lms_course_id course_run.transcript_languages.all(), course_run.lms_course_id
]) ])
def __str__(self): def __str__(self):
......
...@@ -140,3 +140,16 @@ class PublisherCourseRunEditFormTests(TestCase): ...@@ -140,3 +140,16 @@ class PublisherCourseRunEditFormTests(TestCase):
run_form.cleaned_data['micromasters_name'] = "Test Name" run_form.cleaned_data['micromasters_name'] = "Test Name"
self.assertEqual(run_form.clean(), run_form.cleaned_data) self.assertEqual(run_form.clean(), run_form.cleaned_data)
def test_course_run_professional_certificate(self):
"""
Verify that 'clean' raises 'ValidationError' if the is_professional_certificate is checked
but no professional_certificate_name has been entered
"""
run_form = CustomCourseRunForm()
run_form.cleaned_data = {'is_professional_certificate': True, 'professional_certificate_name': ''}
with self.assertRaises(ValidationError):
run_form.clean()
run_form.cleaned_data['professional_certificate_name'] = "Test Name"
self.assertEqual(run_form.clean(), run_form.cleaned_data)
...@@ -99,6 +99,19 @@ class CourseRunTests(TestCase): ...@@ -99,6 +99,19 @@ class CourseRunTests(TestCase):
self.course_run.save() self.course_run.save()
self.assertFalse(self.course_run.is_valid_micromasters) self.assertFalse(self.course_run.is_valid_micromasters)
def test_is_professional_certificate(self):
""" Verify that property returns bool if both fields have value. """
self.assertTrue(self.course_run.is_valid_professional_certificate)
self.course_run.is_professional_certificate = True
self.course_run.professional_certificate_name = 'test'
self.course_run.save()
self.assertTrue(self.course_run.is_valid_professional_certificate)
self.course_run.professional_certificate_name = None
self.course_run.save()
self.assertFalse(self.course_run.is_valid_professional_certificate)
def test_is_valid_xseries(self): def test_is_valid_xseries(self):
""" Verify that property returns bool if both fields have value. """ """ Verify that property returns bool if both fields have value. """
self.assertTrue(self.course_run.is_valid_xseries) self.assertTrue(self.course_run.is_valid_xseries)
......
...@@ -7,7 +7,7 @@ msgid "" ...@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-02 14:58+0500\n" "POT-Creation-Date: 2017-06-05 12:49+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
...@@ -665,10 +665,18 @@ msgid "MicroMasters" ...@@ -665,10 +665,18 @@ msgid "MicroMasters"
msgstr "" msgstr ""
#: apps/publisher/forms.py #: apps/publisher/forms.py
msgid "Professional Certificate"
msgstr ""
#: apps/publisher/forms.py
msgid "XSeries Name" msgid "XSeries Name"
msgstr "" msgstr ""
#: apps/publisher/forms.py #: apps/publisher/forms.py
msgid "Professional Certificate Name"
msgstr ""
#: apps/publisher/forms.py
msgid "MicroMasters Name" msgid "MicroMasters Name"
msgstr "" msgstr ""
...@@ -697,6 +705,10 @@ msgid "Enter Micromasters program name" ...@@ -697,6 +705,10 @@ msgid "Enter Micromasters program name"
msgstr "" msgstr ""
#: apps/publisher/forms.py #: apps/publisher/forms.py
msgid "Enter Professional Certificate program name"
msgstr ""
#: apps/publisher/forms.py
msgid "Only audit seat can be without price." msgid "Only audit seat can be without price."
msgstr "" msgstr ""
......
...@@ -7,7 +7,7 @@ msgid "" ...@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-02 14:58+0500\n" "POT-Creation-Date: 2017-06-05 12:49+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
......
...@@ -7,7 +7,7 @@ msgid "" ...@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-02 14:58+0500\n" "POT-Creation-Date: 2017-06-05 12:49+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
...@@ -792,10 +792,18 @@ msgid "MicroMasters" ...@@ -792,10 +792,18 @@ msgid "MicroMasters"
msgstr "MïçröMästérs Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#" msgstr "MïçröMästérs Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#"
#: apps/publisher/forms.py #: apps/publisher/forms.py
msgid "Professional Certificate"
msgstr "Pröféssïönäl Çértïfïçäté Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢ση#"
#: apps/publisher/forms.py
msgid "XSeries Name" msgid "XSeries Name"
msgstr "XSérïés Nämé Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#" msgstr "XSérïés Nämé Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#"
#: apps/publisher/forms.py #: apps/publisher/forms.py
msgid "Professional Certificate Name"
msgstr "Pröféssïönäl Çértïfïçäté Nämé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢#"
#: apps/publisher/forms.py
msgid "MicroMasters Name" msgid "MicroMasters Name"
msgstr "MïçröMästérs Nämé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмє#" msgstr "MïçröMästérs Nämé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмє#"
...@@ -828,6 +836,12 @@ msgid "Enter Micromasters program name" ...@@ -828,6 +836,12 @@ msgid "Enter Micromasters program name"
msgstr "Éntér Mïçrömästérs prögräm nämé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢т#" msgstr "Éntér Mïçrömästérs prögräm nämé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢т#"
#: apps/publisher/forms.py #: apps/publisher/forms.py
msgid "Enter Professional Certificate program name"
msgstr ""
"Éntér Pröféssïönäl Çértïfïçäté prögräm nämé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
"¢σηѕє¢тєтυя #"
#: apps/publisher/forms.py
msgid "Only audit seat can be without price." msgid "Only audit seat can be without price."
msgstr "" msgstr ""
"Önlý äüdït séät çän ßé wïthöüt prïçé. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, " "Önlý äüdït séät çän ßé wïthöüt prïçé. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
......
...@@ -7,7 +7,7 @@ msgid "" ...@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-02 14:58+0500\n" "POT-Creation-Date: 2017-06-05 12:49+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
......
$(document).ready(function () { $(document).ready(function () {
var microMaster = $('#id_is_micromasters'), var microMaster = $('#id_is_micromasters'),
xseries = $('#id_is_xseries'); xseries = $('#id_is_xseries'),
professional_certificate = $('#id_is_professional_certificate');
if (microMaster.is(':checked')) { if (microMaster.is(':checked')) {
toggleMicroMaster(true); toggleMicroMaster(true);
...@@ -8,12 +9,18 @@ $(document).ready(function () { ...@@ -8,12 +9,18 @@ $(document).ready(function () {
if (xseries.is(':checked')) { if (xseries.is(':checked')) {
toggleXseries(true); toggleXseries(true);
} }
if (professional_certificate.is(':checked')) {
toggleProfessionalCertificate(true);
}
microMaster.click(function () { microMaster.click(function () {
toggleMicroMaster(this.checked); toggleMicroMaster(this.checked);
}); });
xseries.click(function (e) { xseries.click(function (e) {
toggleXseries(this.checked) toggleXseries(this.checked)
}); });
professional_certificate.click(function (e) {
toggleProfessionalCertificate(this.checked)
});
}); });
function toggleMicroMaster (checked) { function toggleMicroMaster (checked) {
...@@ -25,3 +32,8 @@ function toggleXseries(checked) { ...@@ -25,3 +32,8 @@ function toggleXseries(checked) {
// If is-xseries checkbox value true from db then show the x-series block. // If is-xseries checkbox value true from db then show the x-series block.
$('#xseries_name_group').toggle(checked); $('#xseries_name_group').toggle(checked);
} }
function toggleProfessionalCertificate(checked) {
// If is_professional_certificate checkbox value true from db then show the professional_certificate block.
$('#professional_certificate_group').toggle(checked);
}
...@@ -138,6 +138,23 @@ ...@@ -138,6 +138,23 @@
</div> </div>
<div class="row"> <div class="row">
<div class="col col-5"> <div class="col col-5">
<label class="field-label ">{{ run_form.is_professional_certificate.label_tag }}</label>
{{ run_form.is_professional_certificate}}
</div>
<div class="col col-7 {% if run_form.professional_certificate_name %} hidden {% endif %}" id="professional_certificate_group">
<label class="field-label ">{{ run_form.professional_certificate_name.label_tag }}</label>
{{ run_form.professional_certificate_name }}
</div>
{% if run_form.professional_certificate_name.errors %}
<div class="field-message-error">
<span>
{{ run_form.professional_certificate_name.errors|escape }}
</span>
</div>
{% endif %}
</div>
<div class="row">
<div class="col col-5">
<label class="field-label ">{{ run_form.is_xseries.label_tag }}</label> <label class="field-label ">{{ run_form.is_xseries.label_tag }}</label>
{{ run_form.is_xseries}} {{ run_form.is_xseries}}
</div> </div>
......
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