rollerverbrauch/app/routes/regular_cost.py

163 lines
5.1 KiB
Python

from flask import url_for, redirect, render_template, flash
from flask_security import login_required
from flask_security.core import current_user
from sqlalchemy.exc import IntegrityError
from datetime import date
from ..entities import Vehicle, Consumable, Pitstop, RegularCost
from ..forms import (
SelectVehicleForm,
CreateRegularCostForm,
DeleteRegularCostForm,
EditRegularCostForm,
EndRegularCostForm,
)
from ..tools import (
db_log_update,
db_log_delete,
db_log_add,
pitstop_service_key,
get_event_line_for_vehicle,
update_filling_station_prices,
get_users_active_vehicle,
)
from .. import app, db
@app.route("/regular_costs/delete/<int:pid>", methods=["GET", "POST"])
@login_required
def delete_regular_form(pid):
regular_cost = RegularCost.query.filter(RegularCost.id == pid).first()
if regular_cost is None:
return redirect(url_for("get_pit_stops"))
vehicle = Vehicle.query.filter(Vehicle.id == regular_cost.vehicle_id).first()
if vehicle not in current_user.vehicles:
return redirect(url_for("get_pit_stops"))
form = DeleteRegularCostForm()
if form.validate_on_submit():
db.session.delete(regular_cost)
db.session.commit()
db_log_delete(regular_cost)
return redirect(url_for("get_pit_stops", _anchor="v" + str(vehicle.id)))
return render_template(
"deleteRegularCostForm.html", form=form, regular_cost=regular_cost
)
@app.route("/regular_costs/vehicle/select", methods=["GET", "POST"])
@login_required
def select_vehicle_for_new_regular_cost():
active_vehicles = get_users_active_vehicle(current_user)
if len(active_vehicles) == 1:
return redirect(
url_for("create_regular_cost_for_vehicle", vid=active_vehicles[0].id)
)
form = SelectVehicleForm()
form.vehicle.choices = [(g.id, g.name) for g in active_vehicles]
if form.validate_on_submit():
return redirect(
url_for("create_regular_cost_for_vehicle", vid=form.vehicle.data)
)
return render_template("selectVehicle.html", form=form)
@app.route("/regular_costs/vehicle/<int:vid>/create", methods=["GET", "POST"])
@login_required
def create_regular_cost_for_vehicle(vid):
vehicle = Vehicle.query.get(vid)
if vehicle is None or vehicle not in current_user.vehicles:
return redirect(url_for("get_account_page"))
form = CreateRegularCostForm()
form.preinit_with_data()
if form.validate_on_submit():
regular_cost = RegularCost(
vid,
form.description.data,
form.costs.data,
form.days.data,
form.start_at.data,
form.ends_at.data,
)
db.session.add(regular_cost)
vehicle.regulars.append(regular_cost)
db.session.commit()
return redirect(url_for("get_pit_stops", _anchor="v" + str(vehicle.id)))
form.process()
return render_template(
"createRegularCostForm.html", form=form, vehicle=vehicle, messages=[]
)
@app.route("/regular_costs/edit/<int:pid>", methods=["GET", "POST"])
@login_required
def edit_regular_form(pid):
edit_regular = RegularCost.query.get(pid)
if edit_regular is None:
return redirect(url_for("get_pit_stops"))
vehicle = Vehicle.query.filter(Vehicle.id == edit_regular.vehicle_id).first()
if vehicle not in current_user.vehicles:
return redirect(url_for("get_pit_stops"))
form = EditRegularCostForm()
form.preinit_with_data()
if not form.is_submitted():
form.costs.default = edit_regular.costs
form.start_at.default = edit_regular.start_at
form.ends_at.default = edit_regular.ends_at
form.days.default = edit_regular.days
form.description.default = edit_regular.description
if form.validate_on_submit():
edit_regular.start_at = form.start_at.data
edit_regular.ends_at = form.ends_at.data
edit_regular.costs = form.costs.data
edit_regular.days = form.days.data
edit_regular.description = form.description.data
db.session.commit()
db_log_update(edit_regular)
return redirect(url_for("get_pit_stops", _anchor="v" + str(vehicle.id)))
form.preinit_with_data()
form.process()
return render_template(
"editRegularCostForm.html",
form=form,
vehicle=vehicle,
messages=form.get_hint_messages(),
)
@app.route("/regular_costs/end/<int:pid>", methods=["GET", "POST"])
@login_required
def end_regular_form(pid):
edit_regular = RegularCost.query.get(pid)
if edit_regular is None:
return redirect(url_for("get_pit_stops"))
vehicle = Vehicle.query.filter(Vehicle.id == edit_regular.vehicle_id).first()
if vehicle not in current_user.vehicles:
return redirect(url_for("get_pit_stops"))
form = EndRegularCostForm()
if form.validate_on_submit():
edit_regular.ends_at = date.today()
db.session.commit()
return redirect(url_for("get_pit_stops", _anchor="v" + str(vehicle.id)))
return render_template(
"endRegularCostForm.html",
form=form,
vehicle=vehicle,
)