Example #1
0
def refund_booking(bid):
    # clean up
    # delete all tickets, reset showtime incrementer
    booking = Booking()
    if not booking.fetch(bid):
        return redirect(url_for('IndexController.index'))
    total = booking.get_total_price()

    movie = Movie()
    movie.fetch(booking.get_movie_id())
    movie_title = movie.get_title()

    tickets = booking.get_tickets()
    ticket_count = len(tickets)

    # delete individual ticket objects
    ticket_obj = Ticket()
    for ticket in tickets:
        ticket_obj.delete(ticket['ticket_id'])

    # delete the actual booking object
    showtime = booking.get_showtime_id()
    booking.delete(bid)

    # reset showtime seats
    showtime_obj = Showtime()
    showtime_obj.fetch(showtime)
    showtime_obj.increment_available_seats(ticket_count)
    time = showtime_obj.get_time().strftime('%I:%M %p  :  %B %d, %Y')
    showtime_obj.save()

    # send an email!
    customer = create_user('customer')
    customer.fetch(g.user['username'])
    customer.send_refund_email(movie_title, time, format_price(total))
Example #2
0
def create_showtime():
    movie = Movie()
    movies = movie.get_all_movies()
    showroom = Showroom()
    showrooms = showroom.get_all_showrooms()

    if request.method == 'POST':

        date = request.form['date']
        time = request.form['time']
        movie_id = request.form['movie_id']
        showroom_id = request.form['showroom_id']

        # validate all data, everything must be correct
        error = None

        movie = Movie()
        validate_movie = movie.fetch(movie_id)

        # convert date and time into a datetime object
        dtime = create_datetime(date, time)

        if dtime is None:
            error = "Time is invalid"
        elif not validate_showtime_date(dtime):
            error = "Time is in the past"
        elif not validate_movie:
            error = "The selected movie is invalid"
        elif not validate_showroom_availability(showroom_id, 0, dtime,
                                                int(movie.get_duration())):
            error = "The showroom is unavailable at that time"

        if error is None:
            # if error is None, create a showtime
            new_showtime = Showtime()
            showroom = Showroom()
            showroom.fetch(showroom_id)
            movie.set_status('active')
            movie.save()

            new_showtime.create(showroom_id=showroom_id,
                                time=dtime,
                                movie_id=movie_id,
                                available_seats=showroom.get_num_seats())

            # then return to add showtime
            return redirect(url_for('AdminShowtimeController.manage_showtime'))

        flash(error)

    return render_template('make_showtime.html',
                           movies=movies,
                           showrooms=showrooms)
Example #3
0
def send_confirmation_email(order_id, total):
    customer = get_current_customer()

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

    movie = get_movie_by_showtime(showtime_id)

    time = showtime.get_time().strftime("%B %d, %Y  at %I:%M %p")
    customer.send_booking_email(movie.get_title(), time,
                                order_id, total,
                                generate_tickets_email())
Example #4
0
def reset_available_seats():
    if not session.get('showtime'):
        print("Error resetting available seats")

    if not session.get('ticket_ids') or not session.get('showtime'):
        return

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

    reset_len = len(session['ticket_ids'])
    avail = showtime.get_available_seats()
    new_avail = avail + reset_len
    showtime.set_available_seats(new_avail)
    showtime.save()
Example #5
0
def manage_showtime():
    showtime = Showtime()

    if request.method == 'POST':
        delete_showtime_id = request.form.get('delete_showtime_id')
        edit_showtime_id = request.form.get('edit_showtime_id')

        if delete_showtime_id is not None and showtime.fetch(
                delete_showtime_id):
            # logic for cancelling tickets will go here?
            if not safe_delete(showtime):
                flash("Cannot delete showtime, it has associated bookings")
        elif edit_showtime_id is not None and showtime.fetch(edit_showtime_id):
            return redirect(
                url_for('AdminShowtimeController.edit_showtime',
                        sid=edit_showtime_id))

    # get a list of all showtimes
    showtimes = showtime.get_all_showtimes()
    new_times = []

    for time in showtimes:
        time = dict(time)
        movie = Movie()
        movie.fetch(time['movie_id'])

        showroom = Showroom()
        showroom.fetch(time['showroom_id'])

        time['time'] = create_datetime_from_sql(time['time'])
        time['movie_title'] = movie.get_title()
        time['duration'] = movie.get_duration()
        time['showroom_name'] = showroom.get_showroom_name()

        new_times.append(time)

    # show newest times first
    new_times = sorted(new_times, key=lambda k: k['time'])

    return render_template('manage_showtime.html', showtimes=new_times)
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())
Example #7
0
def process_bookings(bookings):
    refund_info = {}
    refunds = []

    for booking in bookings:
        refund_info['order_no'] = booking['order_id']
        refund_info['total'] = format_price(booking['total_price'])
        refund_info['bid'] = booking['booking_id']

        # get tickets
        booking_obj = Booking()
        booking_obj.fetch(booking['booking_id'])
        tickets = booking_obj.get_tickets()
        refund_info['tickets'] = process_tickets(tickets)

        movie = Movie()
        movie.fetch(booking['movie_id'])
        refund_info['movie_title'] = movie.get_title()

        showtime = Showtime()
        print(showtime.fetch(booking['showtime_id']))
        print(booking['showtime_id'])
        refund_info['date'] = showtime.get_time()
        print(showtime.get_time())

        now = datetime.datetime.now()
        hour = datetime.timedelta(hours=1)
        if now + hour > showtime.get_time():
            refund_info['is_refundable'] = False
        else:
            refund_info['is_refundable'] = True

        refunds.append(dict(refund_info))

    # sort here
    refunds = sorted(refunds, key=lambda k: k['date'], reverse=True)
    return refunds
