Compare commits

...

4 Commits

Author SHA1 Message Date
c3965c9528 Merge pull request 'staging' (#342) from staging into main
Some checks failed
CI/CD Pipeline / deploy-staging (push) Blocked by required conditions
CI/CD Pipeline / deploy-main (push) Blocked by required conditions
CI/CD Pipeline / test (push) Has been cancelled
Reviewed-on: #342
2024-04-06 18:29:27 +02:00
5164ce1f02 show list of coxes
Some checks failed
CI/CD Pipeline / deploy-staging (push) Has been cancelled
CI/CD Pipeline / deploy-main (push) Has been cancelled
CI/CD Pipeline / test (push) Has been cancelled
2024-04-06 18:27:20 +02:00
85a61dfdc0 Merge pull request 'fancier-boat-stats' (#340) from fancier-boat-stats into staging
All checks were successful
CI/CD Pipeline / test (push) Successful in 11m33s
CI/CD Pipeline / deploy-staging (push) Successful in 5m36s
CI/CD Pipeline / deploy-main (push) Has been skipped
Reviewed-on: #340
2024-04-06 17:54:42 +02:00
98fc037f73 Merge pull request 'fancier boat stats' (#339) from fancier-boat-stats into staging
All checks were successful
CI/CD Pipeline / test (push) Successful in 11m19s
CI/CD Pipeline / deploy-staging (push) Successful in 5m23s
CI/CD Pipeline / deploy-main (push) Has been skipped
Reviewed-on: #339
2024-04-06 15:28:28 +02:00
3 changed files with 48 additions and 1 deletions

View File

@ -19,6 +19,7 @@ use tera::Context;
use crate::model::{ use crate::model::{
notification::Notification, notification::Notification,
role::Role,
user::{User, UserWithRoles}, user::{User, UserWithRoles},
}; };
@ -53,6 +54,27 @@ async fn index(db: &State<SqlitePool>, user: User, flash: Option<FlashMessage<'_
Template::render("index", context.into_json()) Template::render("index", context.into_json())
} }
#[get("/steering")]
async fn steering(db: &State<SqlitePool>, user: User, flash: Option<FlashMessage<'_>>) -> Template {
let mut context = Context::new();
if let Some(msg) = flash {
context.insert("flash", &msg.into_inner());
}
let bootskundige =
User::all_with_role(db, &Role::find_by_name(db, "Bootsführer").await.unwrap()).await;
let mut coxes = User::all_with_role(db, &Role::find_by_name(db, "cox").await.unwrap()).await;
coxes.retain(|user| !bootskundige.contains(&user)); // Remove bootskundige from coxes list
context.insert("coxes", &coxes);
context.insert("bootskundige", &bootskundige);
context.insert("loggedin_user", &UserWithRoles::from_user(user, db).await);
Template::render("steering", context.into_json())
}
#[post("/", data = "<login>")] #[post("/", data = "<login>")]
async fn wikiauth(db: &State<SqlitePool>, login: Form<LoginForm<'_>>) -> String { async fn wikiauth(db: &State<SqlitePool>, login: Form<LoginForm<'_>>) -> String {
match User::login(db, login.name, login.password).await { match User::login(db, login.name, login.password).await {
@ -86,7 +108,7 @@ pub struct Config {
pub fn config(rocket: Rocket<Build>) -> Rocket<Build> { pub fn config(rocket: Rocket<Build>) -> Rocket<Build> {
rocket rocket
.mount("/", routes![index]) .mount("/", routes![index, steering])
.mount("/auth", auth::routes()) .mount("/auth", auth::routes())
.mount("/wikiauth", routes![wikiauth]) .mount("/wikiauth", routes![wikiauth])
.mount("/log", log::routes()) .mount("/log", log::routes())

View File

@ -81,6 +81,9 @@
<a href="/boatreservation" <a href="/boatreservation"
class="block w-100 py-2 hover:text-primary-600">Bootsreservierung</a> class="block w-100 py-2 hover:text-primary-600">Bootsreservierung</a>
</li> </li>
<li class="py-1">
<a href="/steering" class="block w-100 py-2 hover:text-primary-600">Steuerleute & Co</a>
</li>
</ul> </ul>
</div> </div>
{% endif %} {% endif %}

View File

@ -0,0 +1,22 @@
{% import "includes/macros" as macros %}
{% extends "base" %}
{% block content %}
<div class="max-w-screen-lg w-full">
<h1 class="h1">Steuerleute + Personen mit Steuerberechtigung</h1>
<div class="border-r border-l border-gray-200 dark:border-primary-600">
<div class="border-t border-gray-200 dark:border-primary-600 bg-white dark:bg-primary-900 text-black dark:text-white flex justify-between items-center px-3 py-1">
<ul>
{% for cox in coxes | sort(attribute='name') %}<li>{{ cox.name }}</li>{% endfor %}
</ul>
</div>
</div>
<h1 class="h1">Bootskundige</h1>
<div class="border-r border-l border-gray-200 dark:border-primary-600">
<div class="border-t border-gray-200 dark:border-primary-600 bg-white dark:bg-primary-900 text-black dark:text-white flex justify-between items-center px-3 py-1">
<ul>
{% for cox in bootskundige | sort(attribute='name') %}<li>{{ cox.name }}</li>{% endfor %}
</ul>
</div>
</div>
</div>
{% endblock content %}