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': '',