commit 3f057b40e43194d4ee30dae446775f66313f8d19
parent 5b69b3634af9c42c7d51e1286ba2a0c3ed6fb068
Author: Brennen T. Mazur <brennen@madis.cool>
Date: Wed, 22 Feb 2023 22:15:52 -0700
linked fleet widget to write to collection, spelling fix for per diem(thanks Madi)
Diffstat:
6 files changed, 59 insertions(+), 58 deletions(-)
diff --git a/app/forms.py b/app/forms.py
@@ -1,5 +1,5 @@
from flask_wtf import FlaskForm
-from wtforms import StringField, SubmitField, PasswordField, BooleanField, SelectField, DateField, TelField, EmailField, FloatField
+from wtforms import StringField, SubmitField, PasswordField, BooleanField, SelectField, DateField, TelField, EmailField, FloatField, IntegerField
from wtforms.validators import DataRequired, optional, length
# Login class currently assumes mongodb collection(Users) with structure
@@ -31,7 +31,7 @@ class PunchclockWidget(FlaskForm):
projectsSel = SelectField('Project', validators=[DataRequired()])
#clockin = currenttime
lunchBox = BooleanField('Lunch')
- perdiumBox = BooleanField('Perdium')
+ per_diemBox = BooleanField('Perdium')
# IFF user.role is_in(trusted_role[]) then allow lunch minute definition
clockin = SubmitField('Clock In')
@@ -53,23 +53,25 @@ class AdmnPermissionsForm(FlaskForm):# for each module make Boolean field. Gets
updaterole = SubmitField('Update')#Update to take role name for pass to write fn
class FleetCheckoutForm(FlaskForm):
- vehicle = SelectField('Vehicle', validators=[DataRequired()])
- startmilage = StringField('Starting Milage',validators=[DataRequired()])# Require some sort of validator for check...
- horn = BooleanField('Horn')
- signals = BooleanField('Signals')
- tires = BooleanField('Tires')
- mirrors = BooleanField('Mirrors')
- enginefluid = BooleanField('Engine Fluids')
- steeringfluid = BooleanField('Steering Fluid')
- brakefluid = BooleanField('Brake Fluid')
- transmissionfluid = BooleanField('Transmission Fluid')
- windshield = BooleanField('Windshield')
- wipers = BooleanField('Windshield Wipers')
- towingequipment = BooleanField('Towing Equipment')
- additionalnotes = StringField('Additional Notes',validators=[optional()])# May not need this at all?
- checkout = SubmitField('Checkout')#Update to take role name for pass to write fn
+ vehicles=['Vehicle 1','Vehicle 2', 'Vehicle 3']
+ startingmiles=0
+ vehicle = SelectField('Vehicle', validators = [DataRequired()], choices = vehicles)
+ start_milage = IntegerField('Starting Milage', validators=[DataRequired()], default=startingmiles)# Require some sort of validator for check...
+ horn = BooleanField('Horn')
+ signals = BooleanField('Signals')
+ tires = BooleanField('Tires')
+ mirrors = BooleanField('Mirrors')
+ enginefluid = BooleanField('Engine Fluids')
+ steeringfluid = BooleanField('Steering Fluid')
+ brakefluid = BooleanField('Brake Fluid')
+ transmissionfluid = BooleanField('Transmission Fluid')
+ windshield = BooleanField('Windshield')
+ wipers = BooleanField('Windshield Wipers')
+ towingequipment = BooleanField('Towing Equipment')
+ additionalnotes = StringField('Additional Notes',validators=[optional()])# May not need this at all?
+ checkout = SubmitField('Checkout Vehicle')#Update to take role name for pass to write fn
class FleetCheckinForm(FlaskForm):
- endmilage = StringField('Ending Milage',validators=[DataRequired()])# Require some sort of validator for check...
+ endmilage = IntegerField('Ending Milage',validators=[DataRequired()])# Require some sort of validator for check...
additionalnotes = StringField('Additional Notes',validators=[optional()])# May not need this at all?
- checkin = SubmitField('Checkin')#Update to take role name for pass to write fn
+ checkin = SubmitField('Checkin Vehicle')#Update to take role name for pass to write fn
diff --git a/app/routes.py b/app/routes.py
@@ -3,7 +3,7 @@ from app import app
from flask_pymongo import PyMongo
from flask_login import LoginManager
from flask import render_template, url_for, request, flash, redirect
-from app.forms import LoginForm, PunchclockWidget, NewUserForm, AdmnPermissionsForm, DashPermissionsForm
+from app.forms import LoginForm, PunchclockWidget, FleetCheckoutForm, FleetCheckinForm, NewUserForm, AdmnPermissionsForm, DashPermissionsForm
from flask import request
from werkzeug.urls import url_parse
from werkzeug.security import generate_password_hash, check_password_hash
@@ -101,15 +101,23 @@ def load_user(username):
user_obj.password_hash = u['password_hash']
return user_obj
-@app.route("/dashboard")
+@app.route("/dashboard", methods=['GET', 'POST'])
@login_required
def dashboard():
- form=PunchclockWidget()
+ clockform=PunchclockWidget()
+ fleetoutform=FleetCheckoutForm()
+ fleetinform=FleetCheckinForm()
currenttime=datetime.datetime.utcnow()
available_projects = {'STC Webapp':'stcapp','YEP Website':'yepsite','Volunteer Day':'volday'}
-
- return render_template('dashboard/layout.html',currenttime=currenttime,projects=available_projects,form=form,ORGNAME=OrganizationName)
+ if fleetoutform.validate_on_submit():
+ mongo.db.fleet_collection.insert_one({'date':datetime.datetime.today(), # NEED to work on modular way of storing safety checks... might condence to single true if all checked. else returns false and records false datavalue.label in incident_report[] If incident report, remove vehicle from available pool and display widget in admin layout
+ 'vehicle':fleetoutform.vehicle.data,
+ 'start_milage':fleetoutform.start_milage.data,
+ 'operator':current_user.username,
+ 'additional_notes':fleetoutform.additionalnotes.data})
+ return redirect(url_for('dashboard'))
+ return render_template('dashboard/layout.html',currenttime=currenttime,projects=available_projects,clockform=clockform,fleetinform=fleetinform,fleetoutform=fleetoutform,ORGNAME=OrganizationName)
@app.route("/admin")
#@login_required
@@ -151,10 +159,16 @@ def knowlegebase():
# Page Routes
-# DEVELOPMENT ROUTES, remove before production
+# DEVELOPMENT ROUTES, remove/modify permissions before production
+
+@app.route("/dev/fleetdata")
+@login_required
+def fleetdatalist():
+ allfleetdata = mongo.db.fleet_collection.find()
+ return render_template('dev/fleetdata.html', allfleetdata=allfleetdata)
-@app.route("/usrs")
+@app.route("/dev/usrs")
@login_required
-def listusers():
+def userslist():
allusers = mongo.db.user_collection.find()
return render_template('dev/usrs.html', allusers=allusers)
diff --git a/app/templates/admin/roles/updateroles.html b/app/templates/admin/roles/updateroles.html
@@ -1,6 +1,6 @@
{% extends 'base.html' %}
-{% block title %}Current Activeated Users{% endblock %}
+{% block title %}Current Activated Users{% endblock %}
{% block content %}
diff --git a/app/templates/dashboard/fleet/widget.html b/app/templates/dashboard/fleet/widget.html
@@ -1,25 +1,10 @@
<section class="fleet">
- <h2>Fleet</h2>
- <form>
- <select name="Vehicle ID"><!--replace w/ selectVehicle() or FOR EACH loop for array passed as available Vehicle... Leaning towards latter -->
- <option value="vehicle1">vehicle1</option><!-- for/while loop displaying each $vehicleID user has permission for -->
- <option value="vehicle2" selected>vehicle2</option>
- <option value="vehicle3">vehicle3</option>
- </select></br>
- <label for="startMileage">Starting Mileage</label>
- <input type="number" id="startMileage" name="startMileage" value="102416" min="102416" required><!-- min is last vehicleID.endMileage ask about potential maximum value? -->
- <!-- Should safety checks be a seperate form? -->
+ <h3>Fleet</h3>
+ <form class="widget-form" action="" method="POST" novalidate>
<div class="safetychecks">
- <label for="safetyItem1">Safety Check 1</label>
- <input type="checkbox" name="safetyItem1" value="safetyItem1" required></br>
- <label for="safetyItem2">Safety Check 2</label>
- <input type="checkbox" name="safetyItem2" value="safetyItem2" required></br>
- <label for="safetyItem3">Safety Check 3</label>
- <input type="checkbox" name="safetyItem3" value="safetyItem3" required></br>
- <label for="safetyItem4">Safety Check 4</label>
- <input type="checkbox" name="safetyItem4" value="safetyItem4" required></br>
+ {% for field in fleetoutform %}
+ {{ field }}{% if field.widget.input_type != 'submit' and field.widget.input_type != 'hidden' %}{{ field.label }}{% endif %}<br>
+ {% endfor %}
</div>
- <input type="text" id="notes" value="Additonal Inspection Notes"></br>
- <input type="submit" value="Checkout Vehicle">
</form>
</section>
diff --git a/app/templates/dashboard/punchclock/widget.html b/app/templates/dashboard/punchclock/widget.html
@@ -1,16 +1,16 @@
<section class="punchclock">
<h2 id="clock"></h2>
- <form action="" method="" novalidate>
- <p>{{ form.projectsSel.label }}<br>{{ form.projectsSel(choices=projects[]) }}</p>
- <p>{{ form.lunchBox() }} {{ form.lunchBox.label }}
- {{ form.perdiumBox() }} {{ form.perdiumBox.label }}</p>
- <p>{{ form.clockin() }}</p>
+ <form class="widget-form" action="" method="" novalidate>
+ <p>{{ clockform.projectsSel.label }}<br>{{ clockform.projectsSel(choices=projects) }}</p>
+ <p>{{ clockform.lunchBox() }} {{ clockform.lunchBox.label }}
+ {{ clockform.per_diemBox() }} {{ clockform.per_diemBox.label }}</p>
+ <p>{{ clockform.clockin() }}</p>
</form>
<!-- Add iff satement for clocked_in==True
<p> form.projects(choices=projects,default=(if(project[0]==0){return project[0].label })</p>
<p>{ form.clockout() }}</p>
- <p>{ form.lunchBox() }} {{ form.lunchBox.label }}</p>
- <p>{ form.perdiumBox() }} {{ form.perdiumBox.label }}</p>
+ <p>{ form.lunchBox() }} { form.lunchBox.label }}</p>
+ <p>{ form.perdiumBox() }} { form.perdiumBox.label }}</p>
-->
<button><a href="{{ url_for('hours') }}">Change Hours</a></button><!--routes to userhours.html-->
<h2>{{ current_user.fname }} {{ current_user.lname }}</h2><!-- something like currenttime above -->
diff --git a/seeds.py b/seeds.py
@@ -72,7 +72,7 @@ time1 = {
'project': 'Project 2', #Probably link with projects foreign key
'clock_out': datetime.datetime.utcnow(), #System time
'note': 'Changed due to clocking out early',
- 'perdium': False,
+ 'per_diem': False,
# 'total_time':
}
@@ -83,7 +83,7 @@ time2 = {
'project': 'Project 2', #Probably link with projects foreign key
'clock_out': datetime.datetime.utcnow(), #System time
'note': 'Changed due to clocking out early',
- 'perdium': False,
+ 'per_diem': False,
# 'total_time':
}
@@ -91,7 +91,7 @@ time2 = {
fleet1 = {
'date': datetime.datetime.today(),
'operator': 'brennentmazur', #forign key to userID
-# 'safety_checks': True, #array for different safety checks
+ 'safety_checks': [True,True,True,True,True]#array for different safety checks
'additional_notes': 'Oil needs checked',
'vehicle': 'The Big Truck', #vehicleID
'incident_report': '',