klandr/klandr.py
Christoffer Müller Madsen 374b69fa21 tilføj punkt-modul
2016-09-17 23:38:54 +02:00

381 lines
11 KiB
Python
Executable File

#! /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()