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