Skip to content
Snippets Groups Projects
Commit 22ded6a9 authored by Jonathan Weth's avatar Jonathan Weth :keyboard: Committed by root
Browse files

Merge pull request #338 from Katharineum/feature/subs-paper-css

Feature/subs paper css
parents b6bde32d 5e131908
No related branches found
No related tags found
1 merge request!86Merge school-apps
......@@ -249,7 +249,7 @@ table.substitutions td, table.substitutions th {
}
.lesson-card a, .substitutions a {
color: black;
color: inherit;
}
/*.timetable-time {*/
......@@ -312,10 +312,11 @@ table.substitutions td, table.substitutions th {
/* Table*/
table.striped > tbody > tr:nth-child(odd) {
table.striped > tbody > tr:nth-child(odd), table tr.striped {
background-color: rgba(208, 208, 208, 0.5);
}
/*+++++++*/
/* Print */
/*+++++++*/
......
/* MIT © Tsutomu Kawamura */
/* Edited by SchoolApps Team */
@page {
margin: 0
}
body {
margin: 0
}
.sheet {
margin: 0;
overflow: hidden;
position: relative;
box-sizing: border-box;
page-break-after: always;
}
/** Paper sizes **/
body.A3 .sheet {
width: 297mm;
height: 419mm
}
body.A3.landscape .sheet {
width: 420mm;
height: 296mm
}
body.A4 .sheet {
width: 210mm;
height: 296mm
}
body.A4.landscape .sheet {
width: 297mm;
height: 209mm
}
body.A5 .sheet {
width: 148mm;
height: 209mm
}
body.A5.landscape .sheet {
width: 210mm;
height: 147mm
}
body.letter .sheet {
width: 216mm;
height: 279mm
}
body.letter.landscape .sheet {
width: 280mm;
height: 215mm
}
body.legal .sheet {
width: 216mm;
height: 356mm
}
body.legal.landscape .sheet {
width: 357mm;
height: 215mm
}
.sheet.infinitive {
height: auto !important;
}
/** Padding area **/
.sheet.padding-10mm {
padding: 10mm
}
.sheet.padding-15mm {
padding: 15mm
}
.sheet.padding-20mm {
padding: 20mm
}
.sheet.padding-25mm {
padding: 25mm
}
/** For screen preview **/
@media screen {
body {
background: #e0e0e0
}
.sheet {
background: white;
box-shadow: 0 .5mm 2mm rgba(0, 0, 0, .3);
margin: 5mm auto;
}
}
/** Fix for Chrome issue #273306 **/
@media print {
body.A3.landscape {
width: 420mm
}
body.A3, body.A4.landscape {
width: 297mm
}
body.A4, body.A5.landscape {
width: 210mm
}
body.A5 {
width: 148mm
}
body.letter, body.legal {
width: 216mm
}
body.letter.landscape {
width: 280mm
}
body.legal.landscape {
width: 357mm
}
}
{% load static %}
<footer>
<div class="left">
Katharineum zu Lübeck
</div>
<div class="right">
Umsetzung: {{ COPYRIGHT_SHORT }}
</div>
</footer>
</div>
</td>
</tr>
</tbody>
<tfoot>
<tr class="no-border">
<td>
<div class="footer-space">&nbsp;</div>
</td>
</tr>
</tfoot>
</table>
</main>
<!---------------->
<!-- JavaScript (jquery v. 3.4.1.slim)-->
<!---------------->
<script src="{% static 'common/manup.min.js' %}"></script>
<script src="{% static 'js/materialize.min.js' %}"></script>
<script src="{% static 'common/helper.js' %}"></script>
</body>
</html>
{% load static %}
{% load pwa %}
{% load url_name %}
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Selbst programmierte Anwendungen für den Schullaltag am Katharineum zu Lübeck">
<title>SchoolApps – Katharineum zu Lübeck</title>
<!--------->
<!-- CSS -->
<!--------->
<link href="{% static 'css/materialdesignicons-webfont/material-icons.css' %}" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="{% static 'css/materialize.min.css' %}">
<link rel="stylesheet" type="text/css" href="{% static 'css/paper.css' %}">
<link rel="stylesheet" type="text/css" href="{% static 'common/style.css' %}">
<script src="{% static 'js/jquery/jquery-3.3.1.min.js' %}"></script>
<style>
body {
font-family: Cabin, sans-serif;
}
@page {
size: A4;
padding: 30mm;
}
header {
display: block;
width: 190mm;
}
#print-header {
display: block !important;
border-bottom: 1px solid;
margin-bottom: 0;
height: 22mm;
background: white;
}
header, main, footer {
margin: 0;
}
#print-header .col.right-align {
padding: 15px;
}
.sheet {
padding: 10mm;
}
.header-space, .footer-space {
height: 0;
}
.print-layout-table td {
padding: 0;
}
.print-layout-table .no-border {
border: 0;
}
footer {
margin-top: 5mm;
text-align: center;
width: 190mm;
}
header .row, header .col {
padding: 0 !important;
margin: 0 !important;
}
@media print {
.header-space {
height: 32mm;
}
.footer-space {
height: 20mm
}
header, footer {
height: 22mm;
}
header {
position: fixed;
top: 10mm;
}
footer {
position: fixed;
bottom: 0;
}
@page {
@bottom-center {
content: "Seite " counter(page) " von " counter(pages);
}
}
}
</style>
</head>
<body class="A4">
<div style="margin-top: -10mm;"></div>
<main class="sheet infinitive">
<table class="print-layout-table">
<thead>
<tr class="no-border">
<td>
<div class="header-space">&nbsp;</div>
</td>
</tr>
</thead>
<tbody>
<tr class="no-border">
<td>
<div class="content">
<header>
<div id="print-header" class="row">
<div class="col s6 logo">
<img src="{% static 'common/logo.png' %}">
</div>
<div class="col s6 right-align">
<h5>SchoolApps</h5>
{% now "j. F Y H:i" %}
</div>
</div>
</header>
{% load martortags %}
{% if c.hints %}
{% for hint in c.hints %}
<div class="alert primary">
<div>
<strong>
{{ hint.classes_formatted }}{% if hint.teachers and hint.classes.all %}, Lehrkräfte{% endif %}:
</strong>
<i class="material-icons left">announcement</i>
{{ hint.text|safe_markdown }}
</div>
</div>
{% endfor %}
{% endif %}
{% load common %}
{% include 'partials/paper/header.html' %}
<script type="text/javascript">
var dest = "/timetable/substitutions/";
</script>
<style>
table.substitutions td, table.substitutions th {
padding: 0 2px;
}
span.badge.new {
font-size: 0.9rem;
line-height: 20px;
height: 20px;
margin: 2px;
letter-spacing: 0.3pt;
}
</style>
{% for c in days %}
<h4>Vertretungen {{ c.date|date:"l, j. F Y" }}</h4>
{% include "timetable/hintsinsubprint.html" %}
<div style="margin-bottom: 20px">
{% if c.header_info.is_box_needed %}
{% for row in c.header_info.rows %}
<div class="row no-margin">
<div class="col s3 no-padding">
<strong>{{ row.0 }}</strong>
</div>
<div class="col s9 no-padding">
{{ row.1 }}
</div>
</div>
{% endfor %}
{% endif %}
</div>
<table class="substitutions">
<thead>
<tr>
<th><i class="material-icons">people</i></th>
<th><i class="material-icons">access_time</i></th>
<th>Lehrer</th>
<th>Fach</th>
<th>Raum</th>
<th>Hinweis</th>
<th></th>
</tr>
</thead>
<tbody>
{% if not c.sub_table %}
<td colspan="7">
<p class="flow-text center">
Keine Vertretungen vorhanden
</p>
</td>
{% endif %}
{% set color_background = 1 %}
{% set last_classes = "" %}
{% for sub in c.sub_table %}
{# Color groups of classes in grey/white #}
{% if last_classes != sub.classes %}
{% if color_background %}{% set color_background = 0 %}
{% else %}{% set color_background = 1 %}
{% endif %}
{% endif %}
{% set last_classes = sub.classes %}
<tr class="{{ sub.color }}-text {% if color_background %}striped{% endif %}">
<td>
{{ sub.classes }}
</td>
<td>
<strong>
{{ sub.lesson }}
</strong>
</td>
<td>
{% include "timetable/subs/teacher.html" %}
</td>
<td>
{% include "timetable/subs/subject.html" %}
</td>
<td>
{% include "timetable/subs/room.html" %}
</td>
<td>
{% if sub.badge %}
<span class="badge new green">{{ sub.badge }}</span>
{% endif %}
<em>{{ sub.text|default:"" }}</em>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endfor %}
{% include 'partials/paper/footer.html' %}
......@@ -23,6 +23,10 @@ try:
path('substitutions/', views.substitutions, name='timetable_substitutions'),
path('substitutions/<int:year>/<int:month>/<int:day>/', views.substitutions,
name='timetable_substitutions_date'),
path('substitutions/<int:year>/<int:month>/<int:day>/print/', views.substitutions_print,
name='timetable_substitutions_date_print'),
path('substitutions/print/', views.substitutions_print,
name='timetable_substitutions_print'),
path('aktuell.pdf', views.sub_pdf, name="timetable_substitutions_pdf"),
path('<str:plan_date>-aktuell.pdf', views.sub_pdf, name="timetable_substitutions_pdf_date")
]
......@@ -47,5 +51,10 @@ except (Terms.DoesNotExist, Schoolyear.DoesNotExist, ProgrammingError, Operation
path('substitutions/', fallback_view.fallback, name='timetable_substitutions'),
path('substitutions/<int:year>/<int:month>/<int:day>/', fallback_view.fallback,
name='timetable_substitutions_date'),
path('aktuell.pdf', fallback_view.fallback, name="timetable_substitutions_pdf")
path('substitutions/<int:year>/<int:month>/<int:day>/<str:print_view>/', fallback_view.fallback,
name='timetable_substitutions_date_print'),
path('substitutions/<str:print_view>/', fallback_view.fallback,
name='timetable_substitutions_print'),
path('aktuell.pdf', fallback_view.fallback, name="timetable_substitutions_pdf"),
path('<str:plan_date>-aktuell.pdf', fallback_view.fallback, name="timetable_substitutions_pdf_date")
]
......@@ -328,19 +328,7 @@ def sub_pdf(request, plan_date=None):
return FileResponse(file, content_type="application/pdf")
@login_required
@permission_required("timetable.show_plan")
@cache_page(SUBS_VIEW_CACHE.expiration_time)
def substitutions(request, year=None, month=None, day=None):
"""Show substitutions in a classic view"""
date, time = find_out_what_is_today(year, month, day)
# Get next weekday if it is a weekend
next_weekday = get_next_weekday_with_time(date, time)
if next_weekday != date:
return redirect("timetable_substitutions_date", next_weekday.year, next_weekday.month, next_weekday.day)
def get_subs_context(request, date):
# Get subs and generate table
events = get_all_events_by_date(date)
subs = get_substitutions_by_date(date)
......@@ -354,7 +342,7 @@ def substitutions(request, year=None, month=None, day=None):
header_info = get_header_information(subs, date, events)
hints = list(get_all_hints_by_time_period(date, date))
context = {
return {
"subs": subs,
"sub_table": sub_table,
"date": date,
......@@ -363,7 +351,51 @@ def substitutions(request, year=None, month=None, day=None):
"hints": hints,
}
return render(request, 'timetable/substitution.html', context)
@login_required
@permission_required("timetable.show_plan")
@cache_page(SUBS_VIEW_CACHE.expiration_time)
def substitutions(request, year=None, month=None, day=None):
"""Show substitutions in a classic view"""
date, time = find_out_what_is_today(year, month, day)
# Get next weekday if it is a weekend
next_weekday = get_next_weekday_with_time(date, time)
if next_weekday != date:
return redirect("timetable_substitutions_date", next_weekday.year, next_weekday.month, next_weekday.day)
context = get_subs_context(request, date)
template_name = 'timetable/substitution.html'
return render(request, template_name, context)
@login_required
@permission_required("timetable.show_plan")
@cache_page(SUBS_VIEW_CACHE.expiration_time)
def substitutions_print(request, year=None, month=None, day=None):
"""Show substitutions in a classic view"""
date, time = find_out_what_is_today(year, month, day)
# Get next weekday if it is a weekend
next_weekday = get_next_weekday_with_time(date, time)
if next_weekday != date:
return redirect("timetable_substitutions_date_print", next_weekday.year, next_weekday.month, next_weekday.day)
second_date = get_next_weekday(date + datetime.timedelta(days=1))
context1 = get_subs_context(request, date)
context2 = get_subs_context(request, second_date)
context = {
"days": [context1, context2]
}
template_name = 'timetable/substitutionprint.html'
return render(request, template_name, context)
###################
......
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