stc

a simple time card webapp
git clone _git@git.brennen.work:stc.git
Log | Files | Refs | README

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'))