calc-general-boatcat #435
| @@ -17,17 +17,8 @@ jobs: | |||||||
|     - name: Run Test DB Script |     - name: Run Test DB Script | ||||||
|       run: ./test_db.sh |       run: ./test_db.sh | ||||||
|  |  | ||||||
|     - name: Set up cargo cache |     - name: Cache Cargo dependencies | ||||||
|       uses: actions/cache@v3 |       uses: Swatinem/rust-cache@v2 | ||||||
|       with: |  | ||||||
|         path: | |  | ||||||
|           ~/.cargo/bin/ |  | ||||||
|           ~/.cargo/registry/index/ |  | ||||||
|           ~/.cargo/registry/cache/ |  | ||||||
|           ~/.cargo/git/db/ |  | ||||||
|           target/ |  | ||||||
|         key: ${{ runner.os }}-cargo-debug-rowt-${{ hashFiles('**/Cargo.lock') }} |  | ||||||
|         restore-keys: ${{ runner.os }}-cargo-debug-rowt- |  | ||||||
|  |  | ||||||
|     - name: Build |     - name: Build | ||||||
|       run: | |       run: | | ||||||
| @@ -56,17 +47,9 @@ jobs: | |||||||
|       - name: Run Test DB Script |       - name: Run Test DB Script | ||||||
|         run: ./test_db.sh |         run: ./test_db.sh | ||||||
|  |  | ||||||
|       - name: Set up cargo cache |       - name: Cache Cargo dependencies | ||||||
|         uses: actions/cache@v3 |         uses: Swatinem/rust-cache@v2 | ||||||
|         with: |  | ||||||
|           path: | |  | ||||||
|             ~/.cargo/bin/ |  | ||||||
|             ~/.cargo/registry/index/ |  | ||||||
|             ~/.cargo/registry/cache/ |  | ||||||
|             ~/.cargo/git/db/ |  | ||||||
|             target/ |  | ||||||
|           key: ${{ runner.os }}-cargo-release-rowt-${{ hashFiles('**/Cargo.lock') }} |  | ||||||
|           restore-keys: ${{ runner.os }}-cargo-release-rowt- |  | ||||||
|       - name: Build |       - name: Build | ||||||
|         run: | |         run: | | ||||||
|           cargo build --release --target $CARGO_TARGET |           cargo build --release --target $CARGO_TARGET | ||||||
| @@ -107,17 +90,8 @@ jobs: | |||||||
|       - name: Run Test DB Script |       - name: Run Test DB Script | ||||||
|         run: ./test_db.sh |         run: ./test_db.sh | ||||||
|        |        | ||||||
|       - name: Set up cargo cache |       - name: Cache Cargo dependencies | ||||||
|         uses: actions/cache@v3 |         uses: Swatinem/rust-cache@v2 | ||||||
|         with: |  | ||||||
|           path: | |  | ||||||
|             ~/.cargo/bin/ |  | ||||||
|             ~/.cargo/registry/index/ |  | ||||||
|             ~/.cargo/registry/cache/ |  | ||||||
|             ~/.cargo/git/db/ |  | ||||||
|             target/ |  | ||||||
|           key: ${{ runner.os }}-cargo-release-rowt-${{ hashFiles('**/Cargo.lock') }} |  | ||||||
|           restore-keys: ${{ runner.os }}-cargo-release-rowt- |  | ||||||
|  |  | ||||||
|       - name: Build |       - name: Build | ||||||
|         run: | |         run: | | ||||||
|   | |||||||
| @@ -12,10 +12,10 @@ test("Cox can start and cancel trip", async ({ page }, testInfo) => { | |||||||
|   await page.getByRole("link", { name: "Ausfahrt eintragen" }).click(); |   await page.getByRole("link", { name: "Ausfahrt eintragen" }).click(); | ||||||
|   if (testInfo.project.name.includes("Mobile")) { |   if (testInfo.project.name.includes("Mobile")) { | ||||||
|     // No left boat selector on mobile views |     // 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(); |     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(); | ||||||
| @@ -53,10 +53,10 @@ test("Cox can start and finish trip", async ({ page }, testInfo) => { | |||||||
|   await page.getByRole("link", { name: "Ausfahrt eintragen" }).click(); |   await page.getByRole("link", { name: "Ausfahrt eintragen" }).click(); | ||||||
|   if (testInfo.project.name.includes("Mobile")) { |   if (testInfo.project.name.includes("Mobile")) { | ||||||
|     // No left boat selector on mobile views |     // 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(); |     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(); | ||||||
| @@ -105,10 +105,10 @@ test("Kiosk can start and cancel trip", async ({ page }, testInfo) => { | |||||||
|   await page.goto("/log/kiosk/ekrv2019/Linz"); |   await page.goto("/log/kiosk/ekrv2019/Linz"); | ||||||
|   if (testInfo.project.name.includes("Mobile")) { |   if (testInfo.project.name.includes("Mobile")) { | ||||||
|     // No left boat selector on mobile views |     // 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(); |     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(); | ||||||
| @@ -139,10 +139,10 @@ test("Kiosk can start and finish trip", async ({ page }, testInfo) => { | |||||||
|  |  | ||||||
|   if (testInfo.project.name.includes("Mobile")) { |   if (testInfo.project.name.includes("Mobile")) { | ||||||
|     // No left boat selector on mobile views |     // 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(); |     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 %}#} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user