163 lines
5.1 KiB
Python
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,
|
|
)
|