team shift qol

pull/1/head
parent c4e30c83a1
commit 90fe5cd481

@ -124,6 +124,26 @@
document.getElementById(el.dataset.target).classList.toggle('is-active'); document.getElementById(el.dataset.target).classList.toggle('is-active');
} }
})); }));
function selectAndCopyText(element) {
var range = document.createRange();
range.selectNodeContents(element);
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
navigator.clipboard.writeText(window.getSelection());
}
document.querySelectorAll('.select_all').forEach( e =>{
e.addEventListener('touchstart', function(event) {
selectAndCopyText(event.target);
}, false);
e.addEventListener('click', function(event) {
selectAndCopyText(event.target);
}, false);
});
</script> </script>
</body> </body>
</html> </html>

@ -1,4 +1,3 @@
from base64 import urlsafe_b64encode
from django.contrib import admin from django.contrib import admin
from django.shortcuts import reverse from django.shortcuts import reverse
from .models import * from .models import *
@ -38,13 +37,3 @@ class TeamMemberAdmin(admin.ModelAdmin):
def shift_count(self, object): def shift_count(self, object):
return object.fallback_shifts.count() return object.fallback_shifts.count()
def url(self, object):
return "https://helfen.kntkt.de" + reverse(
"my_fallback_shifts",
kwargs={
"team_member_id": urlsafe_b64encode(
object.id.to_bytes(3, byteorder="big")
).decode("utf-8")
},
)

@ -0,0 +1,5 @@
from django import forms
# placeholder form for simple submit button use cases so we get csrf protection
class EmptyForm(forms.Form):
pass

@ -3,6 +3,7 @@ from django.db.models import Max, Sum
from django.db.models import Count, Exists, OuterRef, ExpressionWrapper from django.db.models import Count, Exists, OuterRef, ExpressionWrapper
from django.db.models.lookups import LessThan from django.db.models.lookups import LessThan
from django.db.models.fields import DateTimeField from django.db.models.fields import DateTimeField
from base64 import urlsafe_b64encode
import math import math
import secrets import secrets
@ -18,6 +19,16 @@ class TeamMember(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
fallback_shifts = models.ManyToManyField(Shift, through="FallbackAssignment") fallback_shifts = models.ManyToManyField(Shift, through="FallbackAssignment")
def url(self):
return "https://helfen.kntkt.de" + reverse(
"my_fallback_shifts",
kwargs={
"team_member_id": urlsafe_b64encode(
self.id.to_bytes(3, byteorder="big")
).decode("utf-8")
},
)
def assign_random_shifts(self): def assign_random_shifts(self):
if self.fallback_shifts.count() != 0: if self.fallback_shifts.count() != 0:
return return

@ -7,6 +7,25 @@
<section class="section"> <section class="section">
<div class="container"> <div class="container">
<h3 class="title">Fallback-Schichten für {{ team_member.name }}</h3> <h3 class="title">Fallback-Schichten für {{ team_member.name }}</h3>
<a href="{% url 'pages:view' 'team_faq' %}">Häufig gestellte Fragen zu Teamschichten</a>
{% if shifts %}
<pre class="select_all">
Hallo {{ team_member.name }} , hier deine Teamschichten fuer das Festival:
{{ team_member.url }}
Deine Schichten werden in den nächsten Tagen weniger werden, wenn wir alle schichten unter mehr Teammitgliedern verteilen.
Du kannst unter dem Link immer nachschauen, welche Schichten du noch hast und welche schon von Helfer:innen belegt sind.
Bei Schichten mit mehreren Personen, bei denen nicht alle von Helfer:innen belegt sind, koordiniere dich bitte mit den anderen Teammitgliedern, wer von euch die Schicht übernimmt.
Natürlich kannst du auch mit anderen Menschen deine Schichten tauschen, dafür seid ihr aber selbst verantwortlich und ihr könnt den Tausch nicht im System abbilden.
Wenn du eine deiner Schichten machst, komm bitte 15 Minuten vorher kurz an den Infopoint, damit wir wissen dass du da bist.
Danke für deine Hilfe
Diese Schichtzuteilung wurde maschinell erstellt und ist auch ohne Unterschrift gültig
</pre>
{% if is_draw %}
{% endif %}
<table class="table"> <table class="table">
<thead> <thead>
<tr> <tr>
@ -33,6 +52,16 @@
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
{% else %}
{% if user.is_authenticated %}
<form method="POST">
{% csrf_token %}
<button class="button is-success" type="submit">Schichten zulosen</button>
</form>
{% else %}
Noch keine Schichten zugewiesen, bitte wende dich an den Infopoint
{% endif %}
{% endif %}
</div> </div>
</section> </section>
{% endblock %} {% endblock %}

@ -1,6 +1,7 @@
from base64 import urlsafe_b64decode from base64 import urlsafe_b64decode
from django.shortcuts import render, get_object_or_404 from django.shortcuts import render, get_object_or_404
from shiftregister.fallback.models import TeamMember from shiftregister.fallback.models import TeamMember
from .forms import EmptyForm
# Create your views here. # Create your views here.
@ -14,8 +15,16 @@ def my_fallback_shifts(request, team_member_id):
team_member_id = None team_member_id = None
team_member = get_object_or_404(TeamMember, pk=team_member_id) team_member = get_object_or_404(TeamMember, pk=team_member_id)
after_draw = False
if request.method == "POST":
form = EmptyForm(request.POST)
if form.is_valid():
team_member.assign_random_shifts()
after_draw = True
context = { context = {
"team_member": team_member, "team_member": team_member,
"shifts": team_member.fallback_shifts.order_by("start_at").all(), "shifts": team_member.fallback_shifts.order_by("start_at").all(),
"after_draw": after_draw,
} }
return render(request, "my_fallback_shifts.html", context) return render(request, "my_fallback_shifts.html", context)

Loading…
Cancel
Save