コード例 #1
0
ファイル: mentorteams.py プロジェクト: RusKursusGruppen/GRIS
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)
コード例 #2
0
ファイル: bookkeeper.py プロジェクト: RusKursusGruppen/GRIS
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)
コード例 #3
0
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)
コード例 #4
0
ファイル: rustours.py プロジェクト: RusKursusGruppen/GRIS
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)
コード例 #5
0
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)
コード例 #6
0
ファイル: rusmanager.py プロジェクト: RusKursusGruppen/GRIS
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 = ['&quot;{0}&quot; {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 = ['&quot;{0}&quot; {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'])