django_program.manage.views_letters

Visa & Invitation Letter management views for the manage app.

Provides the staff-facing interface for reviewing, approving, generating, and sending invitation letters for conference attendees who need visa support documentation.

Classes

LetterRequestBulkGenerateView

Bulk-generate invitation letter PDFs for all approved requests.

LetterRequestDownloadView

Download the generated PDF for a letter request.

LetterRequestGenerateView

Generate an invitation letter PDF for an approved request.

LetterRequestListView

Staff list of all letter requests for a conference.

LetterRequestReviewView

Review a single letter request with status transition actions.

LetterRequestSendView

Send a generated invitation letter to the requester.

class django_program.manage.views_letters.LetterRequestListView[source]

Bases: ConferencePermissionMixin, ListView

Staff list of all letter requests for a conference.

Supports filtering by status via the ?status= query parameter and provides aggregate status counts for the sidebar/header summary.

template_name = 'django_program/manage/letter_request_list.html'
required_permission: str = 'view_registration'
context_object_name = 'letter_requests'
paginate_by = 50
get_queryset()[source]

Return letter requests for the current conference, optionally filtered by status.

Return type:

QuerySet

Returns:

Queryset of letter requests ordered by creation date descending.

get_context_data(**kwargs)[source]

Add status filter state and aggregate counts to the template context.

Parameters:

**kwargs (object) – Additional context data.

Return type:

dict[str, object]

Returns:

Template context with status counts, active filter, and navigation state.

class django_program.manage.views_letters.LetterRequestReviewView[source]

Bases: ConferencePermissionMixin, DetailView

Review a single letter request with status transition actions.

GET renders the detail page with available actions. POST handles status transitions: approve, reject (with reason), or mark as under review.

template_name = 'django_program/manage/letter_request_review.html'
required_permission: str = 'change_registration'
context_object_name = 'letter_request'
get_queryset()[source]

Scope to the current conference with related objects.

Return type:

QuerySet

Returns:

Queryset of letter requests for the active conference.

get_context_data(**kwargs)[source]

Add navigation state and available actions to context.

Parameters:

**kwargs (object) – Additional context data.

Return type:

dict[str, object]

Returns:

Template context with letter request detail and action flags.

post(request, **kwargs)[source]

Handle status transition actions on a letter request.

Supported actions via the action POST parameter: - under_review: Move to under-review status. - approve: Approve the request and record reviewer. - reject: Reject the request with a reason and record reviewer.

Parameters:
  • request (HttpRequest) – The incoming HTTP request.

  • **kwargs (str) – URL keyword arguments including pk.

Return type:

HttpResponse

Returns:

A redirect back to the review page.

class django_program.manage.views_letters.LetterRequestGenerateView[source]

Bases: ConferencePermissionMixin, View

Generate an invitation letter PDF for an approved request.

POST-only. Calls the letter generation service and redirects back to the review page.

required_permission: str = 'change_registration'
post(request, **kwargs)[source]

Generate the PDF for an approved letter request.

Parameters:
  • request (HttpRequest) – The incoming HTTP request.

  • **kwargs (str) – URL keyword arguments including pk.

Return type:

HttpResponse

Returns:

A redirect to the letter review page.

class django_program.manage.views_letters.LetterRequestBulkGenerateView[source]

Bases: ConferencePermissionMixin, View

Bulk-generate invitation letter PDFs for all approved requests.

POST-only. Generates PDFs for every letter request in the conference that has APPROVED status, then redirects to the list view with a summary message.

required_permission: str = 'change_registration'
post(request, **kwargs)[source]

Generate PDFs for all approved letter requests in the conference.

Parameters:
  • request (HttpRequest) – The incoming HTTP request.

  • **kwargs (str) – URL keyword arguments.

Return type:

HttpResponse

Returns:

A redirect to the letter request list.

class django_program.manage.views_letters.LetterRequestSendView[source]

Bases: ConferencePermissionMixin, View

Send a generated invitation letter to the requester.

POST-only. Calls the letter sending service, updates the sent timestamp, and redirects back to the review page.

required_permission: str = 'change_registration'
post(request, **kwargs)[source]

Send the invitation letter for a generated request.

Parameters:
  • request (HttpRequest) – The incoming HTTP request.

  • **kwargs (str) – URL keyword arguments including pk.

Return type:

HttpResponse

Returns:

A redirect to the letter review page.

class django_program.manage.views_letters.LetterRequestDownloadView[source]

Bases: ConferencePermissionMixin, View

Download the generated PDF for a letter request.

GET-only. Returns the PDF file as an attachment response. Only works if a generated PDF exists on the letter request. Requires write-level access because the PDF contains passport PII.

required_permission: str = 'change_registration'
get(request, **kwargs)[source]

Return the generated PDF as a downloadable attachment.

Parameters:
  • request (HttpRequest) – The incoming HTTP request.

  • **kwargs (str) – URL keyword arguments including pk.

Return type:

HttpResponse

Returns:

An HTTP response with the PDF content.