def payment_confirmation(bid):

    confirm = False
    if bid[-1] == 'c':
        bid = bid[0:-1]
        confirm = True

    fees = []

    booking = Booking()
    if not booking.fetch(bid):
        return redirect(url_for('IndexController.index'))

    movie = Movie()
    movie = movie.obj_as_dict(booking.get_movie_id())
    showtime = Showtime()
    showtime.fetch(booking.get_showtime_id())
    showroom = Showroom()
    showroom.fetch(showtime.get_showroom_id())

    tkts = booking.get_tickets()
    tickets = []
    for t in tkts:
        t = dict(t)
        t['seat_number'] = format_seat(t['seat_number'])
        tickets.append(t)

    booking = dict(booking.obj_as_dict(bid))
    booking['order_date'] = create_datetime_from_sql(booking['order_date'])
    booking['total_price'] = format_price(booking['total_price'])
    return render_template('confirmation.html',
                           tickets=tickets,
                           fees=fees,
                           movie=movie,
                           showtime=showtime.get_time(),
                           booking=booking,
                           confirm=confirm,
                           showroom=showroom.get_showroom_name())
Beispiel #2
0
def create_review(mid):
    # tell them what movie it is for
    movie = Movie()
    movie = movie.obj_as_dict(mid)

    if request.method == 'POST':
        rating = request.form['rating']
        title = request.form['title']
        review = request.form['review']

        error = None
        if not validate_duration(rating):
            error = "Rating is invalid"
        elif not validate_name(title):
            error = "Title is invalid"
        elif not validate_text(review):
            error = "Review is invalid"

        if error is None:
            # write it to the db
            customer = create_user('customer')
            # customer login required ensures this will work
            customer.fetch(g.user['username'])
            review_model = Review()
            review_model.create(customer_id=customer.get_id(),
                                movie_id=movie['movie_id'],
                                rating=int(rating),
                                subject=title,
                                review=review)

            return redirect(
                url_for('MovieController.movie_details',
                        mid=movie['movie_id']))

        flash(error)

    return render_template('create_review.html', movie=movie)
Beispiel #3
0
def movie_details(mid):
    print(mid)

    clear_all_booking()

    movie = Movie()
    movie_dict = {}
    if movie.fetch(mid):
        movie_dict = movie.obj_as_dict(mid)
        movie_dict = dict(movie_dict)

        showtimes = movie.get_all_showtimes()
    else:
        return render_template('index.html')

    showtimes_list = []
    for showtime in showtimes:
        showtime = dict(showtime)
        showtime['time'] = create_datetime_from_sql(showtime['time'])
        if validate_showtime(showtime['available_seats'], showtime['time']):
            showtimes_list.append(showtime)

    showtimes_list = sorted(showtimes_list, key=lambda k: k['time'])

    # for each review
    review_model = Review()

    if request.method == 'POST':
        review_id = request.form.get('review_id')
        if review_id != '':
            review_model.delete(review_id)

        showtime_id = request.form.get('showtime')
        if showtime_id != '':
            session['showtime'] = showtime_id
            print("showtime")
            print(showtime_id)
            return redirect(url_for('SeatSelectionController.select_seat'))

    reviews = review_model.get_all_reviews_by_movie(mid)
    display_reviews = []
    ratings = []
    average = None
    if len(reviews) > 0:
        for review in reviews:
            rvw = dict(review)
            rvw['name'] = review_model.get_customer_name(rvw['customer_id'])
            ratings.append(int(rvw['rating']))
            print(rvw['name'])
            display_reviews.append(rvw)
        average = sum(ratings) / len(ratings)
    else:
        rev = {
            'title':
            "There's no reviews yet?",
            'name':
            "E-Cinema Booking Team",
            'rating':
            5,
            'review':
            "There are no reviews for this movie yet. You can click on the review movie button below to be the first!"
        }
        display_reviews.append(rev)

    return render_template('single-product.html',
                           movie=movie_dict,
                           showtimes=showtimes_list,
                           is_current=len(showtimes) > 0,
                           reviews=display_reviews,
                           average=average)
