root 1 год назад
Родитель
Сommit
8fbeb99acc

+ 1 - 1
AD/settings.py

@@ -129,5 +129,5 @@ STATICFILES_DIRS = [
 
 DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
 
-LOGIN_REDIRECT_URL = '/current-week-shifts/'
+LOGIN_REDIRECT_URL = '/'
 LOGOUT_REDIRECT_URL = '/'


+ 1 - 2
main/urls.py

@@ -1,5 +1,5 @@
 from django.urls import path
-from .views import (create_multiple_shifts, current_week_shifts, edit_shift, delete_shift, delete_event, edit_event,
+from .views import (create_multiple_shifts, edit_shift, delete_shift, delete_event, edit_event,
                     create_event, public, create_helper, edit_helper, delete_helper, create_reinigung, edit_reinigung,
                     delete_reinigung)
 from django.contrib.auth import views as auth_views
@@ -9,7 +9,6 @@ urlpatterns = [
     path('create-event/', create_event, name='create_event'),
     path('create-helper/', create_helper, name='create_helper'),
     path('create-reinigung/', create_reinigung, name='create_reinigung'),
-    path('current-week-shifts/', current_week_shifts, name='current_week_shifts'),
     path('edit-shift/<int:pk>/', edit_shift, name='edit_shift'),
     path('edit-helper/<int:pk>/', edit_helper, name='edit_helper'),
     path('edit-reinigung/<int:pk>/', edit_reinigung, name='edit_reinigung'),

+ 12 - 113
main/views.py

@@ -33,7 +33,7 @@ def create_multiple_shifts(request):
                     shifttype=shifttype,
                     info=info
                 )
-            return redirect('current_week_shifts')  # Annahme, dass Sie eine Erfolgsmeldung anzeigen möchten
+            return redirect('public')  # Annahme, dass Sie eine Erfolgsmeldung anzeigen möchten
     else:
         form = MultipleShiftForm(initial=initial_data)
 
@@ -63,7 +63,7 @@ def create_event(request):
                 cvd=cvd,
                 cvt=cvt
                 )
-            return redirect('current_week_shifts')  # Annahme, dass Sie eine Erfolgsmeldung anzeigen möchten
+            return redirect('public')  # Annahme, dass Sie eine Erfolgsmeldung anzeigen möchten
     else:
         form = EventForm(initial=initial_data)
 
@@ -75,107 +75,6 @@ def is_admin(user):
     return user.is_authenticated and user.is_staff
 
 
-@user_passes_test(is_admin, login_url='/public')
-def current_week_shifts(request):
-    # Standardmäßig die aktuelle Woche anzeigen
-    today = timezone.now().date()
-
-    # Überprüfen, ob ein Startdatum in der URL angegeben ist
-    start_date_str = request.GET.get('start_date')
-    if start_date_str:
-        try:
-            start_of_week = datetime.strptime(start_date_str, '%Y-%m-%d').date()
-        except ValueError:
-            start_of_week = today - timedelta(days=today.weekday())  # Fallback auf die aktuelle Woche bei Fehler
-    else:
-        start_of_week = today - timedelta(days=today.weekday())  # Montag der aktuellen Woche
-
-    end_of_week = start_of_week + timedelta(days=6)  # Sonntag der aktuellen Woche
-
-    # Berechnung für die nächste und vorherige Woche
-    previous_week = start_of_week - timedelta(days=7)
-    next_week = start_of_week + timedelta(days=7)
-
-    # Berechnung der Kalenderwoche
-    calendar_week = start_of_week.isocalendar()[1]
-
-    # Initialisiere ein Dictionary für die Schichten der Mitarbeiter
-    shifts_by_employee = {}
-    events_by_location = {}
-    helpers_by_date = {}
-    reinigungs_by_date = {}
-    employees = Employee.objects.all()
-    locations = Location.objects.all()
-    helpers = Helper.objects.all()
-    reinigungs = Reinigung.objects.all()
-
-
-    for employee in employees:
-        shifts_by_employee[employee] = {day: None for day in range(7)}
-
-    for location in locations:
-        events_by_location[location] = {day: None for day in range(7)}
-
-    for helper in helpers:
-        helpers_by_date = {day: None for day in range(7)}
-
-    for reinigung in reinigungs:
-        reinigungs_by_date = {day: None for day in range(7)}
-
-        # Hole alle Schichten für die aktuelle Woche
-    shifts = Shift.objects.filter(date__range=[start_of_week, end_of_week])
-
-    events = Event.objects.filter(date__range=[start_of_week, end_of_week])
-
-    helpers = Helper.objects.filter(date__range=[start_of_week, end_of_week])
-
-    reinigungs = Reinigung.objects.filter(date__range=[start_of_week, end_of_week])
-
-    # Fülle das Dictionary mit den Schichtdaten
-    for shift in shifts:
-        employee = shift.employee
-        day_of_week = (shift.date - start_of_week).days
-        shifts_by_employee[employee][day_of_week] = shift
-
-    for event in events:
-        location = event.location
-        day_of_week = (event.date - start_of_week).days
-        events_by_location[location][day_of_week] = event
-
-    for helper in helpers:
-        day_of_week = (helper.date - start_of_week).days
-        helpers_by_date[day_of_week] = helper
-
-    for reinigung in reinigungs:
-        day_of_week = (reinigung.date - start_of_week).days
-        reinigungs_by_date[day_of_week] = reinigung
-
-
-    # Bereite die Daten der Woche für das Template vor
-    week_dates = [(start_of_week + timedelta(days=i)).strftime("%d.%m.%Y") for i in range(7)]
-    days_of_week = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So']
-    days_with_dates = list(zip(days_of_week, week_dates))
-
-    context = {
-        'shifts_by_employee': shifts_by_employee,
-        'events_by_location': events_by_location,
-        'helpers_by_date': helpers_by_date,
-        'reinigungs_by_date': reinigungs_by_date,
-        'start_of_week': start_of_week,
-        'end_of_week': end_of_week,
-        'days_with_dates': days_with_dates,
-        'range_days': range(7),
-        'previous_week': previous_week.strftime('%Y-%m-%d'),
-        'next_week': next_week.strftime('%Y-%m-%d'),
-        'calendar_week': calendar_week,
-    }
-    #print(shifts_by_employee)
-    print(events_by_location)
-    print(helpers_by_date)
-    print(reinigungs_by_date)
-    return render(request, 'main/current_week_shifts.html', context)
-
-
 def public(request):
     # Standardmäßig die aktuelle Woche anzeigen
     today = timezone.now().date()
@@ -268,7 +167,7 @@ def create_reinigung(request):
         form = ReinigungForm(request.POST)
         if form.is_valid():
             form.save()
-            return redirect('current_week_shifts')  # Redirect to a relevant page after saving
+            return redirect('public')  # Redirect to a relevant page after saving
     else:
         form = ReinigungForm()
     return render(request, 'main/create_reinigung.html', {'form': form})
@@ -283,7 +182,7 @@ def create_helper(request):
         form = HelperForm(request.POST)
         if form.is_valid():
             form.save()
-            return redirect('current_week_shifts')  # Redirect to a relevant page after saving
+            return redirect('public')  # Redirect to a relevant page after saving
     else:
         form = HelperForm()
     return render(request, 'main/create_helper.html', {'form': form})
@@ -295,7 +194,7 @@ def edit_reinigung(request, pk):
         form = ReinigungForm(request.POST, instance=reinigung)
         if form.is_valid():
             form.save()
-            return redirect('current_week_shifts')
+            return redirect('public')
     else:
         form = ReinigungForm(instance=reinigung)
     return render(request, 'main/edit_reinigung.html', {'form': form, 'reinigung': reinigung})
@@ -306,7 +205,7 @@ def edit_helper(request, pk):
         form = HelperForm(request.POST, instance=helper)
         if form.is_valid():
             form.save()
-            return redirect('current_week_shifts')
+            return redirect('public')
     else:
         form = HelperForm(instance=helper)
     return render(request, 'main/edit_helper.html', {'form': form, 'helper': helper})
@@ -318,7 +217,7 @@ def edit_shift(request, pk):
         form = ShiftForm(request.POST, instance=shift)
         if form.is_valid():
             form.save()
-            return redirect('current_week_shifts')
+            return redirect('public')
     else:
         form = ShiftForm(instance=shift)
     return render(request, 'main/edit_shift.html', {'form': form, 'shift': shift})
@@ -330,7 +229,7 @@ def edit_event(request, pk):
         form = EventForm(request.POST, instance=event)
         if form.is_valid():
             form.save()
-            return redirect('current_week_shifts')
+            return redirect('public')
     else:
         form = EventForm(instance=event)
     return render(request, 'main/edit_event.html', {'form': form, 'event': event})
@@ -340,21 +239,21 @@ def delete_shift(request, pk):
     shift = get_object_or_404(Shift, pk=pk)
     if request.method == 'POST':
         shift.delete()
-        return redirect('current_week_shifts')
+        return redirect('public')
     return render(request, 'main/delete_shift.html', {'shift': shift})
 
 def delete_reinigung(request, pk):
     reinigung = get_object_or_404(Reinigung, pk=pk)
     if request.method == 'POST':
         reinigung.delete()
-        return redirect('current_week_shifts')
+        return redirect('public')
     return render(request, 'main/delete_reinigung.html', {'reinigung': reinigung})
 
 def delete_helper(request, pk):
     helper = get_object_or_404(Helper, pk=pk)
     if request.method == 'POST':
         helper.delete()
-        return redirect('current_week_shifts')
+        return redirect('public')
     return render(request, 'main/delete_helper.html', {'helper': helper})
 
 
@@ -362,5 +261,5 @@ def delete_event(request, pk):
     event = get_object_or_404(Event, pk=pk)
     if request.method == 'POST':
         event.delete()
-        return redirect('current_week_shifts')
+        return redirect('public')
     return render(request, 'main/delete_event.html', {'event': event})

+ 1 - 1
templates/main/create_event.html

@@ -13,7 +13,7 @@
             {% csrf_token %}
             {% bootstrap_form form %}
             <button type="submit" class="btn btn-primary">Event erstellen</button>
-            <a href="{% url 'current_week_shifts' %}" class="btn btn-secondary">Abbrechen</a>
+            <a href="{% url 'public' %}" class="btn btn-secondary">Abbrechen</a>
         </form>
     </div>
     {% bootstrap_javascript %}

+ 1 - 1
templates/main/create_helper.html

@@ -13,7 +13,7 @@
             {% csrf_token %}
             {% bootstrap_form form %}
             <button type="submit" class="btn btn-primary">Helfer einstellen</button>
-            <a href="{% url 'current_week_shifts' %}" class="btn btn-secondary">Abbrechen</a>
+            <a href="{% url 'public' %}" class="btn btn-secondary">Abbrechen</a>
         </form>
     </div>
     {% bootstrap_javascript %}

+ 1 - 1
templates/main/create_multiple_shifts.html

@@ -13,7 +13,7 @@
             {% csrf_token %}
             {% bootstrap_form form %}
             <button type="submit" class="btn btn-primary">Schichten erstellen</button>
-            <a href="{% url 'current_week_shifts' %}" class="btn btn-secondary">Abbrechen</a>
+            <a href="{% url 'public' %}" class="btn btn-secondary">Abbrechen</a>
         </form>
     </div>
     {% bootstrap_javascript %}

+ 1 - 1
templates/main/create_reinigung.html

@@ -13,7 +13,7 @@
             {% csrf_token %}
             {% bootstrap_form form %}
             <button type="submit" class="btn btn-primary">Event erstellen</button>
-            <a href="{% url 'current_week_shifts' %}" class="btn btn-secondary">Abbrechen</a>
+            <a href="{% url 'public' %}" class="btn btn-secondary">Abbrechen</a>
         </form>
     </div>
     {% bootstrap_javascript %}

+ 10 - 3
templates/main/current_week_shifts.html

@@ -108,7 +108,9 @@
                         {% for day, date in days_with_dates %}
                             {% with event=events|get_item:forloop.counter0 %}
                                 {% if event == None %}
-                                    <td class="shift-none" onclick="window.location.href='{% url 'create_event' %}?date={{ date }}'"></td>
+                                    {% if user.is_superuser %}
+                                        <td class="shift-none" onclick="window.location.href='{% url 'create_event' %}?date={{ date }}'"></td>
+                                    {% endif %}
                                 {% else %}
                                     <td class="shift-none" onclick="window.location.href='{% url 'edit_event' pk=event.id %}'" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-html="true" title="Name: {{ event.name }}<br> Location: {{ event.location }}<br> CVD: {{ event.cvd }}<br> CVT: {{ event.cvt }}<br> Info: {{ event.info }}">
                                             {% if event.name %}
@@ -189,7 +191,12 @@
                                         {% else %}
                                             shift-other
                                         {% endif %}
-                                    " onclick="window.location.href='{% url 'edit_shift' pk=shift.id %}'" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-html="true" title="Info: {{ shift.info }}">
+                                        "
+                                        onclick="window.location.href='{% url 'edit_shift' pk=shift.id %}'"
+                                            {% if shift.info  %}
+                                                data-bs-toggle="tooltip" data-bs-placement="top" data-bs-html="true" title="Info: {{ shift.info }}"
+                                            {% endif %}
+                                            >
                                             {% if shift.start and shift.end %}
                                                 {{ shift.start|time:"H:i" }} - {{ shift.end|time:"H:i" }}
                                             {% else %}
@@ -214,4 +221,4 @@
         })
     </script>
 </body>
