def get_ongoing_ride_details(request):
    order_id = request.GET.get("order_id")
    order = Order.by_id(order_id)

    response = {}

    if order and order.ride:
        ride = order.ride
        station = ride.station
        station_data = {
            'name': station.name if station else WAYBETTER_STATION_NAME,
            'phone': settings.CONTACT_PHONE
        }

        pickup_position = {"lat": order.from_lat, "lng": order.from_lon}
        dropoff_position = {"lat": order.to_lat, "lng": order.to_lon}

        taxi_position = get_position_for_order(order)
        if taxi_position:
            taxi_position = {"lat": taxi_position.lat, "lng": taxi_position.lon}

        pickup_stops = [{"lat": p.lat, "lng": p.lon} for p in ride.pickup_points]  # sorted by stop_time
        sorted_orders = sorted(ride.orders.all(), key=lambda o: o.depart_time)

        # stops include other passengers stops only
        stops = filter(lambda stop: (stop["lat"], stop["lng"])
                    not in [(pickup_position["lat"], pickup_position["lng"]), (dropoff_position["lat"], dropoff_position["lng"])], pickup_stops)

        # passenger appears as many times as seats she ordered
        passengers = [{'name': o.passenger.name, 'picture_url': o.passenger.picture_url, 'is_you': o==order}
                        for o in sorted_orders for seat in range(o.num_seats)]

        response = {
            "station"           : station_data,
            "passengers"        : passengers,
            "taxi_position"     : taxi_position,
            "taxi_number"       : ride.taxi_number,
            "pickup_position"   : pickup_position,
            "dropoff_position"  : dropoff_position,
            'passenger_picked_up': order.pickup_point.visited,
            "stops"             : stops,
            "empty_seats"       : MAX_SEATS - sum([o.num_seats for o in sorted_orders]),
        }
    else:
        logging.error("ongoing ride details error for order [%s]" % order_id)

    return JSONResponse(response)
def get_order_msg(ride, order):
    t = get_template("passenger_notification_msg.html")
    pickup_time = None
    position = get_position_for_order(order)
    if position:
        logging.info("use actual position for pickup estimate")
        duration = get_shortest_duration(position.lat,
                                         position.lon,
                                         order.from_lat,
                                         order.from_lon,
                                         sensor=True)
        logging.info("[get_order_msg] duration = '%s'" % duration)

        if duration:
            pickup_time = duration / 60

    if not pickup_time:
        if ride.pickup_estimate:  # this is an estimate from the station
            duration = get_duration_to_point(ride, order.pickup_point)
            pickup_time = (duration / 60) + ride.pickup_estimate
        else:  # no estimate given, use algo values
            if order.pickup_point.stop_time > default_tz_now():
                td = order.pickup_point.stop_time - default_tz_now()
                pickup_time = td.seconds / 60
            else:
                pickup_time = 1  # 'now'

    current_lang = translation.get_language()

    translation.activate(order.language_code)
    template_data = {
        'pickup_time': pickup_time,
        'station_name': ride.station.name,
        'taxi_number': ride.taxi_number
    }

    msg = t.render(Context(template_data))
    translation.activate(current_lang)

    logging.info(u"order message %s" % msg)

    return msg
def get_order_msg(ride, order):
    t = get_template("passenger_notification_msg.html")
    pickup_time = None
    position = get_position_for_order(order)
    if position:
        logging.info("use actual position for pickup estimate")
        duration = get_shortest_duration(position.lat, position.lon, order.from_lat, order.from_lon, sensor=True)
        logging.info("[get_order_msg] duration = '%s'" % duration)

        if duration:
            pickup_time = duration / 60

    if not pickup_time:
        if ride.pickup_estimate: # this is an estimate from the station
            duration = get_duration_to_point(ride, order.pickup_point)
            pickup_time = (duration / 60) + ride.pickup_estimate
        else: # no estimate given, use algo values
            if order.pickup_point.stop_time > default_tz_now():
                td = order.pickup_point.stop_time - default_tz_now()
                pickup_time = td.seconds / 60
            else:
                pickup_time = 1 # 'now'

    current_lang = translation.get_language()

    translation.activate(order.language_code)
    template_data = {'pickup_time': pickup_time,
                     'station_name': ride.station.name,
                     'taxi_number': ride.taxi_number
                     }

    msg = t.render(Context(template_data))
    translation.activate(current_lang)

    logging.info(u"order message %s" % msg)

    return msg