[PYTHON] Django Shift Table Shift Datenerstellungsfunktion abgeschlossen

Infolgedessen bemerkte ich nach dem Erstellen der Funktion, aber ich fragte mich, ob es für den Schichtentscheider unmöglich sein würde, Anpassungen vorzunehmen, nachdem alle Schichten von der Person selbst eingegeben wurden. Außerdem müssen Sie sich beim Benutzer erkundigen und die Funktion ändern.

Es ist lange her, aber es sind Ansichten.

schedule/views.py


from django.shortcuts import render, redirect, HttpResponseRedirect
from shisetsu.models import *
from accounts.models import *
from .models import *
import calendar
import datetime
from datetime import timedelta
from datetime import datetime as dt
from django.db.models import Sum
from django.contrib.auth.models import User
from django.views.generic import FormView, UpdateView, ListView, CreateView, DetailView, DeleteView
from django.urls import reverse_lazy
from .forms import *
from dateutil.relativedelta import relativedelta
from django.contrib.auth.models import User
# Create your views here.

def homeschedule(request):
    from datetime import datetime
    now = datetime.now()
    return HttpResponseRedirect('/schedule/monthschedule/%s/%s/' % (now.year,now.month,))  #Automatisch zum Schichtbildschirm dieses Monats umleiten

def monthschedulefunc(request,year_num,month_num):
    user_list = User.objects.all()
    profile_list = Profile.objects.select_related().values().order_by('hyoujijyun')
    year, month = int(year_num), int(month_num)
    shisetsu_object = Shisetsu.objects.all()
    shift_object = Shift.objects.all()
    object_list = Schedule.objects.filter(year = year, month = month).order_by('user', 'date')
    month_total = Schedule.objects.select_related('User').filter(year = year, month = month).values("user").order_by("user").annotate(month_total_worktime = Sum("day_total_worktime"))
    #Ermitteln Sie die Anzahl der Tage im Schichtbereich
    enddate = datetime.date(year,month,20)
    startdate = enddate + relativedelta(months=-1)
    kaisu = enddate - startdate
    kaisu = int(kaisu.days) 
    kikan = str(startdate) +"~"+ str(enddate)
    
    #Machen Sie eine Liste von Daten und Tagen
    hiduke = str(startdate)
    date_format = "%Y-%m-%d"
    hiduke = dt.strptime(hiduke, date_format)
    weekdays = ["Mond","Feuer","Wasser","Holz","Geld","Boden","Tag"]
    calender_object = []
    youbi_object = []
    for i in range(kaisu):
        hiduke = hiduke + timedelta(days=1)    
        calender_object.append(hiduke)
        youbi = weekdays[hiduke.weekday()] 
        youbi_object.append(youbi)
    
    kaisu = str(kaisu)

    context = {
        'year': year,
        'month': month,
        'kikan': kikan,
        'object_list': object_list,
        'user_list': user_list,
        'shift_object': shift_object,
        'calender_object': calender_object,
        'youbi_object': youbi_object,
        'kaisu': kaisu,
        'shisetsu_object': shisetsu_object,
        'month_total' : month_total,
        'profile_list' : profile_list,
    }
    return render(request,'schedule/month.html', context)

