calc general boat cat #436
@@ -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