예제 #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
예제 #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
예제 #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
예제 #4
0
                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:
                return error_response(
                    _("Your account has been suspended. Please contact [email protected]"
                      ))

        order = form.save(commit=False)
        order.language_code = request.POST.get(
            "language_code", get_language_from_request(request))
        order.debug = settings.DEV
        order.passenger = passenger
        order.mobile = request.mobile
        order.user_agent = request.META.get("HTTP_USER_AGENT")
        order.installed_app = installed_app

        if not order.from_house_number:
            order.from_house_number = _fix_missing_house_number(order, "from")

        if order.to_raw and not order.to_house_number:
            order.to_house_number = _fix_missing_house_number(order, "to")

        station_unique_id = request.POST.get("station_unique_id")
예제 #5
0
        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:
                return error_response(_("Your account has been suspended. Please contact [email protected]"))

        order = form.save(commit=False)
        order.language_code = request.POST.get("language_code", get_language_from_request(request))
        order.debug = settings.DEV
        order.passenger = passenger
        order.mobile = request.mobile
        order.user_agent = request.META.get("HTTP_USER_AGENT")
        order.installed_app = installed_app

        if not order.from_house_number:
            order.from_house_number = _fix_missing_house_number(order, "from")

        if order.to_raw and not order.to_house_number:
            order.to_house_number = _fix_missing_house_number(order, "to")

        station_unique_id = request.POST.get("station_unique_id")
        if station_unique_id: