allow to show full year

This commit is contained in:
philipp 2023-04-04 15:38:47 +02:00
parent 9ad8e6dfed
commit 476c4db255
4 changed files with 52 additions and 31 deletions

View File

@ -1,5 +1,5 @@
# Process # Process
- [ ] Import rowing members -> "Firstname Lastname" - [x] Import rowing members -> "Firstname Lastname"
- [ ] New name -> is_guest = True - [ ] New name -> is_guest = True
- [ ] New trip from cox: define amount of rowers - [ ] New trip from cox: define amount of rowers
- [ ] guests only see guest trips - [ ] guests only see guest trips
@ -11,3 +11,6 @@
# Fancy # Fancy
- Every cox can define which boats they use - Every cox can define which boats they use
- Link for specific trip - Link for specific trip
# TODO
- [ ] Allow cox to see full year

View File

@ -15,7 +15,7 @@ pub struct User {
pub id: i64, pub id: i64,
pub name: String, pub name: String,
pw: Option<String>, pw: Option<String>,
is_cox: bool, pub is_cox: bool,
is_admin: bool, is_admin: bool,
is_guest: bool, is_guest: bool,
} }

View File

@ -1,11 +1,11 @@
use chrono::{Duration, Local}; use chrono::{Datelike, Duration, Local, NaiveDate};
use rocket::{ use rocket::{
catch, catchers, get, catch, catchers, get,
request::FlashMessage, request::FlashMessage,
response::{Flash, Redirect}, response::{Flash, Redirect},
routes, Build, Rocket, State, routes, Build, Rocket, State,
}; };
use rocket_dyn_templates::{context, tera::Context, Template}; use rocket_dyn_templates::{tera::Context, Template};
use sqlx::SqlitePool; use sqlx::SqlitePool;
use crate::model::{planned_event::PlannedEvent, user::User, usertrip::UserTrip, Day}; use crate::model::{planned_event::PlannedEvent, user::User, usertrip::UserTrip, Day};
@ -14,10 +14,24 @@ mod admin;
mod auth; mod auth;
mod cox; mod cox;
#[get("/")] #[get("/?<all>")]
async fn index(db: &State<SqlitePool>, user: User, flash: Option<FlashMessage<'_>>) -> Template { async fn index(
db: &State<SqlitePool>,
user: User,
flash: Option<FlashMessage<'_>>,
all: Option<String>,
) -> Template {
let mut days = Vec::new(); let mut days = Vec::new();
for i in 0..6 {
let mut show_next_n_days = 6;
if all.is_some() && user.is_cox {
let end_of_year = NaiveDate::from_ymd_opt(Local::now().year(), 12, 31).unwrap();
show_next_n_days = end_of_year
.signed_duration_since(Local::now().date_naive())
.num_days();
}
for i in 0..show_next_n_days {
let date = (Local::now() + Duration::days(i)).date_naive(); let date = (Local::now() + Duration::days(i)).date_naive();
days.push(Day::new(db, date).await); days.push(Day::new(db, date).await);
} }
@ -70,27 +84,27 @@ pub fn start(db: SqlitePool) -> Rocket<Build> {
.attach(Template::fairing()) .attach(Template::fairing())
} }
#[cfg(test)] //#[cfg(test)]
mod test { //mod test {
use crate::testdb; // use crate::testdb;
//
use super::start; // use super::start;
use rocket::http::Status; // use rocket::http::Status;
use rocket::local::asynchronous::Client; // use rocket::local::asynchronous::Client;
use rocket::uri; // use rocket::uri;
use sqlx::SqlitePool; // use sqlx::SqlitePool;
//
#[sqlx::test] // #[sqlx::test]
fn test_not_logged_in() { // fn test_not_logged_in() {
let pool = testdb!(); // let pool = testdb!();
//
let client = Client::tracked(start(pool)) // let client = Client::tracked(start(pool))
.await // .await
.expect("valid rocket instance"); // .expect("valid rocket instance");
let response = client.get(uri!(super::index)).dispatch().await; // let response = client.get(uri!(super::index)).dispatch().await;
//
assert_eq!(response.status(), Status::SeeOther); // assert_eq!(response.status(), Status::SeeOther);
let location = response.headers().get("Location").next().unwrap(); // let location = response.headers().get("Location").next().unwrap();
assert_eq!(location, "/auth"); // assert_eq!(location, "/auth");
} // }
} //}

View File

@ -2,6 +2,10 @@
{% block content %} {% block content %}
{% if loggedin_user.is_cox %}
<a href="/?all">SHOW FULL YEAR</a>
{% endif %}
{% if loggedin_user %} {% if loggedin_user %}
Hi {{ loggedin_user.name }}. <a href="/auth/logout">LOGOUT</a> Hi {{ loggedin_user.name }}. <a href="/auth/logout">LOGOUT</a>