diff --git a/app/src/main/java/com/example/vu/android/empowerplant/MainFragment.java b/app/src/main/java/com/example/vu/android/empowerplant/MainFragment.java index 447f599..0e10861 100644 --- a/app/src/main/java/com/example/vu/android/empowerplant/MainFragment.java +++ b/app/src/main/java/com/example/vu/android/empowerplant/MainFragment.java @@ -343,20 +343,27 @@ public void checkout() { @Override public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { progressDialog.dismiss(); - boolean success = response.isSuccessful(); + int statusCode = response.code(); + String responseBody = response.body() != null ? response.body().string() : ""; response.close(); - if (!success) { + + if (statusCode == 422) { + try { + JSONObject errorObj = new JSONObject(responseBody); + final String errorMessage = errorObj.optString("error", "Item is out of stock"); + getActivity().runOnUiThread(() -> { + new AlertDialog.Builder(getActivity()) + .setTitle("Cannot Complete Purchase") + .setMessage(errorMessage) + .setPositiveButton("OK", null) + .show(); + }); + } catch (JSONException e) { + handleGenericError(checkoutTransaction); + } + } else if (!response.isSuccessful()) { Log.d("checkout", "response failed"); - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - progressDialog.dismiss(); - - processDeliveryItem(checkoutTransaction); - - checkoutTransaction.finish(SpanStatus.INTERNAL_ERROR); - } - }); + handleGenericError(checkoutTransaction); } } @@ -410,6 +417,19 @@ private JSONObject buildJSONPostData(HashMap selectedStoreIte return postBody; } + private void handleGenericError(ITransaction checkoutTransaction) { + getActivity().runOnUiThread(() -> { + progressDialog.dismiss(); + new AlertDialog.Builder(getActivity()) + .setTitle("Error") + .setMessage("An error occurred processing your order. Please try again.") + .setPositiveButton("OK", null) + .show(); + processDeliveryItem(checkoutTransaction); + checkoutTransaction.finish(SpanStatus.INTERNAL_ERROR); + }); + } + private void processDeliveryItem(ITransaction checkoutTransaction) { Log.i("processDeliveryItem", "processDeliveryItem >>>"); ISpan processDeliverySpan = checkoutTransaction.startChild("task", "process delivery");