Example #8
0
def edit_showtime(sid):
    showtime_id = sid
    showtime = Showtime()
    if not showtime.fetch(showtime_id):
        print("Error fetching showtime??")

    movie = Movie()
    movies = movie.get_all_movies()
    movie.fetch(showtime.get_movie_id())
    showroom = Showroom()
    showrooms = showroom.get_all_showrooms()
    showroom.fetch(showtime.get_showroom_id())

    if request.method == 'POST':
        date = request.form.get('date')
        time = request.form.get('time')
        available_seats = request.form.get('available_seats')
        movie_id = request.form.get('movie_id')
        showroom_id = request.form.get('showroom_id')

        print(date)
        print(time)
        print(available_seats)
        print(movie_id)
        print(showroom_id)
        error = None

        dtime = create_datetime(date, time)

        if not validate_showtime_date(dtime):
            error = "The selected showroom is unavailable at that time"
        elif not validate_showroom_availability(showroom.get_id(),
                                                showtime_id, dtime,
                                                int(movie.get_duration())):
            error = "The selected showroom is unavailable at that time"
        else:
            showtime.set_time(dtime)

        if movie_id is not None and not validate_movie(movie_id):
            error = "There was an error processing the movie"
        elif movie_id is not None:
            showtime.set_movie_id(movie_id)

        if showroom_id is not None and not validate_showroom(showroom_id):
            error = "There was an error processing the showroom"
        elif showroom_id is not None:
            showtime.set_showroom_id(showroom_id)

        showtime.save()

        if error is not None:
            flash(error)
        else:
            return redirect(url_for('AdminShowtimeController.manage_showtime'))

    info = showtime.obj_as_dict(showtime_id)
    print("show_dtime")
    print(info['time'])
    show_dtime = create_datetime_from_sql(info['time'])
    return render_template('edit_showtime.html',
                           showtime=info,
                           movie_title=movie.get_title(),
                           showroom_name=showroom.get_showroom_name(),
                           show_dtime=show_dtime,
                           movies=movies,
                           showrooms=showrooms)
Example #9
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)
Example #10
0
def delete_ticket(delete_id):
    delete_id = int(delete_id)
    tickets = session['tickets']
    del session['tickets']

    ticket = Ticket()
    showtime = Showtime()
    showtime.fetch(session['showtime'])
    avail = showtime.get_available_seats()


    if len(tickets) == 1:
        ticket.delete(session['ticket_ids'][delete_id])
        showtime.set_available_seats(avail + 1)
        showtime.save()
        clear_booking_info()
        return False
    else:
        del tickets[delete_id]
        ticket.delete(session['ticket_ids'][delete_id])
        del session['ticket_ids'][delete_id]

        showtime.set_available_seats(avail + 1)
        showtime.save()

    session['tickets'] = tickets
    return True
Example #11
0
def get_movie_by_showtime(sid):
    movie = Movie()
    showtime = Showtime()
    showtime.fetch(sid)
    movie.fetch(showtime.get_movie_id())
    return movie
Example #12
0
def select_seat():

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

    # INFO we need: showtime_id and customer
    showtime = Showtime()
    showtime.fetch(session['showtime'])

    showroom = Showroom()
    showroom.fetch(showtime.get_showroom_id())

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

    if request.method == 'POST':
        print("Session.get")
        ticket_no = 0
        example = []
        capacity = showroom.get_num_seats()

        for i in range(0, capacity):
            if request.form.get(str(i)):
                example.append((i, request.form[str(i)]))

        num_avail = showtime.get_available_seats()
        if session.get('tickets'):
            num_avail = num_avail + len(session['tickets'])
        showtime.set_available_seats(num_avail)

        clear_ticket_ids()

        if still_available(example, showtime.get_id()):
            session['tickets'] = example
            reserve_tickets(showtime)
            return redirect(url_for('CheckoutController.checkout'))
        else:
            flash("Sorry, those seats are no longer available")

    tickets = showtime.get_all_tickets()

    pre_tickets = None
    if session.get('tickets'):
        pre_tickets = session['tickets']
        for p in pre_tickets:
            print(p)
    # probably need to pull all tickets
    # for this showtime, and get a list of taken
    # seats to pass to zach
    available = list(range(showroom.get_num_seats()))
    if len(tickets) > 0:
        for ticket in tickets:
            seat_no = int(ticket['seat_number'])
            available[seat_no] = -1

    avail_dict = {'capacity': showroom.get_num_seats(),
                  'row': 8,
                  'seats': available
                  }

    # ZACH:
    # from this page, we'll get the seats and their ages
    # we need to get an array of tuples like
    # [(seatNo, age),]

    return render_template("seat_selection.html", tickets=avail_dict,
                           pre_tickets=pre_tickets)