97 lines
3.3 KiB
Python
97 lines
3.3 KiB
Python
|
from flask import url_for, redirect, render_template
|
||
|
from flask_security import login_required, roles_required
|
||
|
from sqlalchemy.exc import IntegrityError
|
||
|
|
||
|
from ..entities import User, Consumable
|
||
|
from ..forms import CreateConsumableForm, DeletConsumableForm, EditConsumableForm
|
||
|
from ..tools import db_log_update, db_log_delete, db_log_add
|
||
|
from .. import app, db
|
||
|
|
||
|
|
||
|
@app.route('/admin', methods=['GET'])
|
||
|
@roles_required('admin')
|
||
|
def get_admin_page():
|
||
|
users = User.query.all()
|
||
|
consumables = Consumable.query.all()
|
||
|
for consumable in consumables:
|
||
|
consumable.in_use = len(consumable.vehicles) > 0
|
||
|
return render_template('admin.html', users=users, consumables=consumables)
|
||
|
|
||
|
|
||
|
@app.route('/admin/consumable/create', methods=['GET', 'POST'])
|
||
|
@login_required
|
||
|
def create_consumable():
|
||
|
form = CreateConsumableForm()
|
||
|
|
||
|
# preinitialize the defaults with potentially existing values from a try before
|
||
|
if form.name.data is not None:
|
||
|
form.name.default = form.name.data
|
||
|
if form.unit.data is not None:
|
||
|
form.unit.default = form.unit.data
|
||
|
|
||
|
if form.validate_on_submit():
|
||
|
new_consumable = Consumable(form.name.data, form.unit.data)
|
||
|
db.session.add(new_consumable)
|
||
|
try:
|
||
|
db.session.commit()
|
||
|
db_log_add(new_consumable)
|
||
|
except IntegrityError:
|
||
|
db.session.rollback()
|
||
|
form.name.errors.append('"%s" is not unique.' % (form.name.data))
|
||
|
return render_template('createConsumableForm.html', form=form)
|
||
|
return redirect(url_for('get_admin_page'))
|
||
|
|
||
|
return render_template('createConsumableForm.html', form=form)
|
||
|
|
||
|
|
||
|
@app.route('/admin/consumable/delete/<int:cid>', methods=['GET', 'POST'])
|
||
|
@login_required
|
||
|
def delete_consumable(cid):
|
||
|
consumable = Consumable.query.filter(Consumable.id == cid).first()
|
||
|
if consumable is None:
|
||
|
return redirect(url_for('get_admin_page'))
|
||
|
|
||
|
form = DeletConsumableForm()
|
||
|
|
||
|
if form.validate_on_submit():
|
||
|
db.session.delete(consumable)
|
||
|
db.session.commit()
|
||
|
db_log_delete(consumable)
|
||
|
return redirect(url_for('get_admin_page'))
|
||
|
|
||
|
return render_template('deleteConsumableForm.html', form=form, consumable=consumable)
|
||
|
|
||
|
|
||
|
@app.route('/admin/consumable/edit/<int:cid>', methods=['GET', 'POST'])
|
||
|
@login_required
|
||
|
def edit_consumable(cid):
|
||
|
consumable = Consumable.query.filter(Consumable.id == cid).first()
|
||
|
if consumable is None:
|
||
|
return redirect(url_for('get_admin_page'))
|
||
|
|
||
|
form = EditConsumableForm()
|
||
|
|
||
|
form.name.default = consumable.name
|
||
|
form.unit.default = consumable.unit
|
||
|
|
||
|
# preinitialize the defaults with potentially existing values from a try before
|
||
|
if form.name.data is not None:
|
||
|
form.name.default = form.name.data
|
||
|
if form.unit.data is not None:
|
||
|
form.unit.default = form.unit.data
|
||
|
|
||
|
if form.validate_on_submit():
|
||
|
consumable.name = form.name.data
|
||
|
consumable.unit = form.unit.data
|
||
|
try:
|
||
|
db.session.commit()
|
||
|
db_log_update(consumable)
|
||
|
except IntegrityError:
|
||
|
db.session.rollback()
|
||
|
form.name.errors.append('"%s" is not unique.' % (form.name.data))
|
||
|
return render_template('editConsumableForm.html', form=form)
|
||
|
return redirect(url_for('get_admin_page'))
|
||
|
|
||
|
return render_template('editConsumableForm.html', form=form)
|
||
|
|