Beispiel #4
0
def checkout():

    if (not session.get('showtime') or
        not session.get('tickets') or
            not g.user.get('username')):
        return redirect(url_for('IndexController.index'))

    if request.method == 'POST':
        delete_id = request.form.get('delete_ticket')

        if request.form.get('coupon'):
            promo = Promo()
            session['promo'], error = apply_promo(promo)
            if error is not None:
                flash(error)
        elif delete_id:
            if not delete_ticket(delete_id):
                return redirect(url_for('BookingController.cancel_booking'))
        elif request.form.get('add_payment'):
            session['checkout'] = True
            return redirect(url_for('AccountController.make_payment'))
        elif request.form.get('checkout'):
            if request.form.get('card_id'):
                bid = create_booking_objects()
                clear_booking_info()
                return redirect(
                    url_for('BookingController.payment_confirmation', bid=bid))
            else:
                flash("Please choose a payment card to proceed with checkout")
        elif request.form.get('cancel'):
            clear_booking_info()
            return redirect(url_for('IndexController.index'))

    customer = create_user('customer')
    customer.fetch(g.user['username'])
    cards = customer.get_all_cards()

    showtime = Showtime()
    showtime.fetch(session['showtime'])

    movie = Movie()
    movie.fetch(showtime.get_movie_id())

    tickets, subtotal = clean_tickets(session['tickets'])

    # Returns a 2D array of tickets
    # each list is a different type
    all_tickets = get_ticket_type_lists(tickets)

    fees, total = calculate_fees_and_total(subtotal)
    session['total'] = total

    total = format_price(total)
    subtotal = format_price(subtotal)

    return render_template('checkout.html',
                           showtime=showtime.get_time(),
                           movie=movie.obj_as_dict(movie.get_id()),
                           tickets=all_tickets,
                           subtotal=subtotal,
                           total=total,
                           fees=fees,
                           cards=cards)
Beispiel #5
0
def edit_movie(mid):
    movie_id = mid
    movie = Movie()
    print(movie.fetch(movie_id))

    if request.method == 'POST':
        title = request.form.get('title')
        director = request.form.get('director')
        producer = request.form.get('producer')
        cast = request.form.get('cast')
        duration = request.form.get('duration')
        synopsis = request.form.get('synopsis')
        rating = request.form.get('rating')
        category = request.form.get('category')
        video = request.form.get('video')
        picture = request.form.get('picture')

        error = None
        print(title)
        if title != '' and not validate_name(title):
            error = "Movie title is too short or too long"
        elif title != '':
            movie.set_title(title)

        if director != '' and not validate_name(director):
            error = "Director name is too short or too long"
        elif director != '':
            movie.set_director(director)

        if producer != '' and not validate_name(producer):
            error = "Producer name is too short or too long"
        elif producer != '':
            movie.set_producer(producer)

        if cast != '' and not validate_name(cast):
            error = "Cast name is too short or too long"
        elif cast != '':
            movie.set_cast(cast)

        if duration != '' and not validate_duration(duration):
            error = "Duration must be a whole number"
        elif duration != '':
            movie.set_duration(int(duration))

        if synopsis != '' and not validate_text(synopsis):
            error = "Synopsis is too long"
        elif synopsis != '':
            movie.set_synopsis(synopsis)

        if rating is not None and not validate_rating(rating):
            error = "Invalid rating"
        elif rating is not None:
            movie.set_rating(rating)

        if category is not None and not validate_category(category):
            error = "Invalid category"
        elif category is not None:
            movie.set_category(category)

        if video != '' and video.isspace():
            error = "Video link is required"
        elif video != '':
            movie.set_video(video)

        if picture != '' and picture.isspace():
            error = "Picture link is required"
        elif picture != '':
            movie.set_picture(picture)

        movie.save()

        if error is not None:
            flash(error)

    info = movie.obj_as_dict(movie_id)
    return render_template('edit_movie.html', movie=info)