Skip to content

Commit

Permalink
Make the workshop steward pages locatable
Browse files Browse the repository at this point in the history
  • Loading branch information
SamLR committed May 29, 2024
1 parent 83c3563 commit ba2b69a
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 18 deletions.
65 changes: 50 additions & 15 deletions apps/schedule/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

from main import db
from models import event_year
from models.cfp import Proposal, Venue, HUMAN_CFP_TYPES
from models.cfp import Proposal, Venue, HUMAN_CFP_TYPES, WorkshopProposal
from models.ical import CalendarSource, CalendarEvent
from models.user import generate_api_token
from models.admin_message import AdminMessage
Expand Down Expand Up @@ -628,25 +628,59 @@ class WorkshopCheckingForm(Form):
event_tickets = FieldList(FormField(CheckInEventTicketForm))


@schedule.route("/schedule/workshop-steward/<int:proposal_id>", methods=["GET", "POST"])
@schedule.route("/schedule/workshop-steward")
def workshop_steward_main():
workshop_venues = Venue.query.filter(
Venue.allowed_types.any('workshop')
).all()

youthworkshop_venues = Venue.query.filter(
Venue.allowed_types.any('youthworkshop')
).all()
return render_template("schedule/workshop-steward/main.html", workshop_venues=workshop_venues, youthworkshop_venues=youthworkshop_venues)


@schedule.route("/schedule/workshop-steward/<int:venue_id>")
@v_user_required
def workshop_steward(proposal_id):
proposal = Proposal.query.get_or_404(proposal_id)
def workshop_steward_venue(venue_id: int):
venue = Venue.query.get_or_404(venue_id)
workshops = (
WorkshopProposal.query
.filter_by(scheduled_venue_id=venue_id)
.filter(
WorkshopProposal.type.in_(venue.allowed_types),
WorkshopProposal.is_accepted,
WorkshopProposal.scheduled_time > pendulum.now(event_tz),
WorkshopProposal.scheduled_duration.isnot(None),
WorkshopProposal.hide_from_schedule.isnot(True),
WorkshopProposal.user_scheduled.isnot(True),
WorkshopProposal.requires_ticket.is_(True),
)
.order_by(WorkshopProposal.scheduled_time)
.all()
)
return render_template("schedule/workshop-steward/venue.html", venue=venue, all_workshops=workshops)


@schedule.route("/schedule/workshop-steward/workshop/<int:workshop_id>", methods=["GET", "POST"])
@v_user_required
def workshop_steward(workshop_id):
workshop = WorkshopProposal.query.get_or_404(workshop_id)
user_role_strs = [r.name for r in current_user.volunteer.interested_roles.all()]

# Require that the user has the appropriate role & only show the attendee list the hour before
if proposal.type == "youthworkshop" and "Youth Workshop Helper" not in user_role_strs:
if workshop.type == "youthworkshop" and "Youth Workshop Helper" not in user_role_strs:
abort(401)

if proposal.type == "workshop" and "Workshop Steward" not in user_role_strs:
if workshop.type == "workshop" and "Workshop Steward" not in user_role_strs:
abort(401)

show_list_after = proposal.scheduled_time - timedelta(minutes=60)
show_list_after = workshop.scheduled_time - timedelta(minutes=60)
if app.config.get("DEBUG") and request.args.get("time_locked", False):
time_locked = False
elif (
datetime.now() < show_list_after or
(datetime.now() > (proposal.scheduled_time + timedelta(minutes=(proposal.scheduled_duration+60))))
(datetime.now() > (workshop.scheduled_time + timedelta(minutes=(workshop.scheduled_duration+60))))
):
app.logger.info("Time locked view")
flash(f"The attendee list will be visible after { show_list_after }")
Expand All @@ -664,31 +698,32 @@ def workshop_steward(proposal_id):
ticket.use_all_codes()
db.session.commit()
flash(f"Checked in {ticket.user.name}")
return redirect(url_for(".workshop_steward", proposal_id=proposal_id))
return redirect(url_for(".workshop_steward", workshop_id=workshop_id))

for code_form in ticket_form.codes:
if code_form.use_code.data:
ticket.use_code(code_form.code.data)
db.session.commit()
flash(f"Used {ticket.user.name}'s code '{code_form.code.data}'")
return redirect(url_for(".workshop_steward", proposal_id=proposal_id))
return redirect(url_for(".workshop_steward", workshop_id=workshop_id))

for event_ticket in workshop.tickets:
if not event_ticket.ticket_codes:
continue

for event_ticket in proposal.tickets:
form.event_tickets.append_entry()
form.event_tickets[-1]._ticket = event_ticket
form.event_tickets[-1].event_ticket_id.data = event_ticket.id

if not event_ticket.ticket_codes:
continue

for code in event_ticket.ticket_codes.split(","):
form.event_tickets[-1].codes.append_entry()
form.event_tickets[-1].codes[-1].code.data = code

return render_template(
"schedule/workshop-steward.html",
"schedule/workshop-steward/workshop.html",
form=form,
time_locked=time_locked,
proposal=proposal,
workshop=workshop,
show_list_after=show_list_after,
)
22 changes: 22 additions & 0 deletions templates/schedule/workshop-steward/main.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{% extends "base.html" %}
{% block title %}Workshop Steward{% endblock %}
{% block body %}

<h1>Workshop Steward</h1>

<h2>Workshops</h2>

<ul>
{% for venue in workshop_venues %}
<li><a href="{{ url_for('.workshop_steward_venue', venue_id=venue.id) }}">{{ venue.name }}</a></li>
{% endfor %}
</ul>

<h2>Youth Workshops</h2>

<ul>
{% for venue in youthworkshop_venues %}
<li><a href="{{ url_for('.workshop_steward_venue', venue_id=venue.id) }}">{{ venue.name }}</a></li>
{% endfor %}
</ul>
{% endblock %}
13 changes: 13 additions & 0 deletions templates/schedule/workshop-steward/venue.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{% extends "base.html" %}
{% block title %}Workshop Steward -- {{ venue.name }}{% endblock %}
{% block body %}

<h1>Workshop Steward for {{ venue.name }}</h1>

<ul>
{% for workshop in all_workshops %}
<li><a href="{{ url_for('.workshop_steward', workshop_id=workshop.id) }}">{{ workshop.scheduled_time }} -- {{ workshop.title }}</a></li>
{% endfor %}
</ul>

{% endblock %}
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@
{% block title %}Workshop Steward{% endblock %}
{% block body %}

<h1>Workshop Steward -- {{ proposal.published_title or proposal.title }}</h1>
<h1>Workshop Steward -- {{ workshop.published_title or workshop.title }}</h1>

<p>{{ proposal.published_description or proposal.description }}</p>
<p>{{ workshop.published_description or workshop.description }}</p>

<p>&nbsp;</p>

{% if time_locked %}
<p>The full list of attendees will be available after {{ show_list_after }}
and for the duration of the {{ proposal.type }}.</p>
and for the duration of the {{ workshop.type }}.</p>
{% else %}
<ul>
<form method="POST">
Expand Down

0 comments on commit ba2b69a

Please sign in to comment.