def history(): '''Reserve URI. Parameters for GET method ------------------------- None ''' member = security.verifySession(session) if member is None: return redirect(url_for(".welcome")) else: staff = member if request.method == "GET": keyTypes = {"id": int} params = webdata.parseInput(request.args, keyTypes) resp = rest.get("member", params=params) for m in resp['body']: member = m params = {"memberId": member["id"]} resp = rest.get("reservation", params=params) if resp is None or resp["error"] is not None: reservations = None else: reservations = resp["body"] if reservations is not None: for reservation in reservations: params = {"id": reservation["carId"]} resp = rest.get("car", params=params) if resp is None or resp["error"] is not None: reservation["car"] = None else: reservation["car"] = resp["body"][0] reservation["reservedTime"] = webdata.strToDatetime( reservation["reservedTime"]) reservation["reservedTime"] = webdata.convertUtcToLocal( reservation["reservedTime"]) reservation["reservedTimeStr"] = webdata.datetimeToStr( reservation["reservedTime"]) reservation["statusStr"] = webdata.statusToStr( reservation["status"]) return render_template("history.html", staff=staff, member=member, reservations=reservations)
def manager(): member = security.verifySession(session) if member is None: return redirect(url_for(".welcome")) #All members resp = rest.get("allMembers") if resp is None or resp["error"] is not None: members = None else: members = resp["body"] #All cars resp = rest.get("car") if resp is None or resp["error"] is not None: cars = None else: cars = resp["body"] #All reservations resp = rest.get("reservation") if resp is None or resp["error"] is not None: reservations = None else: reservations = resp["body"] if reservations is not None: for reservation in reservations: params = {"id": reservation["carId"]} resp = rest.get("car", params=params) if resp is None or resp["error"] is not None: reservation["car"] = None else: reservation["car"] = resp["body"][0] reservation["reservedTime"] = webdata.strToDatetime( reservation["reservedTime"]) reservation["reservedTime"] = webdata.convertUtcToLocal( reservation["reservedTime"]) reservation["reservedTimeStr"] = webdata.datetimeToStr( reservation["reservedTime"]) reservation["statusStr"] = webdata.statusToStr( reservation["status"]) return (render_template("manager.html", staff=member, members=members, cars=cars, reservations=reservations))
def findReservation(memberId, carId, status): '''Find reservation matching member id, car id and status. Parameters ---------- memberId : int Member id. carId : int Car id. status : int Reservation status. Returns ------- dict Reservation dict if session is valid. Otherwise, None. ''' params = {"memberId": memberId, "carId": carId, "status": status} resp = rest.get("reservation", params=params) if resp is None or resp["error"] is not None: return None nowDt = datetime.utcnow() reservations = resp["body"] for reservation in reservations: rsvDt = webdata.strToDatetime(reservation["reservedTime"]) rtnDt = rsvDt + timedelta(hours=reservation["reservedHours"]) if nowDt >= rsvDt and nowDt < rtnDt: return reservation return None
def admin(): member = security.verifySession(session) if member is None: return redirect(url_for(".welcome")) #View history resp = rest.get("allMembers") if resp is None or resp["error"] is not None: members = None else: members = resp["body"] users = members #Report car resp = rest.get("car") if resp is None or resp["error"] is not None: cars = None else: cars = resp["body"] #User search params = {} if request.method == "POST": keyTypes = { "username": str, "email": str, } params = webdata.parseInput(request.form, keyTypes) resp = rest.get("searchMembers", params=params) if resp is None or resp["error"] is not None: users = None else: users = resp["body"] return (render_template("admin.html", staff=member, members=members, users=users, cars=cars))
def cars(): '''Cars URI. Parameters for GET method ------------------------- None Parameters for POST method -------------------------- make : str (optional) Car's brand. bodyType : str (optional) Car's body type. colour : str (optional) Car's colour. seats : int (optional) Number of seats. location : str (optional) Car's current location. costPerHour : float (optional) Cost per hour. ''' member = security.verifySession(session) if member is None: return redirect(url_for(".welcome")) params = {} if request.method == "POST": keyTypes = { "make": str, "bodyType": str, "colour": str, "seats": int, "location": str, "costPerHour": float } params = webdata.parseInput(request.form, keyTypes) params["available"] = True resp = rest.get("car", params=params) if resp is None or resp["error"] is not None: cars = None else: cars = resp["body"] return render_template("cars.html", member=member, params=params, cars=cars)
def engineer(): '''Engineer URI. Parameters for GET method ------------------------- make : str Car's brand. bodyType : str Car's body type. colour : str Car's colour. seats : int (optional) Number of seats. location : str Car's current location. costPerHour : float Cost per hour. reported : bool (True) Reported cars ''' member = security.verifySession(session) if member is None: return redirect(url_for(".welcome")) keyTypes = { "make": str, "bodyType": str, "colour": str, "seats": int, "location": str, "costPerHour": float } params = webdata.parseInput(request.form, keyTypes) params["reported"] = True resp = rest.get("car", params=params) if resp is None or resp["error"] is not None: cars = None else: cars = resp["body"] return render_template("engineer.html", member=member, params=params, cars=cars)
def emaps(): '''Maps URI. ''' member = security.verifySession(session) if member is None: return redirect(url_for(".welcome")) params = {} if request.method == "POST": keyTypes = { "make": str, "bodyType": str, "colour": str, "seats": int, "location": str, "costPerHour": float } params = webdata.parseInput(request.form, keyTypes) params["reported"] = True resp = rest.get("car", params=params) if resp is None or resp["error"] is not None: cars = None else: cars = resp["body"] if cars is None: centre = {"latitude": -37.8744, "longitude": 145.1668} else: centre = {"latitude": 0.0, "longitude": 0.0} for car in cars: centre["latitude"] += car["latitude"] centre["longitude"] += car["longitude"] centre["latitude"] /= len(cars) centre["longitude"] /= len(cars) return render_template("emaps.html", member=member, params=params, cars=cars, centre=centre)
def getUser(id): '''Get a user by given id. Parameters ---------- id : int Member id. Returns ------- dict Member dict collected via RESTful API. ''' resp = rest.get("member", params={"id": id}) if resp is None or resp["error"] is not None and len(resp["body"]) != 1: return None return resp["body"][0]
def report(): '''Report URL. Parameters ---------- id : int Car id. Returns ------- dict Car dict collected via RESTful API. ''' error = None if request.method == "GET": keyTypes = {"id": int} params = webdata.parseInput(request.args, keyTypes) car = getCar(params["id"]) if car is None: error = True if request.method == "POST": keyTypes = { "id": int, "email": str, "content": str, } params = webdata.parseInput(request.form, keyTypes) car = getCar(params["id"]) if car is None: error = True else: resp = rest.get("reportCar", params=params) if resp is None or resp["error"] is not None: error = True else: error = False return (render_template("report.html", car=car, error=error))
def modify(): '''Modify Member URI. Parameters for GET method ------------------------- id : str Member's id. Parameters for POST method -------------------------- id : str (optional) Member's id. username : str Member's username. password : str Member's password. firstName : str Member's first name. lastName : str Member's last name. email : str Member's email address. userType : str Member's type. ''' error = None if request.method == "GET": keyTypes = { "id": int, } params = webdata.parseInput(request.args, keyTypes) if not params: #add user user = None else: #modify user resp = rest.get("member", params=params) user = resp['body'] for i in user: user = i if request.method == "POST": keyTypes = { "id": int, "username": str, "password": str, "firstName": str, "lastName": str, "email": str, "userType": str, } params = webdata.parseInput(request.form, keyTypes) if (params['id'] != 0): #modify user resp = rest.post("modifyUser", data=params) if resp is None or resp["error"] is not None: error = True else: user = getUser(resp['body']) error = False else: #add new user keyTypes = { "username": str, "password": str, "firstName": str, "lastName": str, "email": str, "userType": str, } params = webdata.parseInput(request.form, keyTypes) resp = rest.post("member", data=params) if resp is None or resp["error"] is not None: error = True else: error = False user = None return (render_template("modify.html", error=error, user=user))