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 @@
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 %}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 %} +