diff --git a/app/routes/dashboard.py b/app/routes/dashboard.py index eb1ea68..a716af1 100644 --- a/app/routes/dashboard.py +++ b/app/routes/dashboard.py @@ -37,7 +37,7 @@ def index(): month_km = {} month_co2 = 0.0 for entry in month_entries: - km = compute_km_for_entry(entry.journey_profile_id, journeys) + km = compute_km_for_entry(entry.journey_profile_id, journeys, entry.motor_vehicle_id) for v, d in km.items(): month_km[v] = month_km.get(v, 0) + d month_co2 += compute_co2_grams(km, vehicles) diff --git a/app/routes/entries.py b/app/routes/entries.py index 4634041..9e97cfb 100644 --- a/app/routes/entries.py +++ b/app/routes/entries.py @@ -3,7 +3,7 @@ from datetime import date, time import sqlalchemy as sa from app import db from app.models import WorkEntry, TimeSlot -from app.config_loader import get_journeys, day_types_without_journey +from app.config_loader import get_journeys, get_motor_vehicles, day_types_without_journey, journey_has_motor bp = Blueprint("entries", __name__, url_prefix="/entries") @@ -42,6 +42,9 @@ def entry_form(entry_id=None): entry_date = date.fromisoformat(request.form["date"]) day_type = request.form["day_type"] journey_profile_id = request.form.get("journey_profile_id") or None + motor_vehicle_id = request.form.get("motor_vehicle_id") or None + if not journey_has_motor(journey_profile_id): + motor_vehicle_id = None comment = request.form.get("comment") or None if day_type in day_types_without_journey(): @@ -60,6 +63,7 @@ def entry_form(entry_id=None): entry.day_type = day_type entry.journey_profile_id = journey_profile_id entry.comment = comment + entry.motor_vehicle_id = motor_vehicle_id for slot in list(entry.time_slots): db.session.delete(slot) @@ -84,6 +88,7 @@ def entry_form(entry_id=None): entry=entry, day_types=DAY_TYPES, journeys=journeys, + motor_vehicles=get_motor_vehicles(), day_types_without_journey=day_types_without_journey(), today=date.today().isoformat(), ) diff --git a/app/routes/reports.py b/app/routes/reports.py index dcbc0ce..6111d43 100644 --- a/app/routes/reports.py +++ b/app/routes/reports.py @@ -25,7 +25,7 @@ def index(): total_km = {} total_co2 = 0.0 for entry in entries: - km = compute_km_for_entry(entry.journey_profile_id, journeys) + km = compute_km_for_entry(entry.journey_profile_id, journeys, entry.motor_vehicle_id) for v, d in km.items(): total_km[v] = total_km.get(v, 0) + d total_co2 += compute_co2_grams(km, vehicles) diff --git a/app/templates/entry_form.html b/app/templates/entry_form.html index c158a12..615bc42 100644 --- a/app/templates/entry_form.html +++ b/app/templates/entry_form.html @@ -37,11 +37,13 @@
-
+
+ +
+ {% for vid, vdata in motor_vehicles.items() %} + + {% endfor %} +
+
+
@@ -101,8 +121,23 @@ const NO_JOURNEY_TYPES = {{ day_types_without_journey | list | tojson }}; function updateJourneyVisibility(dayType) { - const section = document.getElementById('journey-section'); - section.classList.toggle('hidden', NO_JOURNEY_TYPES.includes(dayType)); + const journeySection = document.getElementById('journey-section'); + const hidden = NO_JOURNEY_TYPES.includes(dayType); + journeySection.classList.toggle('hidden', hidden); + if (hidden) { + updateMotorVehicleVisibility(''); + } else { + const select = document.getElementById('journey_profile_id'); + if (select) updateMotorVehicleVisibility(select.value); + } +} + +function updateMotorVehicleVisibility(journeyId) { + const section = document.getElementById('motor-vehicle-section'); + const select = document.getElementById('journey_profile_id'); + const selectedOption = select ? select.querySelector(`option[value="${journeyId}"]`) : null; + const hasMotor = selectedOption && selectedOption.dataset.hasMotor === 'true'; + section.classList.toggle('hidden', !hasMotor); } function addTimeSlot() {