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'] 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(db_service_weekly.__getattribute__("type_"+str(i))) 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 ... # FUNKTION ZUM VERGLEICH DER BEIDEN DATENSÄTZE def check_is_same(a, b): return True if a == b else False # 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 })