def scheduleUpdatefunc(request,pk):
    Schedule_list = Schedule.objects.get(pk = int(pk))
    User_list = User.objects.get(username = Schedule_list.user)
    shift_object = Shift.objects.all()
    
    if request.method == 'POST':
        form = ScheduleUpdateForm(data=request.POST)
        year = Schedule_list.year
        month = Schedule_list.month
        #Aktualisieren Sie die Schaltflächenverarbeitung
        if form.is_valid():
            Schedule_list.shift_name_1 = form.cleaned_data['shift_name_1']
            Schedule_list.shisetsu_name_1 = form.cleaned_data['shisetsu_name_1']
            Schedule_list.shift_name_2 = form.cleaned_data['shift_name_2']
            Schedule_list.shisetsu_name_2 = form.cleaned_data['shisetsu_name_2']
            Schedule_list.shift_name_3 = form.cleaned_data['shift_name_3']
            Schedule_list.shisetsu_name_3 = form.cleaned_data['shisetsu_name_3']
            Schedule_list.shift_name_4 = form.cleaned_data['shift_name_4']
            Schedule_list.shisetsu_name_4 = form.cleaned_data['shisetsu_name_4']
            #Schaltfläche "Aktualisieren"
            if "updatebutton" in request.POST:
                Schedule_list.day_total_worktime = form.cleaned_data['day_total_worktime']
            #Berechnen Sie aus der Umschalt- und Aktualisierungstaste
            elif "sumupdatebutton" in request.POST:
                #Berechnen Sie die tägliche Gesamtarbeitszeit aus Schichten
                sum_work_time = 0
                for shift in shift_object:
                    if str(form.cleaned_data['shift_name_1']) == str(shift.name):
                        sum_work_time = shift.wrok_time + sum_work_time
                    if str(form.cleaned_data['shift_name_2']) == str(shift.name):
                        sum_work_time = shift.wrok_time + sum_work_time
                    if str(form.cleaned_data['shift_name_3']) == str(shift.name):
                        sum_work_time = shift.wrok_time + sum_work_time
                    if str(form.cleaned_data['shift_name_4']) == str(shift.name):
                        sum_work_time = shift.wrok_time + sum_work_time
                
                Schedule_list.day_total_worktime = sum_work_time
        Schedule_list.save()
        return HttpResponseRedirect('/schedule/monthschedule/%s/%s/' % (year,month,))       
    else:
        item = {
            "shift_name_1":Schedule_list.shift_name_1,
            "shisetsu_name_1": Schedule_list.shisetsu_name_1,
            "shift_name_2": Schedule_list.shift_name_2,
            "shisetsu_name_2": Schedule_list.shisetsu_name_2,
            "shift_name_3": Schedule_list.shift_name_3,
            "shisetsu_name_3": Schedule_list.shisetsu_name_3,
            "shift_name_4": Schedule_list.shift_name_4,
            "shisetsu_name_4": Schedule_list.shisetsu_name_4,
            "day_total_worktime": Schedule_list.day_total_worktime,
            }
        form = ScheduleUpdateForm(initial=item)
        context = {
            'form' : form,
            'Schedule_list': Schedule_list,
            'User_list': User_list,
            'shift_object': shift_object,
        }
        return render(request,'schedule/update.html', context )

