diff --git a/alembic/versions/3ec57493ad18_add_new_fields_for_band_checklist.py b/alembic/versions/3ec57493ad18_add_new_fields_for_band_checklist.py new file mode 100644 index 000000000..92f952ace --- /dev/null +++ b/alembic/versions/3ec57493ad18_add_new_fields_for_band_checklist.py @@ -0,0 +1,70 @@ +"""Add new fields for band checklist + +Revision ID: 3ec57493ad18 +Revises: ceb6dd682832 +Create Date: 2023-10-05 01:00:24.836124 + +""" + + +# revision identifiers, used by Alembic. +revision = '3ec57493ad18' +down_revision = 'ceb6dd682832' +branch_labels = None +depends_on = None + +from alembic import op +import sqlalchemy as sa + + + +try: + is_sqlite = op.get_context().dialect.name == 'sqlite' +except Exception: + is_sqlite = False + +if is_sqlite: + op.get_context().connection.execute('PRAGMA foreign_keys=ON;') + utcnow_server_default = "(datetime('now', 'utc'))" +else: + utcnow_server_default = "timezone('utc', current_timestamp)" + +def sqlite_column_reflect_listener(inspector, table, column_info): + """Adds parenthesis around SQLite datetime defaults for utcnow.""" + if column_info['default'] == "datetime('now', 'utc')": + column_info['default'] = utcnow_server_default + +sqlite_reflect_kwargs = { + 'listeners': [('column_reflect', sqlite_column_reflect_listener)] +} + +# =========================================================================== +# HOWTO: Handle alter statements in SQLite +# +# def upgrade(): +# if is_sqlite: +# with op.batch_alter_table('table_name', reflect_kwargs=sqlite_reflect_kwargs) as batch_op: +# batch_op.alter_column('column_name', type_=sa.Unicode(), server_default='', nullable=False) +# else: +# op.alter_column('table_name', 'column_name', type_=sa.Unicode(), server_default='', nullable=False) +# +# =========================================================================== + + +def upgrade(): + with op.batch_alter_table("guest_autograph") as batch_op: + batch_op.add_column(sa.Column('rock_island_autographs', sa.Boolean(), nullable=True)) + batch_op.add_column(sa.Column('rock_island_length', sa.Integer(), server_default='60', nullable=False)) + + with op.batch_alter_table("guest_bio") as batch_op: + batch_op.add_column(sa.Column('spotify', sa.Unicode(), server_default='', nullable=False)) + + with op.batch_alter_table("guest_stage_plot") as batch_op: + batch_op.add_column(sa.Column('notes', sa.Unicode(), server_default='', nullable=False)) + + +def downgrade(): + op.drop_column('guest_stage_plot', 'notes') + op.drop_column('guest_bio', 'spotify') + op.drop_column('guest_autograph', 'rock_island_length') + op.drop_column('guest_autograph', 'rock_island_autographs') diff --git a/uber/configspec.ini b/uber/configspec.ini index 2622f1d19..26e240f36 100644 --- a/uber/configspec.ini +++ b/uber/configspec.ini @@ -1711,7 +1711,7 @@ maybe = string(default="We might need rehearsal space; please contact us about o yes = string(default="We definitely need rehearsal space; please contact us about our needs.") [[merch_types]] -cd = string(default="CD") +cd = string(default="Album") tshirt = string(default="T-Shirt") apparel = string(default="Other Apparel") pin = string(default="Pin") @@ -1719,6 +1719,13 @@ sticker = string(default="Sticker") poster = string(default="Poster") miscellaneous = string(default="Miscellaneous") +[[album_media]] +cd = string(default="CD") +cassette = string(default="Cassette") +vinyl = string(default="Vinyl") +flash_drive = string(default="Flash Drive") +download = string(default="Download Code") + [[apparel_varieties]] youth = string(default="Youth") womens = string(default="Women's") diff --git a/uber/models/guests.py b/uber/models/guests.py index e71392945..066238483 100644 --- a/uber/models/guests.py +++ b/uber/models/guests.py @@ -129,6 +129,12 @@ def badges_status(self): @property def taxes_status(self): return "Not Needed" if not self.payment else self.status('taxes') + + @property + def merch_status(self): + if self.merch and self.merch.selling_merch == c.ROCK_ISLAND and not self.merch.poc_address1: + return None + return self.status('merch') @property def panel_status(self): @@ -237,6 +243,7 @@ class GuestBio(MagModel): twitch = Column(UnicodeText) bandcamp = Column(UnicodeText) discord = Column(UnicodeText) + spotify = Column(UnicodeText) other_social_media = Column(UnicodeText) teaser_song_url = Column(UnicodeText) @@ -284,6 +291,7 @@ class GuestStagePlot(MagModel): guest_id = Column(UUID, ForeignKey('guest_group.id'), unique=True) filename = Column(UnicodeText) content_type = Column(UnicodeText) + notes = Column(UnicodeText) @property def url(self): @@ -616,6 +624,8 @@ class GuestAutograph(MagModel): guest_id = Column(UUID, ForeignKey('guest_group.id'), unique=True) num = Column(Integer, default=0) length = Column(Integer, default=60) # session length in minutes + rock_island_autographs = Column(Boolean, nullable=True) + rock_island_length = Column(Integer, default=60) # session length in minutes @presave_adjustment def no_length_if_zero_autographs(self): diff --git a/uber/site_sections/guests.py b/uber/site_sections/guests.py index fb4a98e64..257982aa6 100644 --- a/uber/site_sections/guests.py +++ b/uber/site_sections/guests.py @@ -226,7 +226,8 @@ def merch(self, session, guest_id, message='', coverage=False, warning=False, ** 'guest': guest, 'guest_merch': guest_merch, 'group': group_params or guest.group, - 'message': message + 'message': message, + 'agreed_to_ri_faq': guest.group_type == c.BAND and guest_merch and guest_merch.orig_value_of('selling_merch') != c.NO_MERCH and guest_merch.poc_address1, } @ajax @@ -296,6 +297,7 @@ def autograph(self, session, guest_id, message='', **params): guest_autograph = session.guest_autograph(params) if cherrypy.request.method == 'POST': guest_autograph.length = 60 * int(params['length']) # Convert hours to minutes + guest_autograph.rock_island_length = 60 * int(params['rock_island_length']) # Convert hours to minutes guest.autograph = guest_autograph session.add(guest_autograph) raise HTTPRedirect('index?id={}&message={}', guest.id, 'Your autograph sessions have been saved') diff --git a/uber/static/fonts/glyphicons-halflings-regular.eot b/uber/static/deps/fonts/glyphicons-halflings-regular.eot similarity index 100% rename from uber/static/fonts/glyphicons-halflings-regular.eot rename to uber/static/deps/fonts/glyphicons-halflings-regular.eot diff --git a/uber/static/fonts/glyphicons-halflings-regular.svg b/uber/static/deps/fonts/glyphicons-halflings-regular.svg similarity index 100% rename from uber/static/fonts/glyphicons-halflings-regular.svg rename to uber/static/deps/fonts/glyphicons-halflings-regular.svg diff --git a/uber/static/fonts/glyphicons-halflings-regular.ttf b/uber/static/deps/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from uber/static/fonts/glyphicons-halflings-regular.ttf rename to uber/static/deps/fonts/glyphicons-halflings-regular.ttf diff --git a/uber/static/fonts/glyphicons-halflings-regular.woff b/uber/static/deps/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from uber/static/fonts/glyphicons-halflings-regular.woff rename to uber/static/deps/fonts/glyphicons-halflings-regular.woff diff --git a/uber/templates/guest_checklist/autograph_deadline.html b/uber/templates/guest_checklist/autograph_deadline.html index 16527421d..06ca43d24 100644 --- a/uber/templates/guest_checklist/autograph_deadline.html +++ b/uber/templates/guest_checklist/autograph_deadline.html @@ -51,7 +51,8 @@

