Skip to content

Commit

Permalink
Merge pull request #2309 from IFRCGo/fix/ops-learning-issues
Browse files Browse the repository at this point in the history
Action for regenerating Operational learning summary
  • Loading branch information
szabozoltan69 authored Nov 28, 2024
2 parents 4ce07b9 + 4df0af8 commit 5a1af0e
Show file tree
Hide file tree
Showing 7 changed files with 183 additions and 70 deletions.
1 change: 1 addition & 0 deletions api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -1561,6 +1561,7 @@ class Meta:
"id",
"code",
"event",
"start_date",
)


Expand Down
25 changes: 23 additions & 2 deletions per/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@

from django.contrib import admin
from django.http import HttpResponse
from django.utils.translation import get_language as django_get_language
from reversion_compare.admin import CompareVersionAdmin

import per.models as models
from api.models import Appeal
from lang.admin import TranslationAdmin, TranslationInlineModelAdmin
from per.admin_classes import GotoNextModelAdmin, RegionRestrictedAdmin
from per.task import generate_summary


class FormDataInline(admin.TabularInline, TranslationInlineModelAdmin):
Expand Down Expand Up @@ -186,7 +188,7 @@ class OpsLearningAdmin(GotoNextModelAdmin):
ls = ("organization", "organization_validated", "sector", "sector_validated", "per_component", "per_component_validated")
list_filter = ("is_validated", "appeal_code__atype") + ls
autocomplete_fields = ("appeal_code",) + ls
search_fields = ("learning", "learning_validated")
search_fields = ("learning", "learning_validated", "appeal_code__aid", "appeal_code__code")
list_display = ("learning", "appeal_code", "is_validated", "modified_at")
change_form_template = "admin/opslearning_change_form.html"
actions = ["export_selected_records"]
Expand Down Expand Up @@ -307,8 +309,9 @@ def break_to_rows(many2many, many2many_validated, is_validated, idx):

class OpsLearningCacheResponseAdmin(TranslationAdmin):
search_fields = (
"response",
"id",
"used_ops_learning__appeal_code__aid",
"used_ops_learning__appeal_code__code",
)
list_display = (
"__str__",
Expand All @@ -317,13 +320,31 @@ class OpsLearningCacheResponseAdmin(TranslationAdmin):
"insights3_title",
"status",
)
list_filter = ("status",)
used_ops_learning_in = "used_ops_learning_in"
autocomplete_fields = ("used_ops_learning",)
exclude = (
"export_status",
"exported_file",
"exported_at",
)
actions = ["regenerate_summary"]

def regenerate_summary(self, request, queryset):
"""
Regenerate the summary of the selected OpsLearningCacheResponse objects.
"""
requested_lang = django_get_language()
for obj in queryset:
generate_summary.delay(
ops_learning_summary_id=obj.id,
filter_data=obj.used_filters,
translation_lazy=requested_lang == "en",
# NOTE: Regenerating the summary will overwrite the cache
overwrite_prompt_cache=True,
)

regenerate_summary.short_description = "Regenerate Summary for selected Ops Learning Cache Response"


class OpsLearningPromptResponseCacheAdmin(admin.ModelAdmin):
Expand Down
38 changes: 37 additions & 1 deletion per/drf_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from django.db.models import Prefetch, Q
from django.http import HttpResponse
from django.shortcuts import get_object_or_404
from django.utils.translation import get_language as django_get_language
from django_filters import rest_framework as filters
from django_filters.widgets import CSVWidget
from drf_spectacular.utils import extend_schema
Expand All @@ -16,6 +17,7 @@
from rest_framework.authentication import TokenAuthentication
from rest_framework.decorators import action
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.settings import api_settings

from api.models import Country
Expand Down Expand Up @@ -78,6 +80,7 @@
NiceDocumentSerializer,
OpsLearningCSVSerializer,
OpsLearningInSerializer,
OpsLearningOrganizationTypeSerializer,
OpsLearningSerializer,
OpsLearningSummarySerializer,
PerAssessmentSerializer,
Expand Down Expand Up @@ -706,7 +709,9 @@ class Meta:
"is_validated": ("exact",),
"learning": ("exact", "icontains"),
"learning_validated": ("exact", "icontains"),
"type_validated": ("exact", "in"),
"organization_validated": ("exact",),
"organization_validated__title": ("exact", "in"),
"appeal_code": ("exact", "in"),
"appeal_code__code": ("exact", "icontains", "in"),
"appeal_code__num_beneficiaries": ("exact", "gt", "gte", "lt", "lte"),
Expand Down Expand Up @@ -863,6 +868,30 @@ def get_renderer_context(self):

return context

@extend_schema(
request=None,
filters=False,
responses=OpsLearningOrganizationTypeSerializer(many=True),
)
@action(
detail=False,
methods=["GET"],
permission_classes=[DenyGuestUserMutationPermission, OpsLearningPermission],
serializer_class=OpsLearningOrganizationTypeSerializer,
url_path="organization-type",
)
def organization(self, request):
"""
Get the Organization Types
"""
queryset = OrganizationTypes.objects.exclude(is_deprecated=True)
serializer = OpsLearningOrganizationTypeSerializer(queryset, many=True)
page = self.paginate_queryset(queryset)
if page is not None:
serializer = OpsLearningOrganizationTypeSerializer(page, many=True)
return self.get_paginated_response(serializer.data)
return Response(serializer.data)

@extend_schema(
request=None,
filters=True,
Expand All @@ -882,7 +911,14 @@ def summary(self, request):
if ops_learning_summary_instance.status == OpsLearningCacheResponse.Status.SUCCESS:
return response.Response(OpsLearningSummarySerializer(ops_learning_summary_instance).data)

transaction.on_commit(lambda: generate_summary.delay(ops_learning_summary_instance.id, filter_data))
requested_lang = django_get_language()
transaction.on_commit(
lambda: generate_summary.delay(
ops_learning_summary_id=ops_learning_summary_instance.id,
filter_data=filter_data,
translation_lazy=requested_lang == "en",
)
)
return response.Response(OpsLearningSummarySerializer(ops_learning_summary_instance).data)


Expand Down
1 change: 1 addition & 0 deletions per/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@
"overviewassessmentmethods": models.Overview.AssessmentMethod,
"component_status": models.FormComponent.FormComponentStatus,
"supported_by_organization_type": models.PerWorkPlanComponent.SupportedByOrganizationType,
"learning_type": models.LearningType,
}
Loading

0 comments on commit 5a1af0e

Please sign in to comment.