En conséquence, j'ai remarqué après avoir créé la fonction, mais je me suis demandé s'il serait impossible pour le décideur de quart de faire des ajustements après que tous les changements aient été saisis par la personne elle-même. En outre, il est nécessaire de vérifier auprès de l'utilisateur et de modifier la fonction.
Cela fait longtemps, mais ce sont des vues.
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,)) #Rediriger automatiquement vers l'écran d'équipe de ce mois
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"))
#Obtenez le nombre de jours dans la plage de travail
enddate = datetime.date(year,month,20)
startdate = enddate + relativedelta(months=-1)
kaisu = enddate - startdate
kaisu = int(kaisu.days)
kikan = str(startdate) +"~"+ str(enddate)
#Faites une liste de dates et de jours
hiduke = str(startdate)
date_format = "%Y-%m-%d"
hiduke = dt.strptime(hiduke, date_format)
weekdays = ["Mois","Feu","eau","bois","Argent","sol","journée"]
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
#Mettre à jour le traitement du bouton
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']
#Bouton de mise à jour
if "updatebutton" in request.POST:
Schedule_list.day_total_worktime = form.cleaned_data['day_total_worktime']
#Calculer à partir du bouton de décalage et de mise à jour
elif "sumupdatebutton" in request.POST:
#Calculer le nombre total d'heures de travail quotidiennes à partir des quarts de travail
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)
#Supprimer tous les horaires de l'année et du mois cibles
Schedule.objects.filter(year = year, month = month).delete()
#Obtenez le nombre de jours dans la plage de travail
enddate = datetime.date(year,month,20)
startdate = enddate + relativedelta(months=-1)
#Extraire l'espoir de la période cible du décalage souhaité
kiboushift_list = KibouShift.objects.filter(date__range=[startdate, enddate])
kiboushift_list = list(kiboushift_list)
shift_list = Shift.objects.all()
#Refléter le décalage souhaité
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()
#Créer une équipe autre que celle souhaitée
user_list = User.objects.all()
#Obtenez le nombre de jours dans la plage de travail
enddate = datetime.date(year,month,20)
startdate = enddate + relativedelta(months=-1)
kaisu = enddate - startdate
kaisu = int(kaisu.days)
#le mois dernier
if month != 1 :
zengetsu = month - 1
else:
zengetsu = 12
year = year - 1
#Processus pour chaque utilisateur
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:
#Calculer le nombre total d'heures de travail quotidiennes à partir des quarts de travail
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')
Ceci termine la fonction de création. Après avoir créé les données d'équipe souhaitées, les autres jours seront créés le même jour du mois précédent.
Je voulais appeler le même processus (calculer les heures de travail à partir du nom de l'équipe) avec une fonction et renvoyer la valeur, mais je ne sais pas encore, je les ai donc écrites séparément. A partir de maintenant, j'aimerais m'en souvenir et garder le code plus court.
S'il n'y a pas de mois précédent, j'essaye de le créer pendant les vacances.
Ensuite, nous devrons peut-être entrer dans le monde encore inconnu des css et js ... (rires) En fait, près de 20 personnes sont inscrites, donc lorsque vous affichez le tout, c'est difficile à voir à moins de fixer l'en-tête du tableau ... Comme ça
Ce sera un décalage d'un jour ...
Je veux le changer pour qu'il soit facile à voir sur mon smartphone. Je ne sais pas s'il peut être utilisé pour les smartphones, mais j'aimerais implémenter un affichage fixe.
Recommended Posts