membershipworks: Add waiver and Instructor/Vendor reports
This commit is contained in:
parent
26514e60fb
commit
83da93b712
@ -41,6 +41,7 @@ INSTALLED_APPS = [
|
|||||||
"django_tables2",
|
"django_tables2",
|
||||||
"django_filters",
|
"django_filters",
|
||||||
"django_db_views",
|
"django_db_views",
|
||||||
|
"django_mysql",
|
||||||
"tasks.apps.TasksConfig",
|
"tasks.apps.TasksConfig",
|
||||||
"rentals.apps.RentalsConfig",
|
"rentals.apps.RentalsConfig",
|
||||||
"membershipworks.apps.MembershipworksConfig",
|
"membershipworks.apps.MembershipworksConfig",
|
||||||
|
@ -13,7 +13,18 @@ class PaperworkDashboardFragment(dashboard.LinksCardDashboardFragment):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def links(self) -> list[Link]:
|
def links(self) -> list[Link]:
|
||||||
links = []
|
links = [
|
||||||
|
Link(
|
||||||
|
"Waivers",
|
||||||
|
reverse("paperwork:waivers-report"),
|
||||||
|
permission="paperwork.view_waiver",
|
||||||
|
),
|
||||||
|
Link(
|
||||||
|
"Instructors and Vendors",
|
||||||
|
reverse("paperwork:instructors-and-vendor-report"),
|
||||||
|
permission="paperwork.view_instructororvendor",
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
member = Member.from_user(self.request.user)
|
member = Member.from_user(self.request.user)
|
||||||
if member is not None:
|
if member is not None:
|
||||||
|
@ -0,0 +1,12 @@
|
|||||||
|
{% extends "base.dj.html" %}
|
||||||
|
|
||||||
|
{% load render_table from django_tables2 %}
|
||||||
|
|
||||||
|
{% block title %}Instructors and Vendors{% endblock %}
|
||||||
|
{% block admin_link %}
|
||||||
|
{% url 'admin:paperwork_instructororvendor_changelist' %}
|
||||||
|
{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
{% include "cmsmanage/components/download_table.dj.html" %}
|
||||||
|
{% render_table table %}
|
||||||
|
{% endblock %}
|
12
paperwork/templates/paperwork/waiver_report.dj.html
Normal file
12
paperwork/templates/paperwork/waiver_report.dj.html
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{% extends "base.dj.html" %}
|
||||||
|
|
||||||
|
{% load render_table from django_tables2 %}
|
||||||
|
|
||||||
|
{% block title %}Waiver Report{% endblock %}
|
||||||
|
{% block admin_link %}
|
||||||
|
{% url 'admin:paperwork_waiver_changelist' %}
|
||||||
|
{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
{% include "cmsmanage/components/download_table.dj.html" %}
|
||||||
|
{% render_table table %}
|
||||||
|
{% endblock %}
|
@ -25,4 +25,14 @@ urlpatterns = [
|
|||||||
autocomplete_views.CertificationVersionAutocomplete.as_view(),
|
autocomplete_views.CertificationVersionAutocomplete.as_view(),
|
||||||
name="certification_version_autocomplete",
|
name="certification_version_autocomplete",
|
||||||
),
|
),
|
||||||
|
path(
|
||||||
|
"waivers",
|
||||||
|
views.WaiverReport.as_view(),
|
||||||
|
name="waivers-report",
|
||||||
|
),
|
||||||
|
path(
|
||||||
|
"instructors-and-vendors",
|
||||||
|
views.InstructorOrVendorReport.as_view(),
|
||||||
|
name="instructors-and-vendor-report",
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
@ -1,16 +1,21 @@
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib import staticfiles
|
from django.contrib import staticfiles
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
|
from django.contrib.auth.mixins import PermissionRequiredMixin
|
||||||
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotFound
|
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotFound
|
||||||
from django.shortcuts import get_object_or_404, render
|
from django.shortcuts import get_object_or_404, render
|
||||||
from django.views.generic import ListView
|
from django.views.generic import ListView
|
||||||
|
|
||||||
|
import django_tables2 as tables
|
||||||
import requests
|
import requests
|
||||||
import weasyprint
|
import weasyprint
|
||||||
|
from django_mysql.models import GroupConcat
|
||||||
|
from django_tables2 import SingleTableMixin
|
||||||
|
from django_tables2.export.views import ExportMixin
|
||||||
|
|
||||||
from membershipworks.models import Member
|
from membershipworks.models import Member
|
||||||
|
|
||||||
from .models import Certification, Department
|
from .models import Certification, Department, InstructorOrVendor, Waiver
|
||||||
|
|
||||||
WIKI_URL = settings.WIKI_URL
|
WIKI_URL = settings.WIKI_URL
|
||||||
|
|
||||||
@ -98,3 +103,86 @@ def certification_pdf(request, cert_name):
|
|||||||
"Content-Disposition": f'inline; filename="{filename}"',
|
"Content-Disposition": f'inline; filename="{filename}"',
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class WarnEmptyColumn(tables.Column):
|
||||||
|
attrs = {
|
||||||
|
"td": {
|
||||||
|
"class": lambda value, bound_column: "table-danger"
|
||||||
|
if value == bound_column.default
|
||||||
|
else ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class WaiverReportTable(tables.Table):
|
||||||
|
emergency_contact_name = WarnEmptyColumn()
|
||||||
|
emergency_contact_number = WarnEmptyColumn()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Waiver
|
||||||
|
fields = [
|
||||||
|
"name",
|
||||||
|
"date",
|
||||||
|
"emergency_contact_name",
|
||||||
|
"emergency_contact_number",
|
||||||
|
"waiver_version",
|
||||||
|
"guardian_name",
|
||||||
|
"guardian_relation",
|
||||||
|
"guardian_date",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class WaiverReport(ExportMixin, SingleTableMixin, PermissionRequiredMixin, ListView):
|
||||||
|
permission_required = "paperwork.view_waiver"
|
||||||
|
template_name = "paperwork/waiver_report.dj.html"
|
||||||
|
queryset = Waiver.objects.order_by("name").all()
|
||||||
|
table_class = WaiverReportTable
|
||||||
|
table_pagination = False
|
||||||
|
|
||||||
|
|
||||||
|
class InstructorOrVendorTable(tables.Table):
|
||||||
|
instructor_agreement_date = WarnEmptyColumn(
|
||||||
|
"Instructor Agreement Date(s)", default="Missing"
|
||||||
|
)
|
||||||
|
w9_date = WarnEmptyColumn(default="Missing")
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = InstructorOrVendor
|
||||||
|
fields = [
|
||||||
|
"name",
|
||||||
|
"instructor_agreement_date",
|
||||||
|
"w9_date",
|
||||||
|
"phone",
|
||||||
|
"email_address",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class InstructorOrVendorReport(
|
||||||
|
ExportMixin,
|
||||||
|
SingleTableMixin,
|
||||||
|
PermissionRequiredMixin,
|
||||||
|
ListView,
|
||||||
|
):
|
||||||
|
permission_required = "paperwork.view_instructororvendor"
|
||||||
|
template_name = "paperwork/instructor_or_vendor_report.dj.html"
|
||||||
|
queryset = InstructorOrVendor.objects.order_by("name").all()
|
||||||
|
table_class = InstructorOrVendorTable
|
||||||
|
export_formats = ("csv", "xlsx", "ods")
|
||||||
|
|
||||||
|
def get_table_data(self):
|
||||||
|
return (
|
||||||
|
super()
|
||||||
|
.get_table_data()
|
||||||
|
.values("name")
|
||||||
|
.annotate(
|
||||||
|
instructor_agreement_date=GroupConcat(
|
||||||
|
"instructor_agreement_date", distinct=True, ordering="asc"
|
||||||
|
),
|
||||||
|
w9_date=GroupConcat("w9_date", distinct=True, ordering="asc"),
|
||||||
|
phone=GroupConcat("phone", distinct=True, ordering="asc"),
|
||||||
|
email_address=GroupConcat(
|
||||||
|
"email_address", distinct=True, ordering="asc"
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
15
pdm.lock
15
pdm.lock
@ -5,7 +5,7 @@
|
|||||||
groups = ["default", "debug", "lint", "server", "typing", "dev"]
|
groups = ["default", "debug", "lint", "server", "typing", "dev"]
|
||||||
strategy = ["cross_platform"]
|
strategy = ["cross_platform"]
|
||||||
lock_version = "4.4.1"
|
lock_version = "4.4.1"
|
||||||
content_hash = "sha256:e647dfe717684c87b3a51bc1738ae7eb3d370ada3908a48c5ead3547c36a78d5"
|
content_hash = "sha256:88502778249494bd3f6fd407d51671f4e465065ec58427b60993d91d0808bdfd"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aiohttp"
|
name = "aiohttp"
|
||||||
@ -499,6 +499,19 @@ files = [
|
|||||||
{file = "django_markdownx-4.0.7-py2.py3-none-any.whl", hash = "sha256:c1975ae3053481d4c111abd38997a5b5bb89235a1e3215f995d835942925fe7b"},
|
{file = "django_markdownx-4.0.7-py2.py3-none-any.whl", hash = "sha256:c1975ae3053481d4c111abd38997a5b5bb89235a1e3215f995d835942925fe7b"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "django-mysql"
|
||||||
|
version = "4.12.0"
|
||||||
|
requires_python = ">=3.8"
|
||||||
|
summary = "Django-MySQL extends Django's built-in MySQL and MariaDB support their specific features not available on other databases."
|
||||||
|
dependencies = [
|
||||||
|
"Django>=3.2",
|
||||||
|
]
|
||||||
|
files = [
|
||||||
|
{file = "django_mysql-4.12.0-py3-none-any.whl", hash = "sha256:1c188ee3a92590da21ce23351c309bb02df3b6611926521d312a9cdf6373c3d0"},
|
||||||
|
{file = "django_mysql-4.12.0.tar.gz", hash = "sha256:9a29b69ad30c85362984903379783b53731ee7b0cef4dfb4eb078f80e24f26d4"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "django-nh3"
|
name = "django-nh3"
|
||||||
version = "0.1.1"
|
version = "0.1.1"
|
||||||
|
@ -33,6 +33,7 @@ dependencies = [
|
|||||||
"tablib[ods,xlsx]~=3.5",
|
"tablib[ods,xlsx]~=3.5",
|
||||||
"django-filter~=23.5",
|
"django-filter~=23.5",
|
||||||
"django-db-views~=0.1",
|
"django-db-views~=0.1",
|
||||||
|
"django-mysql~=4.12",
|
||||||
]
|
]
|
||||||
requires-python = ">=3.11"
|
requires-python = ">=3.11"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user