def buy_or_book(): if not current_user.is_authenticated or current_user.get_type() == 'staff': flash('Must be logged in as customer or booking agent') return redirect('main.index') if current_user.get_type() == 'customer': return redirect('/customer/confirm_purchase') if current_user.get_type() == 'agent': return redirect('agent.confirm_purchase')
def my_flights(): if not current_user.is_authenticated or not current_user.get_type( ) == 'agent': flash('You must be logged in as a booking agent for this action') return redirect(url_for('main.index')) if not current_user.is_authenticated or not current_user.get_type( ) == 'agent': return redirect(url_for('main.index')) data=db.session.query(Ticket,Purchase,Flight).join(Purchase,\ Ticket.ticket_id==Purchase.ticket_id).join(Flight, Ticket.airline_name==Flight.airline_name)\ .filter(Purchase.email_booking==current_user.get_identifier()).filter(Flight.departure_time >= datetime.now()).filter(Ticket.flight_num==Flight.flight_num).\ filter(Ticket.departure_time==Flight.departure_time) return render_template('agent/agent_flights.html', data=data)
def frequent_customers(): if not current_user.is_authenticated or not current_user.get_type( ) == 'staff': flash('You must be logged in as an airline staff for this action') return redirect(url_for('main.index')) airline_name = db.session.query(Airline_Staff).filter( Airline_Staff.username == current_user.get_identifier()).first().airline_name freq_customer=db.session.query(Purchase.email_customer.label("customer"),func.count(Purchase.ticket_id)).join(Ticket,Purchase.ticket_id==Ticket.ticket_id)\ .filter(Ticket.airline_name==airline_name).group_by(Purchase.email_customer).order_by(func.count(Purchase.ticket_id).desc()).first() if freq_customer is not None: freq_customer = freq_customer.customer else: freq_customer = "not existent" flash('Looks like no-one has bought anything from your airline yet') form = FrequentCustomersForm() if form.validate_on_submit(): customer = db.session.query(Customer).filter_by( email=form.email.data).first() if customer is not None: session['email'] = form.email.data return redirect('view_customer_flights') flash('This user does not exist') return render_template('staff/frequent_customers.html', form=form, freq_customer=freq_customer)
def add_studyroom(): if current_user.get_type() is Owner: addStudyroomForm = AddStudyroomForm() if addStudyroomForm.validate_on_submit(): studyroom = StudyRoom( owner_id_email=current_user.get_id(), mail_contact=addStudyroomForm.contact_mail.data, name=addStudyroomForm.name.data.upper(), phone_num=addStudyroomForm.contact_phoneNumber.data, address=addStudyroomForm.address.data, city=addStudyroomForm.city.data.upper(), nation=addStudyroomForm.nation.data, postal_code=addStudyroomForm.postal_code.data, toilette=addStudyroomForm.toilette.data, vending_machines=addStudyroomForm.vending_machines.data, wi_fi=addStudyroomForm.wi_fi.data, electrical_outlets=addStudyroomForm.electrical_outlets.data, printer=addStudyroomForm.printer.data, others=addStudyroomForm.others.data) db.session.add(studyroom) db.session.commit() return redirect( url_for('studyrooms.modify_studyroom', id=studyroom.id)) return render_template('add_studyroom.html', title='Add a Study Room', form=addStudyroomForm) else: return flask.abort(401)
def search(): if current_user.get_type() is User: searchStudyroomForm = SearchStudyRoomForm() results = search_studyroom(city='', postal_code='', name='', date=None, toilette=False, wi_fi=False, electrical_outlets=False, printer=False, vending_machines=False) if searchStudyroomForm.validate_on_submit(): results = search_studyroom( city=searchStudyroomForm.city.data.upper(), postal_code=searchStudyroomForm.postal_code.data, name=searchStudyroomForm.name.data.upper(), date=searchStudyroomForm.date.data, toilette=searchStudyroomForm.toilette.data, wi_fi=searchStudyroomForm.wi_fi.data, electrical_outlets=searchStudyroomForm.electrical_outlets.data, printer=searchStudyroomForm.printer.data, vending_machines=searchStudyroomForm.vending_machines.data) return render_template('search_studyroom.html', title='Search a Study Room', form=searchStudyroomForm, results=results) else: return flask.abort(401)
def top_destinations(): if not current_user.is_authenticated or not current_user.get_type( ) == 'staff': flash('You must be logged in as an airline staff for this action') return redirect(url_for('main.index')) airline_name = db.session.query(Airline_Staff).filter( Airline_Staff.username == current_user.get_identifier()).first().airline_name last_90 = datetime.now() - timedelta(days=90) last_365 = datetime.now() - timedelta(days=365) top_90=db.session.query(Flight.arrives,func.count(Ticket.ticket_id)).\ join(Flight,Flight.airline_name==Ticket.airline_name).filter\ (Flight.departure_time==Ticket.departure_time).filter\ (Flight.flight_num==Ticket.flight_num).filter(Flight.airline_name==airline_name).\ filter(Flight.departure_time>=last_90).group_by(Flight.arrives).\ order_by(func.count(Ticket.ticket_id)).all()[:5] top_365 = db.session.query(Flight.arrives, func.count(Ticket.ticket_id)). \ join(Flight, Flight.airline_name == Ticket.airline_name).filter \ (Flight.departure_time == Ticket.departure_time).filter \ (Flight.flight_num == Ticket.flight_num).filter(Flight.airline_name == airline_name). \ filter(Flight.departure_time >= last_365).group_by(Flight.arrives).\ order_by(func.count(Ticket.ticket_id)).all()[:5] return render_template('staff/top_destinations.html', top_90=top_90, top_365=top_365)
def add_airplane(): if not current_user.is_authenticated or not current_user.get_type( ) == 'staff': flash('You must be logged in as an airline staff for this action') return redirect(url_for('main.index')) form = AddAirplaneForm() if form.validate_on_submit(): airline_name = db.session.query(Airline_Staff).filter( Airline_Staff.username == current_user.get_identifier()).first().airline_name plane_id = form.airplane_id.data seat_count = form.seat_count.data if seat_count <= 0: flash('Airplane must have at least one seat') return render_template('/staff/add_airplane.html', form=form) plane = db.session.query(Airplane).filter_by(airline_name=airline_name, id=plane_id).first() if plane is None: new_plane = Airplane(airline_name=airline_name, id=plane_id, seat_count=seat_count) db.session.add(new_plane) db.session.commit() flash('You have added plane ' + str(plane_id) + ' to the system') return redirect(url_for('main.index')) flash('There is already a flight with this ID in your airline') return render_template('staff/add_airplane.html', form=form)
def purchase_flight(): if not current_user.is_authenticated or not current_user.get_type()=='customer': flash('You must be logged in as a customer for this action') return redirect(url_for('main.index')) form=PurchaseFlightForm() if form.validate_on_submit(): if form.departure.data < datetime.now(): flash('Flight must be in the future') return render_template('customer/book_flights.html', form=form) flight=db.session.query(Flight).filter_by(airline_name=form.airline_name.data, flight_num=form.flight_num.data, departure_time=form.departure.data, ).first() if flight is not None: ticket = db.session.query(Ticket).filter(flight.airline_name == Ticket.airline_name).filter( flight.flight_num == Ticket.flight_num).filter( flight.departure_time == Ticket.departure_time).all() num_tickets = len(ticket) airplane = db.session.query(Airplane).filter_by(airline_name=flight.airline_name, id=flight.airplane_id).first() capacity = airplane.seat_count if num_tickets == capacity: flash('This flight is fully booked ') return render_template('customer/book_flights.html', form=form) price = flight.price if num_tickets >= .7 * capacity: price *= 1.2 session['price']=price session['airline']=form.airline_name.data session['flight_num']=form.flight_num.data session['departure']=form.departure.data return redirect('confirm_purchase') flash(u'we need a real flight dawg') return render_template('customer/book_flights.html',form=form)
def your_commission(): if not current_user.is_authenticated or not current_user.get_type( ) == 'agent': flash('You must be logged in as a booking agent for this action') return redirect(url_for('main.index')) form = CommissionForm() if form.validate_on_submit(): start_date = form.start.data end_date = form.end.data earliest = datetime.combine(start_date, datetime.min.time()) print(earliest) latest = datetime.combine(end_date + timedelta(days=1), datetime.min.time()) all_data=db.session.query(Ticket,Purchase).join(Purchase,Ticket.ticket_id==Purchase.ticket_id)\ .filter(Purchase.email_booking==current_user.get_identifier()).filter(Purchase.date>=earliest).all() print('all data:', all_data) data=db.session.query(Ticket,Purchase).join(Purchase,Ticket.ticket_id==Purchase.ticket_id)\ .filter(Purchase.email_booking==current_user.get_identifier()).filter(Purchase.date>=earliest).filter(Purchase.date<=latest).all() total = 0 print('data:', data) ticket_count = 0 for row in data: total += row[0].price ticket_count += 1 total /= 10 if ticket_count == 0: average_commission = 0 else: average_commission = total / ticket_count return render_template('agent/display_commission.html', commission=total, num_tickets=ticket_count, average=average_commission) return render_template('agent/commission_form.html', form=form)
def airline_flights(): if not current_user.is_authenticated or not current_user.get_type( ) == 'staff': flash('You must be logged in as an airline staff for this action') return redirect(url_for('main.index')) form = AirlineFlightsForm() if form.validate_on_submit(): first = aliased(Airport) second = aliased(Airport) earliest = datetime.combine(form.start.data, datetime.min.time()) latest = datetime.combine(form.finish.data + timedelta(days=1), datetime.min.time()) airline_name = db.session.query(Airline_Staff).filter( Airline_Staff.username == current_user.get_identifier()).first().airline_name data = db.session.query(Flight, first, second).join(first, Flight.departs == first.name) \ .join(second, Flight.arrives == second.name). \ filter(Flight.departure_time > earliest).filter(Flight.departure_time < latest).\ filter(Flight.airline_name==airline_name) if len(form.source_city.data) > 0: data = data.filter(first.city == form.source_city.data) if len(form.dest_city.data) > 0: data = data.filter(second.city == form.dest_city.data) if len(form.source_airport.data) > 0: data = data.filter(first.name == form.source_airport.data) if len(form.dest_airport.data) > 0: data = data.filter(second.name == form.dest_airport.data) data = data.all() return render_template('staff/view_airline_flights.html', data=data) return render_template('staff/airline_flights.html', form=form)
def confirm_purchase(): if not current_user.is_authenticated or not current_user.get_type()=='customer': flash('You must be logged in as a customer for this action') return redirect(url_for('main.index')) if ('airline' not in session) or ('flight_num' not in session) or ('departure' not in session): flash('no flight selected') return redirect(url_for('main.index')) airline_name = session.get('airline') flight_num = session.get('flight_num') departure_time = session.get('departure') price=session.get('price') session.pop('airline') session.pop('flight_num') session.pop('departure') session.pop('price') form=ConfirmPurchaseForm() if form.validate_on_submit(): #Create ticket and Purchase objects ticket=Ticket(ticket_id=len(Ticket.query.all()), airline_name=airline_name, flight_num=flight_num, departure_time=departure_time, price=price) purchase=Purchase(ticket_id=ticket.ticket_id, email_customer=current_user.get_identifier(), card_num=form.card_number.data, card_expiration=form.card_expiration.data, date=datetime.now()) db.session.add(ticket) db.session.add(purchase) db.session.commit() flash('Purchase successful :)') return redirect(url_for('main.index')) flight = db.session.query(Flight).filter_by(airline_name=airline_name, flight_num=flight_num, departure_time=departure_time, ).first() arrival_time=flight.arrival_time source=flight.departs destination=flight.arrives session['airline'] = airline_name session['flight_num'] = flight_num session['departure'] = departure_time session['price']=price return render_template('customer/purchase_confirmation.html',form=form, airline_name=airline_name, flight_num=flight_num, departure_time=departure_time, arrival_time=arrival_time, source=source, destination=destination, price=price)
def admin(): if current_user.get_type().lower() == 'admin': #return render_template('admin.html') return redirect( "https://datastudio.google.com/embed/reporting/2eb5bb18-f630-4948-89b7-fb3dc23a3c5f/page/nHKRB" ) else: return 'What are you thinking? you are not an admin'
def index(): if current_user.is_authenticated: user_type = current_user.get_type() print('user type:', user_type) if user_type == 'agent': return render_template('agent_index.html') if user_type == 'customer': return render_template('customer_index.html') if user_type == 'staff': return render_template('staff_index.html') return render_template('index.html')
def index(): print(current_user.get_type().lower()) if current_user.get_type().lower() == 'admin': return redirect(url_for('admin')) products = list(app.config['PRODUCT_COLLECTION'].find().limit(20)) cart_items = app.config['CARTS_COLLECTION'].find( {'CustomerId': current_user.get_int_id()}) cart_item_list = [] cart_item_list_str = [] for i in cart_items: cart_item_list_str.append(i['ProductId']) cart_item_list.append(int(i['ProductId'])) print(cart_item_list) suggestion_ids = suggestions(cart_item_list, new_rules) print(suggestion_ids) suggested_products = app.config['PRODUCT_COLLECTION'].find( {'ProductId': { '$in': list(map(str, suggestion_ids.keys())) }}) return render_template('index.html', products=products, cart_items_list_str=cart_item_list_str, suggested_products=suggested_products)
def add_course(): if not current_user.get_type().__class__.__name__ in [ "Trainer", "TrainingCenter" ]: return redirect(url_for('index')) form = CourseForm() form.trainer.choices = [(current_user.id, current_user.fullname)] # Add choices to trainer field form from the database if form.validate_on_submit(): course = Course.from_form(form) db.session.add(course) db.session.commit() flash("تم تسجيلك") return redirect(url_for('all_courses')) return render_template('_form.html', form=form)
def login(): if request.method == 'POST': user = app.config['USERS_COLLECTION'].find_one( {'CustomerName': request.form['username']}) if user and User.validate_login(user['CustomerPassword'], request.form['password']): user_object = User(user['CustomerName'], user['CustomerType'], user['CustomerId']) login_user(user_object) next = request.args.get('next') print(f'{current_user.get_id()} Logged in successfully!') if current_user.get_type().lower() == 'admin': return redirect(url_for('admin')) return redirect(next or url_for('index')) print('Wrong username or password!') return render_template('login.html')
def dashboard(): if current_user.get_type() is User: reservations = Reservation.query.filter_by( user_email=current_user.get_id()).all() informations = {} slots = Slot.query ordered_reservations = [] for reservation in reservations: slot = slots.filter(Slot.id == reservation.slot_id, Slot.date >= datetime.utcnow().date()).first() if slot is not None: if slot.morning: time = StudyRoom.query.filter_by( id=slot.studyroom_id).first().close_morning close = datetime(year=slot.date.year, month=slot.date.month, day=slot.date.day, hour=time.hour, minute=time.minute) else: time = StudyRoom.query.filter_by( id=slot.studyroom_id).first().close_evening close = datetime(year=slot.date.year, month=slot.date.month, day=slot.date.day, hour=time.hour, minute=time.minute) if datetime.utcnow() < close: studyroom = StudyRoom.query.filter_by( id=slot.studyroom_id).first() informations.update({reservation: [slot, studyroom]}) ordered_reservations = sort_by_date(informations) print ordered_reservations print informations.keys() return render_template('dashboard_user.html', title='Welcome to your profile', informations=informations, ordered_reservations=ordered_reservations) else: studyrooms = StudyRoom.query.filter_by( owner_id_email=current_user.get_id()).all() return render_template('dashboard_owner.html', title='Welcome to your profile', studyrooms=studyrooms)
def add_airport(): if not current_user.is_authenticated or not current_user.get_type( ) == 'staff': flash('You must be logged in as an airline staff for this action') return redirect(url_for('main.index')) form = AddAirportForm() if form.validate_on_submit(): name = form.name.data city = form.city.data airport = db.session.query(Airport).filter_by(name=name).first() if airport is None: new_airport = Airport(name=name, city=city) db.session.add(new_airport) db.session.commit() flash('Added airport') return redirect(url_for('main.index')) flash('There is already an airport with that name') return render_template('staff/add_airport.html', form=form)
def viewflightratings(): if not current_user.is_authenticated or not current_user.get_type( ) == 'staff': flash('You must be logged in as an airline staff for this action') return redirect(url_for('main.index')) staff_airline_table = Airline_Staff.query.filter( Airline_Staff.username == current_user.get_identifier()).first() staff_airline = staff_airline_table.airline_name ave_ticket_ratings=Ticket.query.join(Purchase, \ Ticket.ticket_id==Purchase.ticket_id)\ .add_columns(Ticket.airline_name.label('airline_name'),\ Ticket.flight_num.label('flight_num'),\ Ticket.departure_time.label('departure_time'),\ Purchase.rating.label('rating'),\ Purchase.comment.label('comment'))\ .with_entities(Ticket.flight_num.label('flight_num'),\ Ticket.departure_time.label('departure_time'),\ sql_func.avg(Purchase.rating).label("ave_rating"))\ .group_by(Ticket.flight_num,Ticket.departure_time)\ .filter(Ticket.airline_name==staff_airline)\ .filter(Purchase.rating!=None) ticket_rating_comment=Ticket.query.join(Purchase, \ Ticket.ticket_id==Purchase.ticket_id)\ .add_columns(Ticket.airline_name.label('airline_name'),\ Ticket.flight_num.label('flight_num'),\ Ticket.departure_time.label('departure_time'),\ Purchase.rating.label('rating'),\ Purchase.comment.label('comment'))\ .with_entities(Ticket.flight_num.label('flight_num'),\ Ticket.departure_time.label('departure_time'),\ Purchase.rating.label('rating'),\ Purchase.comment.label('comment'))\ .filter(Ticket.airline_name==staff_airline)\ .filter(or_(Purchase.rating!=None, Purchase.comment!=None, Purchase.comment!='')) return render_template('staff/viewflightratings.html',\ ave_ticket_ratings=ave_ticket_ratings,\ ticket_rating_comment=ticket_rating_comment)
def view_customer_flights(): if not current_user.is_authenticated or not current_user.get_type( ) == 'staff': flash('You must be logged in as an airline staff for this action') return redirect(url_for('main.index')) email = session.get('email') session.pop('email') airline_name = db.session.query(Airline_Staff).filter( Airline_Staff.username == current_user.get_identifier()).first().airline_name data=db.session.query(Purchase,Ticket,Flight).join(Ticket,Ticket.ticket_id==Purchase.ticket_id).\ join(Flight,Flight.airline_name==Ticket.airline_name).filter(Flight.flight_num==Ticket.flight_num).\ filter(Flight.departure_time==Ticket.departure_time).\ filter(Ticket.airline_name==airline_name).order_by(Ticket.departure_time).filter(Purchase.email_customer==email) data = data.all() session['email'] = email return render_template('staff/view_customer_flights.html', data=data, email=email)
def view_cart(): if current_user.get_type() == 'admin': return '<p class="text-dark">Dude... why do you have a cart? you are admin xD</p> <a href="/admin" class="text-dark">GoTo admin</a>' cart_items = app.config['CARTS_COLLECTION'].find( {'CustomerId': current_user.get_int_id()}) cart_item_ids = [] quantity = [] count = 0 for i in cart_items: cart_item_ids.append(i['ProductId']) quantity.append(i['Quantity']) count += 1 if count == 0: return '<p class="text-dark">Nothing here... Cart is empty</p> <a href="/" class="text-dark">Go back and do some shopping</a>' cart_products = app.config['PRODUCT_COLLECTION'].find( {'ProductId': { '$in': cart_item_ids }}) cart_products = dict(zip(quantity, cart_products)) print(type(cart_products)) return render_template('cart.html', cart_products=cart_products)
def passenger_list(): if not current_user.is_authenticated or not current_user.get_type( ) == 'staff': flash('You must be logged in as an airline staff for this action') return redirect(url_for('main.index')) form = PassengerListForm() airline_name = db.session.query(Airline_Staff).filter( Airline_Staff.username == current_user.get_identifier()).first().airline_name if form.validate_on_submit(): flight_num = form.flight_num.data departure_time = form.departure_time.data flight = db.session.query(Flight).filter_by( airline_name=airline_name, flight_num=flight_num, departure_time=departure_time).first() if flight is not None: data=db.session.query(Purchase.email_customer).join(Ticket,Ticket.ticket_id==Purchase.ticket_id).\ filter(Ticket.airline_name==airline_name,Ticket.flight_num==flight_num,Ticket.departure_time==departure_time).distinct().all() return render_template('staff/view_passenger_list.html', data=data) return render_template('staff/passenger_list.html', form=form)
def change_flight_status(): if not current_user.is_authenticated or not current_user.get_type( ) == 'staff': flash('You must be logged in as an airline staff for this action') return redirect(url_for('main.index')) form = ChangeStatusForm() if form.validate_on_submit(): airline_name = db.session.query(Airline_Staff).filter( Airline_Staff.username == current_user.get_identifier()).first().airline_name flight_num = form.flight_num.data departure_time = form.departure_time.data flight = db.session.query(Flight).filter_by( airline_name=airline_name, flight_num=flight_num, departure_time=departure_time).first() if flight is not None: flight.status = form.new_status.data db.session.commit() flash('Updated status to:' + form.new_status.data) return redirect(url_for('main.index')) flash('Could not find this flight for your airline') return render_template('staff/change_flight_status.html', form=form)
def decorated_function(*args, **kwargs): if current_user.get_type() == 'Patient': return redirect(url_for('page_not_found')) return f(*args, **kwargs)
def ratings(): if not current_user.is_authenticated or not current_user.get_type()=='customer': flash('You must be logged in as a customer for this action') return redirect(url_for('main.index')) # display completed flights of that user on the form page #completedflights=Purchase.query.join(Ticket, Purchase.ticket_id==Ticket.ticket_id).add_columns(Ticket.airline_name, Ticket.flight_num, Ticket.departure_time) Purchase.email_customer.label('email_customer'), Purchase.date.label('date'), Ticket.price.label('price')).filter(Purchase.email_customer==current_user.get_id().split('_')[1:]) # display past ratings and comments past_flights=Ticket.query.join(Purchase, Ticket.ticket_id==Purchase.ticket_id)\ .join(Flight, Ticket.airline_name==Flight.airline_name)\ .add_columns(Ticket.airline_name.label("airline_name"),\ Ticket.ticket_id.label("ticket_id"),\ Ticket.flight_num.label("flight_num"),\ Ticket.departure_time.label("departure_time"),\ Purchase.rating.label("rating"),\ Purchase.comment.label("comment"))\ .filter(Flight.arrival_time<datetime.now())\ .filter(Purchase.email_customer==current_user.get_identifier())\ .filter(Ticket.departure_time==Flight.departure_time)\ .filter(Ticket.flight_num==Flight.flight_num) #result=past_flights.ticket_id form = CompletedFlights() if form.validate_on_submit(): if form.rating.data is not None and (form.rating.data<0 or form.rating.data>5): flash('Please enter a rating between 0 and 5') #return render_template('customer/selecttorate.html', past_flights=past_flights, form=form) airline_name=form.airline_name.data flight_num=form.flight_num.data departure_time=form.departure.data check=db.session.query(Purchase)\ .join(Ticket, Purchase.ticket_id==Ticket.ticket_id)\ .join(Flight, Ticket.flight_num==Flight.flight_num)\ .filter(Ticket.airline_name==Flight.airline_name)\ .filter(Ticket.departure_time==Flight.departure_time)\ .filter(Purchase.email_customer==current_user.get_identifier())\ .filter(Flight.arrival_time<datetime.now())\ .filter(Flight.airline_name==airline_name)\ .filter(Flight.flight_num==flight_num)\ .filter(Flight.departure_time==departure_time).first() # flight=db.session.query(Flight).filter_by(airline_name=airline_name,flight_num=flight_num,departure_time=departure_time).first() # if flight is not None: # flight.status=form.new_status.data # db.session.commit() # flash('Updated status to:'+form.new_status.data) # # purchased_flight=db # if check is not None: tick=check.ticket_id purchased_flight=db.session.query(Purchase).filter_by(ticket_id=tick).first() if form.rating.data is not None and form.rating.data>0 and form.rating.data<=5: purchased_flight.rating=form.rating.data db.session.commit() flash('Rating Updated to '+str(form.rating.data)) else: flash('Rating Not Updated') if form.comment.data is not None: purchased_flight.comment=form.comment.data db.session.commit() flash('Comment Updated to '+form.comment.data) # db.session.add(check) # db.commit() # session['ticket_id']=ticket_id # # if check is not None: # # # return redirect('rate') # # create new form to comment # # do return redirect to page to comment # # flash('Flight not completed') return redirect(url_for('main.index')) return render_template('customer/selecttorate.html', past_flights=past_flights, form=form)
def add_flight(): if not current_user.is_authenticated or not current_user.get_type( ) == 'staff': flash('You must be logged in as an airline staff for this action') return redirect(url_for('main.index')) form = AddFlightForm() if form.validate_on_submit(): airline_name = db.session.query(Airline_Staff).filter( Airline_Staff.username == current_user.get_identifier()).first().airline_name flight_num = form.flight_num.data departure_time = form.departure_time.data arrival_time = form.arrival_time.data price = form.price.data status = form.status.data departs = form.departs.data arrives = form.arrives.data airplane_id = form.airplane_id.data if not departure_time > datetime.now(): flash('Flight must be in the future') return render_template('/staff/add_flight.html', form=form) flight = db.session.query(Flight).filter_by( airline_name=airline_name, flight_num=flight_num, departure_time=departure_time).first() if flight is not None: flash( 'There is already a flight with that number and departure time in your airline' ) return render_template('staff/add_flight.html', form=form) airplane = db.session.query(Airplane).filter_by( airline_name=airline_name, id=airplane_id).first() if departure_time > arrival_time: flash('arrival must be after departure') return render_template('staff/add_flight.html', form=form) if airplane is None: flash('There is no airplane with this id in your airline') return render_template('staff/add_flight.html', form=form) departs_airport = db.session.query(Airport).filter_by( name=departs).first() if departs_airport is None: flash('There is no airport with this name(departure airport)') return render_template('staff/add_flight.html', form=form) arrives_airport = db.session.query(Airport).filter_by( name=arrives).first() if arrives_airport is None: flash('There is no airport with this name(arrival airport)') return render_template('staff/add_flight.html', form=form) new_flight = Flight(airline_name=airline_name, flight_num=flight_num, departure_time=departure_time, arrival_time=arrival_time, price=price, status=status, departs=departs, arrives=arrives, airplane_id=airplane_id) db.session.add(new_flight) db.session.commit() flash('Added Flight') return redirect(url_for('main.index')) return render_template('staff/add_flight.html', form=form)
def revenuecomparison(): if not current_user.is_authenticated or not current_user.get_type( ) == 'staff': flash('You must be logged in as an airline staff for this action') return redirect(url_for('main.index')) staff_airline_table = Airline_Staff.query.filter( Airline_Staff.username == current_user.get_identifier()).first() staff_airline = staff_airline_table.airline_name # last month date_last_month = datetime.now() - timedelta(days=30) cust_last_month=Purchase.query.join(Ticket,\ Purchase.ticket_id==Ticket.ticket_id)\ .with_entities(sql_func.sum(Ticket.price).label("sum_month_cust"))\ .filter(Ticket.airline_name==staff_airline)\ .filter(Purchase.date>date_last_month)\ .filter(Purchase.email_booking==None) cust_last_month_value = cust_last_month[0][0] booking_last_month=Purchase.query.join(Ticket,\ Purchase.ticket_id==Ticket.ticket_id)\ .with_entities(sql_func.sum(Ticket.price).label("sum_month_book"))\ .filter(Ticket.airline_name==staff_airline)\ .filter(Purchase.date>date_last_month)\ .filter(Purchase.email_booking!=None) booking_last_month_value = booking_last_month[0][0] values_month = [cust_last_month_value, booking_last_month_value] message_month = "Revenue Comparison (Last Month)" if values_month == [None, None]: message_month = "No Revenue this Last Month" for i in range(len(values_month)): if values_month[i] == None: values_month[i] = (0) labels = ["Direct Revenue", "Indirect Revenue (includes Commission)"] # last year date_last_year = datetime.now() - timedelta(days=365) cust_last_year=Purchase.query.join(Ticket,\ Purchase.ticket_id==Ticket.ticket_id)\ .with_entities(sql_func.sum(Ticket.price).label("sum_year_cust"))\ .filter(Ticket.airline_name==staff_airline)\ .filter(Purchase.date>date_last_year)\ .filter(Purchase.email_booking==None) cust_last_year_value = cust_last_year[0][0] booking_last_year=Purchase.query.join(Ticket,\ Purchase.ticket_id==Ticket.ticket_id)\ .with_entities(sql_func.sum(Ticket.price).label("sum_year_book"))\ .filter(Ticket.airline_name==staff_airline)\ .filter(Purchase.date>date_last_year)\ .filter(Purchase.email_booking!=None) booking_last_year_value = booking_last_year[0][0] values_year = [cust_last_year_value, booking_last_year_value] message_year = "Revenue Comparison (Last Year)" if values_year == [None, None]: message_year = "No Revenue this Last Year" for i in range(len(values_year)): if values_year[i] == None: values_year[i] = (0) #colors=["#F7464A", "#46BFBD"] colors = ["#F7464A", "#800000"] return render_template('staff/revenuecomparison.html',\ booking_last_month=booking_last_month,\ cust_last_month=cust_last_month,\ cust_last_month_value=cust_last_month_value,\ booking_last_month_value=booking_last_month_value,\ set_month=zip(values_month, labels, colors),\ max_month=max(values_month),\ set_year=zip(values_year, labels, colors),\ max_year=max(values_year), \ message_month=message_month,\ message_year=message_year)
def spending(): if not current_user.is_authenticated or not current_user.get_type()=='customer': flash('You must be logged in as a customer for this action') return redirect(url_for('main.index')) # default part # date one year ago one_year_ago = datetime.now() - timedelta(days=365) # table purchases within past year default_total_table=Purchase.query.join(Ticket, Purchase.ticket_id==Ticket.ticket_id)\ .add_columns(Purchase.email_customer.label('email_customer'), Purchase.date.label('date'), Ticket.price.label('price'))\ .filter(Purchase.email_customer==current_user.get_identifier())\ .filter(Purchase.date>one_year_ago) # sum for all purchases last year default_total_sum_table=Purchase.query.join(Ticket, Purchase.ticket_id==Ticket.ticket_id).with_entities(func.sum(Ticket.price).label('all_sum')).filter(Purchase.email_customer==current_user.get_identifier()).filter(Purchase.date>one_year_ago).first() default_total_sum=default_total_sum_table.all_sum if default_total_sum==None: default_total_sum=0 query_list_months=intervals_for_num_months(datetime.now(), 6) graph_labels=make_list_labels(query_list_months) monthly_sums=[] # .filter(Purchase.email_customer==current_user.get_id().split('_')[1:])\ for i in range(len(query_list_months)-1): default_month=Purchase.query.join(Ticket, Purchase.ticket_id==Ticket.ticket_id)\ .with_entities(func.sum(Ticket.price).label('all_sum'))\ .filter(Purchase.email_customer==current_user.get_identifier())\ .filter(Purchase.date>query_list_months[i])\ .filter(Purchase.date<query_list_months[i+1]).first() default_month_sum=default_month.all_sum if default_month_sum==None: default_month_sum=0 monthly_sums.append(default_month_sum) form=SpendingForm() if form.validate_on_submit(): inputed_start_date=form.start.data start_date=date_past=datetime.strptime(str(inputed_start_date), '%Y-%m-%d') inputed_end_date=form.end.data end_date=date_past=datetime.strptime(str(inputed_end_date), '%Y-%m-%d') if end_date<=start_date: flash('Invalid date range') # sum for all purchases from that period period_table=Purchase.query.join(Ticket, Purchase.ticket_id==Ticket.ticket_id)\ .with_entities(func.sum(Ticket.price).label('all_sum'))\ .filter(Purchase.email_customer==current_user.get_identifier())\ .filter(Purchase.date>=start_date)\ .filter(Purchase.date<=end_date).first() period_table_sum=period_table.all_sum if period_table_sum==None: period_table_sum=0 #query_ranges=intervals_for_range(end_date, start_date-timedelta(seconds=1)) query_ranges=intervals_for_range(end_date, start_date) ranges_labels=make_list_labels(query_ranges) sums=[] for i in range(len(query_ranges)-1): thrity_days=Purchase.query.join(Ticket, Purchase.ticket_id==Ticket.ticket_id)\ .with_entities(func.sum(Ticket.price).label('all_sum'))\ .filter(Purchase.email_customer==current_user.get_identifier())\ .filter(Purchase.date>=query_ranges[i])\ .filter(Purchase.date<query_ranges[i+1]).first() thrity_days_sums=thrity_days.all_sum if thrity_days_sums==None: thrity_days_sums=0 sums.append(thrity_days_sums) return render_template('customer/spending_from_form.html',\ period_table_sum=period_table_sum,\ sums=sums,\ query_ranges=query_ranges,\ ranges_labels=ranges_labels,\ max_ranges=max(sums),\ start_date=start_date,end_date=end_date) return render_template('customer/spending.html',\ default_total_sum=default_total_sum,\ monthly_sums=monthly_sums,\ query_list_months=query_list_months,\ graph_labels=graph_labels,\ max_default=max(monthly_sums),\ form=form)
def profile(id): if id != current_user.get_id() and is_user(id) and system.get_user(id).get_type() == current_user.get_type() \ and id != current_user.email: return redirect(url_for('page_not_found')) history = [] if is_user(id): info, contains = system.get_user_profile(id) if info['type'] == 'Patient': history = system.get_patient_history_with_health_provider(id, current_user.email) else: info, contains = system.get_health_centre_profile(id) if request.method == 'POST': if 'refer' in request.form: referred_email = request.form['referred'] user = system.get_user(referred_email) if user is not None and user.get_type() != 'Patient': patient = system.get_user(id) patient.refers[current_user.email] = referred_email else: errors = {'refer': 'Health Provider not exists'} return render_template('profile.html', info=info, contains=contains, errors=errors, history=history) elif 'appointment' in request.form: if is_user(id): return redirect(url_for('book_appointment', abn=request.form['appointment'], email=id)) else: return redirect(url_for('book_appointment', email=request.form['appointment'], abn=id)) elif 'rate' in request.form: if is_user(id): system.get_user(id).add_rating(current_user.email, int(request.form['rating'])) else: system.get_health_centre(id).add_rating(current_user.email, int(request.form['rating'])) elif 'service' in request.form: service = request.form['service'] return render_template('profile.html', info=info, contains=contains, history=history) return render_template('profile.html', info=info, contains=contains, history=history)
def viewbookingagents(): if not current_user.is_authenticated or not current_user.get_type( ) == 'staff': flash('You must be logged in as an airline staff for this action') return redirect(url_for('main.index')) # staff_airline_table=Airline_Staff.query.filter(Airline_Staff.username==current_user.get_id().split('_')[1:]).first() staff_airline_table = Airline_Staff.query.filter( Airline_Staff.username == current_user.get_identifier()).first() staff_airline = staff_airline_table.airline_name agent_purchased_ticket = Purchase.query.join( Ticket, Purchase.ticket_id == Ticket.ticket_id).add_columns( Purchase.email_booking.label('email_booking'), Purchase.date.label('date'), Ticket.airline_name.label('airline_name')).filter( Ticket.airline_name == staff_airline).filter( Purchase.email_booking != None) # top 5 agents based on num of tickets - past month (last 30 days) date_30_days_ago = datetime.now() - timedelta(days=30) date_365_days_ago = datetime.now() - timedelta(days=365) agent_purchased_ticket_30_days = Purchase.query.join( Ticket, Purchase.ticket_id == Ticket.ticket_id).add_columns( Purchase.email_booking.label('email_booking'), Purchase.date.label('date'), Ticket.airline_name.label('airline_name')).filter( Ticket.airline_name == staff_airline).filter( Purchase.email_booking != None).filter( Purchase.date > date_30_days_ago) grouped_agent_purchased_ticket_30_days = Purchase.query.join( Ticket, Purchase.ticket_id == Ticket.ticket_id).add_columns( Purchase.email_booking.label('email_booking'), Purchase.date.label('date'), Ticket.airline_name.label('airline_name')).with_entities( Purchase.email_booking, sql_func.count( Purchase.email_booking).label("count")).group_by( Purchase.email_booking).filter( Ticket.airline_name == staff_airline).filter( Purchase.email_booking != None).filter( Purchase.date > date_30_days_ago).order_by( desc("count"))[:5] # top 5 based on num of tickets - past year (last 365 days) grouped_agent_purchased_ticket_one_year = Purchase.query.join( Ticket, Purchase.ticket_id == Ticket.ticket_id).add_columns( Purchase.email_booking.label('email_booking'), Purchase.date.label('date'), Ticket.airline_name.label('airline_name')).with_entities( Purchase.email_booking, sql_func.count(Purchase.email_booking).label( "count")).group_by(Purchase.email_booking).filter( Ticket.airline_name == staff_airline).filter( Purchase.email_booking != None).filter( Purchase.date > date_365_days_ago).order_by( desc("count"))[:5] # order_by("count")[:5] # commissions_grouped_agent = Purchase.query.join( Ticket, Purchase.ticket_id == Ticket.ticket_id).add_columns( Purchase.email_booking.label('email_booking'), Purchase.date.label('date'), Ticket.airline_name.label('airline_name'), Ticket.price.label('price')).with_entities( Purchase.email_booking.label('email_booking'), (sql_func.sum(Ticket.price) / 10).label("total_commission")).group_by( Purchase.email_booking).filter( Ticket.airline_name == staff_airline).filter( Purchase.email_booking != None).filter( Purchase.date > date_365_days_ago).order_by( desc("total_commission"))[:5] return render_template('staff/viewbookingagents.html', \ staff_airline=staff_airline,\ agent_purchased_ticket_30_days=agent_purchased_ticket_30_days,\ agent_purchased_ticket=agent_purchased_ticket,\ grouped_agent_purchased_ticket_30_days=grouped_agent_purchased_ticket_30_days,\ grouped_agent_purchased_ticket_one_year=grouped_agent_purchased_ticket_one_year,\ commissions_grouped_agent=commissions_grouped_agent)