mirror of
https://github.com/ae-utbm/sith.git
synced 2026-10-10 12:50:29 +00:00
view to see a user's timetables
This commit is contained in:
1 parent
c80f4ee2b8
commit
e87a4755b9
4 files changed
+83
-3
No files matched your search
@@ -84,6 +84,7 @@ from core.views import (
|
||||
notification,
|
||||
send_file,
|
||||
)
|
||||
from timetable.views import UserTimetableView
|
||||
|
||||
register_converter(FourDigitYearConverter, "yyyy")
|
||||
register_converter(TwoDigitMonthConverter, "mm")
|
||||
@@ -184,6 +185,11 @@ urlpatterns = [
|
||||
name="user_account_detail",
|
||||
),
|
||||
path("user/<int:user_id>/stats/", UserStatsView.as_view(), name="user_stats"),
|
||||
path(
|
||||
"user/<int:user_id>/edt/",
|
||||
UserTimetableView.as_view(),
|
||||
name="user_timetable",
|
||||
),
|
||||
path(
|
||||
"user/<int:user_id>/gift/create/",
|
||||
GiftCreateView.as_view(),
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
{% extends "core/base.jinja" %}
|
||||
|
||||
{% from "timetable/macros.jinja" import display_timetable %}
|
||||
|
||||
|
||||
{%- block additional_css -%}
|
||||
<link rel="stylesheet" href="{{ static('timetable/css/generator.scss') }}">
|
||||
{%- endblock -%}
|
||||
|
||||
{%- block additional_js -%}
|
||||
<script type="module" src="{{ static('bundled/timetable/timetable-index.ts') }}"></script>
|
||||
{%- endblock -%}
|
||||
|
||||
{% block content %}
|
||||
{% for timetable in timetables %}
|
||||
<details
|
||||
class="accordion"
|
||||
name="{{ timetable.semester }}"
|
||||
{% if loop.first %}open{% endif %}
|
||||
>
|
||||
<summary>{{ timetable.semester }}</summary>
|
||||
<div class="accordion-content">
|
||||
{{ display_timetable(timetable.semester) }}
|
||||
</div>
|
||||
</details>
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
|
||||
{%- block script -%}
|
||||
{% set weekdays = ["lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"] %}
|
||||
<script>
|
||||
{%- for timetable in timetables -%}
|
||||
const {{ timetable.semester }} = [
|
||||
{%- for slot in timetable.slots.all() -%}
|
||||
{
|
||||
courseType: "{{ slot.course_type }}",
|
||||
room: "{{ slot.room }}",
|
||||
startHour: "{{ "%02d:%02d" % (slot.start_hour.seconds // 3600, (slot.start_hour.seconds % 3600 ) // 60) }}",
|
||||
endHour: "{{ "%02d:%02d" % (slot.end_hour.seconds // 3600, (slot.end_hour.seconds % 3600 ) // 60) }}",
|
||||
startSlot: {{ slot.start_at }},
|
||||
endSlot: {{ slot.end_at }},
|
||||
ueCode: "{{ slot.ue }}",
|
||||
{%- if slot.week_group -%}
|
||||
weekGroup: "{{ slot.week_group }}",
|
||||
{%- endif -%}
|
||||
weekday: "{{ weekdays[slot.weekday] }}"
|
||||
},
|
||||
{%- endfor -%}
|
||||
];
|
||||
{%- endfor -%}
|
||||
</script>
|
||||
{%- endblock -%}
|
||||
+5
-2
@@ -1,5 +1,8 @@
|
||||
from django.urls import path
|
||||
|
||||
from timetable.views import GeneratorView
|
||||
from timetable.views import GeneratorView, UserTimetableView
|
||||
|
||||
urlpatterns = [path("", GeneratorView.as_view(), name="generator")]
|
||||
urlpatterns = [
|
||||
path("", GeneratorView.as_view(), name="generator"),
|
||||
path("user/<int:user_id>", UserTimetableView.as_view(), name="user_timetable"),
|
||||
]
|
||||
+20
-1
@@ -1,6 +1,25 @@
|
||||
# Create your views here.
|
||||
from django.contrib.auth.mixins import UserPassesTestMixin
|
||||
from django.views.generic import TemplateView
|
||||
from django.views.generic.detail import DetailView
|
||||
|
||||
from core.models import User
|
||||
|
||||
|
||||
class GeneratorView(TemplateView):
|
||||
template_name = "timetable/generator.jinja"
|
||||
|
||||
|
||||
class UserTimetableView(UserPassesTestMixin, DetailView):
|
||||
model = User
|
||||
pk_url_kwarg = "user_id"
|
||||
template_name = "timetable/user_timetable.jinja"
|
||||
|
||||
def test_func(self) -> bool | None:
|
||||
return self.request.user.id == self.kwargs[
|
||||
"user_id"
|
||||
] or self.request.user.has_perm("timetable.view_timetable")
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
return super().get_context_data(**kwargs) | {
|
||||
"timetables": list(self.object.timetables.prefetch_related("slots"))
|
||||
}
|
||||
Reference in new issue
Block a user