-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathroutes.py
50 lines (47 loc) · 2.31 KB
/
routes.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from flask import render_template, request, jsonify
from forms import CheckInOutForm
from models import User, Tools
from extensions import db
from atems import app
from datetime import datetime
from sqlalchemy.exc import SQLAlchemyError
import logging
# Configure logging
logger = logging.getLogger(__name__)
@app.context_processor
def inject_datetime():
return {'datetime': datetime}
@app.route('/checkinout', methods=['GET', 'POST'])
def checkinout():
form = CheckInOutForm()
if form.validate_on_submit():
try:
user = User.query.filter_by(username=form.username.data).first()
tool = Tools.query.filter_by(tool_id_number=form.tool_id_number.data).first()
if user and tool:
if form.badge_id.data == user.badge_id:
if tool.checked_out_by == user.username:
tool.checked_out_by = None
tool.checkin_time = datetime.now()
db.session.commit()
logger.info(f"Tool {tool.tool_id_number} checked in by {user.username}")
return jsonify(status="success", message="Tool checked in")
else:
tool.checked_out_by = user.username
tool.checkout_time = datetime.now()
db.session.commit()
logger.info(f"Tool {tool.tool_id_number} checked out by {user.username}")
return jsonify(status="success", message="Tool checked out")
else:
logger.warning(f"Badge ID mismatch for user {user.username}")
return jsonify(status="error", message="Badge ID does not match username")
else:
logger.warning(f"User or tool not found: username={form.username.data}, tool_id={form.tool_id_number.data}")
return jsonify(status="error", message="User or tool not found")
except SQLAlchemyError as e:
db.session.rollback()
logger.error(f"Database error: {str(e)}")
return jsonify(status="error", message=f"Database error: {str(e)}")
elif request.method == 'POST':
logger.warning(f"Form validation failed: {form.errors}")
return render_template('checkinout.html', form=form, datetime=datetime)