|
6 | 6 | from django.contrib import messages |
7 | 7 | from django.contrib.auth.mixins import PermissionRequiredMixin |
8 | 8 | from django.core.exceptions import PermissionDenied, ValidationError |
9 | | -from django.db.models import F, Case, When, IntegerField |
| 9 | +from django.db.models import F, Case, When, IntegerField, Prefetch |
10 | 10 | from django.http import HttpResponse |
11 | 11 | from django.shortcuts import redirect, reverse, get_object_or_404 |
12 | 12 | from django.urls import NoReverseMatch |
@@ -487,42 +487,50 @@ class EmbargoReportView(PermissionRequiredMixin, TemplateView): |
487 | 487 | - active embargoes that are past their end date |
488 | 488 | - upcoming active embargoes |
489 | 489 | """ |
| 490 | + |
490 | 491 | template_name = 'nodes/embargo_report.html' |
491 | 492 | permission_required = 'osf.view_registration' |
492 | 493 | raise_exception = True |
493 | 494 |
|
494 | | - def get_context_data(self, **kwargs): |
495 | | - context = super().get_context_data(**kwargs) |
496 | | - pending_embargoes = Embargo.objects.pending_embargoes().select_related('initiated_by') |
497 | | - active_embargoes = Embargo.objects.active_embargoes().select_related('initiated_by') |
498 | | - |
499 | | - pending_overdue_embargoes = [ |
500 | | - embargo for embargo in pending_embargoes |
501 | | - if embargo.should_be_embargoed |
502 | | - ] |
503 | | - |
504 | | - overdue_embargoes = [ |
505 | | - embargo for embargo in active_embargoes |
506 | | - if embargo.should_be_completed |
507 | | - ] |
508 | | - |
509 | | - upcoming_queryset = active_embargoes.filter( |
510 | | - end_date__gte=timezone.now(), |
511 | | - ).order_by('end_date') |
| 495 | + def _embargo_report_queryset(self, queryset): |
| 496 | + return queryset.select_related('initiated_by').prefetch_related( |
| 497 | + Prefetch( |
| 498 | + 'registrations', |
| 499 | + queryset=Registration.objects.filter(is_deleted=False).prefetch_related( |
| 500 | + 'guids', |
| 501 | + ).only('id', 'title', 'is_public', 'embargo_id'), |
| 502 | + ), |
| 503 | + ) |
512 | 504 |
|
513 | | - page_number = self.request.GET.get('page') or 1 |
514 | | - paginator = Paginator(upcoming_queryset, 10) |
| 505 | + def paginate_embargo_report(self, request, queryset, page_param): |
| 506 | + paginator = Paginator(queryset, settings.EMBARGO_REPORT_PAGE_SIZE) |
| 507 | + page_number = request.GET.get(page_param) or 1 |
515 | 508 | try: |
516 | | - upcoming_page = paginator.page(page_number) |
| 509 | + return paginator.page(page_number) |
517 | 510 | except InvalidPage: |
518 | | - upcoming_page = paginator.page(1) |
| 511 | + return paginator.page(1) |
| 512 | + |
| 513 | + def get_context_data(self, **kwargs): |
| 514 | + context = super().get_context_data(**kwargs) |
| 515 | + request = self.request |
519 | 516 |
|
520 | 517 | context.update({ |
521 | 518 | 'now': timezone.now(), |
522 | | - 'pending_overdue_embargoes': pending_overdue_embargoes, |
523 | | - 'overdue_embargoes': overdue_embargoes, |
524 | | - 'upcoming_embargoes': upcoming_page.object_list, |
525 | | - 'upcoming_page': upcoming_page, |
| 519 | + 'upcoming_page': self.paginate_embargo_report( |
| 520 | + request, |
| 521 | + self._embargo_report_queryset(Embargo.objects.active_upcoming()), |
| 522 | + 'upcoming_page', |
| 523 | + ), |
| 524 | + 'pending_page': self.paginate_embargo_report( |
| 525 | + request, |
| 526 | + self._embargo_report_queryset(Embargo.objects.pending_past_activation_window()), |
| 527 | + 'pending_page', |
| 528 | + ), |
| 529 | + 'overdue_page': self.paginate_embargo_report( |
| 530 | + request, |
| 531 | + self._embargo_report_queryset(Embargo.objects.active_past_end_date()), |
| 532 | + 'overdue_page', |
| 533 | + ), |
526 | 534 | }) |
527 | 535 | return context |
528 | 536 |
|
|
0 commit comments