{% import "includes/macros" as macros %} {% import "includes/forms/log" as log %} {% extends "base" %} {% block content %} <div class="max-w-screen-xl w-full grid sm:grid-cols-2 lg:grid-cols-3 gap-4"> {% if "scheckbuch" in loggedin_user.roles %} <div class="grid gap-3 sm:col-span-2 lg:col-span-3"> <div class="bg-white dark:bg-primary-900 text-black dark:text-white rounded-md block shadow mt-5" role="alert"> <h2 class="h2">Scheckbuch</h2> <div class="text-sm p-3"> <h3>Du hast bisher {{ last_trips | length }} deiner 5 Scheckbuch-Ausfahrten gemacht:</h3> <ol> {% for last_trip in last_trips %} <li>{{ log::show_old(log=last_trip, state="completed", only_ones=false, index=loop.index) }}</li> {% endfor %} </ol> </div> </div> </div> {% endif %} {% if "paid" not in loggedin_user.roles and "Donau Linz" in loggedin_user.roles %} <div class="grid gap-3 sm:col-span-2 lg:col-span-3"> <div class="bg-white dark:bg-primary-900 text-black dark:text-white rounded-md block shadow mt-5" role="alert"> <h2 class="h2">Vereinsgebühren</h2> <div class="text-sm p-3"> {% include "includes/qrcode" %} <div id="qrcode" style="float: left; padding-top: 10 pt; padding-right: 10pt; padding-bottom: 10pt"></div> <script type="text/javascript"> var sepaqr = new sepaQR({ benefName: 'ASKÖ Ruderverein Donau Linz', benefBIC: 'BKAUATWWXXX', benefAccNr: 'AT131200080413001200', amountEuro: {{ fee.sum_in_cents/100 }}, remittanceInf: 'Vereinsgebühren {{ fee.name }}', }); var code = sepaqr.makeCodeInto("qrcode"); </script> <b>Dein Vereinsbeitrag ({{ fee.name }}): {{ fee.sum_in_cents / 100 }}€ {% if fee.parts | length == 1 %}({{ fee.parts[0].0 }}){% endif %} </b> <br /> {% if fee.parts | length > 1 %} <small> Setzt sich zusammen aus: <ul style="list-style: circle; padding-left: 1em;"> {% for p in fee.parts %} <li> {{ p.0 }} ({{ p.1 / 100 }}€) {% if not loop.last %}+{% endif %} </li> {% endfor %} </ul> </small> {% endif %} Bitte auf folgendes Konto überweisen: IBAN AT13 1200 0804 1300 1200. Alternativ kannst du auch mit deiner Bankapp den QR Code scannen, damit sollten alle Daten vorausgefüllt sein. <br /> Falls die Berechnung nicht stimmt (korrekte Preise findest du <a href="https://rudernlinz.at/unser-verein/gebuhren/" target="_blank" rel="noopener noreferrer">hier</a>) melde dich bitte bei it@rudernlinz.at. @Studenten: Bitte die aktuelle Studienbestätigung an it@rudernlinz.at schicken. <br /> <small>Wir aktualisieren den Ruderassistent unregelmäßig mit unserem Bankkonto. Falls du schon bezahlt hast, kannst du diese Nachricht getrost ignorieren :^)</small> </div> </div> </div> {% endif %} <h1 class="h1 sm:col-span-2 lg:col-span-3">Ausfahrten</h1> {% include "includes/buttons" %} {% for day in days %} {% set amount_trips = day.planned_events | length + day.trips | length %} {% set_global day_cox_needed = false %} {% if day.planned_events | length > 0 %} {% for planned_event in day.planned_events %} {% if planned_event.cox_needed %} {% set_global day_cox_needed = true %} {% endif %} {% endfor %} {% endif %} <div class="bg-white dark:bg-primary-900 rounded-md flex justify-between flex-col shadow reset-js" style="min-height: 10rem" data-trips="{{ amount_trips }}" data-month="{{ day.day| date(format='%m') }}" data-coxneeded="{{ day_cox_needed }}"> <div> <h2 class="font-bold uppercase tracking-wide text-center rounded-t-md {% if day.is_pinned %} text-white bg-primary-950 {% else %} text-primary-950 dark:text-white bg-gray-200 dark:bg-primary-950 bg-opacity-80 {% endif %} text-lg px-3 py-3 "> {{ day.day| date(format="%d.%m.%Y") }} <small class="inline-block ml-1 text-xs {% if day.is_pinned %} text-gray-200 {% else %} text-gray-500 dark:text-gray-100 {% endif %}">{{ day.day | date(format="%A", locale="de_AT") }}</small> </h2> {% if day.planned_events | length > 0 or day.trips | length > 0 %} <div class="grid grid-cols-1 gap-3 mb-3"> {# --- START Events --- #} {% if day.planned_events | length > 0 %} {% for planned_event in day.planned_events | sort(attribute="planned_starting_time") %} {% set amount_cur_cox = planned_event.cox | length %} {% set amount_cox_missing = planned_event.planned_amount_cox - amount_cur_cox %} <div class="pt-2 px-3 border-t border-gray-200" style="order: {{ planned_event.planned_starting_time | replace(from=":", to="") }}"> <div class="flex justify-between items-center"> <div class="mr-1"> <strong class="text-primary-900 dark:text-white"> {{ planned_event.planned_starting_time }} Uhr </strong> <small class="text-gray-600 dark:text-gray-100">({{ planned_event.name }} {%- if planned_event.trip_type %} - {{ planned_event.trip_type.icon | safe }} {{ planned_event.trip_type.name }} {%- endif -%} )</small> <br /> <a href="#" data-sidebar="true" data-trigger="sidebar" data-header="<strong>{{ planned_event.planned_starting_time }} Uhr</strong> ({{ planned_event.name }}) {% if planned_event.trip_type %}<small class='block'>{{ planned_event.trip_type.desc }}</small>{% endif %} {% if planned_event.notes %}<small class='block'>{{ planned_event.notes }}</small>{% endif %} " data-body="#event{{ planned_event.trip_details_id }}" class="inline-block link-primary mr-3"> Details </a> </div> <div class="text-right grid gap-2"> {# --- START Row Buttons --- #} {% set_global cur_user_participates = false %} {% for rower in planned_event.rower %} {% if rower.name == loggedin_user.name %} {% set_global cur_user_participates = true %} {% endif %} {% endfor %} {% if cur_user_participates %} <a href="/planned/remove/{{ planned_event.trip_details_id }}" class="btn btn-attention btn-fw">Abmelden</a> {% endif %} {% if planned_event.max_people > planned_event.rower | length %} {% if cur_user_participates == false %} <a href="/planned/join/{{ planned_event.trip_details_id }}" class="btn btn-primary btn-fw" {% if planned_event.trip_type %}onclick="return confirm('{{ planned_event.trip_type.question }}');"{% endif %}>Mitrudern</a> {% endif %} {% endif %} {# --- END Row Buttons --- #} {# --- START Cox Buttons --- #} {% if "cox" in loggedin_user.roles %} {% set_global cur_user_participates = false %} {% for cox in planned_event.cox %} {% if cox.name == loggedin_user.name %} {% set_global cur_user_participates = true %} {% endif %} {% endfor %} {% if cur_user_participates %} <a href="/cox/remove/{{ planned_event.id }}" class="block btn btn-attention btn-fw"> {% include "includes/cox-icon" %} Abmelden </a> {% else %} <a href="/cox/join/{{ planned_event.id }}" class="block btn {% if amount_cox_missing > 0 %} btn-dark {% else %} btn-gray {% endif %} btn-fw" {% if planned_event.trip_type %}onclick="return confirm('{{ planned_event.trip_type.question }}');"{% endif %}> {% include "includes/cox-icon" %} Steuern </a> {% endif %} {% endif %} {# --- END Cox Buttons --- #} </div> </div> {# --- START Sidebar Content --- #} <div class="hidden"> <div id="event{{ planned_event.trip_details_id }}"> {# --- START List Coxes --- #} {% if planned_event.planned_amount_cox > 0 %} {% if amount_cox_missing > 0 %} {{ macros::box(participants=planned_event.cox, empty_seats=planned_event.planned_amount_cox - amount_cur_cox, header='Noch benötigte Steuerleute:', text='Keine Steuerleute angemeldet') }} {% else %} {{ macros::box(participants=planned_event.cox, empty_seats="", header='Genügend Steuerleute haben sich angemeldet :-)', text='Keine Steuerleute angemeldet') }} {% endif %} {% endif %} {# --- END List Coxes --- #} {# --- START List Rowers --- #} {% if planned_event.max_people > 0 %} {% set amount_cur_rower = planned_event.rower | length %} {{ macros::box(participants=planned_event.rower, empty_seats=planned_event.max_people - amount_cur_rower, bg='primary-100', color='black', trip_details_id=planned_event.trip_details_id, allow_removing="planned_event" in loggedin_user.roles) }} {% endif %} {# --- END List Rowers --- #} {% if "planned_event" in loggedin_user.roles %} <form action="/planned/join/{{ planned_event.trip_details_id }}" method="get" /> {{ macros::input(label='Gast', class="input rounded-t", name='user_note', type='text', required=true) }} <input value="Gast hinzufügen" class="btn btn-primary w-full rounded-t-none-important" type="submit" /> </form> {% endif %} {% if planned_event.allow_guests %} <div class="text-primary-900 bg-primary-50 text-center p-1 mb-4">Gäste willkommen!</div> {% endif %} {% if "planned_event" in loggedin_user.roles %} {# --- START Edit Form --- #} <div class="bg-gray-100 dark:bg-primary-900 p-3 mt-4 rounded-md"> <h3 class="text-primary-950 dark:text-white font-bold uppercase tracking-wide mb-2">Ausfahrt bearbeiten</h3> <form action="/admin/planned-event" method="post" class="grid gap-3"> <input type="hidden" name="_method" value="put" /> <input type="hidden" name="id" value="{{ planned_event.id }}" /> {{ macros::input(label='Titel', name='name', type='input', value=planned_event.name) }} {{ macros::input(label='Anzahl Ruderer', name='max_people', type='number', required=true, value=planned_event.max_people, min='0') }} {{ macros::input(label='Anzahl Steuerleute', name='planned_amount_cox', type='number', value=planned_event.planned_amount_cox, required=true, min='0') }} {{ macros::checkbox(label='Immer anzeigen', name='always_show', id=planned_event.id,checked=planned_event.always_show) }} {{ macros::checkbox(label='Gesperrt', name='is_locked', id=planned_event.id,checked=planned_event.is_locked) }} {{ macros::input(label='Anmerkungen', name='notes', type='input', value=planned_event.notes) }} <input value="Speichern" class="btn btn-primary" type="submit" /> </form> </div> {# --- END Edit Form --- #} {# --- START Delete Btn --- #} <div class="text-right"> <a href="/admin/planned-event/{{ planned_event.id }}/delete" class="inline-block btn btn-alert"> {% include "includes/delete-icon" %} Termin löschen </a> </div> {% endif %} {# --- END Delete Btn --- #} </div> </div> {# --- END Sidebar Content --- #} </div> {% endfor %} {% endif %} {# --- END Events --- #} {# --- START Trips --- #} {% if day.trips | length > 0 %} {% for trip in day.trips | sort(attribute="planned_starting_time") %} <div class="pt-2 px-3 reset-js border-t border-gray-200" style="order: {{ trip.planned_starting_time | replace(from=":", to="") }}" data-coxneeded="false"> <div class="flex justify-between items-center"> <div class="mr-1"> {% if trip.max_people == 0 %} <strong class="text-[#f43f5e]">⚠ {{ trip.planned_starting_time }} Uhr</strong> <small class="text-[#f43f5e]">(Absage {{ trip.cox_name -}} {% if trip.trip_type %} - {{ trip.trip_type.icon | safe }}{{ trip.trip_type.name }} {% endif -%} )</small> {% else %} <strong class="text-primary-900 dark:text-white">{{ trip.planned_starting_time }} Uhr</strong> <small class="text-gray-600 dark:text-gray-100">({{ trip.cox_name -}} {% if trip.trip_type %} - {{ trip.trip_type.icon | safe }} {{ trip.trip_type.name }} {% endif -%} )</small> {% endif %} <br /> <a href="#" data-sidebar="true" data-trigger="sidebar" data-header="<strong> {% if trip.max_people == 0 %}⚠{% endif %} {{ trip.planned_starting_time }} Uhr</strong> ({{ trip.cox_name }}) {% if trip.trip_type %}<small class='block'>{{ trip.trip_type.desc }}</small>{% endif %} {% if trip.notes %}<small class='block'>{{ trip.notes }}</small>{% endif %} " data-body="#trip{{ trip.trip_details_id }}" class="inline-block link-primary mr-3"> Details </a> </div> <div> {% set_global cur_user_participates = false %} {% for rower in trip.rower %} {% if rower.name == loggedin_user.name %} {% set_global cur_user_participates = true %} {% endif %} {% endfor %} {% if cur_user_participates %} <a href="/planned/remove/{{ trip.trip_details_id }}" class="btn btn-attention btn-fw">Abmelden</a> {% endif %} {% if trip.max_people > trip.rower | length and trip.cox_id != loggedin_user.id and cur_user_participates == false %} <a href="/planned/join/{{ trip.trip_details_id }}" class="btn btn-primary btn-fw" {% if trip.trip_type %}onclick="return confirm('{{ trip.trip_type.question }}');"{% endif %}>Mitrudern</a> {% endif %} </div> </div> {# --- START Sidebar Content --- #} <div class="hidden"> <div id="trip{{ trip.trip_details_id }}"> {% if trip.max_people == 0 %} {# --- border-[#f43f5e] bg-[#f43f5e] --- #} {{ macros::box(participants=trip.rower,bg='[#f43f5e]',header='Absage') }} {% else %} {% set amount_cur_rower = trip.rower | length %} {{ macros::box(participants=trip.rower, empty_seats=trip.max_people - amount_cur_rower, bg='primary-100', color='black', trip_details_id=trip.trip_details_id, allow_removing=loggedin_user.id == trip.cox_id) }} {% if trip.cox_id == loggedin_user.id %} <form action="/planned/join/{{ trip.trip_details_id }}" method="get" /> {{ macros::input(label='Gast', class="input rounded-t", name='user_note', type='text', required=true) }} <input value="Gast hinzufügen" class="btn btn-primary w-full rounded-t-none-important" type="submit" /> </form> {% endif %} {% endif %} {# --- START Edit Form --- #} {% if trip.cox_id == loggedin_user.id %} <div class="bg-gray-100 dark:bg-primary-900 p-3 mt-4 rounded-md"> <h3 class="text-primary-950 dark:text-white font-bold uppercase tracking-wide mb-2">Ausfahrt bearbeiten</h3> <form action="/cox/trip/{{ trip.id }}" method="post" class="grid gap-3"> {{ macros::input(label='Anzahl Ruderer', name='max_people', type='number', required=true, value=trip.max_people, min='0') }} {{ macros::input(label='Anmerkungen', name='notes', type='input', value=trip.notes) }} {{ macros::checkbox(label='Immer anzeigen', name='always_show', id=trip.id,checked=trip.always_show) }} {{ macros::checkbox(label='Gesperrt', name='is_locked', id=trip.id,checked=trip.is_locked) }} {{ macros::select(label='Typ', name='trip_type', data=trip_types, default='Reguläre Ausfahrt', selected_id=trip.trip_type_id) }} <input value="Speichern" class="btn btn-primary" type="submit" /> </form> </div> {% if trip.rower | length == 0 %} <div class="text-right mt-6"> <a href="/cox/remove/trip/{{ trip.id }}" class="inline-block btn btn-alert"> {% include "includes/delete-icon" %} Termin löschen </a> </div> {% endif %} {% endif %} {# --- END Edit Form --- #} </div> </div> {# --- END Sidebar Content --- #} </div> {% endfor %} {% endif %} {# --- END Trips --- #} </div> {% endif %} </div> {# --- START Add Buttons --- #} {% if "planned_event" in loggedin_user.roles or "cox" in loggedin_user.roles %} <div class="grid {% if "planned_event" in loggedin_user.roles %}grid-cols-2{% endif %} text-center"> {% if "planned_event" in loggedin_user.roles %} <a href="#" data-sidebar="true" data-trigger="sidebar" data-header="<strong>Event</strong> am {{ day.day| date(format='%d.%m.%Y') }} erstellen" data-day="{{ day.day }}" data-body="#addEventForm" class="relative inline-block w-full bg-primary-900 hover:bg-primary-950 focus:bg-primary-950 dark:bg-primary-950 text-white py-2 rounded-bl-md text-sm font-semibold"> <span class="absolute inset-y-0 left-0 flex items-center pl-3">{% include "includes/plus-icon" %}</span> Event </a> {% endif %} {% if "cox" in loggedin_user.roles %} <a href="#" data-sidebar="true" data-trigger="sidebar" data-header="<strong>Ausfahrt</strong> am {{ day.day| date(format='%d.%m.%Y') }} erstellen" data-day="{{ day.day }}" data-body="#sidebarForm" class="relative inline-block w-full py-2 text-primary-900 hover:text-primary-950 dark:bg-primary-600 dark:text-white dark:hover:bg-primary-500 dark:hover:text-white focus:text-primary-950 text-sm font-semibold bg-gray-100 hover:bg-gray-200 focus:bg-gray-200 {% if "planned_event" in loggedin_user.roles %} rounded-br-md {% else %} rounded-b-md {% endif %} "> <span class="absolute inset-y-0 left-0 flex items-center pl-3">{% include "includes/plus-icon" %}</span> Ausfahrt </a> {% endif %} </div> {% endif %} {# --- END Add Buttons --- #} </div> {% endfor %} </div> </div> {% if "cox" in loggedin_user.roles %} {% include "forms/trip" %} {% endif %} {% if "planned_event" in loggedin_user.roles %} {% include "forms/event" %} {% endif %} {% endblock content %}