Browse Source

20240722_2212
Worskl Reinigung

Rene 1 year ago
parent
commit
9f16e28a55

+ 1 - 1
AD/settings.py

@@ -107,7 +107,7 @@ AUTH_PASSWORD_VALIDATORS = [
 # Internationalization
 # Internationalization
 # https://docs.djangoproject.com/en/5.0/topics/i18n/
 # https://docs.djangoproject.com/en/5.0/topics/i18n/
 
 
-LANGUAGE_CODE = 'en-en'
+LANGUAGE_CODE = 'de-de'
 
 
 TIME_ZONE = 'Europe/Berlin'
 TIME_ZONE = 'Europe/Berlin'
 
 

+ 1 - 0
AD/urls.py

@@ -18,6 +18,7 @@ from django.contrib import admin
 from django.urls import path, include
 from django.urls import path, include
 from django.views.generic import RedirectView
 from django.views.generic import RedirectView
 from django.urls import re_path as url
 from django.urls import re_path as url
+admin.autodiscover()
 
 
 
 
 urlpatterns = [
 urlpatterns = [

BIN
db.sqlite3


+ 6 - 2
main/admin.py

@@ -1,11 +1,15 @@
 from django.contrib import admin
 from django.contrib import admin
-from .models import Employee, Shift, Location, Event, Helper
+from .models import Employee, Shift, Location, Event, Helper, Reinigung
 
 
 
 
 class HelperAdmin(admin.ModelAdmin):
 class HelperAdmin(admin.ModelAdmin):
     list_display = ('date', 'ben', 'best', 'info')
     list_display = ('date', 'ben', 'best', 'info')
     search_fields = ('date', 'info')
     search_fields = ('date', 'info')
 
 
+class ReinigungAdmin(admin.ModelAdmin):
+    list_display = ('date', 'auftrag', 'info')
+    search_fields = ('date', 'info')
+
 
 
 class EmployeeAdmin(admin.ModelAdmin):
 class EmployeeAdmin(admin.ModelAdmin):
     list_display = ('name', 'daily_workhours', 'info')
     list_display = ('name', 'daily_workhours', 'info')
@@ -23,9 +27,9 @@ class EventAdmin(admin.ModelAdmin):
     list_filter = ('date', 'name', 'event_type')
     list_filter = ('date', 'name', 'event_type')
     search_fields = ('date', 'name', 'location', 'event_type')
     search_fields = ('date', 'name', 'location', 'event_type')
 
 
-
 admin.site.register(Employee, EmployeeAdmin)
 admin.site.register(Employee, EmployeeAdmin)
 admin.site.register(Shift, ShiftAdmin)
 admin.site.register(Shift, ShiftAdmin)
 admin.site.register(Event, EventAdmin)
 admin.site.register(Event, EventAdmin)
 admin.site.register(Location)
 admin.site.register(Location)
 admin.site.register(Helper, HelperAdmin)
 admin.site.register(Helper, HelperAdmin)
+admin.site.register(Reinigung, ReinigungAdmin)

+ 5 - 1
main/forms.py

@@ -1,5 +1,5 @@
 from django import forms
 from django import forms
-from .models import Shift, Employee, Event, Helper
+from .models import Shift, Employee, Event, Helper, Reinigung
 from django.utils.translation import gettext_lazy as _
 from django.utils.translation import gettext_lazy as _
 
 
 class MultipleShiftForm(forms.Form):
 class MultipleShiftForm(forms.Form):
@@ -21,6 +21,10 @@ class EventForm(forms.ModelForm):
         model = Event
         model = Event
         fields = ['date', 'name', 'event_type', 'location', 'cvd', 'cvt']
         fields = ['date', 'name', 'event_type', 'location', 'cvd', 'cvt']
 
 
+class ReinigungForm(forms.ModelForm):
+    class Meta:
+        model = Reinigung
+        fields = ['date', 'auftrag', 'info']
 
 
 class HelperForm(forms.ModelForm):
 class HelperForm(forms.ModelForm):
 
 

+ 22 - 0
main/migrations/0006_reinigung.py

@@ -0,0 +1,22 @@
+# Generated by Django 5.0.2 on 2024-10-18 15:57
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('main', '0005_alter_helper_best'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Reinigung',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('date', models.DateField()),
+                ('Auftrag', models.CharField(choices=[('Beauftragen', 'Beauftragen'), ('Bestellt', 'Bestellt')], default='', max_length=12, null=True)),
+                ('Info', models.TextField(blank=True, null=True)),
+            ],
+        ),
+    ]

+ 17 - 0
main/models.py

@@ -12,6 +12,23 @@ class Helper(models.Model):
     def __str__(self):
     def __str__(self):
         return f"{self.date} - {self.ben} - {self.best}"
         return f"{self.date} - {self.ben} - {self.best}"
 
 
+class Reinigung(models.Model):
+    class ShiftType(models.TextChoices):
+        Beauftragen = 'Beauftragen'  # Placeholder for "None" if you're using it
+        Bestellt = 'Bestellt'
+
+    date = models.DateField()
+    auftrag = models.CharField(
+        max_length=12,
+        choices=ShiftType.choices,
+        default='',
+        null=True,
+    )
+    info = models.TextField(blank=True, null=True)
+
+    def __str__(self):
+        return f"{self.date} - {self.auftrag}"
+
 class Employee(models.Model):
 class Employee(models.Model):
     name = models.CharField(max_length=100)
     name = models.CharField(max_length=100)
     daily_workhours = models.PositiveIntegerField()
     daily_workhours = models.PositiveIntegerField()

+ 5 - 1
main/urls.py

@@ -1,17 +1,21 @@
 from django.urls import path
 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, current_week_shifts, edit_shift, delete_shift, delete_event, edit_event,
-                    create_event, public, create_helper, edit_helper, delete_helper)
+                    create_event, public, create_helper, edit_helper, delete_helper, create_reinigung, edit_reinigung,
+                    delete_reinigung)
 from django.contrib.auth import views as auth_views
 from django.contrib.auth import views as auth_views
 
 
 urlpatterns = [
 urlpatterns = [
     path('create-multiple-shifts/', create_multiple_shifts, name='create_multiple_shifts'),
     path('create-multiple-shifts/', create_multiple_shifts, name='create_multiple_shifts'),
     path('create-event/', create_event, name='create_event'),
     path('create-event/', create_event, name='create_event'),
     path('create-helper/', create_helper, name='create_helper'),
     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('current-week-shifts/', current_week_shifts, name='current_week_shifts'),
     path('edit-shift/<int:pk>/', edit_shift, name='edit_shift'),
     path('edit-shift/<int:pk>/', edit_shift, name='edit_shift'),
     path('edit-helper/<int:pk>/', edit_helper, name='edit_helper'),
     path('edit-helper/<int:pk>/', edit_helper, name='edit_helper'),
+    path('edit-reinigung/<int:pk>/', edit_reinigung, name='edit_reinigung'),
     path('delete-shift/<int:pk>/', delete_shift, name='delete_shift'),
     path('delete-shift/<int:pk>/', delete_shift, name='delete_shift'),
     path('delete-helper/<int:pk>/', delete_helper, name='delete_helper'),
     path('delete-helper/<int:pk>/', delete_helper, name='delete_helper'),
+    path('delete-reinigung/<int:pk>/', delete_reinigung, name='delete_reinigung'),
     path('edit-event/<int:pk>/', edit_event, name='edit_event'),
     path('edit-event/<int:pk>/', edit_event, name='edit_event'),
     path('delete-event/<int:pk>/', delete_event, name='delete_event'),
     path('delete-event/<int:pk>/', delete_event, name='delete_event'),
     path('login/', auth_views.LoginView.as_view(template_name='registration/login.html'), name='login'),
     path('login/', auth_views.LoginView.as_view(template_name='registration/login.html'), name='login'),

+ 53 - 2
main/views.py

@@ -1,6 +1,6 @@
 from django.shortcuts import render, redirect, get_object_or_404
 from django.shortcuts import render, redirect, get_object_or_404
-from .forms import MultipleShiftForm, ShiftForm, EventForm, HelperForm
-from .models import Shift, Employee, Location, Event, Helper
+from .forms import MultipleShiftForm, ShiftForm, EventForm, HelperForm, ReinigungForm
+from .models import Shift, Employee, Location, Event, Helper, Reinigung
 from django.utils.timezone import datetime, timedelta
 from django.utils.timezone import datetime, timedelta
 from django.utils import timezone
 from django.utils import timezone
 from django.contrib.auth.decorators import user_passes_test
 from django.contrib.auth.decorators import user_passes_test
@@ -100,9 +100,12 @@ def current_week_shifts(request):
     shifts_by_employee = {}
     shifts_by_employee = {}
     events_by_location = {}
     events_by_location = {}
     helpers_by_date = {}
     helpers_by_date = {}
+    reinigungs_by_date = {}
     employees = Employee.objects.all()
     employees = Employee.objects.all()
     locations = Location.objects.all()
     locations = Location.objects.all()
     helpers = Helper.objects.all()
     helpers = Helper.objects.all()
+    reinigungs = Reinigung.objects.all()
+
 
 
     for employee in employees:
     for employee in employees:
         shifts_by_employee[employee] = {day: None for day in range(7)}
         shifts_by_employee[employee] = {day: None for day in range(7)}
@@ -113,6 +116,9 @@ def current_week_shifts(request):
     for helper in helpers:
     for helper in helpers:
         helpers_by_date = {day: None for day in range(7)}
         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
         # Hole alle Schichten für die aktuelle Woche
     shifts = Shift.objects.filter(date__range=[start_of_week, end_of_week])
     shifts = Shift.objects.filter(date__range=[start_of_week, end_of_week])
 
 
@@ -120,6 +126,8 @@ def current_week_shifts(request):
 
 
     helpers = Helper.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
     # Fülle das Dictionary mit den Schichtdaten
     for shift in shifts:
     for shift in shifts:
         employee = shift.employee
         employee = shift.employee
@@ -135,6 +143,11 @@ def current_week_shifts(request):
         day_of_week = (helper.date - start_of_week).days
         day_of_week = (helper.date - start_of_week).days
         helpers_by_date[day_of_week] = helper
         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
     # 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)]
     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_of_week = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So']
@@ -144,6 +157,7 @@ def current_week_shifts(request):
         'shifts_by_employee': shifts_by_employee,
         'shifts_by_employee': shifts_by_employee,
         'events_by_location': events_by_location,
         'events_by_location': events_by_location,
         'helpers_by_date': helpers_by_date,
         'helpers_by_date': helpers_by_date,
+        'reinigungs_by_date': reinigungs_by_date,
         'start_of_week': start_of_week,
         'start_of_week': start_of_week,
         'end_of_week': end_of_week,
         'end_of_week': end_of_week,
         'days_with_dates': days_with_dates,
         'days_with_dates': days_with_dates,
@@ -155,6 +169,7 @@ def current_week_shifts(request):
     #print(shifts_by_employee)
     #print(shifts_by_employee)
     print(events_by_location)
     print(events_by_location)
     print(helpers_by_date)
     print(helpers_by_date)
+    print(reinigungs_by_date)
     return render(request, 'main/current_week_shifts.html', context)
     return render(request, 'main/current_week_shifts.html', context)
 
 
 
 
@@ -228,8 +243,27 @@ def public(request):
     }
     }
     return render(request, 'main/public.html', context)
     return render(request, 'main/public.html', context)
 
 
