From 2f52f202834c8a1657aa5a3a24647c5fd1704628 Mon Sep 17 00:00:00 2001 From: Alex Butum Date: Wed, 2 Mar 2016 22:11:52 +0200 Subject: [PATCH] Add Ride Request Receipt endpoint --- .../rides/client/UberRidesAsyncService.java | 9 ++ .../rides/client/UberRidesSyncService.java | 8 + .../client/internal/RetrofitAdapter.java | 16 +- .../internal/RetrofitUberRidesService.java | 11 ++ .../sdk/rides/client/model/RideReceipt.java | 144 ++++++++++++++++++ 5 files changed, 187 insertions(+), 1 deletion(-) create mode 100644 sdk/src/main/java/com/uber/sdk/rides/client/model/RideReceipt.java diff --git a/sdk/src/main/java/com/uber/sdk/rides/client/UberRidesAsyncService.java b/sdk/src/main/java/com/uber/sdk/rides/client/UberRidesAsyncService.java index 54bca65..e95e957 100644 --- a/sdk/src/main/java/com/uber/sdk/rides/client/UberRidesAsyncService.java +++ b/sdk/src/main/java/com/uber/sdk/rides/client/UberRidesAsyncService.java @@ -33,6 +33,7 @@ import com.uber.sdk.rides.client.model.Ride; import com.uber.sdk.rides.client.model.RideEstimate; import com.uber.sdk.rides.client.model.RideMap; +import com.uber.sdk.rides.client.model.RideReceipt; import com.uber.sdk.rides.client.model.RideRequestParameters; import com.uber.sdk.rides.client.model.RideUpdateParameters; import com.uber.sdk.rides.client.model.SandboxProductRequestParameters; @@ -223,6 +224,14 @@ void updateRide(@Nonnull String rideId, */ void getRideDetails(@Nonnull String rideId, Callback callback); + /** + * Get receipt information for a completed request. + * + * @param rideId The unique identifier of a ride. + * @param callback The request callback. + */ + void getRideReceipt(@Nonnull String rideId, Callback callback); + /** *

* The request estimate endpoint allows a ride to be estimated given the desired product, start, diff --git a/sdk/src/main/java/com/uber/sdk/rides/client/UberRidesSyncService.java b/sdk/src/main/java/com/uber/sdk/rides/client/UberRidesSyncService.java index 69d0ec2..e33630b 100644 --- a/sdk/src/main/java/com/uber/sdk/rides/client/UberRidesSyncService.java +++ b/sdk/src/main/java/com/uber/sdk/rides/client/UberRidesSyncService.java @@ -35,6 +35,7 @@ import com.uber.sdk.rides.client.model.Ride; import com.uber.sdk.rides.client.model.RideEstimate; import com.uber.sdk.rides.client.model.RideMap; +import com.uber.sdk.rides.client.model.RideReceipt; import com.uber.sdk.rides.client.model.RideRequestParameters; import com.uber.sdk.rides.client.model.RideUpdateParameters; import com.uber.sdk.rides.client.model.SandboxProductRequestParameters; @@ -201,6 +202,13 @@ Response updateRide(@Nonnull String rideId, @Nonnull RideUpdateParameters */ Response getRideDetails(@Nonnull String rideId) throws ApiException, NetworkException; + /** + * Get receipt information for a completed request. + * + * @param rideId The unique identifier of a ride. + */ + Response getRideReceipt(@Nonnull String rideId) throws ApiException, NetworkException; + /** *

* The request estimate endpoint allows a ride to be estimated given the desired product, start, diff --git a/sdk/src/main/java/com/uber/sdk/rides/client/internal/RetrofitAdapter.java b/sdk/src/main/java/com/uber/sdk/rides/client/internal/RetrofitAdapter.java index 0227863..a54a15b 100644 --- a/sdk/src/main/java/com/uber/sdk/rides/client/internal/RetrofitAdapter.java +++ b/sdk/src/main/java/com/uber/sdk/rides/client/internal/RetrofitAdapter.java @@ -40,7 +40,6 @@ import com.uber.sdk.rides.client.error.NetworkException; import com.uber.sdk.rides.client.error.SurgeError; import com.uber.sdk.rides.client.error.UberError; -import com.uber.sdk.rides.client.model.PaymentMethod; import com.uber.sdk.rides.client.model.PaymentMethodsResponse; import com.uber.sdk.rides.client.model.Place; import com.uber.sdk.rides.client.model.Place.Places; @@ -52,6 +51,7 @@ import com.uber.sdk.rides.client.model.Ride; import com.uber.sdk.rides.client.model.RideEstimate; import com.uber.sdk.rides.client.model.RideMap; +import com.uber.sdk.rides.client.model.RideReceipt; import com.uber.sdk.rides.client.model.RideRequestParameters; import com.uber.sdk.rides.client.model.RideUpdateParameters; import com.uber.sdk.rides.client.model.SandboxProductRequestParameters; @@ -364,6 +364,20 @@ public Response getRideDetails(@Nonnull String rideId) throws ApiException return transformFuture(future); } + @Override + public void getRideReceipt(@Nonnull String rideId, Callback callback) { + service.getRideReceipt(rideId, new InternalCallback(callback)); + } + + @Override + public Response getRideReceipt(@Nonnull String rideId) throws ApiException, NetworkException { + final SettableFuture> future = SettableFuture.create(); + + getRideReceipt(rideId, new SettableFutureCallback<>(future)); + + return transformFuture(future); + } + @Override public void estimateRide(RideRequestParameters rideRequestParameters, Callback callback) { service.estimateRide(rideRequestParameters, new InternalCallback<>(callback)); diff --git a/sdk/src/main/java/com/uber/sdk/rides/client/internal/RetrofitUberRidesService.java b/sdk/src/main/java/com/uber/sdk/rides/client/internal/RetrofitUberRidesService.java index 6aed07e..506fa37 100644 --- a/sdk/src/main/java/com/uber/sdk/rides/client/internal/RetrofitUberRidesService.java +++ b/sdk/src/main/java/com/uber/sdk/rides/client/internal/RetrofitUberRidesService.java @@ -33,6 +33,7 @@ import com.uber.sdk.rides.client.model.Ride; import com.uber.sdk.rides.client.model.RideEstimate; import com.uber.sdk.rides.client.model.RideMap; +import com.uber.sdk.rides.client.model.RideReceipt; import com.uber.sdk.rides.client.model.RideRequestParameters; import com.uber.sdk.rides.client.model.RideUpdateParameters; import com.uber.sdk.rides.client.model.SandboxProductRequestParameters; @@ -226,6 +227,16 @@ void setPlace(@Nonnull @Path("place_id") String placeId, @GET("/v1/requests/{request_id}") void getRideDetails(@Nonnull @Path("request_id") String rideId, Callback callback); + /** + * Get receipt information for a completed request.
+ * Access to this endpoint is restricted and requires whitelisting. + * + * @param rideId The unique identifier for a ride. + * @param callback The request callback. + */ + @GET("/v1/requests/{request_id}/receipt") + void getRideReceipt(@Nonnull @Path("request_id") String rideId, Callback callback); + /** *

* The request estimate endpoint allows a ride to be estimated given the desired product, start, diff --git a/sdk/src/main/java/com/uber/sdk/rides/client/model/RideReceipt.java b/sdk/src/main/java/com/uber/sdk/rides/client/model/RideReceipt.java new file mode 100644 index 0000000..ad7a17c --- /dev/null +++ b/sdk/src/main/java/com/uber/sdk/rides/client/model/RideReceipt.java @@ -0,0 +1,144 @@ + +package com.uber.sdk.rides.client.model; + +import java.util.List; + +import javax.annotation.Nullable; + +/** + * A receipt for a completed request. + * See + * Ride Request Receipt + * for more information. + */ +public class RideReceipt { + private String request_id; + private List charges; + @Nullable + private Charge surge_charge; + private List charge_adjustments; + private String normal_fare; + private String subtotal; + private String total_charged; + @Nullable + private Float total_owed; + private String currency_code; + private String duration; + private String distance; + private String distance_label; + + /** + * Gets the unique ID of the ride. + */ + public String getRideId() { + return request_id; + } + + /** + * Gets the charges made against the rider. + */ + public List getCharges() { + return charges; + } + + /** + * Gets the surge charge. May be {@code null} if surge pricing was not in effect. + */ + @Nullable + public Charge getSurgeCharge() { + return surge_charge; + } + + /** + * Gets the adjustments made to the charges such as promotions, and fees. + */ + public List getChargeAdjustments() { + return charge_adjustments; + } + + /** + * Gets the summation of the charges. + */ + public String getNormalFare() { + return normal_fare; + } + + /** + * Gets the summation of the normal_fare and surge_charge. + */ + public String getSubTotal() { + return subtotal; + } + + /** + * Gets the total amount charged to the users payment method.
+ * This is the the subtotal (split if applicable) with taxes included. + */ + public String getTotalCharged() { + return total_charged; + } + + /** + * Gets the total amount still owed after attempting to charge the user.
+ * May be {@code null} if amount was paid in full. + */ + @Nullable + public Float getTotalOwed() { + return total_owed; + } + + /** + * Gets the ISO 4217 currency code. + */ + public String getCurrencyCode() { + return currency_code; + } + + /** + * Gets the time duration of the trip in ISO 8601 HH:MM:SS format. + */ + public String getDuration() { + return duration; + } + + /** + * Gets the distance of the trip charged. + */ + public String getDistance() { + return distance; + } + + /** + * Gets the localized unit of distance. + */ + public String getDistanceLabel() { + return distance_label; + } + + public static class Charge { + private String name; + private float amount; + private String type; + + /** + * Gets the name of the charge. + */ + public String getName() { + return name; + } + + /** + * Gets the amount of the charge. + */ + public float getAmount() { + return amount; + } + + /** + * Gets the type of the charge. + */ + public String getType() { + return type; + } + } +}