-</html>
+</html>

+ 1 - 1
templates/main/delete_event.html

@@ -14,7 +14,7 @@
         <form method="post">
             {% csrf_token %}
             <button type="submit" class="btn btn-danger">Löschen</button>
-            <a href="{% url 'current_week_shifts' %}" class="btn btn-secondary">Abbrechen</a>
+            <a href="{% url 'public' %}" class="btn btn-secondary">Abbrechen</a>
         </form>
     </div>
     {% bootstrap_javascript %}

+ 1 - 1
templates/main/delete_helper.html

@@ -14,7 +14,7 @@
         <form method="post">
             {% csrf_token %}
             <button type="submit" class="btn btn-danger">Löschen</button>
-            <a href="{% url 'current_week_shifts' %}" class="btn btn-secondary">Abbrechen</a>
+            <a href="{% url 'public' %}" class="btn btn-secondary">Abbrechen</a>
         </form>
     </div>
     {% bootstrap_javascript %}

+ 1 - 1
templates/main/delete_reinigung.html

@@ -14,7 +14,7 @@
         <form method="post">
             {% csrf_token %}
             <button type="submit" class="btn btn-danger">Löschen</button>
-            <a href="{% url 'current_week_shifts' %}" class="btn btn-secondary">Abbrechen</a>
+            <a href="{% url 'public' %}" class="btn btn-secondary">Abbrechen</a>
         </form>
     </div>
     {% bootstrap_javascript %}

+ 1 - 1
templates/main/delete_shift.html

@@ -14,7 +14,7 @@
         <form method="post">
             {% csrf_token %}
             <button type="submit" class="btn btn-danger">Löschen</button>
-            <a href="{% url 'current_week_shifts' %}" class="btn btn-secondary">Abbrechen</a>
+            <a href="{% url 'public' %}" class="btn btn-secondary">Abbrechen</a>
         </form>
     </div>
     {% bootstrap_javascript %}

+ 1 - 1
templates/main/edit_event.html

@@ -13,7 +13,7 @@
             {% csrf_token %}
             {% bootstrap_form form %}
             <button type="submit" class="btn btn-primary">Speichern</button>
-            <a href="{% url 'current_week_shifts' %}" class="btn btn-secondary">Abbrechen</a>
+            <a href="{% url 'public' %}" class="btn btn-secondary">Abbrechen</a>
         </form>
         <form method="post" action="{% url 'delete_event' pk=event.id %}" class="mt-3">
             {% csrf_token %}

+ 1 - 1
templates/main/edit_helper.html

@@ -13,7 +13,7 @@
             {% csrf_token %}
             {% bootstrap_form form %}
             <button type="submit" class="btn btn-primary">Speichern</button>
-            <a href="{% url 'current_week_shifts' %}" class="btn btn-secondary">Abbrechen</a>
+            <a href="{% url 'public' %}" class="btn btn-secondary">Abbrechen</a>
         </form>
         <form method="post" action="{% url 'delete_helper' pk=helper.id %}" class="mt-3">
             {% csrf_token %}