+def create_reinigung(request):
+    date_str = request.GET.get('date')
+    initial_data = {}
+    if date_str:
+        initial_data['date'] = date_str
+
+    if request.method == 'POST':
+        form = ReinigungForm(request.POST)
+        if form.is_valid():
+            form.save()
+            return redirect('current_week_shifts')  # Redirect to a relevant page after saving
+    else:
+        form = ReinigungForm()
+    return render(request, 'main/create_reinigung.html', {'form': form})
 
 
 def create_helper(request):
 def create_helper(request):
+    date_str = request.GET.get('date')
+    initial_data = {}
+    if date_str:
+        initial_data['date'] = date_str
+
     if request.method == 'POST':
     if request.method == 'POST':
         form = HelperForm(request.POST)
         form = HelperForm(request.POST)
         if form.is_valid():
         if form.is_valid():
@@ -240,6 +274,17 @@ def create_helper(request):
     return render(request, 'main/create_helper.html', {'form': form})
     return render(request, 'main/create_helper.html', {'form': form})
 
 
 
 
+def edit_reinigung(request, pk):
+    reinigung = get_object_or_404(Reinigung, pk=pk)
+    if request.method == 'POST':
+        form = ReinigungForm(request.POST, instance=reinigung)
+        if form.is_valid():
+            form.save()
+            return redirect('current_week_shifts')
+    else:
+        form = ReinigungForm(instance=reinigung)
+    return render(request, 'main/edit_reinigung.html', {'form': form, 'reinigung': reinigung})
+
 def edit_helper(request, pk):
 def edit_helper(request, pk):
     helper = get_object_or_404(Helper, pk=pk)
     helper = get_object_or_404(Helper, pk=pk)
     if request.method == 'POST':
     if request.method == 'POST':
