예제 #1
0
def update_status(request):
    """ View for calls by ISRProxy backend on ride status updates. """
    raw_data = request.raw_post_data
    logging.info("isrproxy update_status: %s" % raw_data)

    update_status_data = simplejson.loads(raw_data)

    # redirect update to dev server in production environment
    if update_status_data.get('Operator_ID') == WB_DEV_OPERATOR_ID and not settings.DEV:
        deferred.defer(safe_fetch, url="http://dev.latest.waybetter-app.appspot.com/fleet/isrproxy/update/status/", payload=raw_data, method=POST, notify=False)
        return HttpResponse("OK")

    fmr = ISRProxy._create_fmr(update_status_data)
    fleet_manager.update_ride(fmr)

    mcns = "ga_isrproxy_ride_updates"
    getkey = lambda fmr: str(fmr.id)

    now = datetime.datetime.now()
    last_update_dt = memcache.get(getkey(fmr), namespace=mcns)
    val = (now - last_update_dt).seconds if last_update_dt else 0
    memcache.set(getkey(fmr), now, namespace=mcns)

   # Log status position as a position update
    if fmr.lat and fmr.lon:
        taxi_position = TaxiRidePosition(fmr.station_id, fmr.taxi_id, fmr.id, fmr.lat, fmr.lon, fmr.timestamp)
        fleet_manager.update_positions([taxi_position])
    else:
        logging.warning("ride update with no location info received: %s" % fmr.serialize())

    ga_track_event(request, "isr", "update_ride", fmr.id)
    ga_track_event(request, "isr", fmr.raw_status, fmr.id, val)

    return HttpResponse("OK")
예제 #2
0
def campaign_handler(request, campaign_id):
    logging.info("campaign_handler with id: %s" % campaign_id)
    ga_track_event(request, "campaign", campaign_id)
    if campaign_id == "tlv_taxi_mobile":
        return HttpResponseRedirect("http://tlv.taxiapp.co.il")

    return HttpResponseRedirect("/")
예제 #3
0
def transaction_error(request):
    if request.GET.get("lang") == u"HE":
        request.encoding = "cp1255"

    error_code = request.GET.get("ErrorCode")
    error_text = get_custom_message(error_code, request.GET.get("ErrorText"))

    ga_track_event(request, "registration", "credit_card_validation", "not_approved", int(error_code))

    request.session['credit_card_error'] = error_text
    account_url = reverse(mobile_account_view if request.mobile else web_account_view)
    return HttpResponseRedirect(account_url)
예제 #4
0
def registration(request, step="auth"):
    country_code = settings.DEFAULT_COUNTRY_CODE
    page_specific_class = "registration"
    login_controller_url = reverse("mobile_auth_login") if request.mobile else reverse("auth_login")

    BIEvent.log(BIEventType.REGISTRATION_START, request=request)

    login_link = "%s?next=%s" % (login_controller_url, reverse(post_login_redirect))
    form = UserRegistrationForm()

    ga_track_event(request, "registration", "register_now", "after_ordering" if request.session.get(CURRENT_BOOKING_DATA_KEY) else "direct")

    if request.user.is_authenticated() and step == "auth":
        return post_login_redirect(request)

    return custom_render_to_response("passenger_registration.html", locals(), context_instance=RequestContext(request))
예제 #5
0
    def create_ride(cls, ride, station, taxi_number=None):
        fmr = None

        reply = None
        for retry in range(3):
            last_try = (retry == 2)
            reply = cls._fetch("CreateRide.aspx", {'ride': cls._create_ride(ride, station.fleet_station_id, taxi_number=taxi_number)}, notify=last_try)

            if reply:
                break

        if reply:
            fmr = cls._create_fmr_from_reply(reply)
            ga_track_event(None, "isr", "create_ride_success", ride.id)
        else:
            ga_track_event(None, "isr", "create_ride_failure", ride.id)

        return fmr
