feat: Flask routes and Jinja2/HTMX/Tailwind templates
This commit is contained in:
@@ -1,3 +1,48 @@
|
||||
from flask import Blueprint
|
||||
from flask import Blueprint, render_template, request
|
||||
from datetime import date
|
||||
import sqlalchemy as sa
|
||||
from app import db
|
||||
from app.models import WorkEntry
|
||||
from app.business.travel_calc import compute_km_for_entry, compute_co2_grams, compute_frais_reels
|
||||
from app.config_loader import get_vehicles, get_journeys, get_bareme
|
||||
|
||||
bp = Blueprint("reports", __name__)
|
||||
bp = Blueprint("reports", __name__, url_prefix="/reports")
|
||||
|
||||
|
||||
@bp.route("/")
|
||||
def index():
|
||||
year = request.args.get("year", date.today().year, type=int)
|
||||
start = date(year, 1, 1)
|
||||
end = date(year, 12, 31)
|
||||
|
||||
entries = db.session.scalars(
|
||||
sa.select(WorkEntry).where(WorkEntry.date.between(start, end))
|
||||
).all()
|
||||
|
||||
vehicles = get_vehicles()
|
||||
journeys = get_journeys()
|
||||
|
||||
total_km = {}
|
||||
total_co2 = 0.0
|
||||
for entry in entries:
|
||||
km = compute_km_for_entry(entry.journey_profile_id, journeys)
|
||||
for v, d in km.items():
|
||||
total_km[v] = total_km.get(v, 0) + d
|
||||
total_co2 += compute_co2_grams(km, vehicles)
|
||||
|
||||
frais_reels = {}
|
||||
for vehicle_id, km in total_km.items():
|
||||
vehicle = vehicles.get(vehicle_id, {})
|
||||
cv = vehicle.get("cv")
|
||||
if cv:
|
||||
tranches = get_bareme(year, cv)
|
||||
frais_reels[vehicle_id] = round(compute_frais_reels(km, tranches), 2)
|
||||
|
||||
return render_template(
|
||||
"reports.html",
|
||||
year=year,
|
||||
total_km=total_km,
|
||||
total_co2_kg=round(total_co2 / 1000, 2),
|
||||
frais_reels=frais_reels,
|
||||
vehicles=vehicles,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user