@@ -283,6 +328,12 @@ def delete_shift(request, pk):
         return redirect('current_week_shifts')
         return redirect('current_week_shifts')
     return render(request, 'main/delete_shift.html', {'shift': shift})
     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 render(request, 'main/delete_reinigung.html', {'reinigung': reinigung})
 
 
 def delete_helper(request, pk):
 def delete_helper(request, pk):
     helper = get_object_or_404(Helper, pk=pk)
     helper = get_object_or_404(Helper, pk=pk)

+ 21 - 0
templates/main/create_reinigung.html

@@ -0,0 +1,21 @@
+{% load bootstrap5 %}
+<!DOCTYPE html>
+<html lang="de">
+<head>
+    <meta charset="UTF-8">
+    <title>Reinigungsauftrag erstellen</title>
+    {% bootstrap_css %}
+</head>
+<body>
+    <div class="container">
+        <h2>Reinigungsauftrag erstellen</h2>
+        <form method="post">
+            {% 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>
+        </form>
+    </div>
+    {% bootstrap_javascript %}
+</body>
+</html>

+ 19 - 1
templates/main/current_week_shifts.html

@@ -107,7 +107,7 @@
                         {% for day, date in days_with_dates %}
                         {% for day, date in days_with_dates %}
                             {% with event=events|get_item:forloop.counter0 %}
                             {% with event=events|get_item:forloop.counter0 %}
                                 {% if event == None %}
                                 {% if event == None %}
-                                    <td class="shift-none" onclick="window.location.href='{% url 'create_event' %}?date={{ helper.date }}'"></td>
+                                    <td class="shift-none" onclick="window.location.href='{% url 'create_event' %}?date={{ date }}'"></td>
                                 {% else %}
                                 {% 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 }}">
                                     <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 }}">
                                             {% if event.name %}
                                             {% if event.name %}
