Esempio n. 1
0
def create_test_order(passenger=None):
    if not passenger:
        passenger = create_passenger()

    form = OrderForm(data=ORDER_DATA, passenger=passenger)
    order = form.save()
    order.passenger = passenger
    order.save()

    return order
Esempio n. 2
0
def create_test_order(passenger=None):
    if not passenger:
        passenger = create_passenger()

    form = OrderForm(data=ORDER_DATA, passenger=passenger)
    order = form.save()
    order.passenger = passenger
    order.save()

    return order
Esempio n. 3
0
    def create(self, request, *args, **kwargs):
        api_user = kwargs["api_user"]
        request_data = request.data.get("request")
        if not request_data:
            return rc.BAD_REQUEST

        language_code = request_data.get("language_code")
        translation.activate(language_code)

        passenger = None
        phone_number = request_data.get("phone_number")
        login_token = request_data.get("login_token")

        try:
            if login_token: #TODO_WB: merge needed to make this work
                passenger = Passenger.objects.get(login_token=login_token)
            elif phone_number and not api_user.phone_validation_required:
                passenger = Passenger.objects.get(phone=phone_number) 
        except Passenger.DoesNotExist:
            pass

        if not passenger:
            return rc.NOT_FOUND #TODO_WB: is this the right response

        order_data = {}
        for address_type in ('from', 'to'):
            for att, val in request_data[address_type].items():
                order_data[address_type + "_" + att] = val or ""

            if not is_valid_address(order_data, address_type):
                res = rc.BAD_REQUEST
                res.write(" %s\n" % ErrorCodes.INVALID_ADDRESS)
                return res

            order_data[address_type + "_country"] = Country.get_id_by_code(order_data[address_type + "_country"])
            order_data[address_type + "_city"] = City.get_id_by_name_and_country(order_data[address_type + "_city"], order_data[address_type + "_country"], add_if_not_found=True)

        order_form = OrderForm(data=order_data, passenger=passenger)
        if order_form.is_valid():

            order = order_form.save()
            order.api_user = api_user
            order.passenger = passenger
            order.language_code = language_code
            order.save()
            book_order_async(order)
            log_event(EventType.ORDER_BOOKED, order=order)
            return rc.CREATED
        else:
            response = rc.BAD_REQUEST
            response.write(" %s\n" % order_form.errors.as_text())
            return response
Esempio n. 4
0
    def test_required_fields(self):
        order_form = OrderForm()
        required_fields = []
        for field_name in order_form.fields:
            if order_form.fields.get(field_name).required:
                required_fields.append(field_name)

        REQUIRED_FIELDS = [
            "from_city",
            "from_country",
            "from_geohash",
            "from_lat",
            "from_lon",
            "from_raw",
            "from_street_address",
            "geocoded_from_raw",
            "to_city",
            "to_country",
            "to_geohash",
            "to_lat",
            "to_lon",
            "to_raw",
            "to_street_address",
            "geocoded_to_raw",
        ]

        self.assertTrue(REQUIRED_FIELDS.sort() == required_fields.sort(),
                        "A required form field is missing or was added.")
Esempio n. 5
0
    def test_form_validation(self):
        bad_data = {
            "cross country order": {"from_country": u"1248"},
            "same country but no service": {"from_country": u"1248", "to_country": u"1248"},
            "no station in valid distance": {"from_lat": 33.239736, "from_lon": 35.654583, "to_lat": 29.550283, "to_lon": 34.914551},
        }

        passenger = create_passenger()

        # good order
        form = OrderForm(data=ORDER_DATA, passenger=passenger)
        self.assertTrue(form.is_valid(), "Form should pass validation.")

        # bad orders
        for dict_name in bad_data:
            bad_order = ORDER_DATA.copy()
            bad_order.update(bad_data[dict_name])
            form = OrderForm(data=bad_order, passenger=passenger)
            self.assertFalse(form.is_valid(), "Form should fail validation: %s" % dict_name)
Esempio n. 6
0
    def test_form_validation(self):
        bad_data = {
            "cross country order": {
                "from_country": u"1248"
            },
            "same country but no service": {
                "from_country": u"1248",
                "to_country": u"1248"
            },
            "no station in valid distance": {
                "from_lat": 33.239736,
                "from_lon": 35.654583,
                "to_lat": 29.550283,
                "to_lon": 34.914551
            },
        }

        passenger = create_passenger()

        # good order
        form = OrderForm(data=ORDER_DATA, passenger=passenger)
        self.assertTrue(form.is_valid(), "Form should pass validation.")

        # bad orders
        for dict_name in bad_data:
            bad_order = ORDER_DATA.copy()
            bad_order.update(bad_data[dict_name])
            form = OrderForm(data=bad_order, passenger=passenger)
            self.assertFalse(form.is_valid(),
                             "Form should fail validation: %s" % dict_name)
