From a1ebd59f224870d2c9ec4f52cce0da14aedaded9 Mon Sep 17 00:00:00 2001 From: philipp Date: Wed, 24 Apr 2024 15:12:27 +0200 Subject: [PATCH 1/4] calc general boat cat --- src/model/boat.rs | 8 ++++++++ templates/includes/forms/log.html.tera | 8 +++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/model/boat.rs b/src/model/boat.rs index 5860d32..4106393 100644 --- a/src/model/boat.rs +++ b/src/model/boat.rs @@ -46,6 +46,7 @@ pub struct BoatWithDetails { damage: BoatDamage, on_water: bool, reserved_today: bool, + cat: String, } #[derive(FromForm)] @@ -179,11 +180,18 @@ AND date('now') BETWEEN start_date AND end_date;", if boat.is_locked(db).await { damage = BoatDamage::Locked; } + let cat = if boat.default_shipmaster_only_steering { + format!("{}+", boat.amount_seats - 1) + } else { + format!("{}x", boat.amount_seats) + }; + res.push(BoatWithDetails { damage, on_water: boat.on_water(db).await, reserved_today: boat.reserved_today(db).await, boat, + cat, }); } res diff --git a/templates/includes/forms/log.html.tera b/templates/includes/forms/log.html.tera index 99d308e..c70fb8c 100644 --- a/templates/includes/forms/log.html.tera +++ b/templates/includes/forms/log.html.tera @@ -3,16 +3,14 @@ Inputs: boats #} {% macro show_boats() %} - {% for amount_seats, grouped_boats in boats | group_by(attribute="amount_seats") %} + {% for amount_seats, grouped_boats in boats | group_by(attribute="cat") %}
{% if grouped_boats[0].external %} Vereinsfremde Boote - {% elif grouped_boats[0].default_shipmaster_only_steering %} - {{ grouped_boats[0].amount_seats - 1 }}+ {% else %} - {{ amount_seats }}x + {{ grouped_boats[0].cat }} {% endif %} ({{ grouped_boats | length }}) @@ -78,7 +76,7 @@ {% endmacro new %} {% macro boat_select(id="boat_id") %} - {{ macros::select(label="Boot", data=boats, name="boat_id", id=id, display=["name", " (","amount_seats", " x)"], extras=["default_shipmaster_only_steering", "amount_seats", "on_water", "default_destination"], wrapper_class="col-span-4", show_seats=true) }} + {{ macros::select(label="Boot", data=boats, name="boat_id", id=id, display=["name", " (","cat",")"], extras=["default_shipmaster_only_steering", "amount_seats", "on_water", "default_destination"], wrapper_class="col-span-4", show_seats=true) }} {% endmacro boat_select %} {% macro rower_select(id, selected, amount_seats='', class='', init='false', cox_on_boat='', steering_person_id='') %} {#{% if not amount_seats or amount_seats > 1 %}#} -- 2.45.2 From 07b197cc63c7ce2691f25459612d94f79b853c11 Mon Sep 17 00:00:00 2001 From: philipp Date: Wed, 24 Apr 2024 15:25:42 +0200 Subject: [PATCH 2/4] check changing of handoperated in backend --- src/model/boat.rs | 4 ++-- src/model/logbook.rs | 7 +++++++ src/tera/log.rs | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/model/boat.rs b/src/model/boat.rs index 4106393..115acec 100644 --- a/src/model/boat.rs +++ b/src/model/boat.rs @@ -21,9 +21,9 @@ pub struct Boat { pub boatbuilder: Option, pub default_destination: Option, #[serde(default = "bool::default")] - convert_handoperated_possible: bool, + pub convert_handoperated_possible: bool, #[serde(default = "bool::default")] - default_shipmaster_only_steering: bool, + pub default_shipmaster_only_steering: bool, #[serde(default = "bool::default")] skull: bool, #[serde(default = "bool::default")] diff --git a/src/model/logbook.rs b/src/model/logbook.rs index 5d83f12..156ad8e 100644 --- a/src/model/logbook.rs +++ b/src/model/logbook.rs @@ -126,6 +126,7 @@ pub enum LogbookCreateError { NotYourEntry, ArrivalSetButNotRemainingTwo, OnlyAllowedToEndTripsEndingToday, + CantChangeHandoperatableStatusForThisBoat, } impl From for LogbookCreateError { @@ -302,6 +303,12 @@ ORDER BY departure DESC return Err(LogbookCreateError::BoatNotFound); }; + if log.shipmaster_only_steering != boat.default_shipmaster_only_steering { + if !boat.convert_handoperated_possible { + return Err(LogbookCreateError::CantChangeHandoperatableStatusForThisBoat); + } + } + if boat.amount_seats == 1 && log.rowers.is_empty() { log.rowers = vec![created_by_user.id]; } diff --git a/src/tera/log.rs b/src/tera/log.rs index 241f36c..2c618b0 100644 --- a/src/tera/log.rs +++ b/src/tera/log.rs @@ -214,6 +214,7 @@ async fn create_logbook( Err(LogbookCreateError::NotYourEntry) => Flash::error(Redirect::to("/log"), "Nicht deine Ausfahrt!"), Err(LogbookCreateError::ArrivalSetButNotRemainingTwo) => Flash::error(Redirect::to("/log"), "Ankunftszeit gesetzt aber nicht Distanz + Strecke"), Err(LogbookCreateError::OnlyAllowedToEndTripsEndingToday) => Flash::error(Redirect::to("/log"), "Nur Ausfahrten, die in der letzten Woche enden dürfen eingetragen werden. Für einen Nachtrag schreibe alle Daten Philipp (Tel. nr. siehe Signal oder it@rudernlinz.at)."), + Err(LogbookCreateError::CantChangeHandoperatableStatusForThisBoat) => Flash::error(Redirect::to("/log"), "Handsteuer-Status dieses Boots kann nicht verändert werden."), } } -- 2.45.2 From 0560ed7a6a708f1ce7fffd68eda80e54111e000d Mon Sep 17 00:00:00 2001 From: philipp Date: Wed, 24 Apr 2024 15:29:52 +0200 Subject: [PATCH 3/4] fix ci --- frontend/tests/log.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/tests/log.spec.ts b/frontend/tests/log.spec.ts index 64d2c09..b5409cd 100644 --- a/frontend/tests/log.spec.ts +++ b/frontend/tests/log.spec.ts @@ -15,7 +15,7 @@ test("Cox can start and cancel trip", async ({ page }, testInfo) => { await page.getByText("Kaputtes Boot :-( (7 x)").nth(1).click(); await page.getByRole("option", { name: "Joe" }).click(); } else { - await page.getByText('2x').click(); + await page.getByText('2x', { exact: true }).click(); await page.getByText("Joe", { exact: true }).click(); } await page.getByPlaceholder("Ruderer auswählen").click(); @@ -56,7 +56,7 @@ test("Cox can start and finish trip", async ({ page }, testInfo) => { await page.getByText("Kaputtes Boot :-( (7 x)").nth(1).click(); await page.getByRole("option", { name: "Joe" }).click(); } else { - await page.getByText('2x').click(); + await page.getByText('2x', { exact: true }).click(); await page.getByText("Joe", { exact: true }).click(); } await page.getByPlaceholder("Ruderer auswählen").click(); @@ -108,7 +108,7 @@ test("Kiosk can start and cancel trip", async ({ page }, testInfo) => { await page.getByText("Kaputtes Boot :-( (7 x)").nth(1).click(); await page.getByRole("option", { name: "Joe" }).click(); } else { - await page.getByText('2x').click(); + await page.getByText('2x', { exact: true }).click(); await page.getByText("Joe", { exact: true }).click(); } await page.getByPlaceholder("Ruderer auswählen").click(); @@ -142,7 +142,7 @@ test("Kiosk can start and finish trip", async ({ page }, testInfo) => { await page.getByText("Kaputtes Boot :-( (7 x)").nth(1).click(); await page.getByRole("option", { name: "Joe" }).click(); } else { - await page.getByText('2x').click(); + await page.getByText('2x', { exact: true }).click(); await page.getByText("Joe", { exact: true }).click(); } await page.getByPlaceholder("Ruderer auswählen").click(); -- 2.45.2 From 8e03c935a50d0408025c4bf0a60b42433e56661d Mon Sep 17 00:00:00 2001 From: philipp Date: Wed, 24 Apr 2024 15:32:33 +0200 Subject: [PATCH 4/4] fix ci --- frontend/tests/log.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/tests/log.spec.ts b/frontend/tests/log.spec.ts index b5409cd..b12f0cb 100644 --- a/frontend/tests/log.spec.ts +++ b/frontend/tests/log.spec.ts @@ -12,7 +12,7 @@ test("Cox can start and cancel trip", async ({ page }, testInfo) => { await page.getByRole("link", { name: "Ausfahrt eintragen" }).click(); if (testInfo.project.name.includes("Mobile")) { // No left boat selector on mobile views - await page.getByText("Kaputtes Boot :-( (7 x)").nth(1).click(); + await page.getByText("Kaputtes Boot :-( (7x)").nth(1).click(); await page.getByRole("option", { name: "Joe" }).click(); } else { await page.getByText('2x', { exact: true }).click(); @@ -53,7 +53,7 @@ test("Cox can start and finish trip", async ({ page }, testInfo) => { await page.getByRole("link", { name: "Ausfahrt eintragen" }).click(); if (testInfo.project.name.includes("Mobile")) { // No left boat selector on mobile views - await page.getByText("Kaputtes Boot :-( (7 x)").nth(1).click(); + await page.getByText("Kaputtes Boot :-( (7x)").nth(1).click(); await page.getByRole("option", { name: "Joe" }).click(); } else { await page.getByText('2x', { exact: true }).click(); @@ -105,7 +105,7 @@ test("Kiosk can start and cancel trip", async ({ page }, testInfo) => { await page.goto("/log/kiosk/ekrv2019/Linz"); if (testInfo.project.name.includes("Mobile")) { // No left boat selector on mobile views - await page.getByText("Kaputtes Boot :-( (7 x)").nth(1).click(); + await page.getByText("Kaputtes Boot :-( (7x)").nth(1).click(); await page.getByRole("option", { name: "Joe" }).click(); } else { await page.getByText('2x', { exact: true }).click(); @@ -139,7 +139,7 @@ test("Kiosk can start and finish trip", async ({ page }, testInfo) => { if (testInfo.project.name.includes("Mobile")) { // No left boat selector on mobile views - await page.getByText("Kaputtes Boot :-( (7 x)").nth(1).click(); + await page.getByText("Kaputtes Boot :-( (7x)").nth(1).click(); await page.getByRole("option", { name: "Joe" }).click(); } else { await page.getByText('2x', { exact: true }).click(); -- 2.45.2