log-handle-external-boats #439
@ -15,7 +15,7 @@ test("Cox can start and cancel trip", async ({ page }, testInfo) => {
|
|||||||
await page.getByText("Kaputtes Boot :-( (7x)").nth(1).click();
|
await page.getByText("Kaputtes Boot :-( (7x)").nth(1).click();
|
||||||
await page.getByRole("option", { name: "Joe" }).click();
|
await page.getByRole("option", { name: "Joe" }).click();
|
||||||
} else {
|
} else {
|
||||||
await page.getByText('2x').click();
|
await page.getByText('2x', { exact: true }).click();
|
||||||
await page.getByText("Joe", { exact: true }).click();
|
await page.getByText("Joe", { exact: true }).click();
|
||||||
}
|
}
|
||||||
await page.getByPlaceholder("Ruderer auswählen").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 :-( (7x)").nth(1).click();
|
await page.getByText("Kaputtes Boot :-( (7x)").nth(1).click();
|
||||||
await page.getByRole("option", { name: "Joe" }).click();
|
await page.getByRole("option", { name: "Joe" }).click();
|
||||||
} else {
|
} else {
|
||||||
await page.getByText('2x').click();
|
await page.getByText('2x', { exact: true }).click();
|
||||||
await page.getByText("Joe", { exact: true }).click();
|
await page.getByText("Joe", { exact: true }).click();
|
||||||
}
|
}
|
||||||
await page.getByPlaceholder("Ruderer auswählen").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 :-( (7x)").nth(1).click();
|
await page.getByText("Kaputtes Boot :-( (7x)").nth(1).click();
|
||||||
await page.getByRole("option", { name: "Joe" }).click();
|
await page.getByRole("option", { name: "Joe" }).click();
|
||||||
} else {
|
} else {
|
||||||
await page.getByText('2x').click();
|
await page.getByText('2x', { exact: true }).click();
|
||||||
await page.getByText("Joe", { exact: true }).click();
|
await page.getByText("Joe", { exact: true }).click();
|
||||||
}
|
}
|
||||||
await page.getByPlaceholder("Ruderer auswählen").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 :-( (7x)").nth(1).click();
|
await page.getByText("Kaputtes Boot :-( (7x)").nth(1).click();
|
||||||
await page.getByRole("option", { name: "Joe" }).click();
|
await page.getByRole("option", { name: "Joe" }).click();
|
||||||
} else {
|
} else {
|
||||||
await page.getByText('2x').click();
|
await page.getByText('2x', { exact: true }).click();
|
||||||
await page.getByText("Joe", { exact: true }).click();
|
await page.getByText("Joe", { exact: true }).click();
|
||||||
}
|
}
|
||||||
await page.getByPlaceholder("Ruderer auswählen").click();
|
await page.getByPlaceholder("Ruderer auswählen").click();
|
||||||
|
@ -21,9 +21,9 @@ pub struct Boat {
|
|||||||
pub boatbuilder: Option<String>,
|
pub boatbuilder: Option<String>,
|
||||||
pub default_destination: Option<String>,
|
pub default_destination: Option<String>,
|
||||||
#[serde(default = "bool::default")]
|
#[serde(default = "bool::default")]
|
||||||
convert_handoperated_possible: bool,
|
pub convert_handoperated_possible: bool,
|
||||||
#[serde(default = "bool::default")]
|
#[serde(default = "bool::default")]
|
||||||
default_shipmaster_only_steering: bool,
|
pub default_shipmaster_only_steering: bool,
|
||||||
#[serde(default = "bool::default")]
|
#[serde(default = "bool::default")]
|
||||||
skull: bool,
|
skull: bool,
|
||||||
#[serde(default = "bool::default")]
|
#[serde(default = "bool::default")]
|
||||||
@ -46,6 +46,7 @@ pub struct BoatWithDetails {
|
|||||||
damage: BoatDamage,
|
damage: BoatDamage,
|
||||||
on_water: bool,
|
on_water: bool,
|
||||||
reserved_today: bool,
|
reserved_today: bool,
|
||||||
|
cat: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(FromForm)]
|
#[derive(FromForm)]
|
||||||
@ -179,11 +180,18 @@ AND date('now') BETWEEN start_date AND end_date;",
|
|||||||
if boat.is_locked(db).await {
|
if boat.is_locked(db).await {
|
||||||
damage = BoatDamage::Locked;
|
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 {
|
res.push(BoatWithDetails {
|
||||||
damage,
|
damage,
|
||||||
on_water: boat.on_water(db).await,
|
on_water: boat.on_water(db).await,
|
||||||
reserved_today: boat.reserved_today(db).await,
|
reserved_today: boat.reserved_today(db).await,
|
||||||
boat,
|
boat,
|
||||||
|
cat,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
res
|
res
|
||||||
|
@ -126,6 +126,7 @@ pub enum LogbookCreateError {
|
|||||||
NotYourEntry,
|
NotYourEntry,
|
||||||
ArrivalSetButNotRemainingTwo,
|
ArrivalSetButNotRemainingTwo,
|
||||||
OnlyAllowedToEndTripsEndingToday,
|
OnlyAllowedToEndTripsEndingToday,
|
||||||
|
CantChangeHandoperatableStatusForThisBoat,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<LogbookUpdateError> for LogbookCreateError {
|
impl From<LogbookUpdateError> for LogbookCreateError {
|
||||||
@ -302,6 +303,12 @@ ORDER BY departure DESC
|
|||||||
return Err(LogbookCreateError::BoatNotFound);
|
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() {
|
if boat.amount_seats == 1 && log.rowers.is_empty() {
|
||||||
log.rowers = vec![created_by_user.id];
|
log.rowers = vec![created_by_user.id];
|
||||||
}
|
}
|
||||||
|
@ -214,6 +214,7 @@ async fn create_logbook(
|
|||||||
Err(LogbookCreateError::NotYourEntry) => Flash::error(Redirect::to("/log"), "Nicht deine Ausfahrt!"),
|
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::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::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."),
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,16 +3,14 @@
|
|||||||
Inputs: boats
|
Inputs: boats
|
||||||
#}
|
#}
|
||||||
{% macro show_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") %}
|
||||||
<details>
|
<details>
|
||||||
<summary class="font-bold cursor-pointer text-primary-900 dark:text-white border-t p-3 hover:bg-gray-100 dark:hover:bg-primary-950">
|
<summary class="font-bold cursor-pointer text-primary-900 dark:text-white border-t p-3 hover:bg-gray-100 dark:hover:bg-primary-950">
|
||||||
<span>
|
<span>
|
||||||
{% if grouped_boats[0].external %}
|
{% if grouped_boats[0].external %}
|
||||||
Vereinsfremde Boote
|
Vereinsfremde Boote
|
||||||
{% elif grouped_boats[0].default_shipmaster_only_steering %}
|
|
||||||
{{ grouped_boats[0].amount_seats - 1 }}+
|
|
||||||
{% else %}
|
{% else %}
|
||||||
{{ amount_seats }}x
|
{{ grouped_boats[0].cat }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</span>
|
</span>
|
||||||
<small class="text-gray-500 dark:text-gray-100">({{ grouped_boats | length }})</small>
|
<small class="text-gray-500 dark:text-gray-100">({{ grouped_boats | length }})</small>
|
||||||
@ -78,7 +76,7 @@
|
|||||||
</form>
|
</form>
|
||||||
{% endmacro new %}
|
{% endmacro new %}
|
||||||
{% macro boat_select(id="boat_id") %}
|
{% 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 %}
|
{% endmacro boat_select %}
|
||||||
{% macro rower_select(id, selected, amount_seats='', class='', init='false', cox_on_boat='', steering_person_id='') %}
|
{% macro rower_select(id, selected, amount_seats='', class='', init='false', cox_on_boat='', steering_person_id='') %}
|
||||||
{#{% if not amount_seats or amount_seats > 1 %}#}
|
{#{% if not amount_seats or amount_seats > 1 %}#}
|
||||||
|
Loading…
Reference in New Issue
Block a user