#! /usr/bin/env python3 # coding=utf-8 from dialog import Dialog import json from pymongo import MongoClient # Settings mongo = True file_storage = False d = Dialog(dialog="dialog") d.set_background_title("Klandr") # Initialization holdets_time = None klandringer = None date = None client = MongoClient() db = client["dat3holdetstime"] collection = db["klandringer"] if file_storage == True: with open("klandringer.json", "r") as jsonfile: contents = jsonfile.read() if contents == "": complete_klandringer = {} else: complete_klandringer = json.loads(contents) ##################### # Begin definitions # ##################### def menu_select_date(): global klandringer global holdets_time global date date_entries = [()] if file_storage == True: if complete_klandringer != {}: date_entries = [(k,"") for k in complete_klandringer] if mongo == True: for entry in collection.find(): date_entries.append((entry["date"],entry["date"] + " " + entry["time"] + " - " + entry["place"])) date_entries.append(("Ny","Opret en ny dato")) code, tag = d.menu("Vælg den dato du vil ændre", title="Vælg dato", choices=date_entries) if code == d.OK: date = tag if tag == "Ny": date = new_date() if file_storage == True: klandringer = complete_klandringer[date] if mongo == True: holdets_time = collection.find({"date":date})[0] klandringer = holdets_time["data"] menu_main() def menu_main(): code, tag = d.menu("Vælg punkt på dagsordenen", title="Hovedmenu", choices=[("Timen", "Ændr i beskrivelsen af denne time"), ("Indledende", "Indledende bemærkninger"), ("Klandringer", "Så mange klandringer"), ("Afsluttende", "Afsluttende bemærkninger")]) if code == d.OK: if tag == "Indledende": menu_indledende() elif tag == "Klandringer": menu_klandringer() elif tag == "Afsluttende": menu_afsluttende() elif tag == "Timen": menu_holdets_time() else: quit() #################### # Begin indledende # #################### # TODO: Write indledende ################## # End indledende # ################## ##################### # Begin afsluttende # ##################### # TODO: Write afsluttende ################### # End afsluttende # ################### ##################### # Begin klandringer # ##################### def menu_klandringer(): code, tag = d.menu("Hvad du vil gøre med klandringerne?", title="Klandringer", choices=[("Ny", "Oprette en ny klandring"), ("Ændr", "Ændre en eksisterende klandring"), ("Beskriv", "Beskriv en eksisterende klandring"), #("Omarrangér", "Omarrangere de eksisterende klandringer"), ("Slet", "Slette en eksisterende klandring"), ("Batch", "Gå i batch-mode")]) if code == d.CANCEL: menu_main() elif code == d.OK: if tag == "Ny": create_klandring() elif tag == "Batch": batch_mode() else: klandring = menu_select_klandring() if klandring != None: if tag == "Ændr": edit_klandring(klandring) elif tag == "Beskriv": describe_klandring(klandring) elif tag == "Slet": delete_klandring(klandring) menu_klandringer() def menu_select_klandring(): klandringer_entries = [(str(i),k["klandrer"] + " v. " + k["klandret"] + " - " + k["title"]) for i,k in enumerate(klandringer)] code, tag = d.menu("Vælg den klandring du vil ændre/slette", title="Vælg klandring", choices=klandringer_entries) if code == d.OK: return tag def create_klandring(): klandringer.append({"klandrer":"","klandret":"","title":"","description":"","taber":""}) code = edit_klandring(-1) if code != d.OK: del klandringer[-1] return code def edit_klandring(strid): id = int(strid) k = klandringer[id] code, elements = d.form("Ændr detaljer om klandring", title="Ændr klandring", elements=[("Titel:",1,1,k["title"],1,11,40,40), ("Klandrer:",2,1,k["klandrer"],2,11,20,20), ("Klandret:",3,1,k["klandret"],3,11,20,20), ("Taber:",4,1,k["taber"],4,11,20,20)]) if code == d.OK: k["title"] = elements[0] k["klandrer"] = elements[1] k["klandret"] = elements[2] k["taber"] = elements[3] save() return code def describe_klandring(strid): id = int(strid) k = klandringer[id] code, text = d.editbox_str(k["description"], height=0, width=0, title=k["klandrer"] + " v. " + k["klandret"] + " - " + k["title"]) if code == d.OK: k["description"] = text save() return code def delete_klandring(strid): id = int(strid) code = d.yesno("Vil du virkelig slette denne klandring?\n\nDenne handling er ufortrydelig!", title="Slet klandring!", yes_label="Ja", no_label="Nej",) if code == d.OK: del klandringer[id] d.msgbox("Klandringen er slettet!") save() return code def batch_mode(): for i,k in enumerate(klandringer): code = describe_klandring(i) if code != d.OK: break code = edit_klandring(i) if code != d.OK: break def save(): if file_storage == True: with open("klandringer.json","w") as jsonfile: jsonfile.write(json.dumps(complete_klandringer)) if mongo == True: #collection.update_one({"date":date},{"$set": {"data":klandringer}}) collection.update_one({"date":date},{"$set": holdets_time}) ################### # End klandringer # ################### ###################### # Start holdets time # ###################### def menu_holdets_time(): code, tag = d.menu("Hvad du vil ændre ved holdets time?", title="Holdets time", choices=[("Tid", "Ændre tidspunktet"), ("Sted", "Ændre stedet"), ("Undertitel", "Give en undertitel")]) if code == d.CANCEL: menu_main() elif code == d.OK: if tag == "Tid": change_time() elif tag == "Sted": change_place() elif tag == "Undertitel": change_subtitle() menu_holdets_time() def change_time(): code, time = d.timebox("Vælg det tidspunkt hvor holdets time blev afholdt") if code == d.OK: strtime = str(time[0]).zfill(2) + ":" + str(time[1]).zfill(2) holdets_time["time"] = strtime save() menu_holdets_time() def change_place(): code, string = d.inputbox("Vælg det sted hvor holdets time blev afholdt",0,0, holdets_time["place"]) if code == d.OK: holdets_time["place"] = string save() menu_holdets_time() def change_subtitle(): code, string = d.inputbox("Vælg en undertitel til denne holdets time",0,0, holdets_time["subtitle"]) if code == d.OK: holdets_time["subtitle"] = string save() menu_holdets_time() #################### # End holdets time # #################### def new_date(): code, pickdate = d.calendar("Vælg en dato") if code == d.OK: date = str(pickdate[2]).zfill(4) + "-" + str(pickdate[1]).zfill(2) + "-" + str(pickdate[0]).zfill(2) if file_storage == True: complete_klandringer[date] = [] if mongo == True: collection.insert({"date":date,"time":"","place":"","subtitle":"","data":[]}) return date else: menu_select_date() ################### # End definitions # ################### menu_select_date()