def settings(m_id): if request.method == "POST": if 'cancel' in request.form: return redirect(url_front()) b = data.Bucket(request.form) if b.mentor_names == "": b.mentor_names = "Unavngivet mentorhold" if b.year.isdecimal(): b.year = int(b.year) else: flash("Please enter a valid year") return html.back() b >> ("UPDATE Mentorteams $ WHERE m_id = ?", m_id) mentors = request.form['mentors'] mentors = mentors.replace('"', '') mentors = mentors.replace('"', '') mentors = [name.split()[0] for name in re.split(';\s', mentors) if name != ""] old = data.execute("SELECT username FROM Mentors WHERE m_id = ?", m_id) old = [mentor['username'] for mentor in old] for mentor in set(old) - set(mentors): data.execute("DELETE FROM Mentors WHERE m_id = ? and username = ?", m_id, mentor) for mentor in sorted(set(mentors) - set(old)): data.execute("INSERT INTO Mentors(m_id, username) VALUES (?, ?)", m_id, mentor) return redirect(url_for('mentorteams.mentorteam', m_id=m_id)) else: teams = data.execute("SELECT * FROM Mentorteams WHERE m_id = ?", m_id) if len(teams) != 1: flash(escape("Det hold findes ikke")) return redirect(url_for("mentorteams.overview")) team = teams[0] all_mentors = data.execute("SELECT * FROM Users WHERE username IN (Select username from Group_users where groupname = 'mentor')") all_mentors = ['\\"{0}\\" {1}'.format(mentor['username'], mentor['name']) for mentor in all_mentors] all_mentors.sort() actual_mentors = data.execute("SELECT * FROM Mentors INNER JOIN Users USING(username) WHERE m_id = ?", m_id) actual_mentors = ['"{0}" {1}; '.format(mentor['username'], mentor['name']) for mentor in actual_mentors] actual_mentors.sort() actual_mentors ="".join(actual_mentors) w = html.WebBuilder() w.form() w.formtable() w.textfield("mentor_names", "Navn") w.textfield("year", "År") w.html(html.autocomplete_multiple(all_mentors, "mentors", default=actual_mentors), description="Mentorer", value="abekat") form = w.create(team) return render_template("mentorteams/settings.html", form=form)
def modify_book(b_id): if request.method == "POST": if 'cancel' in request.form: flash(escape("Ændringer annulleret")) return redirect(url_for("bookkeeper.book", b_id=b_id)) # TOPIC: insert descriptors b = data.Bucket(request.form) b.title b.description b >> ("UPDATE Books $ WHERE b_id = ?", b_id) # TOPIC: fetch new participants usernames = request.form['users'] usernames = usernames.replace('"', '') usernames = usernames.replace('"', '') usernames = [name.split()[0] for name in re.split(';\s', usernames) if name != ""] #usernames = sorted(set(usernames)) old = data.execute("SELECT participant FROM Book_participants where b_id = ?", b_id) old = [u[0] for u in old] # TOPIC: update list of participants in database, deleting missing and inserting new for user in set(old) - set(usernames): data.execute("DELETE FROM Book_participants where b_id = ? AND participant = ?", b_id, user) for user in sorted(set(usernames) - set(old)): data.execute("INSERT INTO Book_participants(b_id, participant) VALUES (?, ?)", b_id, user) # TODO: maybe we should ensure no one with debts/outstandings is removed? return redirect(url_for("bookkeeper.book", b_id=b_id)) else: book = data.execute("SELECT * FROM Books where b_id = ?", b_id)[0] raw_users = data.execute("SELECT username, name FROM Users") users = ['\\"{0}\\" {1}'.format(user['username'], user['name']) for user in raw_users] users.sort() # TODO: fill with current participants = data.execute("SELECT * FROM Book_participants as B INNER JOIN Users as U ON B.participant = U.username WHERE b_id = ?", b_id) participants = ['"{0}" {1}; '.format(p['username'], p['name']) for p in participants] participants.sort() participants = "".join(participants) print(participants) w = html.WebBuilder() w.form() w.formtable() w.textfield("title", "Overskrift") w.textarea("description", "beskrivelse") w.html(html.autocomplete_multiple(users, "users", default=participants), description="Deltagere", value="abekat") form = w.create(book) return render_template("form.html", form=form)
def modify_book(b_id): if request.method == "POST": if 'cancel' in request.form: flash(escape("Ændringer annulleret")) return redirect(url_for("bookkeeper.book", b_id=b_id)) # TOPIC: insert descriptors b = data.Bucket(request.form) b.title b.description b >> ("UPDATE Books $ WHERE b_id = ?", b_id) # TOPIC: fetch new participants usernames = request.form['users'] usernames = usernames.replace('"', '') usernames = usernames.replace('"', '') usernames = [ name.split()[0] for name in re.split(';\s', usernames) if name != "" ] #usernames = sorted(set(usernames)) old = data.execute( "SELECT participant FROM Book_participants where b_id = ?", b_id) old = [u[0] for u in old] # TOPIC: update list of participants in database, deleting missing and inserting new for user in set(old) - set(usernames): data.execute( "DELETE FROM Book_participants where b_id = ? AND participant = ?", b_id, user) for user in sorted(set(usernames) - set(old)): data.execute( "INSERT INTO Book_participants(b_id, participant) VALUES (?, ?)", b_id, user) # TODO: maybe we should ensure no one with debts/outstandings is removed? return redirect(url_for("bookkeeper.book", b_id=b_id)) else: book = data.execute("SELECT * FROM Books where b_id = ?", b_id)[0] raw_users = data.execute("SELECT username, name FROM Users") users = [ '\\"{0}\\" {1}'.format(user['username'], user['name']) for user in raw_users ] users.sort() # TODO: fill with current participants = data.execute( "SELECT * FROM Book_participants as B INNER JOIN Users as U ON B.participant = U.username WHERE b_id = ?", b_id) participants = [ '"{0}" {1}; '.format(p['username'], p['name']) for p in participants ] participants.sort() participants = "".join(participants) print(participants) w = html.WebBuilder() w.form() w.formtable() w.textfield("title", "Overskrift") w.textarea("description", "beskrivelse") w.html(html.autocomplete_multiple(users, "users", default=participants), description="Deltagere", value="abekat") form = w.create(book) return render_template("form.html", form=form)
def settings(t_id): if request.method == "POST": if 'cancel' in request.form: return redirect(url_front()) b = data.Bucket(request.form) b.theme b.type b.notes if b.tour_name == "": b.tour_name = "Unavngiven rustur" if b.year.isdecimal(): b.year = int(b.year) else: flash("Please enter a valid year") return html.back() b >> ("UPDATE Tours $ WHERE t_id = ?", t_id) tutors = request.form['tutors'] tutors = tutors.replace('"', '') tutors = tutors.replace('"', '') tutors = [name.split()[0] for name in re.split(';\s', tutors) if name != ""] old = data.execute("SELECT username FROM Tours_tutors WHERE t_id = ?", t_id) old = [tutor['username'] for tutor in old] for tutor in set(old) - set(tutors): data.execute("DELETE FROM Tours_tutors WHERE t_id = ? and username = ?", t_id, tutor) for tutor in sorted(set(tutors) - set(old)): try: data.execute("INSERT INTO Tours_tutors(t_id, username) VALUES (?, ?)", t_id, tutor) except psycopg2.IntegrityError as e: if e.pgerror.startswith('ERROR: insert or update on table "tours_tutors" violates foreign key constraint "tours_tutors_username_fkey"'): flash("No tutor: "+tutor) raise return redirect(url_for('rustours.rustour', t_id=t_id)) else: tours = data.execute("SELECT * FROM Tours WHERE t_id = ?", t_id) if len(tours) != 1: flash(escape("Den tur findes ikke")) return redirect(url_for("rustours.overview")) tour = tours[0] all_tutors = data.execute("SELECT * FROM Users WHERE username IN (Select username from Group_users where groupname = 'rkg')") all_tutors = ['\\"{0}\\" {1}'.format(tutor['username'], tutor['name']) for tutor in all_tutors] all_tutors.sort() actual_tutors = data.execute("SELECT * FROM Tours_tutors INNER JOIN Users USING(username) WHERE t_id = ?", t_id) actual_tutors = ['"{0}" {1}; '.format(tutor['username'], tutor['name']) for tutor in actual_tutors] actual_tutors.sort() actual_tutors = "".join(actual_tutors) w = html.WebBuilder() w.form() w.formtable() w.textfield("tour_name", "Navn") w.textfield("theme", "Tema") w.textfield("year", "År") w.select("type", "Type", [('p', 'Pigetur'), ('t', 'Transetur'), ('m', 'Munketur')]) w.html(html.autocomplete_multiple(all_tutors, "tutors", default=actual_tutors), description="Vejledere", value="abekat") w.textarea("notes", "Noter") form = w.create(tour) return render_template("rustours/settings.html", form=form, t_id=t_id)
def settings(t_id): if request.method == "POST": if 'cancel' in request.form: return redirect(url_front()) b = data.Bucket(request.form) b.theme b.type b.notes if b.tour_name == "": b.tour_name = "Unavngiven rustur" if b.year.isdecimal(): b.year = int(b.year) else: flash("Please enter a valid year") return html.back() b >> ("UPDATE Tours $ WHERE t_id = ?", t_id) tutors = request.form['tutors'] tutors = tutors.replace('"', '') tutors = tutors.replace('"', '') tutors = [ name.split()[0] for name in re.split(';\s', tutors) if name != "" ] old = data.execute("SELECT username FROM Tours_tutors WHERE t_id = ?", t_id) old = [tutor['username'] for tutor in old] for tutor in set(old) - set(tutors): data.execute( "DELETE FROM Tours_tutors WHERE t_id = ? and username = ?", t_id, tutor) for tutor in sorted(set(tutors) - set(old)): try: data.execute( "INSERT INTO Tours_tutors(t_id, username) VALUES (?, ?)", t_id, tutor) except psycopg2.IntegrityError as e: if e.pgerror.startswith( 'ERROR: insert or update on table "tours_tutors" violates foreign key constraint "tours_tutors_username_fkey"' ): flash("No tutor: " + tutor) raise return redirect(url_for('rustours.rustour', t_id=t_id)) else: tours = data.execute("SELECT * FROM Tours WHERE t_id = ?", t_id) if len(tours) != 1: flash(escape("Den tur findes ikke")) return redirect(url_for("rustours.overview")) tour = tours[0] all_tutors = data.execute( "SELECT * FROM Users WHERE username IN (Select username from Group_users where groupname = 'rkg')" ) all_tutors = [ '\\"{0}\\" {1}'.format(tutor['username'], tutor['name']) for tutor in all_tutors ] all_tutors.sort() actual_tutors = data.execute( "SELECT * FROM Tours_tutors INNER JOIN Users USING(username) WHERE t_id = ?", t_id) actual_tutors = [ '"{0}" {1}; '.format(tutor['username'], tutor['name']) for tutor in actual_tutors ] actual_tutors.sort() actual_tutors = "".join(actual_tutors) w = html.WebBuilder() w.form() w.formtable() w.textfield("tour_name", "Navn") w.textfield("theme", "Tema") w.textfield("year", "År") w.select("type", "Type", [('p', 'Pigetur'), ('t', 'Transetur'), ('m', 'Munketur')]) w.html(html.autocomplete_multiple(all_tutors, "tutors", default=actual_tutors), description="Vejledere", value="abekat") w.textarea("notes", "Noter") form = w.create(tour) return render_template("rustours/settings.html", form=form, t_id=t_id)
def rus(r_id): if request.method == "POST": if 'cancel' in request.form: flash(escape("Ændringer anulleret")) return redirect(url_for('rusmanager.overview')) b = data.Bucket(request.form) b.filled_by = session["username"] b.can_contact = True if "can_contact" in request.form else False b.called = "called" in request.form b.name b.gender b.birthday = nonify(b.birthday) b.co b.address b.zipcode b.city b.move_time b.new_address b.new_zipcode b.new_city b.phone b.email b.vacation b.priority b.gymnasium b.since_gymnasium b.supplementary_exams b.merit b.code_experience b.special_needs b.plays_instrument b.other b.tshirt b.paid = "paid" in request.form b.attending_uniday = "attending_uniday" in request.form b.attending_campus = "attending_campus" in request.form b.attending_rustour = "attending_rustour" in request.form b.mentor = nonify(b.mentor) b.rustour = nonify(b.rustour) b.dutyteam = nonify(b.dutyteam) if b.dutyteam is not None: t_id = data.execute("SELECT t_id FROM Dutyteams WHERE d_id = ?", b.dutyteam) t_id = str(t_id[0]['t_id']) if b.rustour != t_id: b.dutyteam = None b >> ("UPDATE Russer SET $ WHERE r_id = ?", r_id) # Friends: friends = request.form['friends'] friends = friends.replace('"', '') friends = friends.replace('"', '') friend_ids = [name.split()[0] for name in re.split(';\s', friends) if name != ""] for friend in friend_ids: try: b = data.Bucket() b.r_id1, b.r_id2 = sorted((int(friend), int(r_id))) b >= "Friends" except psycopg2.IntegrityError as e: pass # Friends of us: user_friends = request.form['user_friends'] user_friends = user_friends.replace('"', '') user_friends = user_friends.replace('"', '') user_friends = [name.split()[0] for name in re.split(';\s', user_friends) if name != ""] for friend in user_friends: try: b = data.Bucket() b.r_id = r_id b.username = friend b >= "Friends_of_us" except psycopg2.IntegrityError as e: pass flash("Rus opdateret") if "next" in request.form: russer = data.execute("SELECT r_id FROM Russer ORDER BY name ASC") russer = [str(rus['r_id']) for rus in russer] try: next = russer[russer.index(r_id) + 1] return redirect(url_for('rusmanager.rus', r_id=next)) except (ValueError, IndexError): pass if "previous" in request.form: russer = data.execute("SELECT r_id FROM Russer ORDER BY name ASC") russer = [str(rus['r_id']) for rus in russer] try: index = russer.index(r_id) - 1 if index < 0: raise IndexError() previous = russer[index] return redirect(url_for('rusmanager.rus', r_id=previous)) except (ValueError, IndexError): pass return redirect(url_for('rusmanager.overview')) else: rus = data.execute("SELECT * FROM Russer WHERE r_id = ?", r_id) if len(rus) == 0: return "Den rus findes ikke din spasser!" else: rus = rus[0] year = rkgyear() tours = data.execute("SELECT * FROM Tours WHERE year = ?", year) tours = [(tour['t_id'], tour['tour_name']) for tour in tours] tours = [(None, "None")] + tours birthday = rus["birthday"] if birthday == None: birthday = "" elif isinstance(birthday, datetime.date): birthday = birthday.isoformat() dutyteams = data.execute("SELECT * FROM Dutyteams WHERE t_id = ?", rus["rustour"]) dutyteams = [(dutyteam['d_id'], dutyteam['name']) for dutyteam in dutyteams] dutyteams = [(None, "None")] + dutyteams mentors = data.execute("SELECT * FROM Mentorteams WHERE year = ?", year) mentors = [(mentor['m_id'], mentor['mentor_names']) for mentor in mentors] mentors = [(None, "None")] + mentors # Friends: russer = data.execute("SELECT r_id, name FROM Russer WHERE r_id != ?", r_id) russer = ['\\"{0}\\" {1}'.format(rus['r_id'], rus['name']) for rus in russer] friends = data.execute("SELECT * FROM ((SELECT r_id2 as r_id FROM Friends WHERE r_id1 = ?) UNION (SELECT r_id1 as r_id FROM Friends where r_id2 = ?)) as a INNER JOIN Russer USING (r_id) ORDER BY Name", r_id, r_id) friends = ['"{0}" {1}; '.format(friend['r_id'], friend['name']) for friend in friends] friends = "".join(friends) # Friends of us: users = data.execute("SELECT username, name FROM Users WHERE deleted = ?", False) users = ['\\"{0}\\" {1}'.format(user['username'], user['name']) for user in users] user_friends = data.execute("SELECT username, name FROM Friends_of_us INNER JOIN USERS Using (username) WHERE r_id = ?", r_id) user_friends = ['"{0}" {1}; '.format(friend['username'], friend['name']) for friend in user_friends] user_friends = "".join(user_friends) gender = [("male", "Mand"), ("female", "Kvinde"), ("other", "andet")] wb = html.WebBuilder() wb.form() wb.formtable() wb.html(rus_icons(rus)) wb.checkbox("can_contact", "Må kontaktes") wb.checkbox("called", "Opringet") wb.textfield("name", "Navn") wb.select("gender", "Køn", gender) wb.calendar("birthday", "Fødselsdag") wb.textfield("phone", "Tlf") wb.textfield("email", "email") wb.textfield("co", "co") wb.textfield("address", "Adresse") wb.textfield("zipcode", "Postnummer") wb.textfield("city", "By") wb.textfield("move_time", "Flyttedato") wb.textfield("new_address", "Ny adresse") wb.textfield("new_zipcode", "Nyt postnummer") wb.textfield("new_city", "Ny by") wb.textfield("vacation", "Ferie") wb.textfield("priority", "DIKU prioritet") wb.textfield("gymnasium", "Adgangsgivende eksamen (inkl. år)") wb.textfield("since_gymnasium", "Lavet efterfølgende") wb.textfield("supplementary_exams", "Tager du supplerende eksamener") wb.textfield("merit", "Merit") wb.textfield("code_experience", "Kode erfaring") wb.textfield("special_needs", "Specielle behov") wb.textfield("plays_instrument", "Spiller instrument") wb.textarea("other", "Andet") #wb.textfield("Friends", "Kender") wb.checkbox("attending_uniday", "Deltager unidag") wb.checkbox("attending_campus", "Deltager campus") wb.checkbox("attending_rustour", "Deltager rustur") wb.select("mentor", "Mentorhold:", mentors) wb.select("rustour", "Skal på:", tours) # wb.textfield("dutyteam", "Tjansehold") wb.select("dutyteam", "Tjansehold:", dutyteams) wb.textfield("tshirt", "Tshirt størrelse") wb.checkbox("paid", "Betalt") wb.html(html.autocomplete_multiple(russer, "friends", default=friends), description="Tilføj bekendte russer") wb.html(html.autocomplete_multiple(users, "user_friends", default=user_friends), description="Tilføj bekendte vejledere") wb.html('<button type="submit" name="next" value="next">Gem og gå videre</button>') wb.html('<button type="submit" name="previous" value="previous">Gem og gå til forige</button>') form = wb.create(rus) return render_template("rusmanager/rus.html", form=form, name=rus['name'])