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 = { ...@@ -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) ...@@ -51,31 +51,3 @@ add_perm("chronos.view_substitutions_rule", view_substitutions_predicate)
# View room (timetable) # View room (timetable)
view_room_predicate = has_person & has_room_timetable_perm view_room_predicate = has_person & has_room_timetable_perm
add_perm("chronos.view_room_rule", view_room_predicate) 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): ...@@ -42,27 +42,3 @@ class LessonsTable(tables.Table):
attrs={"a": {"class": "btn-flat waves-effect waves-orange"}}, attrs={"a": {"class": "btn-flat waves-effect waves-orange"}},
verbose_name=_("Manage substitution"), 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 = [ ...@@ -54,25 +54,4 @@ urlpatterns = [
{"is_print": True}, {"is_print": True},
name="substitutions_print_by_date", 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 datetime import datetime, timedelta
from typing import Any, Optional from typing import Optional
from django.db.models import Q 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.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 import timezone
from django.utils.decorators import method_decorator
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.views import View
from django.views.decorators.cache import never_cache from django.views.decorators.cache import never_cache
from django.views.generic.detail import SingleObjectMixin
from django_tables2 import RequestConfig, SingleTableView from django_tables2 import RequestConfig
from reversion.views import RevisionMixin from rules.contrib.views import permission_required
from rules.contrib.views import PermissionRequiredMixin, permission_required
from aleksis.core.mixins import AdvancedCreateView, AdvancedDeleteView, AdvancedEditView
from aleksis.core.models import Announcement, Group from aleksis.core.models import Announcement, Group
from aleksis.core.util import messages from aleksis.core.util import messages
from aleksis.core.util.core_helpers import get_site_preferences, has_person from aleksis.core.util.core_helpers import get_site_preferences, has_person
from aleksis.core.util.pdf import render_pdf from aleksis.core.util.pdf import render_pdf
from .forms import AutomaticPlanForm, LessonSubstitutionForm from .forms import LessonSubstitutionForm
from .managers import TimetableType from .managers import TimetableType
from .models import Absence, AutomaticPlan, Holiday, LessonPeriod, LessonSubstitution, TimePeriod from .models import Absence, Holiday, LessonPeriod, LessonSubstitution, TimePeriod
from .tables import AutomaticPlanTable, LessonsTable from .tables import LessonsTable
from .util.build import build_substitutions_list, build_timetable, build_weekdays from .util.build import build_substitutions_list, build_timetable, build_weekdays
from .util.chronos_helpers import ( from .util.chronos_helpers import (
get_classes, get_classes,
...@@ -386,58 +381,3 @@ def substitutions( ...@@ -386,58 +381,3 @@ def substitutions(
return render(request, "chronos/substitutions.html", context) return render(request, "chronos/substitutions.html", context)
else: else:
return render_pdf(request, "chronos/substitutions_print.html", context) 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