Commit 5f024f8e by Clinton Blackburn

Exposed upgraded deadline on course run form

LEARNER-2621
parent 066d6216
import datetime
import html
from dal import autocomplete
......@@ -396,14 +397,16 @@ class SeatForm(BaseForm):
]
type = forms.ChoiceField(choices=TYPE_CHOICES, required=False, label=_('Enrollment Track'))
price = forms.DecimalField(max_digits=6, decimal_places=2, required=False, initial=0.00)
credit_price = forms.DecimalField(max_digits=6, decimal_places=2, required=False, initial=0.00)
class Meta:
fields = ('price', 'type', 'credit_price')
fields = ('price', 'type', 'credit_price', 'course_run', 'upgrade_deadline',)
model = Seat
widgets = {
'course_run': forms.HiddenInput(),
}
def save(self, commit=True, course_run=None, changed_by=None): # pylint: disable=arguments-differ
def save(self, commit=True):
# When seat is save make sure its prices and others fields updated accordingly.
seat = super(SeatForm, self).save(commit=False)
if seat.type in [Seat.HONOR, Seat.AUDIT]:
......@@ -416,21 +419,16 @@ class SeatForm(BaseForm):
seat.upgrade_deadline = None
self.reset_credit_to_default(seat)
if course_run:
seat.course_run = course_run
if changed_by:
seat.changed_by = changed_by
if commit:
seat.save()
return seat
def clean(self):
price = self.cleaned_data.get('price')
credit_price = self.cleaned_data.get('credit_price')
seat_type = self.cleaned_data.get('type')
cleaned_data = super().clean()
price = cleaned_data.get('price')
credit_price = cleaned_data.get('credit_price')
seat_type = cleaned_data.get('type')
if seat_type and seat_type != Seat.AUDIT and not price:
self.add_error('price', _('Please specify a price.'))
......@@ -438,7 +436,13 @@ class SeatForm(BaseForm):
if seat_type == Seat.CREDIT and not credit_price:
self.add_error('credit_price', _('Please specify a price for credit.'))
return self.cleaned_data
if not cleaned_data.get('upgrade_deadline'):
course_run = cleaned_data.get('course_run')
if course_run:
cleaned_data['upgrade_deadline'] = course_run.end - datetime.timedelta(days=10)
return cleaned_data
def reset_credit_to_default(self, seat):
seat.credit_provider = ''
......
......@@ -8,8 +8,9 @@ from course_discovery.apps.core.models import User
from course_discovery.apps.core.tests.factories import UserFactory
from course_discovery.apps.course_metadata.models import Person
from course_discovery.apps.course_metadata.tests.factories import OrganizationFactory, PersonFactory
from course_discovery.apps.publisher.forms import CourseForm, CourseRunForm, PublisherUserCreationForm
from course_discovery.apps.publisher.tests.factories import CourseFactory, OrganizationExtensionFactory
from course_discovery.apps.publisher.forms import CourseForm, CourseRunForm, PublisherUserCreationForm, SeatForm
from course_discovery.apps.publisher.models import Seat
from course_discovery.apps.publisher.tests.factories import CourseFactory, OrganizationExtensionFactory, SeatFactory
class UserModelChoiceFieldTests(TestCase):
......@@ -278,3 +279,18 @@ class PublisherCustomCourseFormTests(TestCase):
course_form.save()
course.refresh_from_db()
assert course.title == 'áçã'
class SeatFormTests(TestCase):
def test_upgrade_deadline(self):
seat = SeatFactory()
data = {
'price': 100,
'type': Seat.VERIFIED,
'course_run': seat.course_run.pk,
'upgrade_deadline': None,
}
form = SeatForm(instance=seat, data=data)
assert form.is_valid()
assert form.cleaned_data['upgrade_deadline'] == seat.course_run.end - timedelta(days=10)
......@@ -730,7 +730,7 @@ class CourseRunEditView(mixins.LoginRequiredMixin, mixins.PublisherPermissionMix
run_form = self.run_form(
request.POST, instance=course_run, is_project_coordinator=context.get('is_project_coordinator')
)
seat_form = self.seat_form(request.POST, instance=course_run.seats.first())
seat_form = self.seat_form(request.POST, instance=course_run.seats.first(), initial={'changed_by': user,})
if run_form.is_valid() and seat_form.is_valid():
try:
with transaction.atomic():
......@@ -741,7 +741,7 @@ class CourseRunEditView(mixins.LoginRequiredMixin, mixins.PublisherPermissionMix
# If price-type comes with request then save the seat object.
if request.POST.get('type'):
seat_form.save(changed_by=user, course_run=course_run)
seat_form.save()
# in case of any updating move the course-run state to draft except draft and published state.
immutable_states = [CourseRunStateChoices.Draft, CourseRunStateChoices.Published]
......
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