@@ -121,6 +121,24 @@
                         {% endfor %}
                         {% endfor %}
                     </tr>
                     </tr>
                     {% endfor %}
                     {% 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" onclick="window.location.href='{% url 'edit_reinigung' pk=reinigung.id %}'">
+                                            {{ reinigung.auftrag }}
+                                        </td>
+                                    {% endwith %}
+                                {% else %}
+                                    <td class="shift-none" onclick="window.location.href='{% url 'create_reinigung' %}?date={{ date }}'">--</td>
+                                {% endif %}
+                            {% else %}
+                                <td class="shift-none" onclick="window.location.href='{% url 'create_reinigung' %}?date={{ date }}'">--</td>
+                            {% endif %}
+                        {% endfor %}
+                    </tr>
                     <tr>
                     <tr>
                         <td class="employee-name">Helfer</td>
                         <td class="employee-name">Helfer</td>
                         {% for day in range_days %}
                         {% for day in range_days %}

+ 22 - 0
templates/main/delete_reinigung.html

@@ -0,0 +1,22 @@
+{% load bootstrap5 %}
+
+<!DOCTYPE html>
+<html lang="de">
+<head>
+    <meta charset="UTF-8">
+    <title>Reinigungsauftrag löschen</title>
+    {% bootstrap_css %}
+</head>
+<body>
+    <div class="container">
+        <h2>Helfer löschen</h2>
+        <p>Möchten Sie den Reinigungsauftrag wirklich löschen?</p>
+        <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>
+        </form>
+    </div>
+    {% bootstrap_javascript %}
+</body>
+</html>

+ 25 - 0
templates/main/edit_reinigung.html

@@ -0,0 +1,25 @@
+{% load bootstrap5 %}
+<!DOCTYPE html>
+<html lang="de">
+<head>
+    <meta charset="UTF-8">
+    <title>Reinigungsauftrag bearbeiten</title>
+    {% bootstrap_css %}
+</head>
+<body>
+    <div class="container">
+        <h2>Reinigungsauftrag bearbeiten</h2>
+        <form method="post">
+            {% 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>
+        </form>
+        <form method="post" action="{% url 'delete_reinigung' pk=reinigung.id %}" class="mt-3">
+            {% csrf_token %}
+            <button type="submit" class="btn btn-danger">Löschen</button>
+        </form>
+    </div>
+    {% bootstrap_javascript %}
+</body>
+</html>