Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement PageTitleMixin #482

Merged
merged 8 commits into from Jul 16, 2021
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
142 changes: 68 additions & 74 deletions aurora/bag_transfer/accession/views.py
Expand Up @@ -11,43 +11,41 @@
from bag_transfer.mixins.authmixins import (AccessioningArchivistMixin,
ArchivistMixin)
from bag_transfer.mixins.formatmixins import JSONResponseMixin
from bag_transfer.mixins.viewmixins import PageTitleMixin
from bag_transfer.models import Archives, BAGLog, LanguageCode, RecordCreators
from bag_transfer.rights.models import RightsStatement
from dateutil import tz
from django.contrib import messages
from django.db.models import CharField, F
from django.db.models.functions import Concat
from django.shortcuts import redirect, render, reverse
from django.views.generic import DetailView, ListView, View
from django.views.generic import DetailView, ListView
from django_datatables_view.base_datatable_view import BaseDatatableView


class AccessionView(ArchivistMixin, JSONResponseMixin, ListView):
class AccessionView(PageTitleMixin, ArchivistMixin, JSONResponseMixin, ListView):
template_name = "accession/main.html"
page_title = "Accessioning Queue"
model = Accession

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["uploads"] = Archives.objects.filter(process_status=Archives.ACCEPTED).annotate(
transfer_group=Concat(
"organization",
"metadata__record_type",
GroupConcat("metadata__record_creators"),
output_field=CharField(),
)
).order_by("transfer_group")
context["accessions"] = Accession.objects.all()
context["deliver"] = True if settings.DELIVERY_URL else False
return context

def get(self, request, *args, **kwargs):
if request.is_ajax():
return self.handle_ajax_request(request)
return render(
request,
self.template_name,
{
"uploads": Archives.objects.filter(process_status=Archives.ACCEPTED)
.annotate(
transfer_group=Concat(
"organization",
"metadata__record_type",
GroupConcat("metadata__record_creators"),
output_field=CharField(),
)
)
.order_by("transfer_group"),
"accessions": Accession.objects.all(),
"meta_page_title": "Accessioning Queue",
"deliver": True if settings.DELIVERY_URL else False,
},
)
return super().get(self, request, *args, **kwargs)

def handle_ajax_request(self, request):
"""Handles JavaScript AJAX requests."""
Expand Down Expand Up @@ -79,13 +77,17 @@ def handle_ajax_request(self, request):
return self.render_to_json_response(rdata)


class AccessionDetailView(AccessioningArchivistMixin, DetailView):
class AccessionDetailView(PageTitleMixin, AccessioningArchivistMixin, DetailView):
template_name = "accession/detail.html"
model = Accession

def get_page_title(self, context):
return context["object"].title


class AccessionCreateView(AccessioningArchivistMixin, JSONResponseMixin, View):
class AccessionCreateView(PageTitleMixin, AccessioningArchivistMixin, JSONResponseMixin, ListView):
template_name = "accession/create.html"
page_title = "Create Accession Record"
model = Accession
form_class = AccessionForm

Expand Down Expand Up @@ -139,68 +141,60 @@ def post(self, request, *args, **kwargs):
request,
self.template_name,
{
"meta_page_title": "Create Accession Record",
"page_title": "Create Accession Record",
"form": form,
"creators_formset": creators_formset,
"rights_statements": rights_statements,
"transfers": transfers_list,
},
)

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
id_list = list(map(int, self.request.GET.get("transfers").split(",")))
transfers_list = Archives.objects.filter(pk__in=id_list)
rights_statements = (
RightsStatement.objects.filter(archive__in=id_list)
.annotate(rights_group=F("rights_basis"))
.order_by("rights_group"))
organization = transfers_list[0].organization
creators_list = list(set([c for t in transfers_list for c in t.records_creators]))
notes, dates, descriptions_list, languages_list, extent_files, extent_size, record_type = self.grouped_transfer_data(transfers_list)
notes.update(self.rights_statement_notes(rights_statements))
language = self.parse_language(languages_list)
title = self.parse_title(
organization,
record_type,
", ".join([creator.name for creator in creators_list]))
context["form"] = AccessionForm(
initial={
"title": title,
"start_date": sorted(dates.get("start", []))[0],
"end_date": sorted(dates.get("end", []))[-1],
"description": " ".join(set(descriptions_list)),
"extent_files": extent_files,
"extent_size": extent_size,
"access_restrictions": " ".join(
set(notes.get("other", []) + notes.get("license", []) + notes.get("statute", []))
),
"use_restrictions": " ".join(set(notes.get("copyright", []))),
"acquisition_type": organization.acquisition_type,
"appraisal_note": " ".join(set(notes.get("appraisal", []))),
"organization": organization,
"language": language,
"creators": creators_list,
}
)
context["creators_formset"] = CreatorsFormSet(queryset=RecordCreators.objects.filter(name__in=creators_list))
context["transfers"] = transfers_list
context["rights_statements"] = rights_statements
return context

