Files
2021-11-01 18:05:02 +05:00

72 lines
2.6 KiB
Python

"""
Enterprise support admin views.
"""
from django.contrib import messages
from django.urls import reverse
from django.utils.translation import gettext as _
from django.views.generic.edit import FormView
from enterprise.models import EnterpriseCourseEnrollment
from openedx.features.enterprise_support.admin.forms import CSVImportForm
from common.djangoapps.student.models import CourseEnrollment, CourseEnrollmentAttribute
class EnrollmentAttributeOverrideView(FormView):
"""
Learner Enrollment Attribute Override View.
"""
template_name = 'enterprise_support/admin/enrollment_attributes_override.html'
form_class = CSVImportForm
@staticmethod
def _get_admin_context(request):
admin_context = {'opts': EnterpriseCourseEnrollment._meta}
return admin_context
def get_success_url(self):
return reverse('admin:enterprise_override_attributes')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update(self._get_admin_context(self.request))
return context
def form_valid(self, form):
total_records = 0
error_line_numbers = []
csv_reader = form.cleaned_data['csv_file']
for index, record in enumerate(csv_reader):
total_records += 1
try:
course_enrollment = CourseEnrollment.objects.get(
user_id=record['lms_user_id'],
course_id=record['course_id'],
)
except CourseEnrollment.DoesNotExist:
error_line_numbers.append(str(index + 1))
else:
CourseEnrollmentAttribute.objects.update_or_create(
enrollment=course_enrollment,
namespace='salesforce',
name='opportunity_id',
defaults={
'value': record['opportunity_id'],
}
)
# if for some reason not a single enrollment updated than do not show success message.
if len(error_line_numbers) != total_records:
messages.success(self.request, 'Successfully updated learner enrollment opportunity ids.')
if error_line_numbers:
messages.error(
self.request,
_(
'Enrollment attributes were not updated for records at following line numbers '
'in csv because no enrollment found for these records: {error_line_numbers}'
).format(error_line_numbers=', '.join(error_line_numbers))
)
return super().form_valid(form)