diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c9a6fd37ea168680978ecc71b7b181c1fffe224e --- /dev/null +++ b/.gitignore @@ -0,0 +1,52 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# pyenv +.python-version + +# Environments +.env +.venv +env/ +venv/ +ENV/ + +# Editors +*~ +DEADJOE +\#*# + +# Database +db.sqlite3 diff --git a/biscuit/apps/chronos/models.py b/biscuit/apps/chronos/models.py index 3b27ed81a79dafb02241f1588901eb3836eb7296..b11824974a37a6fdac121cd946acbfd9d65391ae 100644 --- a/biscuit/apps/chronos/models.py +++ b/biscuit/apps/chronos/models.py @@ -24,6 +24,14 @@ class TimePeriod(models.Model): def __str__(self): return '%s, %d. period (%s - %s)' % (self.weekday, self.period, self.time_start, self.time_end) + @classmethod + def get_times_dict(cls): + periods = {} + for period in cls.objects.all(): + periods[period.period] = (period.time_start, period.time_end) + + return periods + class Subject(models.Model): abbrev = models.CharField(verbose_name=_( diff --git a/biscuit/apps/chronos/templates/chronos/tt_day.html b/biscuit/apps/chronos/templates/chronos/tt_day.html new file mode 100644 index 0000000000000000000000000000000000000000..97aea6a0c71e2cf25aaeee8e6d4963f5c34fabe2 --- /dev/null +++ b/biscuit/apps/chronos/templates/chronos/tt_day.html @@ -0,0 +1,16 @@ +<div class="col-sm"> + <ul class="list-group"> + <li class="list-group-item active"> + {{ lesson_periods.0.period.get_weekday_display }} + </li> + </ul> + <div class="container"> + {% for lesson_period in lesson_periods %} + <div class="row"> + <div class="col-sm"> + {% include "chronos/tt_lesson.html" with lesson_period=lesson_period %} + </div> + </div> + {% endfor %} + </div> +</div> diff --git a/biscuit/apps/chronos/templates/chronos/tt_lesson.html b/biscuit/apps/chronos/templates/chronos/tt_lesson.html new file mode 100644 index 0000000000000000000000000000000000000000..bd58b5cb110e50274c54eca82b63a2f0ca5073d2 --- /dev/null +++ b/biscuit/apps/chronos/templates/chronos/tt_lesson.html @@ -0,0 +1,32 @@ +<div class="card chronos-lesson" + style=" + {% if lesson_period.lesson.subject.colour_fg %} + color: {{ lesson_period.lesson.subject.colour_fg }}; + {% endif %} + {% if lesson_period.lesson.subject.colour_bg %} + background-color: {{ lesson_period.lesson.subject.colour_bg }}; + {% endif %} + "> + <div class="card-body"> + <div class="row"> + <div class="col-sm"> + <span class="card-title">{{ lesson_period.lesson.subject.abbrev }}</span> + </div> + </div> + <div class="row"> + <div class="col-sm"> + {% for group in lesson_period.lesson.groups.all %} + <span class="card-text">{{ group.short_name }}</span> + {% endfor %} + </div> + <div class="col-sm"> + {% for teacher in lesson_period.lesson.teachers.all %} + <span class="card-text">{{ teacher.short_name }}</span> + {% endfor %} + </div> + <div class="col-sm"> + <span class="card-text">{{ lesson_period.room.short_name }}</span> + </div> + </div> + </div> +</div> diff --git a/biscuit/apps/chronos/templates/chronos/tt_week.html b/biscuit/apps/chronos/templates/chronos/tt_week.html new file mode 100644 index 0000000000000000000000000000000000000000..dc9052adcace27643e2f5927e82e7cc2b6bec5cd --- /dev/null +++ b/biscuit/apps/chronos/templates/chronos/tt_week.html @@ -0,0 +1,54 @@ +{# -*- engine:django -*- #} +{% extends "core/base.html" %} +{% load bootstrap4 i18n %} + +{% block page_title %}Timetable{% endblock %} + +{% block content %} + <p> + {{ filter_descs }} + </p> + + <div class="row"> + <div class="col-sm"> + <ul class="list-group"> + <li class="list-group-item active"> + {% blocktrans %}Times{% endblocktrans %} + </li> + </ul> + <div class="container"> + {% for num, times in periods.items %} + <div class="row"> + <div class="col-sm"> + <div class="card chronos-lesson"> + <div class="card-body"> + <div class="row"> + <div class="col-sm"> + <span class="card-title">{{ num }}.</span> + </div> + </div> + <div class="row"> + <div class="col-sm"> + <span class="card-text">{{ times.0}}</span> + </div> + <div class="col-sm"> + <span class="card-text">-</span> + </div> + <div class="col-sm"> + <span class="card-text">{{ times.1 }}</span> + </div> + </div> + </div> + </div> + </div> + </div> + {% endfor %} + </div> + </div> + + {% for weekday, lesson_periods_day in lesson_periods.items %} + {% include "chronos/tt_day.html" with lesson_periods=lesson_periods_day %} + {% endfor %} + </div> +{% endblock %} + \ No newline at end of file diff --git a/biscuit/apps/chronos/views.py b/biscuit/apps/chronos/views.py index 43e81eb33ba9a50fbb52c3636abe63c6a3e50967..776f7e923da39883ccb496588cd5e8d99626a8f0 100644 --- a/biscuit/apps/chronos/views.py +++ b/biscuit/apps/chronos/views.py @@ -1,9 +1,47 @@ +from collections import OrderedDict + from django.contrib.auth.decorators import login_required +from django.shortcuts import render +from django.utils.translation import gettext_lazy as _ +from biscuit.apps.cambro.models import Room from biscuit.core.decorators import admin_required +from biscuit.core.models import Group, Person + +from .models import LessonPeriod, TimePeriod @login_required @admin_required def timetable(request): - pass + context = {} + + lesson_periods = LessonPeriod.objects.all() + filter_descs = [] + + if 'group' in request.GET: + lesson_periods = lesson_periods.filter( + lesson__groups__pk__contains=int(request.GET['group'])) + filter_descs.append(_('Group: %s') % Group.objects.get( + pk=int(request.GET['group'])).name) + if 'teacher' in request.GET: + lesson_periods = lesson_periods.filter( + lesson__teachers__pk__contains=int(request.GET['teacher'])) + filter_descs.append(_('Teacher: %s') % Person.objects.get( + pk=int(request.GET['teacher'])).name) + if 'room' in request.GET: + lesson_periods = lesson_periods.filter( + room__pk=int(request.GET['room'])) + filter_descs.append(_('Room: %s') % Room.objects.get( + pk=int(request.GET['room'])).name) + + per_day = {} + for lesson_period in lesson_periods: + per_day.setdefault(lesson_period.period.weekday, + []).append(lesson_period) + + context['lesson_periods'] = OrderedDict(sorted(per_day.items())) + context['filter_descs'] = ', '.join(filter_descs) + context['periods'] = TimePeriod.get_times_dict() + + return render(request, 'chronos/tt_week.html', context)