Files
ProjectIOT/application/dashboard/views.py
Anh-Thy04 378fcb0b93 filters
2025-06-20 00:52:49 +02:00

139 lines
4.2 KiB
Python

from flask import (
Blueprint,
render_template,
flash,
send_from_directory,
redirect,
request,
url_for,
)
from application.dashboard.models import AllowedPlate, LoggedItem
from application import db
from application.dashboard.forms import npForm
from flask_login import login_required
dash_blueprint = Blueprint("dash", __name__, template_folder="templates")
@dash_blueprint.route("/dashboard")
# @login_required
def dashboard():
npfilter = request.args.get('npfilter', '')
idfilter = request.args.get('idfilter', '')
query = AllowedPlate.query
if npfilter:
query = query.filter(AllowedPlate.plate.contains(npfilter))
if idfilter:
query = query.filter(AllowedPlate.id == idfilter)
Plates = query.all()
logs = (
LoggedItem.query.order_by(LoggedItem.dateLogged.desc()) # type: ignore
.limit(50)
.all()
)
form = npForm()
#LogID = LoggedItem.query.all()
id = LoggedItem.id
return render_template("dashboard.html", plates=Plates, logs=logs, form=form, id=id)
@dash_blueprint.route("/add", methods=["GET", "POST"])
# @login_required
def add():
npfilter = request.args.get('npfilter', '')
idfilter = request.args.get('idfilter', '')
query = AllowedPlate.query
if npfilter:
query = query.filter(AllowedPlate.plate.contains(npfilter))
if idfilter:
query = query.filter(AllowedPlate.id == idfilter)
form = npForm()
if form.validate_on_submit():
plate = form.numberplate.data
if plate: # To prevent red lines in VSCode
# Check if number plate already exists
if AllowedPlate.query.filter_by(plate=plate).first():
flash("Numberplate is already registered")
else: # NP does not exist
ap = AllowedPlate(plate=plate)
db.session.add(ap)
db.session.commit()
flash("Numberplate succesfully added")
Plates = query.all()
return render_template(
"add.html", form=npForm(formdata=None), plates=Plates
)
@dash_blueprint.route("/logs", methods=["GET", "POST"])
def log():
order = request.args.get('order', 'desc')
query = LoggedItem.query
if order == 'asc':
logs = query.order_by(LoggedItem.dateLogged.asc()).limit(50).all()
else:
logs = query.order_by(LoggedItem.dateLogged.desc()).limit(50).all()
return render_template("logs.html", logs=logs)
@dash_blueprint.route("/live", methods=["GET"])
@login_required
def live():
return render_template("live.html")
@dash_blueprint.route("/live_image", methods=["GET"])
@login_required
def live_image():
return send_from_directory(
"static/live",
"feed.png",
as_attachment=False,
conditional=True,
)
@dash_blueprint.route("/edit/<string:plate>", methods=["GET", "POST"])
# login_required
def edit(plate: str):
# 404 if plate is invalid
editnp = AllowedPlate.query.filter_by(plate=plate).first_or_404()
# Get form data
form = npForm()
# Check if there is a valid submittion
if form.validate_on_submit():
# Compare form plate to existing plate
form_plate = form.numberplate.data
if editnp.plate == form_plate:
flash("Numberplate has not been changed")
return redirect(request.referrer)
else: # Change detected
editnp.plate = form.numberplate.data
db.session.commit()
flash("Numberplate edited succesfully")
return redirect(request.referrer)
form.numberplate.data = plate
return render_template("edit.html", form=form)
@dash_blueprint.route("/delete/<string:plate>", methods=["POST"])
# @login_required
def delete_plate(plate: str):
plate_obj = AllowedPlate.query.filter_by(plate=plate).first_or_404()
db.session.delete(plate_obj)
db.session.commit()
flash("Numberplate deleted successfully.")
return redirect(request.referrer)
@dash_blueprint.route("/deletelog/<int:id>", methods=["POST"])
# @login_required
def delete_log(id: int):
deletelog = LoggedItem.query.filter_by(id=id).first_or_404()
db.session.delete(deletelog)
db.session.commit()
flash("Log entry deleted successfully.")
return redirect(request.referrer)