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,
|
notification,
|
||||||
send_file,
|
send_file,
|
||||||
)
|
)
|
||||||
|
from timetable.views import UserTimetableView
|
||||||
|
|
||||||
register_converter(FourDigitYearConverter, "yyyy")
|
register_converter(FourDigitYearConverter, "yyyy")
|
||||||
register_converter(TwoDigitMonthConverter, "mm")
|
register_converter(TwoDigitMonthConverter, "mm")
|
||||||
@@ -184,6 +185,11 @@ urlpatterns = [
|
|||||||
name="user_account_detail",
|
name="user_account_detail",
|
||||||
),
|
),
|
||||||
path("user/<int:user_id>/stats/", UserStatsView.as_view(), name="user_stats"),
|
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(
|
path(
|
||||||
"user/<int:user_id>/gift/create/",
|
"user/<int:user_id>/gift/create/",
|
||||||
GiftCreateView.as_view(),
|
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 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 import TemplateView
|
||||||
|
from django.views.generic.detail import DetailView
|
||||||
|
|
||||||
|
from core.models import User
|
||||||
|
|
||||||
|
|
||||||
class GeneratorView(TemplateView):
|
class GeneratorView(TemplateView):
|
||||||
template_name = "timetable/generator.jinja"
|
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