calc general boat cat (#436)
Reviewed-on: #436
This commit was merged in pull request #436.
	This commit is contained in:
		| @@ -12,10 +12,10 @@ 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').click(); | ||||
|     await page.getByText('2x', { exact: true }).click(); | ||||
|     await page.getByText("Joe", { exact: true }).click(); | ||||
|   } | ||||
|   await page.getByPlaceholder("Ruderer auswählen").click(); | ||||
| @@ -53,10 +53,10 @@ 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').click(); | ||||
|     await page.getByText('2x', { exact: true }).click(); | ||||
|     await page.getByText("Joe", { exact: true }).click(); | ||||
|   } | ||||
|   await page.getByPlaceholder("Ruderer auswählen").click(); | ||||
| @@ -105,10 +105,10 @@ 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').click(); | ||||
|     await page.getByText('2x', { exact: true }).click(); | ||||
|     await page.getByText("Joe", { exact: true }).click(); | ||||
|   } | ||||
|   await page.getByPlaceholder("Ruderer auswählen").click(); | ||||
| @@ -139,10 +139,10 @@ 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').click(); | ||||
|     await page.getByText('2x', { exact: true }).click(); | ||||
|     await page.getByText("Joe", { exact: true }).click(); | ||||
|   } | ||||
|   await page.getByPlaceholder("Ruderer auswählen").click(); | ||||
|   | ||||
| @@ -21,9 +21,9 @@ pub struct Boat { | ||||
|     pub boatbuilder: Option<String>, | ||||
|     pub default_destination: Option<String>, | ||||
|     #[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")] | ||||
| @@ -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 | ||||
|   | ||||
| @@ -126,6 +126,7 @@ pub enum LogbookCreateError { | ||||
|     NotYourEntry, | ||||
|     ArrivalSetButNotRemainingTwo, | ||||
|     OnlyAllowedToEndTripsEndingToday, | ||||
|     CantChangeHandoperatableStatusForThisBoat, | ||||
| } | ||||
|  | ||||
| impl From<LogbookUpdateError> 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]; | ||||
|         } | ||||
|   | ||||
| @@ -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."), | ||||
|  | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -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") %} | ||||
|         <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"> | ||||
|                 <span> | ||||
|                     {% 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 %} | ||||
|                 </span> | ||||
|                 <small class="text-gray-500 dark:text-gray-100">({{ grouped_boats | length }})</small> | ||||
| @@ -78,7 +76,7 @@ | ||||
|     </form> | ||||
| {% 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 %}#} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user