#! /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 events = 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 events 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 holdets time")) code, tag = d.menu("Vælg den holdets time du vil ændre", title="Vælg holdets time", 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["klandringer"] events = holdets_time["events"] menu_main() def menu_main(): code, tag = d.menu("Vælg punkt på dagsordenen:", title="Hovedmenu - " + str(date), choices=[("Timen", "Ændr i beskrivelsen af denne time"), ("Punkter", "Ændr punkter på dagsordenen"), ("Klandringer", "Så mange klandringer")]) if code == d.OK: if tag == "Punkter": menu_events() elif tag == "Klandringer": menu_klandringer() elif tag == "Timen": menu_holdets_time() else: quit() ################ # Begin events # ################ def menu_events(): code, tag = d.menu("Hvad du vil gøre med punkterne på dagsordenen?", title="Punkter", choices=[("Nyt", "Oprette et nyt punkt"), ("Ændr", "Ændre et eksisterende punkt"), ("Beskriv", "Beskrive et eksisterende punkt"), #("Omarrangér", "Omarrangere de eksisterende punkter"), ("Slet", "Slette et eksisterende punkt"), ("Batch", "Gå i batch-mode")]) if code == d.CANCEL: menu_main() elif code == d.OK: if tag == "Nyt": create_event() elif tag == "Batch": batch_mode() else: event = menu_select_event() if event != None: if tag == "Ændr": edit_event(event) elif tag == "Beskriv": describe_event(event) elif tag == "Slet": delete_event(event) menu_events() def menu_select_event(): event_entries = [(str(i),e["title"]) for i,e in enumerate(events)] code, tag = d.menu("Vælg det punkt du vil ændre/slette", title="Vælg punkt", choices=event_entries) if code == d.OK: return tag def create_event(): events.append({"title":"","description":""}) code = edit_event(-1) if code != d.OK: del events[-1] return code def edit_event(strid): id = int(strid) e = events[id] code, elements = d.form("Ændr detaljer om punkt", title="Ændr punkt", elements=[("Titel:",1,1,e["title"],1,11,40,40)]) if code == d.OK: e["title"] = elements[0] save() return code def describe_event(strid): id = int(strid) e = events[id] code, text = d.editbox_str(e["description"], height=0, width=0, title=e["title"]) if code == d.OK: e["description"] = text save() return code def delete_event(strid): id = int(strid) code = d.yesno("Vil du virkelig slette dette punkt?\n\nDenne handling er ufortrydelig!", title="Slet punkt!", yes_label="Ja", no_label="Nej",) if code == d.OK: del events[id] d.msgbox("Punktet er slettet!") save() return code ############## # End events # ############## ##################### # 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": {"klandringer":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"), ("Klandringsskel", "Vælg punktet før klandringerne")]) 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() elif tag == "Klandringsskel": change_prepost() 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() def change_prepost(): eventid = menu_select_event() if eventid != None: holdets_time['prepost_event'] = eventid 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":"","klandringer":[],"events":[],"prepost_event":0}) return date else: menu_select_date() ################### # End definitions # ################### menu_select_date()