Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions openedx/features/survey_report/application.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
"""
Contains the logic to manage survey report model.
"""

from openedx.features.survey_report.queries import get_unique_courses_offered

def generate_report() -> None:
""" Generate a report with relevant data."""
courses_offered=get_unique_courses_offered()
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
"""
CLI command to generate survey report.
"""

from django.core.management.base import BaseCommand, CommandError
from openedx.features.survey_report.application import generate_report

class Command(BaseCommand):
"""
Management command to generate a new survey report with
non-sensitive data.
"""

help = """
This command will create a new survey report using some
models to get the total number oof courses offered, currently active learners,
learners ever registered, and generated certificates.
"""

def handle(self, *args, **options):
try:
generate_report()
except Exception as error:
raise CommandError('An error has ocurred while report was generating.') from error

self.stdout.write(self.style.SUCCESS('Survey report has been generated successfully.'))
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
"""
Test for generate_report command.
"""

from io import StringIO
from django.core.management import call_command
from django.test import TestCase

class GenerateReportTest(TestCase):
def test_command_output(self):
out = StringIO()
call_command('generate_report', stdout=out)
self.assertIn('Survey report has been generated successfully.', out.getvalue())
27 changes: 27 additions & 0 deletions openedx/features/survey_report/queries.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
"""
Queries to get data from database.
"""

from datetime import datetime
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from common.djangoapps.student.models import CourseEnrollment


from django.db.models import Q, Subquery, OuterRef, Count

def get_unique_courses_offered() -> int:
"""
Get total number of unique courses offered.
"""
return CourseOverview.objects.annotate(
count = Subquery(
CourseEnrollment.objects
.filter(course_id=OuterRef('id'))
.values('course_id')
.annotate(count=Count('course_id'))
.values('count')
))\
.filter(count__gt=5)\
.filter(start__lt=datetime.now())\
.filter(Q(end__isnull=True)|Q(end__gt=datetime.now()))\
.count()