Esempio n. 1
0
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')
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
0
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)
Esempio n. 6
0
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)
Esempio n. 7
0
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)
Esempio n. 8
0
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)
Esempio n. 9
0
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)
Esempio n. 10
0
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)
Esempio n. 11
0
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)
Esempio n. 12
0
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'
Esempio n. 13
0
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')
Esempio n. 14
0
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)
Esempio n. 15
0
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)
Esempio n. 16
0
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')
Esempio n. 17
0
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)
Esempio n. 18
0
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)
Esempio n. 19
0
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)
Esempio n. 20
0
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)
Esempio n. 21
0
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)
Esempio n. 22
0
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)
Esempio n. 23
0
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)
Esempio n. 24
0
 def decorated_function(*args, **kwargs):
     if current_user.get_type() == 'Patient':
         return redirect(url_for('page_not_found'))
     return f(*args, **kwargs)
Esempio n. 25
0
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)
Esempio n. 26
0
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)
Esempio n. 27
0
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)
Esempio n. 28
0
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)
Esempio n. 29
0
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)
Esempio n. 30
0
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)