Esempio n. 7
0
def passenger_home(request):
    if not request.mobile and CURRENT_PASSENGER_KEY in request.session:
        del request.session[CURRENT_PASSENGER_KEY]

    hidden_fields = HIDDEN_FIELDS
    form = OrderForm()
    not_a_user, not_a_passenger = NOT_A_USER, NOT_A_PASSENGER
    waze_token = settings.WAZE_API_TOKEN
    telmap_user = settings.TELMAP_API_USER
    telmap_password = settings.TELMAP_API_PASSWORD
    telmap_languages = 'he' if str(
        get_language_from_request(request)) == 'he' else 'en'
    country_code = settings.DEFAULT_COUNTRY_CODE
    service_cities = ", ".join(
        set([s.city.name for s in Station.objects.filter(show_on_list=True)]))
    passenger = Passenger.from_request(request)

    if not passenger and request.GET.get("show_login", False):
        show_login = True

    if passenger and passenger.business:
        PENDING = models.PENDING
        ASSIGNED = models.ASSIGNED
        ACCEPTED = models.ACCEPTED
        ORDER_FAILED = models.FAILED  # groups together FAILED, ERROR and TIMED_OUT
        ORDER_MAX_WAIT_TIME = models.ORDER_MAX_WAIT_TIME
        FAILED_MSG = _(order_tracker.STATUS_MESSAGES[models.FAILED])

        show_tracker = True
        channel_key = get_channel_key(Passenger.from_request(request),
                                      request.session.session_key)
        init_token = channel.create_channel(channel_key)
        init_tracker_history = [
            simplejson.dumps(msg)
            for msg in order_tracker.get_tracker_history(passenger)
        ]

    return custom_render_to_response("passenger_home.html",
                                     locals(),
                                     context_instance=RequestContext(request))
Esempio n. 8
0
def station_page(request, subdomain_name):
    station = get_object_or_404(models.Station, subdomain_name=subdomain_name)

    ua = request.META.get("HTTP_USER_AGENT", "").lower()

    if station.market_app_url and ua.find("android") > -1:
        ga_hit_page(request)
        return HttpResponseRedirect(station.market_app_url)
    elif station.itunes_app_url and ua.find("iphone") > -1:
        ga_hit_page(request)
        return HttpResponseRedirect(station.itunes_app_url)

    passenger = Passenger.from_request(request)
    if passenger and passenger.business:
        return station_business_page(request, subdomain_name)

    if not request.mobile and CURRENT_PASSENGER_KEY in request.session:
        del request.session[CURRENT_PASSENGER_KEY]

    page_specific_class = "station_page"
    hidden_fields = HIDDEN_FIELDS
    form = OrderForm()
    not_a_user, not_a_passenger = NOT_A_USER, NOT_A_PASSENGER
    waze_token = settings.WAZE_API_TOKEN
    telmap_user = settings.TELMAP_API_USER
    telmap_password = settings.TELMAP_API_PASSWORD
    telmap_languages = 'he' if str(get_language_from_request(request)) == 'he' else 'en'
    country_code = settings.DEFAULT_COUNTRY_CODE
    station_full_name = _("%s Taxi station") % station.name
    website_link = station.get_station_page_link()
    pretty_website_link = website_link.replace("http://", "")
    station_logo = blob_to_image_tag(station.logo)

    if not passenger and request.GET.get("show_login", False):
        show_login = True

    return custom_render_to_response("station_page.html", locals(), context_instance=RequestContext(request))
Esempio n. 9
0
                                                  "").replace(",", "").strip()
            res = int(res)
            logging.info("fixed house number (%s): %s " %
                         (res, getattr(order, "%s_raw" % order_type)))
        except AttributeError, ValueError:
            logging.warning("Could not fix missing house number: %s" %
                            getattr(order, "%s_raw" % order_type))
            res = None

        return res

    form_data = request.POST
    if passenger.business and request.POST.get("business_order"):
        form_data = get_business_order_form_data(request, passenger)

    form = OrderForm(data=form_data, passenger=passenger)

    if form.is_valid():
        if passenger.orders.all()[:1]:
            last_order = passenger.orders.order_by("-create_date")[0]
            interval = BUSINESS_ORDERING_INTERVAL if passenger.business else ORDERING_INTERVAL
            if (utc_now() - last_order.create_date).seconds < interval:
                return error_response(
                    _("Ordering is not allowed so soon after another order"))

        app_udid = request.POST.get("APP_UDID")
        installed_app = None
        if app_udid:  # this came from a device that sends app specific id
            installed_app = InstalledApp.by_app_udid(app_udid)
            if not installed_app:
                return error_response(
Esempio n. 10
0
        try:
            city = getattr(order, "%s_city" % order_type).name
            res = res.replace(street, "").replace(city, "").replace(",", "").strip()
            res = int(res)
            logging.info("fixed house number (%s): %s " % (res, getattr(order, "%s_raw" % order_type)))
        except AttributeError, ValueError:
            logging.warning("Could not fix missing house number: %s" % getattr(order, "%s_raw" % order_type))
            res = None

        return res

    form_data = request.POST
    if passenger.business and request.POST.get("business_order"):
        form_data = get_business_order_form_data(request, passenger)

    form = OrderForm(data=form_data, passenger=passenger)

    if form.is_valid():
        if passenger.orders.all()[:1]:
            last_order = passenger.orders.order_by("-create_date")[0]
            interval = BUSINESS_ORDERING_INTERVAL if passenger.business else ORDERING_INTERVAL
            if (utc_now() - last_order.create_date).seconds < interval:
                return error_response(_("Ordering is not allowed so soon after another order"))

        app_udid = request.POST.get("APP_UDID")
        installed_app = None
        if app_udid:  # this came from a device that sends app specific id
            installed_app = InstalledApp.by_app_udid(app_udid)
            if not installed_app:
                return error_response(_("Please register before attempting to order"))
            if installed_app.blocked: