def get_duration_to_point(ride, point):
    assert point.ride == ride
    result = 0
    ride_points = ride.points.all()
    for i, p in enumerate(ride_points):
        if i > 0:
            prev_p = ride_points[i-1]
            result += get_shortest_duration(prev_p.lat, prev_p.lon, p.lat, p.lon)

        if p == point:
            break

    logging.info("[get_duration_to_point] result = '%s'" % result)
    return result
def get_duration_to_point(ride, point):
    assert point.ride == ride
    result = 0
    ride_points = ride.points.all()
    for i, p in enumerate(ride_points):
        if i > 0:
            prev_p = ride_points[i - 1]
            result += get_shortest_duration(prev_p.lat, prev_p.lon, p.lat,
                                            p.lon)

        if p == point:
            break

    logging.info("[get_duration_to_point] result = '%s'" % result)
    return result
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