def need_a_ride(event_id=None, ride_request_id=None):
    # pdb.set_trace()
    try:
        event = Event(_id=ObjectId(event_id), db=db)
        manager = EventManager(event=event, db=db)
        # reservation = Reservation(event=event, db=db)
        # reservation = manager.reservation_map[event_id]
        if ride_request_id is None:
            name = request.form['name']
            email = request.form['email']
            num_seats = int(request.form['num_seats'])

            # create a request
            requester = Person(name=name, email=email, db=db)
            rideshare_request = RideshareRequest(requester=requester,
                                                 number_seats=num_seats,
                                                 event=event,
                                                 db=db)
            # request_id = reservation.register_rideshare_request(rideshare_request)
            # serialize_manager()
            return redirect('/event/{}/request_ride/{}'.format(
                event_id, str(rideshare_request._id)))

        else:
            # rideshare_request = reservation.rideshare_requests[ride_request_id]
            rideshare_request = RideshareRequest(_id=ObjectId(ride_request_id),
                                                 db=db)

            match = None
            for rideshare in manager.get_rideshares():
                if rideshare_request.requester in rideshare.riders:
                    match = rideshare.ride_sharer
                    break

            html = ''
            if match is not None:
                html += "You've been matched with {}".format(match.name)

            else:

                open_rideshares = manager.get_open_rideshares(
                    rideshare_request.number_seats)

                if len(open_rideshares) == 0:
                    html = 'Sorry, there are no available rideshares at this time. '
                    html += 'Check back soon to see when rides become available'
                else:
                    html = 'There {} {} ride{} available'.format(
                        'are' if len(open_rideshares) != 1 else 'is',
                        len(open_rideshares),
                        's' if len(open_rideshares) != 1 else '')
                    html += '<br><br>'
                    html += 'Select any rides you would be happy taking'
                    html += '<form action="requested" method="post">'
                    for rideshare in open_rideshares:
                        ride_sharer = rideshare.ride_sharer
                        html += '<input type="checkbox" '
                        html += 'name="id" value="{}" '.format(
                            str(rideshare._id))
                        html += '/>'
                        html += ' {} ({} seat{})'.format(
                            ride_sharer.name, rideshare.seats_available(),
                            's' if rideshare.seats_available() != 1 else '')
                        html += ' <br>'
                    html += '<input type="submit" value="Submit">'
                    html += '</form>'

            return html
    except Exception as e:
        print('>>> error!')
        import traceback
        print(traceback.format_exc())
        #print(manager.reservation_map)
        raise e
def have_a_ride(event_id=None, rideshare_id=None):
    try:
        event = Event(_id=ObjectId(event_id), db=db)
        manager = EventManager(event=event, db=db)
        # reservation = Reservation(event=event, db=db)
        # reservation = manager.reservation_map[event_id]
        if rideshare_id is None:
            name = request.form['name']
            email = request.form['email']
            # location = request.form['location']
            num_seats = int(request.form['num_seats'])

            p = Person(name=name, email=email, db=db)
            rideshare = Rideshare(ride_sharer=p,
                                  number_seats=num_seats,
                                  event=event,
                                  db=db)
            # reservation.rideshares.add(rideshare)
            # rideshare_id = reservation.register_rideshare(rideshare)
            # serialize_manager()

            return redirect('/event/{}/rideshare/{}'.format(
                event_id, str(rideshare._id)))
        else:
            print(manager.get_rideshares())
            # rideshare = reservation.rideshares[rideshare_id]
            rideshare = Rideshare(_id=ObjectId(rideshare_id), db=db)

            rideshare_request_matches = \
                manager.get_rideshare_request_matches(rideshare)

            html = "Thanks for offering a ride"
            html += " -- you have {} of {} spots available".format(
                rideshare.seats_available(), rideshare.number_seats)
            html += "<br><br>"
            html += "<h1>Reserved</h1>"
            if len(rideshare.riders) == 0:
                html += "None Yet!"
            else:
                html += '<ul>'
                for rider in rideshare.riders:
                    html += "<li>{}</li>".format(rider.name)
                html += '</ul>'
            html += "<br><br>"
            html += "<h1>Open</h1>"

            if len(rideshare_request_matches) == 0:
                html += "No one needs a ride yet - we'll email you if you can help"
            else:
                html += 'Select up to {} requests to reserve spots'.format(
                    rideshare.seats_available())
                html += '<form action="reserved" method="post">'
                for rideshare_request in rideshare_request_matches:
                    requester = rideshare_request.requester
                    html += '<input type="checkbox" '
                    html += 'name="id" value="{}" '.format(
                        str(rideshare_request._id))
                    html += '/>'
                    html += ' {}'.format(requester.name)
                    html += ' <br>'
                html += '<input type="submit" value="Submit">'
                html += '</form>'

            return html
    except Exception as e:
        print('>>> error!')
        import traceback
        print(traceback.format_exc())
        #print(manager.reservation_map)
        raise e