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
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
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 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: