stc

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

equipment.py (2842B)


      1 from app import app
      2 from flask_pymongo import PyMongo
      3 from bson.objectid import ObjectId
      4 
      5 mongo = PyMongo(app)
      6 
      7 class EquipmentNotFoundError(Exception):
      8     pass
      9 
     10 def fetch_equipment(equipment_id):
     11     equipment = mongo.db.equipment_collection.find_one({"_id":ObjectId(equipment_id)})
     12 
     13     if equipment == None:
     14         raise EquipmentNotFoundError(f'Equipment Id {equipment_id} returned None')
     15     else:
     16         return equipment
     17 
     18 # return all past and present equipment
     19 def get_all_equipment():
     20     equipment = mongo.db.equipment_collection.find()
     21     return equipment
     22 
     23 # return all equipment not damaged, in use, and not in use presently
     24 def get_usable_equipment():
     25     equipment = mongo.db.equipment_collection.find({'retired':{'$exists':False}})
     26     return equipment
     27 
     28 # return equipment not damaged, and ready to use, does not return equipment in use presently
     29 def get_available_equipment():
     30     equipment = mongo.db.equipment_collection.find({'retired':{'$exists':False},'checked_out':{'$exists':False}})
     31     return equipment
     32 
     33 # return available equipment by type
     34 def get_available_equipment_type(equipment_type,branch=None):
     35     matchdoc = {"equipment_type":equipment_type,'checked_out':{'$exists':False},'retired':{'$exists':False}}
     36     if branch != None:
     37         matchdoc["branch"] = branch
     38     equipment = mongo.db.equipment_collection.aggregate( [
     39         {
     40             "$match": matchdoc
     41         },
     42         {
     43             "$sort": {
     44                 "equipment_type":1,
     45                 "purchase_timestamp":1
     46             }
     47         }
     48     ] )
     49     return equipment
     50 
     51 # return document of equipment type (_id) and count(number of occurances)
     52 def get_equipment_types():
     53     types = mongo.db.equipment_collection.aggregate( [
     54             {
     55                 '$group':{
     56                     '_id':'$equipment_type',
     57                     'count': {'$count':{} }
     58                 }
     59             },
     60             {   '$sort':{'equipment_type':1} }
     61         ] )
     62     return types
     63 
     64 # return tuple list ('type','type (count)')
     65 def count_equipment_types():
     66     counts = []
     67     for tool in get_equipment_types():
     68         label = "{} ({})".format(tool['_id'],tool['count'])
     69         counts.append((tool['_id'],label))
     70     return counts
     71 
     72 # update db and returns equipment with checked_out attribute set to True by id
     73 def checkout_equipment_id(equipment_id):
     74     equipment = fetch_equpiment(equipment_id)
     75     equipment['checked_out'] = True
     76     mongo.db.equipment_collection.update({'_id':equipment_id},{'$set':{'checked_out':True}})
     77     return equipment
     78 
     79 # update db and returns equipment with popped checked_out attribute by id
     80 def checkin_equipment_id(equipment_id):
     81     equipment = fetch_equipment(equipment_id)
     82     equipment.pop('checked_out')
     83     mongo.db.equipment_collection.update({'_id':equipment_id},{'$unset':{'checked_out':""}})
     84     return equipment