def get(self, request, *args, **kwargs):
"""Performs initial grouping of transfer data."""
if request.is_ajax():
return self.handle_ajax_request(request)
else:
id_list = list(map(int, request.GET.get("transfers").split(",")))
transfers_list = Archives.objects.filter(pk__in=id_list)
rights_statements = (
RightsStatement.objects.filter(archive__in=id_list)
.annotate(rights_group=F("rights_basis"))
.order_by("rights_group"))
organization = transfers_list[0].organization
creators_list = list(set([c for t in transfers_list for c in t.records_creators]))
notes, dates, descriptions_list, languages_list, extent_files, extent_size, record_type = self.grouped_transfer_data(transfers_list)
notes.update(self.rights_statement_notes(rights_statements))
language = self.parse_language(languages_list)
title = self.parse_title(
organization,
record_type,
", ".join([creator.name for creator in creators_list]))

form = AccessionForm(
initial={
"title": title,
"start_date": sorted(dates.get("start", []))[0],
"end_date": sorted(dates.get("end", []))[-1],
"description": " ".join(set(descriptions_list)),
"extent_files": extent_files,
"extent_size": extent_size,
"access_restrictions": " ".join(
set(notes.get("other", []) + notes.get("license", []) + notes.get("statute", []))
),
"use_restrictions": " ".join(set(notes.get("copyright", []))),
"acquisition_type": organization.acquisition_type,
"appraisal_note": " ".join(set(notes.get("appraisal", []))),
"organization": organization,
"language": language,
"creators": creators_list,
}
)
creators_formset = CreatorsFormSet(
queryset=RecordCreators.objects.filter(name__in=creators_list)
)
return render(
request,
self.template_name,
{
"form": form,
"creators_formset": creators_formset,
"meta_page_title": "Create Accession Record",
"transfers": transfers_list,
"rights_statements": rights_statements,
},
)
return super().get(self, request, *args, **kwargs)

def grouped_transfer_data(self, transfers_list):
"""Returns grouped data from all transfers in an accession."""
Expand Down
27 changes: 11 additions & 16 deletions aurora/bag_transfer/appraise/views.py
Expand Up @@ -2,15 +2,17 @@
from bag_transfer.lib.mailer import Mailer
from bag_transfer.mixins.authmixins import ArchivistMixin
from bag_transfer.mixins.formatmixins import JSONResponseMixin
from bag_transfer.mixins.viewmixins import PageTitleMixin
from bag_transfer.models import Archives, BAGLog
from dateutil import tz
from django.shortcuts import render
from django.views import View
from django.views.generic import ListView
from django_datatables_view.base_datatable_view import BaseDatatableView


class AppraiseView(ArchivistMixin, JSONResponseMixin, View):
class AppraiseView(PageTitleMixin, ArchivistMixin, JSONResponseMixin, ListView):
template_name = "appraise/main.html"
page_title = "Appraisal Queue"
model = Archives

def handle_note_request(self, request, upload, rdata):
if request.GET.get("req_type") == "edit":
Expand All @@ -35,6 +37,11 @@ def handle_appraisal_request(self, request, upload):
email.setup_message("TRANS_REJECT", upload)
email.send()

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["uploads_count"] = len(Archives.objects.filter(process_status=Archives.VALIDATED).order_by("created_time"))
return context

def get(self, request, *args, **kwargs):
if request.is_ajax():
rdata = {}
Expand Down Expand Up @@ -62,19 +69,7 @@ def get(self, request, *args, **kwargs):
rdata["success"] = 1

return self.render_to_json_response(rdata)

return render(
request,
self.template_name,
{
"meta_page_title": "Appraisal Queue",
"uploads_count": len(
Archives.objects.filter(process_status=Archives.VALIDATED).order_by(
"created_time"
)
),
},
)
return super().get(self, request, *args, **kwargs)


class AppraiseDataTableView(ArchivistMixin, BaseDatatableView):
Expand Down
13 changes: 13 additions & 0 deletions aurora/bag_transfer/mixins/viewmixins.py
@@ -0,0 +1,13 @@
class PageTitleMixin(object):
"""Sets the page_title key in view data.
On views where this mixin is added, page titles can be set either by providing
a page_title attribute or a get_page_title method.
"""

def get_page_title(self, context):
return getattr(self, "page_title", "Default Page Title")

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["page_title"] = self.get_page_title(context)
return context