{% block form_title %}Autographs for {{ guest.group.name }}{% endblock %}Length of Sessions (hours)
diff --git a/uber/templates/guest_checklist/badges_deadline.html b/uber/templates/guest_checklist/badges_deadline.html index 27d0c65ab..be3b3d595 100644 --- a/uber/templates/guest_checklist/badges_deadline.html +++ b/uber/templates/guest_checklist/badges_deadline.html @@ -9,11 +9,11 @@ {% block deadline_text %} {% if guest.all_badges_claimed %} You have already assigned all badges which have been assigned to your group, but you may change who your - complementary badges are assigned to using the link above anytime until the start of {{ c.EVENT_NAME }}. + complimentary badges are assigned to using the link above anytime until the start of {{ c.EVENT_NAME }}. {% else %} - You currently have {{ guest.group.floating|length }} unassigned complementary +

You currently have {{ guest.group.floating|length }} unassigned complimentary badge{{ guest.group.floating|length|pluralize }} available to your group. You may use the link above to - assign these badges. + assign these badges.

{% endif %}

By default, each guest receives a badge for themselves, plus an additional badge. diff --git a/uber/templates/guest_checklist/band_autograph_deadline.html b/uber/templates/guest_checklist/band_autograph_deadline.html new file mode 100644 index 000000000..1d3cab9f3 --- /dev/null +++ b/uber/templates/guest_checklist/band_autograph_deadline.html @@ -0,0 +1,50 @@ +{% extends "guest_checklist/autograph_deadline.html" %} + +{% block deadline_text %} +{% if guest.autograph_status %} + You have already indicated + {% if not guest.autograph.num %} + that you do not wish to hold any autograph sessions, + {% else %} + that you would like + {% if guest.autograph.num %} + {{ guest.autograph.num }} autograph session{{ guest.autograph.num|pluralize }}, + {% if guest.autograph.rock_island_autographs %} plus {% endif %} + {% endif %} + {% if guest.autograph.rock_island_autographs %} + a {{ guest.autograph.rock_island_length // 60 }}-hour meet-and-greet at Rock Island, + {% endif %} + {% endif %} + but you can use the link above to update your preferences. +{% else %} +Use the link above to let us know if you would like to host any autograph sessions and/or if you would like a Meet & Greet at Rock Island. +{% endif %} +{% endblock %} + +{% block form_extra %} +
+
If you would like to have a Meet & Greet in Rock Island, please indicate below.
+
+ +
+
+
+ +
+ +
+
+ +

Note: You are allowed to have both an autograph session with the Autographs Department and a Meet & Greet in Rock Island or any other combination. Autographs should only be done at these two locations.

+ +

The Rock Island Meet & Greet is a chance to sign merch purchased during the event, pose for pictures, and generally have a chance to talk to your fans after the show. This will occur in the Rock Island area of the Main Concert Hall.

+ +

The Autograph Session is a more formal signing session designed to be a quieter, more intimate experience for attendees and performers. Autograph sessions can occur any time throughout the weekend and will appear on the schedule. Sessions are held in Autographs, located in Expo E.

+{% endblock %} \ No newline at end of file diff --git a/uber/templates/guest_checklist/band_badges_deadline.html b/uber/templates/guest_checklist/band_badges_deadline.html new file mode 100644 index 000000000..e5441d18b --- /dev/null +++ b/uber/templates/guest_checklist/band_badges_deadline.html @@ -0,0 +1,15 @@ +{% extends "guest_checklist/badges_deadline.html" %} + +{% block deadline_text %} + {% if guest.all_badges_claimed %} + You have already assigned all badges which have been assigned to your group, but you may change who your + complimentary badges are assigned to using the link above anytime until the start of {{ c.EVENT_NAME }}. + {% else %} +

You currently have {{ guest.group.floating|length }} unassigned complimentary + badge{{ guest.group.floating|length|pluralize }} available to your group. You may use the link above to + assign these badges.

+ {% endif %} + By default, each guest receives a badge for themselves, plus an additional badge. + Additional complimentary badges may be issued upon request by reaching out to {{ c.BAND_EMAIL|email_only|email_to_link }} + or your assigned liaison. +{% endblock %} \ No newline at end of file diff --git a/uber/templates/guest_checklist/band_bio_deadline.html b/uber/templates/guest_checklist/band_bio_deadline.html new file mode 100644 index 000000000..32dcdcf3d --- /dev/null +++ b/uber/templates/guest_checklist/band_bio_deadline.html @@ -0,0 +1,8 @@ +{% extends "guest_checklist/bio_deadline.html" %} + +{% block deadline_headline %}Performer Announcement Information{% endblock %} + +{% block form_desc %} + Please provide a short bio that we can use on our website and in social media announcements leading up to the event. + Everything else is optional, but is extremely helpful in promoting you to our attendees. +{% endblock %} \ No newline at end of file diff --git a/uber/templates/guest_checklist/band_charity_deadline.html b/uber/templates/guest_checklist/band_charity_deadline.html new file mode 100644 index 000000000..174758bc2 --- /dev/null +++ b/uber/templates/guest_checklist/band_charity_deadline.html @@ -0,0 +1,12 @@ +{% extends "guest_checklist/charity_deadline.html" %} + +{% block deadline_text %} +{% if guest.charity_status %} + You have already indicated your charity preferences, but you may update them using the link above. +{% else %} + {{ c.EVENT_NAME }} hosts a yearly charity auction, with 100% of proceeds going to + Child's Play. + Use the link above to indicate if you would be willing to donate any signed merchandise to the auction or + would be able to assist in any other way. +{% endif %} +{% endblock %} \ No newline at end of file diff --git a/uber/templates/guest_checklist/band_merch_deadline.html b/uber/templates/guest_checklist/band_merch_deadline.html index e14f144dc..3bcef68dd 100644 --- a/uber/templates/guest_checklist/band_merch_deadline.html +++ b/uber/templates/guest_checklist/band_merch_deadline.html @@ -6,64 +6,50 @@ {% if guest.merch_status %} You have already indicated your merchandise preferences, but you may update them using the link above. {% else %} - We need you to tell us whether you have any merchandise to sell{% if HAS_ROCK_ISLAND %}, - and whether you intend to participate in our "Rock Island" program where we sell your merchandise so that you do - not need to staff your own table{% endif %}. + Use the link above to provide details on any merchandise you are bringing to + sell{% if HAS_ROCK_ISLAND %} in 'Rock Island', our volunteer-run merch booth{% endif %}. {% endif %} {% endblock %} {% block form_desc %} - {{ super() }} - -

- For mainstage performers, on the night of your performance, a full table will also be provided immediately across - from the entrance to the concert hall for merchandise sales and signings. -

+

MAGFest will provide access to our Rock Island Merch Department during the event.

+ +

+ + Click here for more info about our Rock Island service! + +

+ +

+ For mainstage performers, on the night of your performance, a full table will also be provided immediately across + from the entrance to the concert hall for merchandise sales and signings. +

{% endblock %} {% block form_extra %} {{ super() }} - + {% if guest.group_type == c.BAND %} +
+ +
+ +
+
+ {% endif %} +
diff --git a/uber/templates/guest_checklist/guest_bio_deadline.html b/uber/templates/guest_checklist/guest_bio_deadline.html index a26ab1fc0..ec055307c 100644 --- a/uber/templates/guest_checklist/guest_bio_deadline.html +++ b/uber/templates/guest_checklist/guest_bio_deadline.html @@ -1,4 +1,5 @@ {% extends "guest_checklist/bio_deadline.html" %} + {% block deadline_headline %}Guest/Group Information{% endblock %} {% block deadline_text %} {% if guest.bio_status %} diff --git a/uber/templates/guest_checklist/guest_panel_deadline.html b/uber/templates/guest_checklist/guest_panel_deadline.html index bfd060a42..13d18b0ff 100644 --- a/uber/templates/guest_checklist/guest_panel_deadline.html +++ b/uber/templates/guest_checklist/guest_panel_deadline.html @@ -1,2 +1,3 @@ {% extends "guest_checklist/panel_deadline.html" %} + {% block deadline_headline %}Add Your Panels{% endblock %} \ No newline at end of file diff --git a/uber/templates/guest_checklist/merch_deadline.html b/uber/templates/guest_checklist/merch_deadline.html index 9f064a7ac..eaa3a4fe0 100644 --- a/uber/templates/guest_checklist/merch_deadline.html +++ b/uber/templates/guest_checklist/merch_deadline.html @@ -20,7 +20,7 @@ {% block deadline_extra %} - {% if HAS_ROCK_ISLAND and guest.merch.selling_merch == c.ROCK_ISLAND %} + {% if HAS_ROCK_ISLAND and guest.merch.selling_merch == c.ROCK_ISLAND and guest.merch_status %} {{ macros.checklist_image(guest.merch.inventory) }} Rock Island Inventory @@ -109,7 +109,7 @@ @@ -201,7 +201,7 @@

Your Inventory

Add some merch to your inventory!

- + +
diff --git a/uber/templates/guest_checklist/panel_deadline.html b/uber/templates/guest_checklist/panel_deadline.html index 90f5e9374..18e17d400 100644 --- a/uber/templates/guest_checklist/panel_deadline.html +++ b/uber/templates/guest_checklist/panel_deadline.html @@ -1,7 +1,7 @@ {{ macros.checklist_image(guest.panel_status) }} - {% block deadline_headline %}Add a Panel{% endblock %} + {% block deadline_headline %}Run a Panel{% endblock %} Deadline: {{ guest.deadline_from_model('panel')|datetime_local }} diff --git a/uber/templates/guest_checklist/rehearsal_deadline.html b/uber/templates/guest_checklist/rehearsal_deadline.html index 99538de3b..382da8f76 100644 --- a/uber/templates/guest_checklist/rehearsal_deadline.html +++ b/uber/templates/guest_checklist/rehearsal_deadline.html @@ -10,6 +10,7 @@ {% block deadline_text %} {% if guest.needs_rehearsal is none %} Please use the above link to let us know if you will need rehearsal space onsite. + Note that Rehearsal Time is provided on a first come, first serve basis and slots are limited. {% else %} You have already told us you {{ guest.rehearsal_status }} need rehearsal space. You can use the link above to change your answer before the deadline. diff --git a/uber/templates/guest_checklist/stage_plot_deadline.html b/uber/templates/guest_checklist/stage_plot_deadline.html index 21d7e8adc..f7827adcd 100644 --- a/uber/templates/guest_checklist/stage_plot_deadline.html +++ b/uber/templates/guest_checklist/stage_plot_deadline.html @@ -9,8 +9,7 @@ {% block deadline_text %} We require that you upload an exact description of your desired stage layout. - Also include any needed extra rental requests, set lists, information regarding - video/visuals, etc... + Please be sure to include any needed extra rental requests, setlists, information regarding video/visuals, etc...

Failure to do so may result in you not receiving the setup you expect or want. {% endblock %} @@ -36,12 +35,22 @@

{% block form_title %}Stage Layout for {{ guest.group.name }}{% endblock %}<

-
+ {{ csrf_token() }} - -
+
+ +
+ +
+
+
+ +
+ +
+
{% block form_extra %}{% endblock %}
diff --git a/uber/templates/guestbase.html b/uber/templates/guestbase.html index 476fe6998..5f394a2c3 100644 --- a/uber/templates/guestbase.html +++ b/uber/templates/guestbase.html @@ -18,8 +18,8 @@ padding-top: 7px; } -
-
+
+
{% block body %}{% endblock %}
diff --git a/uber/templates/guests/index.html b/uber/templates/guests/index.html index fb4d78d8a..ebd3cdbf9 100644 --- a/uber/templates/guests/index.html +++ b/uber/templates/guests/index.html @@ -13,9 +13,15 @@

{% if guest.group_type == c.GUEST %}Guests & Events Checklist for {{ guest.group.name }} {% else %}{{ guest.group_type_label }} Checklist for {{ guest.group.name }}{% endif %}

- {% if guest.group_type == c.GUEST %}This checklist will help make sure {{ c.EVENT_NAME }} has all the group, panel, activity, and + {% if guest.group_type == c.GUEST %} + This checklist will help make sure {{ c.EVENT_NAME }} has all the group, panel, activity, and support information we need from you before the event. - {% else %}Here is a list of things which {{ c.EVENT_NAME }} needs from you before the event.{% endif %} + {% elif guest.group_type == c.BAND %} + Please fill out the following checklist items by no later than the dates indicated on each individual item. + If you have any questions, please contact {{ c.BAND_EMAIL|email_only|email_to_link }} or your provided liaison. + {% else %} + Here is a list of things which {{ c.EVENT_NAME }} needs from you before the event. + {% endif %}

diff --git a/uber/templates/guests_macros.html b/uber/templates/guests_macros.html index 9a33af7ca..90b4afaf9 100644 --- a/uber/templates/guests_macros.html +++ b/uber/templates/guests_macros.html @@ -80,7 +80,7 @@ value="{{ travel_plan.arrival_time.astimezone(c.EVENT_TIMEZONE).strftime('%-m/%-d/%Y %-I:%M %p') if travel_plan.arrival_time and not is_class else '' }}" required="required"> - + @@ -109,7 +109,7 @@ value="{{ travel_plan.departure_time.astimezone(c.EVENT_TIMEZONE).strftime('%-m/%-d/%Y %-I:%M %p') if travel_plan.departure_time and not is_class else '' }}" required="required"> - + @@ -148,7 +148,7 @@ {%- set inventory_url = guest_merch.inventory_url(item.id, name) -%} {%- if suppress_preview -%} -
View image
+
View image
{%- else -%} {%- endif -%} @@ -282,7 +282,7 @@
{{ variety_label }}
-
+
{% for cut_value, cut_label in cuts_opts %} @@ -308,6 +308,15 @@
{{ variety_label }}
{% macro cd_inventory_form(type, item=None, suffix='') -%} {% call base_inventory_form(type, item=item, suffix=suffix) %} +
+ +
+ +
+
@@ -402,6 +411,12 @@
{{ variety_label }}
{{ item.name }}
+ {% if item.media %} +
+
Media
+
{{ c.ALBUM_MEDIAS[item.media|int] }}
+
+ {% endif %}
Price
{{ item.price|format_currency }}
@@ -424,10 +439,10 @@
{{ variety_label }}
diff --git a/uber/templates/panels/guest.html b/uber/templates/panels/guest.html index 0d0cb7c5d..6ffcb7631 100644 --- a/uber/templates/panels/guest.html +++ b/uber/templates/panels/guest.html @@ -5,7 +5,6 @@ {% block content %} {% include "panels_common.html" %} - {% include 'prereg_masthead.html' %}
{% if c.APP_LIMIT and attendee.panel_applications|length >= c.APP_LIMIT %}