def schedulecreatefunc(request,year_num,month_num):
    year, month = int(year_num), int(month_num)
    #Löschen Sie alle Zeitpläne des Zieljahres und -monats
    Schedule.objects.filter(year = year, month = month).delete()
    #Ermitteln Sie die Anzahl der Tage im Schichtbereich
    enddate = datetime.date(year,month,20)
    startdate = enddate + relativedelta(months=-1)
    #Extrahieren Sie die Hoffnung der Zielperiode aus der gewünschten Verschiebung
    kiboushift_list = KibouShift.objects.filter(date__range=[startdate, enddate])
    kiboushift_list = list(kiboushift_list)
    shift_list = Shift.objects.all()
    
    #Reflektieren Sie die gewünschte Verschiebung
    for kibou in kiboushift_list:
        sum_work_time = 0
        for shift in shift_list:
                if str(kibou.shift_name_1) == str(shift.name):
                    sum_work_time = shift.wrok_time + sum_work_time
                if str(kibou.shift_name_2) == str(shift.name):
                    sum_work_time = shift.wrok_time + sum_work_time
                if str(kibou.shift_name_3) == str(shift.name):
                    sum_work_time = shift.wrok_time + sum_work_time
                if str(kibou.shift_name_4) == str(shift.name):
                    sum_work_time = shift.wrok_time + sum_work_time
        new_object = Schedule(
            user = kibou.user,
            date = kibou.date, 
            year = year,
            month = month,
            shift_name_1 = kibou.shift_name_1, 
            shisetsu_name_1 = kibou.shisetsu_name_1,
            shift_name_2 = kibou.shift_name_2, 
            shisetsu_name_2 = kibou.shisetsu_name_2,
            shift_name_3 = kibou.shift_name_3, 
            shisetsu_name_3 = kibou.shisetsu_name_3,
            shift_name_4 = kibou.shift_name_4, 
            shisetsu_name_4 = kibou.shisetsu_name_4,
            day_total_worktime = sum_work_time,
            )
        new_object.save()
    
    #Erstellen Sie eine andere als die gewünschte Schicht
    user_list = User.objects.all()
    #Ermitteln Sie die Anzahl der Tage im Schichtbereich
    enddate = datetime.date(year,month,20)
    startdate = enddate + relativedelta(months=-1)
    kaisu = enddate - startdate
    kaisu = int(kaisu.days) 
    #Im vergangenen Monat
    if month != 1 :
        zengetsu = month - 1
    else:
        zengetsu = 12
        year = year - 1
    #Prozess für jeden Benutzer
    for user in user_list:
        kongetsu_list = Schedule.objects.filter(year = year, month = month, user = user.id).order_by('date')
        zengetsu_list = Schedule.objects.filter(year = year, month = zengetsu, user = user.id).order_by('date')
        sakusei_date = startdate
        shift_list = Shift.objects.all()
        for new_shift in range(kaisu):
            sakusei_date = sakusei_date + timedelta(days=1)
            if kongetsu_list.filter(user = user.id, date = sakusei_date).exists():
                print("ok")                       
            else:
                hukushadate = sakusei_date + relativedelta(months=-1)
                hukusha_list = zengetsu_list.filter(date = hukushadate, user = user.id)
                if zengetsu_list.filter(date = hukushadate, user = user.id).exists():
                    for hukusha in hukusha_list:
                    #Berechnen Sie die tägliche Gesamtarbeitszeit aus Schichten
                        sum_work_time = 0
                        for shift in shift_list:
                            if str(hukusha.shift_name_1) == str(shift.name):
                                sum_work_time = shift.wrok_time + sum_work_time
                            if str(hukusha.shift_name_2) == str(shift.name):
                                sum_work_time = shift.wrok_time + sum_work_time
                            if str(hukusha.shift_name_3) == str(shift.name):
                                sum_work_time = shift.wrok_time + sum_work_time
                            if str(hukusha.shift_name_4) == str(shift.name):
                                sum_work_time = shift.wrok_time + sum_work_time

                        new_object=Schedule(
                            user = hukusha.user,
                            date = sakusei_date,
                            year = year,
                            month = month,
                            shift_name_1 = hukusha.shift_name_1, 
                            shisetsu_name_1 = hukusha.shisetsu_name_1,
                            shift_name_2 = hukusha.shift_name_2, 
                            shisetsu_name_2 = hukusha.shisetsu_name_2,
                            shift_name_3 = hukusha.shift_name_3, 
                            shisetsu_name_3 = hukusha.shisetsu_name_3,
                            shift_name_4 = hukusha.shift_name_4, 
                            shisetsu_name_4 = hukusha.shisetsu_name_4,
                            day_total_worktime = sum_work_time,
                            )
                        new_object.save()
                else:
                    useradd = User.objects.get(id=user.id)
                    shiftadd = Shift.objects.get(id=2)
                    new_object=Schedule(
                    user = useradd,
                    date = sakusei_date,
                    year = year,
                    month = month,
                    shift_name_1 = shiftadd, 
                    shisetsu_name_1 = None,
                    shift_name_2 = None, 
                    shisetsu_name_2 = None,
                    shift_name_3 = None, 
                    shisetsu_name_3 = None,
                    shift_name_4 = None, 
                    shisetsu_name_4 = None,
                    day_total_worktime = 0,
                    )
                    new_object.save()
    return HttpResponseRedirect('/schedule/monthschedule/%s/%s/' % (year,month,))
            
def kiboulistfunc(request):
    KibouShift_list = KibouShift.objects.all().order_by('-date')
    User_list = User.objects.all()
    shift_object = Shift.objects.all()
    context = {
        'KibouShift_list': KibouShift_list,
        'User_list': User_list,
        'shift_object': shift_object,
        }

    return render(request,'schedule/kiboushift/list.html', context )
        
class KibouCreate(CreateView):
    template_name = 'schedule/kiboushift/create.html'
    model = KibouShift
    fields = ('user', 'date', 'shift_name_1', 'shisetsu_name_1', 'shift_name_2', 'shisetsu_name_2', 'shift_name_3', 'shisetsu_name_3', 'shift_name_4', 'shisetsu_name_4')
    success_url = reverse_lazy('schedule:KibouList')

class KibouUpdate(UpdateView):
    template_name = 'schedule/kiboushift/update.html'
    model = KibouShift
    fields = ('user', 'date', 'shift_name_1', 'shisetsu_name_1', 'shift_name_2', 'shisetsu_name_2', 'shift_name_3', 'shisetsu_name_3', 'shift_name_4', 'shisetsu_name_4')
    success_url = reverse_lazy('schedule:KibouList')

class KibouDelete(DeleteView):
    template_name = 'schedule/kiboushift/delete.html'
    model = KibouShift
    fields = ('user', 'date', 'shift_name_1', 'shisetsu_name_1', 'shift_name_2', 'shisetsu_name_2', 'shift_name_3', 'shisetsu_name_3', 'shift_name_4', 'shisetsu_name_4')
    success_url = reverse_lazy('schedule:KibouList')

Damit ist die Erstellungsfunktion abgeschlossen. Nach dem Erstellen der gewünschten Schichtdaten werden die anderen Tage am selben Tag des Vormonats erstellt.

Ich wollte denselben Prozess (Berechnung der Arbeitsstunden aus dem Schichtnamen) mit einer Funktion aufrufen und den Wert zurückgeben, aber ich weiß es noch nicht, also habe ich sie separat geschrieben. Von nun an möchte ich mich daran erinnern und den Code kürzer halten.

image.png

Wenn es keinen Vormonat gibt, versuche ich ihn an Feiertagen zu erstellen.

Als nächstes müssen wir vielleicht in die noch unbekannte Welt von CSS und JS eintreten ... (lacht) Tatsächlich sind fast 20 Personen registriert. Wenn Sie also das Ganze anzeigen, ist es schwierig zu sehen, es sei denn, Sie korrigieren die Kopfzeile der Tabelle ... So.

image.png

Es wird eine Schicht eines Tages sein ...

Ich möchte es so ändern, dass es auf meinem Smartphone leicht zu sehen ist. Ich weiß nicht, ob es für Smartphones verwendet werden kann, aber ich möchte eine feste Anzeige implementieren.

Recommended Posts

Django Shift Table Shift Datenerstellungsfunktion abgeschlossen
Django-Tabellenerstellung
Django Python Verschiebungstabelle
Django Shift Creation Funktion
Django Tutorial (Blog-App erstellen) ⑤ - Artikelerstellungsfunktion
Bearbeiten Sie HTML und CSS der Django-Verschiebungstabelle
Es wurde eine Funktion hinzugefügt, um gewünschte Verschiebungen in der Django-Verschiebungstabelle zu registrieren
Django-Schichterstellungsfunktion Grundlegende Arbeitsschichtregistrierungsfunktion für Tage hinzugefügt
Zeigen Sie die Django-Schichttabelle an! Unterstützt das 20-Tage-Schließen
Ich möchte in der Django-Verschiebungstabelle scrollen, aber ...
[Django] Tabelle abschneiden (alle Tabellendaten löschen)
[Django] Neue Funktion zum Erstellen von Fragen zur Umfrage-App hinzugefügt