From cd54e8b27560a9226a0b1fb1721582a7e2dece4d Mon Sep 17 00:00:00 2001 From: Alejandro Cardenas Date: Wed, 30 Nov 2022 12:22:46 -0500 Subject: [PATCH] feat: add django admin page for survey report (#31323) * feat: add django admin page for survey report * fix: solve quality test errors * feat: remove delete buttons and delete actions * docs: add help_text to fields * test: fix quality test issues * docs: remove model form and add help_text in model * feat: add migration to apply field changes --- openedx/features/survey_report/admin.py | 69 +++++++++++++++++++ .../migrations/0002_auto_20221130_1533.py | 44 ++++++++++++ openedx/features/survey_report/models.py | 12 ++-- 3 files changed, 119 insertions(+), 6 deletions(-) create mode 100644 openedx/features/survey_report/admin.py create mode 100644 openedx/features/survey_report/migrations/0002_auto_20221130_1533.py diff --git a/openedx/features/survey_report/admin.py b/openedx/features/survey_report/admin.py new file mode 100644 index 0000000000..cac84681ab --- /dev/null +++ b/openedx/features/survey_report/admin.py @@ -0,0 +1,69 @@ +""" +Django Admin page for SurveyReport. +""" + + +from django.contrib import admin +from .models import SurveyReport + + +class SurveyReportAdmin(admin.ModelAdmin): + """ + Admin to manage survey reports. + """ + readonly_fields = ( + 'courses_offered', 'learners', 'registered_learners', + 'enrollments', 'generated_certificates', 'extra_data', + 'created_at' + ) + + list_display = ( + 'id', 'summary', 'created_at' + ) + + def summary(self, obj) -> str: + """ + Show a summary of the survey report. + info: + - Courses: Total number of active unique courses. + - Learners: Recently active users with login in some weeks. + - Enrollments: Total number of active enrollments in the platform. + """ + return f"Total Courses: {obj.courses_offered}," \ + f"Total Learners: {obj.learners}, Total Enrollments: {obj.enrollments}" + + def has_add_permission(self, request): + """ + Removes the "add" button from admin. + """ + return False + + def has_delete_permission(self, request, obj=None): + """ + Removes the "delete" options from admin. + """ + return False + + def changeform_view(self, request, object_id=None, form_url='', extra_context=None): + """ + Removes the "save" buttons from admin change view. + """ + extra_context = extra_context or {} + + extra_context['show_save'] = False + extra_context['show_save_and_continue'] = False + extra_context['show_save_and_add_another'] = False + + return super().changeform_view(request, object_id, form_url, extra_context) + + def get_actions(self, request): + """ + Removes the default bulk delete option provided by Django, + it doesn't do what we need for this model. + """ + actions = super().get_actions(request) + if 'delete_selected' in actions: + del actions['delete_selected'] + return actions + +admin.site.register(SurveyReport, SurveyReportAdmin) diff --git a/openedx/features/survey_report/migrations/0002_auto_20221130_1533.py b/openedx/features/survey_report/migrations/0002_auto_20221130_1533.py new file mode 100644 index 0000000000..ebb79a08fd --- /dev/null +++ b/openedx/features/survey_report/migrations/0002_auto_20221130_1533.py @@ -0,0 +1,44 @@ +# Generated by Django 3.2.16 on 2022-11-30 15:33 + +from django.db import migrations, models +import jsonfield.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('survey_report', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='surveyreport', + name='courses_offered', + field=models.BigIntegerField(help_text='Total number of active unique courses.'), + ), + migrations.AlterField( + model_name='surveyreport', + name='enrollments', + field=models.BigIntegerField(help_text='Total number of active enrollments in the platform.'), + ), + migrations.AlterField( + model_name='surveyreport', + name='extra_data', + field=jsonfield.fields.JSONField(blank=True, default=dict, help_text='Extra information that will be saved in the report, E.g: site_name, openedx-release.'), + ), + migrations.AlterField( + model_name='surveyreport', + name='generated_certificates', + field=models.BigIntegerField(help_text='Total number of generated certificates.'), + ), + migrations.AlterField( + model_name='surveyreport', + name='learners', + field=models.BigIntegerField(help_text='Total number of recently active users with login in some weeks.'), + ), + migrations.AlterField( + model_name='surveyreport', + name='registered_learners', + field=models.BigIntegerField(help_text='Total number of users ever registered in the platform.'), + ), + ] diff --git a/openedx/features/survey_report/models.py b/openedx/features/survey_report/models.py index cb3353ac2f..3e34b75a80 100644 --- a/openedx/features/survey_report/models.py +++ b/openedx/features/survey_report/models.py @@ -20,15 +20,15 @@ class SurveyReport(models.Model): - generated_certificates: Total number of generated certificates. - extra_data: Extra information that will be saved in the report, E.g: site_name, openedx-release. """ - courses_offered = models.BigIntegerField() - learners = models.BigIntegerField() - registered_learners = models.BigIntegerField() - enrollments = models.BigIntegerField() - generated_certificates = models.BigIntegerField() + courses_offered = models.BigIntegerField(help_text="Total number of active unique courses.") + learners = models.BigIntegerField(help_text="Total number of recently active users with login in some weeks.") + registered_learners = models.BigIntegerField(help_text="Total number of users ever registered in the platform.") + enrollments = models.BigIntegerField(help_text="Total number of active enrollments in the platform.") + generated_certificates = models.BigIntegerField(help_text="Total number of generated certificates.") extra_data = JSONField( blank=True, default=dict, - help_text="Extra information for instance data", + help_text="Extra information that will be saved in the report, E.g: site_name, openedx-release.", ) created_at = models.DateTimeField(auto_now=True)