You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
349 lines
19 KiB
349 lines
19 KiB
from django.shortcuts import render, redirect
|
|
from django.contrib.auth.decorators import login_required
|
|
import datetime
|
|
from . import models as MainModel
|
|
from django.http import JsonResponse
|
|
|
|
wochentage = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag']
|
|
service_types = ['Zoom', 'Saal', 'Gruppe']
|
|
|
|
def actualMonday():
|
|
today = datetime.date.today()
|
|
last_monday = today - datetime.timedelta(days=today.weekday())
|
|
return last_monday
|
|
|
|
def FutureyDate(date, FutureWeeks):
|
|
date = date + datetime.timedelta(weeks=FutureWeeks)
|
|
return date
|
|
|
|
def PastDate(date, FutureWeeks):
|
|
date = date - datetime.timedelta(weeks=FutureWeeks)
|
|
return date
|
|
|
|
def separate_string(input_string):
|
|
separated_string = ""
|
|
index = 1
|
|
for i in input_string:
|
|
if index == 2:
|
|
separated_string += i + "."
|
|
index = 0
|
|
else:
|
|
separated_string += i
|
|
index += 1
|
|
|
|
return separated_string[:8]
|
|
|
|
def createApi_1():
|
|
# Aktuellen Montag abfragen und das Model.week übergeben
|
|
actual = actualMonday()
|
|
weeks = MainModel.week.objects
|
|
|
|
# Datenbank Abfragen vorbereiten
|
|
db_info = MainModel.info.objects.all()
|
|
db_service = MainModel.service.objects.all()
|
|
db_steward = MainModel.steward.objects.all()
|
|
db_regie = MainModel.regie.objects.all()
|
|
|
|
# Leeres Dict für die Übergabe an TheoDocs
|
|
my_list = {}
|
|
|
|
# Wir wollen 8 Wochen übertragen (Wenn so viele gepflegt sind)
|
|
for i in range(0, 8):
|
|
# Aktuelle Woche abfragen und String generieren
|
|
new_actual = actual + datetime.timedelta(weeks=+i)
|
|
new_actual = new_actual.strftime("%d.%m.%y")
|
|
|
|
# Wenn kein Eintrag vorhanden ist
|
|
if weeks.filter(date_of_monday=new_actual).count() > 0:
|
|
week = weeks.get(date_of_monday=new_actual)
|
|
else:
|
|
break
|
|
|
|
# ANPASSEN/VERTIEGEN DER ABFRAGEN VON DEN VERSCHIEDENEN MODELS
|
|
# Predigtdienst DB abfragen
|
|
db_service_weekly = db_service.get(week=week)
|
|
db_steward_weekly = db_steward.get(week=week)
|
|
db_regie_weekly = db_regie.get(week=week)
|
|
|
|
# PREDIGTDIENST VORBEREITUNG
|
|
# Leeres Dict für die eintragung des einzelnen Treffpunktes und der Informationen
|
|
DatesOfService = {}
|
|
|
|
# Dict füllen mit den entsprechenden Informationen aus dem Laptop
|
|
for i in range(1, 7):
|
|
DatesOfServiceWeek = []
|
|
date = wochentage[db_service_weekly.__getattribute__("date_"+str(i)).weekday()] if db_service_weekly.__getattribute__("date_"+str(i)) != None else ""
|
|
DatesOfServiceWeek.append(date)
|
|
time = " - " + db_service_weekly.__getattribute__("time_"+str(i)).strftime("%H:%M Uhr") if db_service_weekly.__getattribute__("time_"+str(i)) != None else ""
|
|
DatesOfServiceWeek.append(time)
|
|
type = str(service_types[db_service_weekly.__getattribute__("type_"+str(i))+1]) if db_service_weekly.__getattribute__("type_"+str(i)) != None else ""
|
|
DatesOfServiceWeek.append(type)
|
|
if db_service_weekly.__getattribute__("speaker_"+str(i)) != None:
|
|
name = " - " + str(db_service_weekly.__getattribute__("speaker_"+str(i)).first_name[:3]) + ". " + str(db_service_weekly.__getattribute__("speaker_"+str(i)).name)
|
|
else:
|
|
name = ""
|
|
DatesOfServiceWeek.append(name)
|
|
DatesOfService[i] = DatesOfServiceWeek
|
|
|
|
|
|
# FERTIG
|
|
# Das fertige Array zusammenstellen für den Druck dieser Woche
|
|
week_array = [
|
|
|
|
# INFO
|
|
str(db_info.get(week=week).gast.Name) if db_info.get(week=week).gast != None else "",
|
|
str(db_info.get(week=week).cleaning.Name) if db_info.get(week=week).cleaning != None else "",
|
|
|
|
# PREDIGTDIENST
|
|
DatesOfService[1][0] + DatesOfService[1][1],
|
|
DatesOfService[1][2] + DatesOfService[1][3],
|
|
DatesOfService[2][0] + DatesOfService[2][1],
|
|
DatesOfService[2][2] + DatesOfService[2][3],
|
|
DatesOfService[3][0] + DatesOfService[3][1],
|
|
DatesOfService[3][2] + DatesOfService[3][3],
|
|
DatesOfService[4][0] + DatesOfService[4][1],
|
|
DatesOfService[4][2] + DatesOfService[4][3],
|
|
DatesOfService[5][0] + DatesOfService[5][1],
|
|
DatesOfService[5][2] + DatesOfService[5][3],
|
|
DatesOfService[6][0] + DatesOfService[6][1],
|
|
DatesOfService[6][2] + DatesOfService[6][3],
|
|
|
|
# ORDNER
|
|
str(db_steward_weekly.hall_1.first_name[:3]) + ". " + str(db_steward_weekly.hall_1.name) if db_steward_weekly.hall_1 != None else "",
|
|
str(db_steward_weekly.hall_2.first_name[:3]) + ". " + str(db_steward_weekly.hall_2.name) if db_steward_weekly.hall_2 != None else "",
|
|
str(db_steward_weekly.foyer_1.first_name[:3]) + ". " + str(db_steward_weekly.foyer_1.name) if db_steward_weekly.foyer_1 != None else "",
|
|
str(db_steward_weekly.foyer_2.first_name[:3]) + ". " + str(db_steward_weekly.foyer_2.name) if db_steward_weekly.foyer_2 != None else "",
|
|
|
|
# ANLAGE
|
|
str(db_regie_weekly.regie_1.first_name[:3]) + ". " + str(db_regie_weekly.regie_1.name) if db_regie_weekly.regie_1 != None else "",
|
|
str(db_regie_weekly.regie_2.first_name[:3]) + ". " + str(db_regie_weekly.regie_2.name) if db_regie_weekly.regie_2 != None else "",
|
|
str(db_regie_weekly.zoom_1.first_name[:3]) + ". " + str(db_regie_weekly.zoom_1.name) if db_regie_weekly.zoom_1 != None else "",
|
|
str(db_regie_weekly.zoom_2.first_name[:3]) + ". " + str(db_regie_weekly.zoom_2.name) if db_regie_weekly.zoom_2 != None else "",
|
|
str(db_regie_weekly.stage.first_name[:3]) + ". " + str(db_regie_weekly.stage.name) if db_regie_weekly.stage != None else "",
|
|
|
|
]
|
|
|
|
# Dict erstellen mit dem Array hinter dem Datum des Montags der Woche
|
|
my_list[str(week.date_of_monday)] = week_array
|
|
|
|
return my_list
|
|
|
|
def createApi_2():
|
|
# Aktuellen Montag abfragen und das Model.week übergeben
|
|
actual = actualMonday()
|
|
weeks = MainModel.week.objects
|
|
|
|
# Datenbank Abfragen vorbereiten
|
|
db_info = MainModel.info.objects.all()
|
|
db_service = MainModel.service.objects.all()
|
|
db_steward = MainModel.steward.objects.all()
|
|
db_regie = MainModel.regie.objects.all()
|
|
|
|
# Leeres Dict für die Übergabe an TheoDocs
|
|
my_list = {}
|
|
|
|
# Wir wollen 8 Wochen übertragen (Wenn so viele gepflegt sind)
|
|
for i in range(0, 8):
|
|
# Aktuelle Woche abfragen und String generieren
|
|
new_actual = actual + datetime.timedelta(weeks=+i)
|
|
new_actual = new_actual.strftime("%d.%m.%y")
|
|
|
|
# Wenn kein Eintrag vorhanden ist
|
|
if weeks.filter(date_of_monday=new_actual).count() > 0:
|
|
week = weeks.get(date_of_monday=new_actual)
|
|
else:
|
|
break
|
|
|
|
# ANPASSEN/VERTIEGEN DER ABFRAGEN VON DEN VERSCHIEDENEN MODELS
|
|
# Predigtdienst DB abfragen
|
|
db_service_weekly = db_service.get(week=week)
|
|
db_steward_weekly = db_steward.get(week=week)
|
|
db_regie_weekly = db_regie.get(week=week)
|
|
|
|
# PREDIGTDIENST VORBEREITUNG
|
|
# Leeres Dict für die eintragung des einzelnen Treffpunktes und der Informationen
|
|
DatesOfService = {}
|
|
|
|
# Dict füllen mit den entsprechenden Informationen aus dem Laptop
|
|
for i in range(1, 7):
|
|
DatesOfServiceWeek = []
|
|
date = db_service_weekly.__getattribute__("date_"+str(i)).weekday() if db_service_weekly.__getattribute__("date_"+str(i)) != None else ""
|
|
DatesOfServiceWeek.append(date)
|
|
time = db_service_weekly.__getattribute__("time_"+str(i)).strftime("%H:%M Uhr") if db_service_weekly.__getattribute__("time_"+str(i)) != None else ""
|
|
DatesOfServiceWeek.append(time)
|
|
type = db_service_weekly.__getattribute__("type_"+str(i)) if db_service_weekly.__getattribute__("type_"+str(i)) != None else ""
|
|
DatesOfServiceWeek.append(str(type))
|
|
if db_service_weekly.__getattribute__("speaker_"+str(i)) != None:
|
|
name = str(db_service_weekly.__getattribute__("speaker_"+str(i)).first_name[:3]) + ". " + str(db_service_weekly.__getattribute__("speaker_"+str(i)).name)
|
|
else:
|
|
name = ""
|
|
DatesOfServiceWeek.append(name)
|
|
DatesOfService[i] = DatesOfServiceWeek
|
|
|
|
|
|
# FERTIG
|
|
# Das fertige Array zusammenstellen für den Druck dieser Woche
|
|
week_array = [
|
|
|
|
# INFO
|
|
str(db_info.get(week=week).gast.Name) if db_info.get(week=week).gast != None else "",
|
|
str(db_info.get(week=week).cleaning.Name) if db_info.get(week=week).cleaning != None else "",
|
|
|
|
# PREDIGTDIENST
|
|
DatesOfService[1][0], DatesOfService[1][1],
|
|
DatesOfService[1][2], DatesOfService[1][3],
|
|
DatesOfService[2][0], DatesOfService[2][1],
|
|
DatesOfService[2][2], DatesOfService[2][3],
|
|
DatesOfService[3][0], DatesOfService[3][1],
|
|
DatesOfService[3][2], DatesOfService[3][3],
|
|
DatesOfService[4][0], DatesOfService[4][1],
|
|
DatesOfService[4][2], DatesOfService[4][3],
|
|
DatesOfService[5][0], DatesOfService[5][1],
|
|
DatesOfService[5][2], DatesOfService[5][3],
|
|
DatesOfService[6][0], DatesOfService[6][1],
|
|
DatesOfService[6][2], DatesOfService[6][3],
|
|
|
|
# ORDNER
|
|
str(db_steward_weekly.hall_1.first_name[:3]) + ". " + str(db_steward_weekly.hall_1.name) if db_steward_weekly.hall_1 != None else "",
|
|
str(db_steward_weekly.hall_2.first_name[:3]) + ". " + str(db_steward_weekly.hall_2.name) if db_steward_weekly.hall_2 != None else "",
|
|
str(db_steward_weekly.foyer_1.first_name[:3]) + ". " + str(db_steward_weekly.foyer_1.name) if db_steward_weekly.foyer_1 != None else "",
|
|
str(db_steward_weekly.foyer_2.first_name[:3]) + ". " + str(db_steward_weekly.foyer_2.name) if db_steward_weekly.foyer_2 != None else "",
|
|
|
|
# ANLAGE
|
|
str(db_regie_weekly.regie_1.first_name[:3]) + ". " + str(db_regie_weekly.regie_1.name) if db_regie_weekly.regie_1 != None else "",
|
|
str(db_regie_weekly.regie_2.first_name[:3]) + ". " + str(db_regie_weekly.regie_2.name) if db_regie_weekly.regie_2 != None else "",
|
|
str(db_regie_weekly.zoom_1.first_name[:3]) + ". " + str(db_regie_weekly.zoom_1.name) if db_regie_weekly.zoom_1 != None else "",
|
|
str(db_regie_weekly.zoom_2.first_name[:3]) + ". " + str(db_regie_weekly.zoom_2.name) if db_regie_weekly.zoom_2 != None else "",
|
|
str(db_regie_weekly.stage.first_name[:3]) + ". " + str(db_regie_weekly.stage.name) if db_regie_weekly.stage != None else "",
|
|
|
|
]
|
|
|
|
# Dict erstellen mit dem Array hinter dem Datum des Montags der Woche
|
|
my_list[str(week.date_of_monday)] = week_array
|
|
|
|
return my_list
|
|
|
|
def api(request):
|
|
|
|
return JsonResponse(createApi_2(), safe=False)
|
|
|
|
@login_required
|
|
def index(request):
|
|
error = False
|
|
if request.GET.get("date"):
|
|
actual = False
|
|
actualdate = actualMonday()
|
|
get_Date = separate_string(request.GET.get("date"))
|
|
url_date = datetime.datetime.strptime(get_Date, "%d.%m.%y")
|
|
if url_date.date() <= actualdate or url_date.weekday() != 0:
|
|
url_date = actualdate
|
|
actual = True
|
|
error = True
|
|
elif url_date.date() == actualdate:
|
|
actual = True
|
|
else:
|
|
url_date = actualMonday()
|
|
actual = True
|
|
|
|
strDate = url_date.strftime("%d.%m.%y")
|
|
|
|
# AB HIER WIRD DAS SPEICHERN BEHANDELT
|
|
# PRÜFEN OB DAS FORMULAR GESENDET WURDE UND AUCH DER BUTTON VERWENDET WURDE
|
|
if request.method == "POST":
|
|
if 'formsend' in request.POST:
|
|
|
|
# ÜBERPRÜFEN OB DIE "WEEK" SCHON EINEN EINTRAG HAT - SONST ANLEGEN
|
|
MainModel.week.objects.create(date_of_monday=strDate) if MainModel.week.objects.filter(date_of_monday=strDate).count() < 1 else ...
|
|
|
|
# Abfrage der Datenbanken um Informationen abzugleichen
|
|
gruppen_data = MainModel.group.objects.all()
|
|
persons = MainModel.contributors.objects.all()
|
|
steward_data = MainModel.steward.objects.get(week__date_of_monday=strDate) if MainModel.steward.objects.filter(week__date_of_monday=strDate).count() > 0 else None
|
|
regie_data = MainModel.regie.objects.get(week__date_of_monday=strDate) if MainModel.regie.objects.filter(week__date_of_monday=strDate).count() > 0 else None
|
|
info_data = MainModel.info.objects.get(week__date_of_monday=strDate) if MainModel.info.objects.filter(week__date_of_monday=strDate).count() > 0 else None
|
|
service_data = MainModel.service.objects.get(week__date_of_monday=strDate) if MainModel.service.objects.filter(week__date_of_monday=strDate).count() > 0 else None
|
|
|
|
# Abfragen der POST-Daten
|
|
post_info = request.POST.getlist("info")
|
|
post_service_date = request.POST.getlist("smd")
|
|
post_service_time = request.POST.getlist("smt")
|
|
post_service_type = request.POST.getlist("smm")
|
|
post_service_speaker = request.POST.getlist("sms")
|
|
post_steward = request.POST.getlist("ods")
|
|
post_regie = request.POST.getlist("regie")
|
|
|
|
# INFOS
|
|
if info_data == None:
|
|
info_data = MainModel.info.objects.create(
|
|
week = MainModel.week.objects.get(date_of_monday=strDate),
|
|
gast = gruppen_data.get(id=post_info[0]) if post_info[0] != "0" else None,
|
|
cleaning = gruppen_data.get(id=post_info[1]) if post_info[1] != "0" else None,
|
|
)
|
|
else:
|
|
info_data.gast = gruppen_data.get(id=post_info[0]) if post_info[0] != "0" else None
|
|
info_data.cleaning = gruppen_data.get(id=post_info[1]) if post_info[1] != "0" else None
|
|
info_data.save()
|
|
|
|
# PREDIGTDIENST
|
|
if service_data == None: service_data = MainModel.service.objects.create(week = MainModel.week.objects.get(date_of_monday=strDate))
|
|
for i in range(1, 7):
|
|
# Datum
|
|
service_data.__setattr__("date_"+str(i), post_service_date[i-1]) if post_service_date[i-1] != "" else service_data.__setattr__("date_"+str(i), None)
|
|
# Uhrzeit
|
|
service_data.__setattr__("time_"+str(i), post_service_time[i-1]) if post_service_time[i-1] != "" else service_data.__setattr__("time_"+str(i), None)
|
|
# Type
|
|
service_data.__setattr__("type_"+str(i), post_service_type[i-1]) if post_service_type[i-1] != "0" else service_data.__setattr__("type_"+str(i), None)
|
|
# Leiter
|
|
service_data.__setattr__("speaker_"+str(i), persons.get(id=post_service_speaker[i-1])) if post_service_speaker[i-1] != "0" else service_data.__setattr__("speaker_"+str(i), None)
|
|
service_data.save()
|
|
|
|
# ORDNUNGSIENST
|
|
if steward_data == None: steward_data = MainModel.steward.objects.create(week = MainModel.week.objects.get(date_of_monday=strDate))
|
|
steward_data.hall_1 = persons.get(id=post_steward[0]) if post_steward[0] != "0" else None
|
|
steward_data.hall_2 = persons.get(id=post_steward[1]) if post_steward[1] != "0" else None
|
|
steward_data.foyer_1 = persons.get(id=post_steward[2]) if post_steward[2] != "0" else None
|
|
steward_data.foyer_2 = persons.get(id=post_steward[3]) if post_steward[3] != "0" else None
|
|
steward_data.save()
|
|
|
|
# TECHNIK
|
|
if regie_data == None: regie_data = MainModel.regie.objects.create(week = MainModel.week.objects.get(date_of_monday=strDate))
|
|
regie_data.regie_1 = persons.get(id=post_regie[0]) if post_regie[0] != "0" else None
|
|
regie_data.regie_2 = persons.get(id=post_regie[1]) if post_regie[1] != "0" else None
|
|
regie_data.zoom_1 = persons.get(id=post_regie[2]) if post_regie[2] != "0" else None
|
|
regie_data.zoom_2 = persons.get(id=post_regie[3]) if post_regie[3] != "0" else None
|
|
regie_data.stage = persons.get(id=post_regie[4]) if post_regie[4] != "0" else None
|
|
regie_data.save()
|
|
|
|
|
|
|
|
|
|
# Abfrage der Datenbanken um Informationen einzublenden
|
|
steward_data = MainModel.steward.objects.filter(week__date_of_monday=strDate)[0] if MainModel.steward.objects.filter(week__date_of_monday=strDate).count() > 0 else {}
|
|
regie_data = MainModel.regie.objects.filter(week__date_of_monday=strDate)[0] if MainModel.regie.objects.filter(week__date_of_monday=strDate).count() > 0 else {}
|
|
info_data = MainModel.info.objects.filter(week__date_of_monday=strDate)[0] if MainModel.info.objects.filter(week__date_of_monday=strDate).count() > 0 else {}
|
|
gruppen_data = MainModel.group.objects.all()
|
|
persons = MainModel.contributors.objects.all()
|
|
service_data = MainModel.service.objects.filter(week__date_of_monday=strDate)[0] if MainModel.service.objects.filter(week__date_of_monday=strDate).count() > 0 else {}
|
|
return render(request, 'main/index.html', {'actual' : actual,
|
|
'error' : error,
|
|
'date': strDate,
|
|
'next_date': FutureyDate(url_date, 1).strftime("%d%m%y"),
|
|
'past_date': PastDate(url_date, 1).strftime("%d%m%y"),
|
|
'saal_ordner' : persons.filter(saalordner=True),
|
|
'ordner' : persons.filter(ordner=True),
|
|
'anlage' : persons.filter(anlage=True),
|
|
'zoom' : persons.filter(zoom=True),
|
|
'buehne' : persons.filter(buehne=True),
|
|
'sm' : persons.filter(treffpunkt=True),
|
|
'date_area' : {
|
|
'min' : str(url_date),
|
|
'value' : str(url_date),
|
|
'max' : str(FutureyDate(url_date - datetime.timedelta(days=1), 1))},
|
|
'steward_data' : steward_data,
|
|
'regie_data' : regie_data,
|
|
'info_data' : info_data,
|
|
'gruppen_data' : gruppen_data,
|
|
'service_data' : service_data
|
|
})
|
|
|