Skip to content
Snippets Groups Projects
Verified Commit 504e4e74 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Drop special management views for automatic plans (now in Resint)

parent bf405297
No related branches found
No related tags found
1 merge request!191Resolve "Automatically create a PDF file of the substitution plan"
Pipeline #25292 failed
......@@ -56,17 +56,6 @@ MENUS = {
),
],
},
{
"name": _("Automatic plans"),
"url": "automatic_plans",
"icon": "update",
"validators": [
(
"aleksis.core.util.predicates.permission_validator",
"chronos.view_automaticplans",
),
],
},
],
}
]
......
......@@ -51,31 +51,3 @@ add_perm("chronos.view_substitutions_rule", view_substitutions_predicate)
# View room (timetable)
view_room_predicate = has_person & has_room_timetable_perm
add_perm("chronos.view_room_rule", view_room_predicate)
# View automatic plan list
view_automatic_plans_predicate = has_person & has_global_perm("chronos.view_automaticplan")
add_perm("chronos.view_automaticplans_rule", view_automatic_plans_predicate)
# View automatic plan
view_automatic_plan_predicate = has_person & (
has_global_perm("chronos.view_automaticplan") | has_object_perm("chronos.view_automaticplan")
)
add_perm("chronos.view_automaticplan_rule", view_automatic_plan_predicate)
# Add automatic plan
add_automatic_plan_predicate = view_automatic_plans_predicate & has_global_perm(
"chronos.add_automaticplan"
)
add_perm("chronos.add_automaticplan_rule", add_automatic_plan_predicate)
# Edit automatic plan
edit_automatic_plan_predicate = view_automatic_plans_predicate & has_global_perm(
"chronos.change_automaticplan"
)
add_perm("chronos.edit_automaticplan_rule", edit_automatic_plan_predicate)
# Delete automatic plan
delete_automatic_plan_predicate = view_automatic_plans_predicate & has_global_perm(
"chronos.delete_automaticplan"
)
add_perm("chronos.delete_automaticplan_rule", delete_automatic_plan_predicate)
......@@ -42,27 +42,3 @@ class LessonsTable(tables.Table):
attrs={"a": {"class": "btn-flat waves-effect waves-orange"}},
verbose_name=_("Manage substitution"),
)
class AutomaticPlanTable(tables.Table):
"""Table for automatic plans."""
class Meta:
attrs = {"class": "highlight"}
name = tables.LinkColumn("edit_automatic_plan", args=[A("id")])
filename = tables.LinkColumn("show_automatic_plan", args=[A("slug")])
last_update = tables.DateTimeColumn()
last_update_triggered_manually = tables.BooleanColumn()
edit = tables.LinkColumn(
"edit_automatic_plan",
args=[A("id")],
text=_("Edit"),
attrs={"a": {"class": "btn-flat waves-effect waves-orange orange-text"}},
)
delete = tables.LinkColumn(
"delete_automatic_plan",
args=[A("id")],
text=_("Delete"),
attrs={"a": {"class": "btn-flat waves-effect waves-red red-text"}},
)
......@@ -54,25 +54,4 @@ urlpatterns = [
{"is_print": True},
name="substitutions_print_by_date",
),
path("automatic_plans/", views.AutomaticPlanListView.as_view(), name="automatic_plans"),
path(
"automatic_plans/create/",
views.AutomaticPlanCreateView.as_view(),
name="create_automatic_plan",
),
path(
"automatic_plans/<int:pk>/edit/",
views.AutomaticPlanEditView.as_view(),
name="edit_automatic_plan",
),
path(
"automatic_plans/<int:pk>/delete/",
views.AutomaticPlanDeleteView.as_view(),
name="delete_automatic_plan",
),
path(
"automatic_plans/<str:slug>.pdf",
views.AutomaticPlanShowView.as_view(),
name="show_automatic_plan",
),
]
from datetime import datetime, timedelta
from typing import Any, Optional
from typing import Optional
from django.db.models import Q
from django.http import FileResponse, HttpRequest, HttpResponse, HttpResponseNotFound
from django.http import HttpRequest, HttpResponse, HttpResponseNotFound
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse, reverse_lazy
from django.urls import reverse
from django.utils import timezone
from django.utils.decorators import method_decorator
from django.utils.translation import ugettext as _
from django.views import View
from django.views.decorators.cache import never_cache
from django.views.generic.detail import SingleObjectMixin
from django_tables2 import RequestConfig, SingleTableView
from reversion.views import RevisionMixin
from rules.contrib.views import PermissionRequiredMixin, permission_required
from django_tables2 import RequestConfig
from rules.contrib.views import permission_required
from aleksis.core.mixins import AdvancedCreateView, AdvancedDeleteView, AdvancedEditView
from aleksis.core.models import Announcement, Group
from aleksis.core.util import messages
from aleksis.core.util.core_helpers import get_site_preferences, has_person
from aleksis.core.util.pdf import render_pdf
from .forms import AutomaticPlanForm, LessonSubstitutionForm
from .forms import LessonSubstitutionForm
from .managers import TimetableType
from .models import Absence, AutomaticPlan, Holiday, LessonPeriod, LessonSubstitution, TimePeriod
from .tables import AutomaticPlanTable, LessonsTable
from .models import Absence, Holiday, LessonPeriod, LessonSubstitution, TimePeriod
from .tables import LessonsTable
from .util.build import build_substitutions_list, build_timetable, build_weekdays
from .util.chronos_helpers import (
get_classes,
......@@ -386,58 +381,3 @@ def substitutions(
return render(request, "chronos/substitutions.html", context)
else:
return render_pdf(request, "chronos/substitutions_print.html", context)
class AutomaticPlanListView(PermissionRequiredMixin, SingleTableView):
"""Table of all automatic plans."""
model = AutomaticPlan
table_class = AutomaticPlanTable
permission_required = "chronos.view_automaticplans_rule"
template_name = "chronos/automatic_plan/list.html"
@method_decorator(never_cache, name="dispatch")
class AutomaticPlanCreateView(PermissionRequiredMixin, AdvancedCreateView):
"""Create view for automatic plans."""
model = AutomaticPlan
form_class = AutomaticPlanForm
permission_required = "chronos.add_automaticplan_rule"
template_name = "chronos/automatic_plan/create.html"
success_url = reverse_lazy("automatic_plans")
success_message = _("The automatic plan has been created.")
@method_decorator(never_cache, name="dispatch")
class AutomaticPlanEditView(PermissionRequiredMixin, AdvancedEditView):
"""Edit view for automatic plans."""
model = AutomaticPlan
form_class = AutomaticPlanForm
permission_required = "chronos.edit_automaticplan_rule"
template_name = "chronos/automatic_plan/edit.html"
success_url = reverse_lazy("automatic_plans")
success_message = _("The automatic plan has been saved.")
@method_decorator(never_cache, name="dispatch")
class AutomaticPlanDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDeleteView):
"""Delete view for automatic plans."""
model = AutomaticPlan
permission_required = "chronos.delete_automaticplan_rule"
template_name = "core/pages/delete.html"
success_url = reverse_lazy("automatic_plans")
success_message = _("The automatic plan has been deleted.")
class AutomaticPlanShowView(PermissionRequiredMixin, SingleObjectMixin, View):
"""Show the current version of the automatic plan."""
model = AutomaticPlan
permission_required = "resint.view_automaticplan_rule"
def get(self, request: HttpRequest, *args: Any, **kwargs: Any) -> FileResponse:
automatic_plan = self.get_object()
return FileResponse(automatic_plan.get_current_file(), content_type="application/pdf")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment