diff --git a/physionet-django/training/forms.py b/physionet-django/training/forms.py new file mode 100644 index 0000000000..181f7509c5 --- /dev/null +++ b/physionet-django/training/forms.py @@ -0,0 +1,29 @@ +from django import forms +from django.db.models import Max, F + +from training.models import Course +from user.models import TrainingType +from user.enums import RequiredField + + +class CourseForm(forms.ModelForm): + + class Meta: + model = Course + fields = ('training_type', ) + labels = {'training_type': 'Training Type'} + + def __init__(self, *args, **kwargs): + training_id = kwargs.pop('training_type', None) + super().__init__(*args, **kwargs) + self.fields['training_type'].queryset = self.fields['training_type'].queryset.annotate( + max_version=Max('courses__version')).filter( + courses__version=F('max_version')).filter( + required_field=RequiredField.PLATFORM) + + self.training_type = TrainingType.objects.filter(id=training_id).first() + + self.fields['training_type'].initial = self.training_type + + if self.training_type: + self.fields['training_type'].help_text = self.training_type.description diff --git a/physionet-django/user/forms.py b/physionet-django/user/forms.py index c0e4f2c67d..a1f786d1b4 100644 --- a/physionet-django/user/forms.py +++ b/physionet-django/user/forms.py @@ -760,6 +760,8 @@ def __init__(self, user, *args, **kwargs): training_type_id = kwargs.pop('training_type', None) super().__init__(*args, **kwargs) + self.fields['training_type'].queryset = self.fields['training_type'].queryset.exclude( + required_field=RequiredField.PLATFORM) self.training_type = TrainingType.objects.filter(id=training_type_id).first() diff --git a/physionet-django/user/templates/user/edit_training.html b/physionet-django/user/templates/user/edit_training.html index 8791e0199f..3a7cc2ce55 100644 --- a/physionet-django/user/templates/user/edit_training.html +++ b/physionet-django/user/templates/user/edit_training.html @@ -27,6 +27,37 @@

{{ status|capfirst }}

{% endif %} {% endfor %} +
+

Complete training course on Platform

+ {% if take_course_form %} +
+ {% include "descriptive_inline_form_snippet.html" with form=take_course_form %} + + + +
+ {% else %} +

N/A

+ {% endif %} +

Submit evidence of a completed course

@@ -88,5 +119,8 @@ $(document).on('change', '#id_training_type', function() { $("#training").load(`{% url 'edit_training' %}?trainingType=${this.value} #training>`); }); + $(document).on('change', '#op_training_type', function() { + $("#on_platform_training").load(`{% url 'edit_training' %}?trainingType=${this.value} #on_platform_training>`); + }); {% endblock %} diff --git a/physionet-django/user/views.py b/physionet-django/user/views.py index 9303e9e066..aca8dfebd1 100644 --- a/physionet-django/user/views.py +++ b/physionet-django/user/views.py @@ -58,6 +58,7 @@ ) from user.userfiles import UserFiles from physionet.models import StaticPage +from training.forms import CourseForm logger = logging.getLogger(__name__) @@ -732,6 +733,8 @@ def edit_training(request): training_form = forms.TrainingForm( user=request.user, data=request.POST, files=request.FILES, training_type=request.POST.get('training_type') ) + take_course_form = CourseForm( + data=request.POST, training_type=request.POST.get('training_type'), auto_id="op_%s") if training_form.is_valid(): training_form.save() messages.success(request, 'The training has been submitted successfully.') @@ -744,8 +747,10 @@ def edit_training(request): training_type = request.GET.get('trainingType') if training_type: training_form = forms.TrainingForm(user=request.user, training_type=training_type) + take_course_form = CourseForm(training_type=training_type, auto_id="op_%s") else: training_form = forms.TrainingForm(user=request.user) + take_course_form = CourseForm(auto_id="op_%s") training = Training.objects.select_related('training_type').filter(user=request.user).order_by('-status') training_by_status = { @@ -759,6 +764,7 @@ def edit_training(request): request, 'user/edit_training.html', {'training_form': training_form, + 'take_course_form': take_course_form, 'training_by_status': training_by_status, 'ticket_system_url': ticket_system_url}, )