routes.py (9210B)
1 from app import app 2 from flask_pymongo import PyMongo 3 from flask import render_template, redirect, url_for, flash, request 4 from flask_login import login_required 5 from app.fleet import bp 6 from bson.objectid import ObjectId 7 import datetime, hashlib 8 import os 9 from app.fleet.forms import NewFleet, UpdateFleet, FleetCheckoutForm, FleetCheckinForm 10 #from app.meetings.update import 11 #from app.meetings.meeting import 12 13 mongo = PyMongo(app) 14 15 ### Define fetch_meeting ### 16 #TRY TO MOVE TO app.meetings.meeting.py 17 class FleetNotFoundError(Exception): 18 pass 19 20 def fetch_fleet(fleet_id): 21 fleet = mongo.db.fleet_collection.find({"fleet_id":fleet_id}) 22 23 if fleet == None: 24 raise FleetNotFoundError(f'Fleet Id {fleet_id} returned None') 25 else: 26 return fleet 27 28 ### BEGIN DEV ROUTES ### 29 30 @bp.route('/fleet/seed',methods=["GET","PUT"]) 31 @login_required 32 def fleetSeed(): 33 pj1 = "647a3d95ab70a58f2a44a886" 34 pj2 = "647a455f92e1af234bfb91b2" 35 seeds = [ 36 { 37 "_id": "pool", 38 "available":[3,4,5], # list of _id where equipment_collection.find({}) type: is "vehicle" 39 "in_use":[(1,"brennentmazur"),(2,"nikolasmmazur")] #replace int with _id of equipment where "type": "vehicle" 40 }, 41 { 42 "fleet_id": ObjectId(), 43 "branch":'Salmon', 44 "vehicle_number": 5, 45 "vehicle_name": 'Green Machine', 46 "mileage_start": 2, 47 "mileage_end": 6, 48 "project": ObjectId(pj1), 49 "operator":"brennentmazur", 50 "failed_checks":[] #appended from form where check is false on_validate 51 }, 52 { 53 'fleet_id': ObjectId(), 54 'branch':'Dillon', 55 "vehicle_number": 4, 56 "vehicle_name": 'Ram Machine', 57 "mileage_start": 622, 58 "mileage_end": 6999, 59 "project": ObjectId(pj1), 60 "operator":"brennentmazur", 61 "failed_checks":[] #appended from form where check is false on_validate 62 } 63 ] 64 mongo.db.fleet_collection.delete_many({}) 65 mongo.db.fleet_collection.insert_many(seeds) 66 dev_fleet = mongo.db.fleet_collection.find() 67 return render_template('dev.html',dev_fleet=dev_fleet) 68 69 @bp.route('/fleet/dev',methods=["GET"]) 70 @login_required 71 def allFleet(): 72 dev_fleet = mongo.db.fleet_collection.find({}) 73 return render_template('dev.html',dev_fleet=dev_fleet) 74 75 ### END DEV ROUTES ### 76 77 #### BEGIN ROUTES #### 78 79 #TODO 80 @bp.route('/fleet',methods=["GET"]) 81 @bp.route('/fleet/',methods=["GET"]) 82 @login_required 83 def vehicles(): 84 ongoingFleet = mongo.db.fleet_collection.aggregate( [ 85 { 86 '$match':{ 87 'timestamp':{ 88 '$lt':datetime.datetime.now() 89 }, 90 'expected_end':{ 91 '$gt':datetime.datetime.now() 92 } 93 } 94 }, 95 { '$sort':{'timestamp':1}} 96 ] ) 97 98 upcomingFleet = mongo.db.fleet_collection.aggregate( [ 99 { 100 '$match':{'timestamp':{'$gt': datetime.datetime.now() }} 101 }, 102 { 103 '$sort':{'timestamp':1} 104 } 105 ] ) 106 107 pastFleet = mongo.db.fleet_collection.aggregate( [ 108 { 109 '$match':{ 'timestamp': {"$lt": datetime.datetime.now()},'expected_end':{'$lt': datetime.datetime.now()} } 110 }, 111 { 112 '$sort':{ 'timestamp':-1 } 113 }, 114 { 115 '$limit':7 116 } 117 ]) 118 return render_template('fleet.html',ongoingFleet=ongoingFleet,upcomingFleet=upcomingFleet,pastFleet=pastFleet) 119 120 #TODO 121 @bp.route('/fleet/past',methods=["GET"]) 122 @login_required 123 def past(): 124 allOldFleet = True 125 pastFleet = mongo.db.fleet_collection.aggregate( [ 126 { 127 '$match':{'expected_end': {"$lt": datetime.datetime.now()} } 128 }, 129 { 130 '$sort':{ 'timestamp':-1 } 131 } 132 ] ) 133 return render_template('fleet.html',pastFleet=pastFleet, allOldFleet=allOldFleet) 134 135 @bp.route('/fleet/<fleet_id>',methods=["GET"]) 136 @bp.route('/fleet/<fleet_id>/',methods=["GET"]) 137 def fleet(fleet_id): 138 try: 139 fleet = fetch_fleet(fleet_id) 140 except FleetNotFoundError as e: 141 return render_template('error.html',error=e) 142 else: 143 return render_template('fleet.html',fleet=fleet) 144 145 #TODO 146 @bp.route('/fleet/new',methods=["GET","POST"]) 147 @login_required 148 def new(): 149 form = NewFleet() 150 if form.validate_on_submit(): 151 #timestp = datetime.datetime.combine(form.date.data,form.time.data) 152 # "fleet_id": new ObjectId(), 153 # "branch":'Salmon', 154 # "vehicle_number": 5, 155 # "vehicle_name": 'Green Machine', 156 # "mileage_start": 2, 157 # "mileage_end": 6, 158 # "project": ObjectId(pj1), 159 # "operator":"brennentmazur", 160 # "failed_checks":[] #appended from form where check is false on_validate 161 #expectedtime = timestp + datetime.timedelta(minutes=form.expected_end.data) 162 try: 163 new_fleet = {'branch':form.branch.data,'vehicle_number':form.vehicle_number.data} 164 if form.vehicle_name.data != "": 165 new_fleet['vehicle_name']=form.vehicle_name.data 166 except Exception: 167 return "Error assigning form data" 168 else: 169 mongo.db.fleet_collection.insert_one(new_fleet) 170 flash("Created new fleet vehicle!") 171 return redirect(url_for('fleet.vehicles')) 172 173 # if form.name.data != "": 174 # new_meeting['meeting_name']=form.name.data 175 return render_template('new.html',form=form) 176 177 #TODO DOES THIS NEED TO BE HERE? GAS RECIPTS? 178 @bp.route('/fleet/<fleet_id>/upload',methods=["GET","POST"]) 179 @login_required 180 def upload(fleet_id): 181 try: 182 fleet = fetch_fleet(fleet_id) 183 except FleetNotFoundError as e: 184 return render_template('error.html',error=e) 185 else: 186 form = NewFileUpload() 187 upload = datetime.datetime.utcnow() 188 if form.validate_on_submit(): 189 flash("submitted") 190 mongo.db.fleet_collection.update_one({'_id':fleet['_id']},{'$push':{'documents':'brennen'}}) 191 return redirect(url_for('fleet.upload',fleet_id=fleet['fleet_id'])) 192 return render_template('upload.html',fleet=fleet,form=form,upload=upload) 193 194 #TODO 195 @bp.route('/fleet/<fleet_id>/update',methods=["GET","POST"]) 196 @login_required 197 def update(fleet_id): 198 try: 199 fleet = fetch_fleet(fleet_id) 200 except FleetNotFoundError as e: 201 return render_template('error.html',error=e) 202 else: 203 return render_template('update.html',fleet=fleet) 204 205 #TODO 206 @bp.route('/fleet/<fleet_id>/<update>',methods=["GET","POST"]) 207 @login_required 208 def change(fleet_id,update): 209 form = UpdateFleet() 210 try: 211 fleet = fetch_fleet(fleet_id) 212 except FleetNotFoundError as e: 213 return render_template('error.html',error=e) 214 else: 215 if form.validate_on_submit(): 216 if update == "date": 217 timestamp = datetime.datetime.combine(form.date.data,fleet['timestamp'].time()) 218 mongo.db.fleet_collection.update_one({'fleet_id':fleet['fleet_id']},{'$set':{'timestamp':timestamp}}) 219 flash("Updated Date from {} to {}".format(fleet['timestamp'],timestamp)) 220 return redirect(url_for('fleet.update',fleet_id=fleet['fleet_id'])) 221 if update == "time": 222 timestamp = datetime.datetime.combine(fleet['timestamp'].date(),form.time.data) 223 mongo.db.fleet_collection.update_one({'fleet_id':fleet['fleet_id']},{'$set':{'timestamp':timestamp}}) 224 flash("Updated Time from {} to {}".format(fleet['timestamp'],timestamp)) 225 return redirect(url_for('fleet.update',fleet_id=fleet['fleet_id'])) 226 if update == "location": 227 mongo.db.fleet_collection.update_one({'fleet_id':fleet['fleet_id']},{'$set':{'location':form.location.data}}) 228 flash("Updated location from {} to {}".format(fleet['location'],form.location.data)) 229 return redirect(url_for('fleet.update',fleet_id=fleet['fleet_id'])) 230 if update == "description": 231 mongo.db.fleet_collection.update_one({'fleet_id':fleet['fleet_id']},{'$set':{'fleet_description':form.fleet_description.data}}) 232 flash("Updated description to {}".format(form.fleet_description.data)) 233 return redirect(url_for('fleet.update',fleet_id=fleet['fleet_id'])) 234 return render_template('form.html',fleet=fleet,update=update,form=form) 235 236 #TODO 237 @bp.route('/fleet/<fleet_id>/remove',methods=["GET","POST"]) 238 @login_required 239 def remove(fleet_id): 240 try: 241 fleet = fetch_fleet(fleet_id) 242 except FleetNotFoundError as e: 243 return render_template('error.html',error=e) 244 else: 245 mongo.db.fleet_collection.delete_one(fleet) 246 flash("Deleted fleet {} {}".format(fleet['fleet_number'],fleet['vehicle_name'])) 247 return redirect(url_for('fleet.vehicles'))