예제 #6
0
def update_status(request):
    """ View for calls by ISRProxy backend on ride status updates. """
    raw_data = request.raw_post_data
    logging.info("isrproxy update_status: %s" % raw_data)

    update_status_data = simplejson.loads(raw_data)

    # redirect update to dev server in production environment
    if update_status_data.get(
            'Operator_ID') == WB_DEV_OPERATOR_ID and not settings.DEV:
        deferred.defer(
            safe_fetch,
            url=
            "http://dev.latest.waybetter-app.appspot.com/fleet/isrproxy/update/status/",
            payload=raw_data,
            method=POST,
            notify=False)
        return HttpResponse("OK")

    fmr = ISRProxy._create_fmr(update_status_data)
    fleet_manager.update_ride(fmr)

    mcns = "ga_isrproxy_ride_updates"
    getkey = lambda fmr: str(fmr.id)

    now = datetime.datetime.now()
    last_update_dt = memcache.get(getkey(fmr), namespace=mcns)
    val = (now - last_update_dt).seconds if last_update_dt else 0
    memcache.set(getkey(fmr), now, namespace=mcns)

    # Log status position as a position update
    if fmr.lat and fmr.lon:
        taxi_position = TaxiRidePosition(fmr.station_id, fmr.taxi_id, fmr.id,
                                         fmr.lat, fmr.lon, fmr.timestamp)
        fleet_manager.update_positions([taxi_position])
    else:
        logging.warning("ride update with no location info received: %s" %
                        fmr.serialize())

    ga_track_event(request, "isr", "update_ride", fmr.id)
    ga_track_event(request, "isr", fmr.raw_status, fmr.id, val)

    return HttpResponse("OK")
예제 #7
0
def registration(request, step="auth"):
    country_code = settings.DEFAULT_COUNTRY_CODE
    page_specific_class = "registration"
    login_controller_url = reverse(
        "mobile_auth_login") if request.mobile else reverse("auth_login")

    BIEvent.log(BIEventType.REGISTRATION_START, request=request)

    login_link = "%s?next=%s" % (login_controller_url,
                                 reverse(post_login_redirect))
    form = UserRegistrationForm()

    ga_track_event(
        request, "registration", "register_now", "after_ordering"
        if request.session.get(CURRENT_BOOKING_DATA_KEY) else "direct")

    if request.user.is_authenticated() and step == "auth":
        return post_login_redirect(request)

    return custom_render_to_response("passenger_registration.html",
                                     locals(),
                                     context_instance=RequestContext(request))
예제 #8
0
    def create_ride(cls, ride, station, taxi_number=None):
        fmr = None

        reply = None
        for retry in range(3):
            last_try = (retry == 2)
            reply = cls._fetch("CreateRide.aspx", {
                'ride':
                cls._create_ride(
                    ride, station.fleet_station_id, taxi_number=taxi_number)
            },
                               notify=last_try)

            if reply:
                break

        if reply:
            fmr = cls._create_fmr_from_reply(reply)
            ga_track_event(None, "isr", "create_ride_success", ride.id)
        else:
            ga_track_event(None, "isr", "create_ride_failure", ride.id)

        return fmr
예제 #9
0
def transaction_ok(request):
    from analytics.models import BIEvent, BIEventType

    passenger = Passenger.from_request(request)
    if not passenger:
        logging.info("[transaction_ok] not a passenger")
        registration_url = reverse(mobile_registration_view if request.mobiel else web_registration_view)
        return HttpResponseRedirect(registration_url)

    #TODO: handle errors
    #TODO: makesure referrer is creditguard
    ga_track_event(request, "registration", "credit_card_validation", "approved")
    date_string = request.GET.get("cardExp")
    exp_date = date(year=int(date_string[2:]) + 2000, month=int(date_string[:2]), day=1)
    kwargs = {
        "passenger"			: passenger,
        "token"					: request.GET.get("cardToken"),
        "expiration_date"		: exp_date,
        "card_repr"				: request.GET.get("cardMask"),
        "personal_id"          : request.GET.get("personalId")
    }
    # clean up old billing info objects
    BillingInfo.objects.filter(passenger=passenger).delete()

    # save new billing info
    billing_info = BillingInfo(**kwargs)
    billing_info.save()

    BIEvent.log(BIEventType.BILLING_INFO_COMPLETE, passenger=passenger, request=request)

    if request.session.get(CURRENT_BOOKING_DATA_KEY): # continue booking process
        continue_booking_url = settings.CLOSE_CHILD_BROWSER_URI if request.mobile else reverse("booking_continued")
        logging.info("[transaction_ok] continue booking after billing registration --> %s" % continue_booking_url)
        return HttpResponseRedirect(continue_booking_url)
    else:
        account_url = reverse(mobile_account_view if request.mobile else web_account_view)
        return HttpResponseRedirect(account_url)
예제 #10
0
def test_ga(request):
    ga_track_event(request, "test_cat", "test_action")
    return HttpResponse("GA test OK")