+ 1 - 1
templates/main/edit_reinigung.html

@@ -13,7 +13,7 @@
             {% csrf_token %}
             {% bootstrap_form form %}
             <button type="submit" class="btn btn-primary">Speichern</button>
-            <a href="{% url 'current_week_shifts' %}" class="btn btn-secondary">Abbrechen</a>
+            <a href="{% url 'public' %}" class="btn btn-secondary">Abbrechen</a>
         </form>
         <form method="post" action="{% url 'delete_reinigung' pk=reinigung.id %}" class="mt-3">
             {% csrf_token %}

+ 1 - 1
templates/main/edit_shift.html

@@ -13,7 +13,7 @@
             {% csrf_token %}
             {% bootstrap_form form %}
             <button type="submit" class="btn btn-primary">Speichern</button>
-            <a href="{% url 'current_week_shifts' %}" class="btn btn-secondary">Abbrechen</a>
+            <a href="{% url 'public' %}" class="btn btn-secondary">Abbrechen</a>
         </form>
         <form method="post" action="{% url 'delete_shift' pk=shift.id %}" class="mt-3">
             {% csrf_token %}

+ 56 - 17
templates/main/public.html

@@ -19,7 +19,10 @@
         }
         .shift-none {
             background-color: white !important;
-            text-align: center;
+            text-align: center !important;
+            {% if user.is_authenticated %}
+                cursor: pointer !important;
+            {% endif %}
         }
         .shift-vacation {
             background-color: blue !important;
@@ -71,21 +74,30 @@
             margin: 0; /* Remove margin to eliminate extra space */
         }
         @media print {
-            .buttons-container {
+            .btn {
                 display: none; /* Hide the buttons when printing */
             }
         }
     </style>
 </head>
 <body>
-    <div class="buttons-container">
-        <a href="?start_date={{ previous_week }}" class="btn btn-primary">Eine Woche zurück</a>
-        <a href="/public/" class="btn btn-primary">Aktuelle Woche</a>
-        <a href="/login/" class="btn btn-secondary">Login</a>
-        <a href="?start_date={{ next_week }}" class="btn btn-primary">Eine Woche vorwärts</a>
-    </div>
     <div class="container-fluid">
-        <h4 class="custom-heading">Dienstplan für KW {{ calendar_week }}</h4>
+        <table class="table">
+            <tr>
+                <td><a href="?start_date={{ previous_week }}" class="btn btn-primary text-start">Eine Woche zurück</a></td>
+                <td><a href="/" class="btn btn-primary">Aktuelle Woche</a></td>
+                <td><h4 class="custom-heading text-center">Dienstplan für KW {{ calendar_week }}</h4></td>
+                <td class="text-end">{% if user.is_authenticated %}
+                        <form method="post" action="{% url 'logout' %}" style="display: inline;">
+                            {% csrf_token %}
+                            <button type="submit" class="btn btn-secondary">Logout</button>
+                        </form>
+                    {% else %}
+                        <a href="/login/" class="btn btn-secondary">Login</a>
+                    {% endif %}</td>
+                <td class="text-end"><a href="?start_date={{ next_week }}" class="btn btn-primary">Eine Woche vorwärts</a></td>
+            </tr>
+        </table>
         <div class="table-responsive">
             <table class="table  table-bordered table-striped table-hover w-100">
                 <thead class="table-dark">
@@ -103,9 +115,11 @@
                         {% for day, date in days_with_dates %}
                             {% with event=events|get_item:forloop.counter0 %}
                                 {% if event == None %}
-                                    <td class="shift-none"></td>
+                                    {% if user.is_authenticated %}
+                                        <td class="shift-none" onclick="window.location.href='{% url 'create_event' %}?date={{ date }}'"></td>
+                                    {% endif %}
                                 {% else %}
-                                    <td class="shift-none" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-html="true" title="Name: {{ event.name }}<br> Location: {{ event.location }}<br> CVD: {{ event.cvd }}<br> CVT: {{ event.cvt }}">
+                                    <td class="shift-none" {% if user.is_authenticated %} onclick="window.location.href='{% url 'edit_event' pk=event.id %}'" {% endif %} data-bs-toggle="tooltip" data-bs-placement="top" data-bs-html="true" title="Name: {{ event.name }}<br> Location: {{ event.location }}<br> CVD: {{ event.cvd }}<br> CVT: {{ event.cvt }}<br> Info: {{ event.info }}">
                                             {% if event.name %}
                                                 {{ event.name }}
                                             {% else %}
@@ -117,21 +131,39 @@
                         {% endfor %}
                     </tr>
                     {% endfor %}
+                    <tr>
+                        <td class="employee-name">Reinigung</td>
+                        {% for day in range_days %}
+                            {% if reinigungs_by_date|default_if_none:None %}
+                                {% if reinigungs_by_date|get_item:day %}
+                                    {% with reinigung=reinigungs_by_date|get_item:day %}
+                                        <td class="shift-none" {% if user.is_authenticated %} onclick="window.location.href='{% url 'edit_reinigung' pk=reinigung.id %}'" {% endif %}>
+                                            {{ reinigung.auftrag }}
+                                        </td>
+                                    {% endwith %}
+                                {% else %}
+                                    <td class="shift-none" {% if user.is_authenticated %} onclick="window.location.href='{% url 'create_reinigung' %}?date={{ date }}'" {% endif %}>--</td>
+                                {% endif %}
+                            {% else %}
+                                <td class="shift-none" {% if user.is_authenticated %} onclick="window.location.href='{% url 'create_reinigung' %}?date={{ date }}'" {% endif %}>--</td>
+                            {% endif %}
+                        {% endfor %}
+                    </tr>
                     <tr>
                         <td class="employee-name">Helfer</td>
                         {% for day in range_days %}
                             {% if helpers_by_date|default_if_none:None %}
                                 {% if helpers_by_date|get_item:day %}
                                     {% with helper=helpers_by_date|get_item:day %}
-                                        <td class="shift-none" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-html="true" title="Benötigt: {{ helper.ben }}<br> Bestellt: {{ helper.best }}<br> Info: {{ helper.info }}">
+                                        <td class="shift-none" {% if user.is_authenticated %} onclick="window.location.href='{% url 'edit_helper' pk=helper.id %}'" {% endif %}>
                                             {{ helper.ben }}/{{ helper.best }}
                                         </td>
                                     {% endwith %}
                                 {% else %}
-                                    <td class="shift-none" >--</td>
+                                    <td class="shift-none" {% if user.is_authenticated %} onclick="window.location.href='{% url 'create_helper' %}?date={{ date }}'" {% endif %}>--</td>
                                 {% endif %}
                             {% else %}
-                                <td class="shift-none" >--</td>
+                                <td class="shift-none" {% if user.is_authenticated %} onclick="window.location.href='{% url 'create_helper' %}?date={{ date }}'" {% endif %}>--</td>
                             {% endif %}
                         {% endfor %}
                     </tr>
@@ -150,7 +182,7 @@
                         {% for day, date in days_with_dates %}
                             {% with shift=shifts|get_item:forloop.counter0 %}
                                 {% if shift == None %}
-                                    <td class="shift-none">
+                                    <td class="shift-none" {% if user.is_authenticated %} onclick="window.location.href='{% url 'create_multiple_shifts' %}?date={{ date }}'"{% endif %}>
                                         F
                                     </td>
                                 {% else %}
@@ -164,7 +196,14 @@
                                         {% else %}
                                             shift-other
                                         {% endif %}
-                                    ">
+                                    "
+                                        {% if user.is_authenticated %}
+                                            onclick="window.location.href='{% url 'edit_shift' pk=shift.id %}'"
+                                        {% endif %}
+                                            {% if shift.info  %}
+                                                data-bs-toggle="tooltip" data-bs-placement="top" data-bs-html="true" title="Info: {{ shift.info }}"
+                                            {% endif %}
+                                    >
                                             {% if shift.start and shift.end %}
                                                 {{ shift.start|time:"H:i" }} - {{ shift.end|time:"H:i" }}
                                             {% else %}
@@ -189,4 +228,4 @@
         })
     </script>
 </body>
-</html>
+</html>