def sync_app_state(request): earliest_pickup_time = ceil_datetime(trim_seconds(default_tz_now()) + datetime.timedelta(minutes=asap_interval()), minutes=booking_interval()) latest_pickup_time = earliest_pickup_time + datetime.timedelta(hours=(24*14)) dt_options = list(datetimeIterator(earliest_pickup_time, latest_pickup_time, delta=datetime.timedelta(minutes=booking_interval()))) response = { "logged_in": request.user.is_authenticated(), "pickup_datetime_options": [to_js_date(opt) for opt in dt_options], "pickup_datetime_default_idx": 0, "asap_as_default": True, "booking_data": request.session.get(CURRENT_BOOKING_DATA_KEY) } passenger = Passenger.from_request(request) response["show_url"] = "" # change to cause child browser to open with passed url if passenger: response["authenticated"] = True response["passenger_picture_url"] = passenger.picture_url ongoing_order = get_ongoing_order(passenger) if ongoing_order: response["ongoing_order_id"] = ongoing_order.id future_orders = get_future_orders_for(passenger) response["future_orders_count"] = len(future_orders) trimed_response = response.copy() trimed_response['pickup_datetime_options'] = response['pickup_datetime_options'][:9] + ['...'] logging.info("get_initial_status: %s" % trimed_response) return JSONResponse(response)
def get_discounted_offers(request, order_settings, start_ride_algo_data): user = request.user if request.user.is_authenticated() else None discounted_offers = [] earliest_offer_dt = ceil_datetime(max(trim_seconds(default_tz_now()) + datetime.timedelta(minutes=asap_interval()), order_settings.pickup_dt - OFFERS_TIMEDELTA), minutes=booking_interval()) discounts_data = compute_discounts_data(order_settings, earliest_offer_dt, order_settings.pickup_dt + OFFERS_TIMEDELTA, datetime.timedelta(minutes=booking_interval()), user = user ) for discount_data in discounts_data: discount_rule = discount_data.discount_rule discount_dt = discount_data.pickup_dt tariff_for_discount_offer = RuleSet.get_active_set(discount_dt) base_price_for_discount_offer = start_ride_algo_data.order_price(NEW_ORDER_ID, tariff_for_discount_offer) if base_price_for_discount_offer: discount = discount_rule.get_discount(base_price_for_discount_offer) if discount == 0: logging.info(u"skipping %s: grants zero discount" % discount_rule.name) continue offer_key = "%s_%s" % (DISCOUNTED_OFFER_PREFIX, get_uuid()) memcache.set(offer_key, DiscountData.dump(discount_data), namespace=DISCOUNTED_OFFERS_NS) offer_text = _(u"The price includes a discount of %g NIS") % discount if discount_rule.offer_text: offer_text = discount_rule.offer_text if offer_text.find("%g") > -1: # render discount amount offer_text %= discount discount_offer_data = { "ride_id": offer_key, "pickup_time": to_js_date(discount_dt), "discount_picture_url": discount_rule.picture_url, "discount_name": discount_rule.display_name, "passengers": [], "seats_left": MAX_SEATS, "price": base_price_for_discount_offer - discount, "new_ride": True, "comment": offer_text } user_agent = request.META.get("HTTP_USER_AGENT", "") if RE_2_1_AGENT.match(user_agent) is None: # only for client < 1.2.1 discount_offer_data.update({ "seats_left": MAX_SEATS - 1, "passengers": [{'name': discount_rule.display_name, 'picture_url': discount_rule.picture_url}] }) discounted_offers.append(discount_offer_data) return discounted_offers