From b42540ac2f6f3aab0c175aeaed0f1b8adfdfb8aa Mon Sep 17 00:00:00 2001
From: Max Hohlfeld
Date: Thu, 3 Jul 2025 20:15:56 +0200
Subject: [PATCH] feat: show weekday in overview and edit pages
refs #33
---
Cargo.lock | 7 ++++++
web/Cargo.toml | 2 +-
.../endpoints/availability/get_overview.rs | 2 +-
web/src/endpoints/availability/mod.rs | 2 +-
web/src/endpoints/events/get_plan.rs | 4 +++-
web/src/endpoints/events/mod.rs | 5 +++-
web/src/filters.rs | 18 +++++++++++---
web/src/utils/date_time_format.rs | 9 +++++--
web/templates/availability/new_or_edit.html | 24 +++++++++++--------
web/templates/events/new_or_edit.html | 2 +-
web/templates/events/plan.html | 8 ++++---
web/templates/index.html | 4 ++--
12 files changed, 61 insertions(+), 26 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index cb310878..43de84fa 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -941,6 +941,7 @@ dependencies = [
"iana-time-zone",
"js-sys",
"num-traits",
+ "pure-rust-locales",
"serde",
"wasm-bindgen",
"windows-link",
@@ -2643,6 +2644,12 @@ dependencies = [
"cc",
]
+[[package]]
+name = "pure-rust-locales"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1190fd18ae6ce9e137184f207593877e70f39b015040156b1e05081cdfe3733a"
+
[[package]]
name = "quick-xml"
version = "0.37.5"
diff --git a/web/Cargo.toml b/web/Cargo.toml
index 7fd13551..e9ba1338 100644
--- a/web/Cargo.toml
+++ b/web/Cargo.toml
@@ -14,7 +14,7 @@ argon2 = { version = "0.5.0", features = [ "std"]}
anyhow = "1.0.71"
actix-session = { version = "0.10.1", features = ["cookie-session"] }
actix-identity = "0.8.0"
-chrono = { version = "0.4.33", features = ["serde", "now"] }
+chrono = { version = "0.4.33", features = ["serde", "now", "unstable-locales"] }
actix-files = "0.6.5"
futures-util = "0.3.30"
serde_json = "1.0.114"
diff --git a/web/src/endpoints/availability/get_overview.rs b/web/src/endpoints/availability/get_overview.rs
index 5ad390ef..c6609734 100644
--- a/web/src/endpoints/availability/get_overview.rs
+++ b/web/src/endpoints/availability/get_overview.rs
@@ -9,7 +9,7 @@ use crate::{
utils::{
event_planning_template::generate_vehicles_assigned_and_available,
ApplicationError,
- DateTimeFormat::{DayMonthYear, DayMonthYearHourMinute, HourMinute},
+ DateTimeFormat::{DayMonthYearHourMinute, HourMinute, WeekdayDayMonthYear},
TemplateResponse,
},
};
diff --git a/web/src/endpoints/availability/mod.rs b/web/src/endpoints/availability/mod.rs
index d2edc438..78c0364b 100644
--- a/web/src/endpoints/availability/mod.rs
+++ b/web/src/endpoints/availability/mod.rs
@@ -4,7 +4,7 @@ use serde::Deserialize;
use crate::{
filters,
- utils::DateTimeFormat::{DayMonth, DayMonthYear, DayMonthYearHourMinute, HourMinute},
+ utils::DateTimeFormat::{DayMonthHourMinute, HourMinute, WeekdayDayMonth, WeekdayDayMonthYear},
};
use brass_db::models::{Role, User};
diff --git a/web/src/endpoints/events/get_plan.rs b/web/src/endpoints/events/get_plan.rs
index 7be0c52a..ec3c0f3c 100644
--- a/web/src/endpoints/events/get_plan.rs
+++ b/web/src/endpoints/events/get_plan.rs
@@ -10,7 +10,9 @@ use crate::{
generate_availability_assignment_list, generate_status_whether_staff_is_required,
generate_vehicles_assigned_and_available,
},
- ApplicationError, TemplateResponse,
+ ApplicationError,
+ DateTimeFormat::{DayMonthYearHourMinute, HourMinute, WeekdayDayMonthYear},
+ TemplateResponse,
},
};
use brass_db::models::{Availability, AvailabilityAssignmentState, Event, Role, User, Vehicle};
diff --git a/web/src/endpoints/events/mod.rs b/web/src/endpoints/events/mod.rs
index a1867a39..4f66eb64 100644
--- a/web/src/endpoints/events/mod.rs
+++ b/web/src/endpoints/events/mod.rs
@@ -3,7 +3,10 @@ use chrono::{Days, NaiveDateTime};
use chrono::{NaiveDate, NaiveTime};
use serde::Deserialize;
-use crate::{filters, utils::DateTimeFormat::{DayMonthYear, HourMinute, YearMonthDayTHourMinute}};
+use crate::{
+ filters,
+ utils::DateTimeFormat::{HourMinute, WeekdayDayMonthYear, YearMonthDayTHourMinute},
+};
use brass_db::models::{Clothing, Location, Role, User};
pub mod delete;
diff --git a/web/src/filters.rs b/web/src/filters.rs
index b96744a2..c9aecdd2 100644
--- a/web/src/filters.rs
+++ b/web/src/filters.rs
@@ -1,6 +1,9 @@
use std::fmt::Display;
-use chrono::{NaiveDate, NaiveDateTime, NaiveTime};
+use chrono::{
+ format::{DelayedFormat, StrftimeItems},
+ NaiveDate, NaiveDateTime, NaiveTime,
+};
use maud::html;
use tracing::trace;
@@ -83,7 +86,8 @@ pub fn fmt_date(v: &NaiveDate, format: DateTimeFormat) -> askama::Result
"formatting naivedate into string with format"
);
- Ok(v.format(format_string).to_string())
+ Ok(v.format_localized(format_string, chrono::Locale::de_DE)
+ .to_string())
}
pub fn fmt_datetime(v: &NaiveDateTime, format: DateTimeFormat) -> askama::Result {
@@ -93,7 +97,15 @@ pub fn fmt_datetime(v: &NaiveDateTime, format: DateTimeFormat) -> askama::Result
"formatting naivedatetime into string with format"
);
- Ok(v.format(format_string).to_string())
+ let locale = chrono::Locale::de_DE;
+ let out = DelayedFormat::new_with_locale(
+ Some(v.date()),
+ Some(v.time()),
+ StrftimeItems::new_with_locale(format_string, locale),
+ locale,
+ );
+
+ Ok(out.to_string())
}
pub fn fmt_time(v: &NaiveTime, format: DateTimeFormat) -> askama::Result {
diff --git a/web/src/utils/date_time_format.rs b/web/src/utils/date_time_format.rs
index 6b7b7c88..a71cdb15 100644
--- a/web/src/utils/date_time_format.rs
+++ b/web/src/utils/date_time_format.rs
@@ -4,7 +4,10 @@ pub enum DateTimeFormat {
DayMonthYear,
DayMonthYearHourMinute,
YearMonthDayTHourMinute,
- HourMinute
+ /// equivalent to %R,
+ HourMinute,
+ WeekdayDayMonth,
+ WeekdayDayMonthYear,
}
impl From for &'static str {
@@ -15,7 +18,9 @@ impl From for &'static str {
DateTimeFormat::DayMonthYear => "%d.%m.%Y",
DateTimeFormat::DayMonthYearHourMinute => "%d.%m.%Y %H:%M",
DateTimeFormat::YearMonthDayTHourMinute => "%Y-%m-%dT%H:%M",
- DateTimeFormat::HourMinute => "%H:%M" // equivalent to %R,
+ DateTimeFormat::HourMinute => "%H:%M",
+ DateTimeFormat::WeekdayDayMonth => "%A, %d.%m.",
+ DateTimeFormat::WeekdayDayMonthYear => "%A, %d.%m.%Y",
}
}
}
diff --git a/web/templates/availability/new_or_edit.html b/web/templates/availability/new_or_edit.html
index 866a21d3..d4f7d963 100644
--- a/web/templates/availability/new_or_edit.html
+++ b/web/templates/availability/new_or_edit.html
@@ -5,8 +5,8 @@
{% let is_edit = id.is_some() %}
@@ -52,13 +53,13 @@
@@ -82,9 +83,12 @@
{% let start_time = start.unwrap_or(NaiveTime::from_hms_opt(10, 0, 0).unwrap()) %}
{% let end_time = end.unwrap_or(NaiveTime::from_hms_opt(20, 0, 0).unwrap()) %}
- verfügbar von {{ date|fmt_date(DayMonth) }} {{ start_time|fmt_time(HourMinute) }} Uhr
- bis {{ enddate.as_ref().unwrap_or(date)|fmt_date(DayMonth) }}
- {{ end_time|fmt_time(HourMinute) }} Uhr
+ verfügbar von {{ date|fmt_date(WeekdayDayMonth) }}
+ {{ start_time|fmt_time(HourMinute) }}
+ Uhr bis
+ {{ enddate.as_ref().unwrap_or(date)|fmt_date(WeekdayDayMonth) }}
+ {{ end_time|fmt_time(HourMinute) }}
+ Uhr
diff --git a/web/templates/events/new_or_edit.html b/web/templates/events/new_or_edit.html
index 4ac1dc53..0260911d 100644
--- a/web/templates/events/new_or_edit.html
+++ b/web/templates/events/new_or_edit.html
@@ -7,7 +7,7 @@
{% if let Some(name) = name %}
Event '{{ name }}' bearbeiten
{% else %}
- Neues Event anlegen für den {{ date|fmt_date(DayMonthYear) }}
+ Neues Event anlegen für {{ date|fmt_date(WeekdayDayMonthYear) }}
{% endif %}
diff --git a/web/templates/events/plan.html b/web/templates/events/plan.html
index d0fa8911..46080826 100644
--- a/web/templates/events/plan.html
+++ b/web/templates/events/plan.html
@@ -15,11 +15,12 @@
-
Datum: {{ event.start.format("%d.%m.%Y") }}
+
Datum: {{ event.start|fmt_datetime(WeekdayDayMonthYear) }}
-
Uhrzeit: {{ event.start.format("%R") }} Uhr - {{ event.end.format("%d.%m.%Y %R") }} Uhr
+
Uhrzeit: {{ event.start|fmt_datetime(HourMinute) }} Uhr - {{
+ event.end|fmt_datetime(DayMonthYearHourMinute) }} Uhr
@@ -31,7 +32,8 @@
-
Führungsassistent benötigt: {% if event.voluntary_fuehrungsassistent %}ja{% else %}nein{% endif %}
+
Führungsassistent benötigt: {% if event.voluntary_fuehrungsassistent %}ja{% else %}nein{% endif %}
+
diff --git a/web/templates/index.html b/web/templates/index.html
index a6a8cf52..c050e398 100644
--- a/web/templates/index.html
+++ b/web/templates/index.html
@@ -99,7 +99,7 @@
- Events am {{ date|fmt_date(DayMonthYear) }}
+ Events am {{ date|fmt_date(WeekdayDayMonthYear) }}
{% if user.role == Role::Admin || user.role == Role::AreaManager && (selected_area.is_none() ||
@@ -227,7 +227,7 @@
- Verfügbarkeiten am {{ date|fmt_date(DayMonthYear) }}
+ Verfügbarkeiten am {{ date|fmt_date(WeekdayDayMonthYear) }}
{% if selected_area.is_none() || selected_area.unwrap() == user.area_id %}