From a117d76487b94afde1c5fcfe4a2b1e043a4edd4f Mon Sep 17 00:00:00 2001 From: Ernestas <36773034+ernestasgobionis@users.noreply.github.com> Date: Mon, 27 Feb 2023 11:55:00 +0100 Subject: [PATCH 1/8] Update authenticate method for newer Android API --- .../java/com/infuse/clover/bridge/RNCloverBridgeModule.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java index eb32d6f..52a36eb 100644 --- a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java +++ b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java @@ -110,7 +110,6 @@ public void run() { try { CloverAuth.AuthResult result = CloverAuth.authenticate( getCurrentActivity(), - getAccount(), forceValidateToken, (long) timeout, TimeUnit.MILLISECONDS @@ -120,7 +119,7 @@ public void run() { map.putString("authToken", result.authToken); map.putString("message", result.errorMessage); promise.resolve(map); - } catch (OperationCanceledException | AuthenticatorException | IOException e) { + } catch (Exception e) { Log.e(TAG, "authentication_error", e); promise.reject("authentication_error", e.getMessage()); } From 7ad0587f12b11ba6b096a17b2703d8844f3e3a27 Mon Sep 17 00:00:00 2001 From: ernestasgobionis Date: Mon, 27 Feb 2023 12:45:44 +0100 Subject: [PATCH 2/8] Inventory connector added --- .watchmanconfig | 6 +++ .../clover/bridge/BridgeServiceConnector.java | 14 ++++++- .../bridge/InventoryItemsCallbackTask.java | 27 +++++++++++++ .../clover/bridge/RNCloverBridgeModule.java | 5 +++ index.d.ts | 38 ++++++++++++++----- index.js | 1 + 6 files changed, 80 insertions(+), 11 deletions(-) create mode 100644 .watchmanconfig create mode 100644 android/src/main/java/com/infuse/clover/bridge/InventoryItemsCallbackTask.java diff --git a/.watchmanconfig b/.watchmanconfig new file mode 100644 index 0000000..d92d987 --- /dev/null +++ b/.watchmanconfig @@ -0,0 +1,6 @@ +{ + "ignore_dirs": [ + ".git", + "node_modules" + ] +} diff --git a/android/src/main/java/com/infuse/clover/bridge/BridgeServiceConnector.java b/android/src/main/java/com/infuse/clover/bridge/BridgeServiceConnector.java index dcad610..e4ff202 100644 --- a/android/src/main/java/com/infuse/clover/bridge/BridgeServiceConnector.java +++ b/android/src/main/java/com/infuse/clover/bridge/BridgeServiceConnector.java @@ -8,6 +8,7 @@ import com.clover.sdk.v1.ServiceConnector; import com.clover.sdk.v1.merchant.MerchantConnector; import com.clover.sdk.v3.order.OrderConnector; +import com.clover.sdk.v3.inventory.InventoryConnector; public class BridgeServiceConnector implements ServiceConnector.OnServiceConnectedListener { private MerchantConnector merchantConnector; @@ -39,6 +40,17 @@ public MerchantConnector getMerchantConnector(Context context) { return merchantConnector; } + public InventoryConnector getInventoryConnector(Context context) { + Account account = getAccount(context); + if (inventoryConnector != null) { + inventoryConnector.disconnect(); + inventoryConnector = null; + } + inventoryConnector = new InventoryConector(context, account, this); + inventoryConnector.connect(); + return inventoryConnector; + } + @Override public void onServiceConnected(ServiceConnector connector) { Log.i(RNCloverBridgeModule.TAG, "service connected: " + connector); @@ -48,4 +60,4 @@ public void onServiceConnected(ServiceConnector connector) { public void onServiceDisconnected(ServiceConnector connector) { Log.i(RNCloverBridgeModule.TAG, "service disconnected: " + connector); } -} \ No newline at end of file +} diff --git a/android/src/main/java/com/infuse/clover/bridge/InventoryItemsCallbackTask.java b/android/src/main/java/com/infuse/clover/bridge/InventoryItemsCallbackTask.java new file mode 100644 index 0000000..7c97e2c --- /dev/null +++ b/android/src/main/java/com/infuse/clover/bridge/InventoryItemsCallbackTask.java @@ -0,0 +1,27 @@ +package com.infuse.clover.bridge; + +import android.util.Log; + +import com.clover.sdk.v1.ResultStatus; +import com.clover.sdk.v3.inventory.Item; +import com.clover.sdk.v3.inventory.InventoryConnector; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.Promise; +import com.facebook.react.bridge.WritableMap; + + +public class InventoryItemsCallbackTask { + private Promise promise; + + public void onServiceSuccess(Item result, ResultStatus status) { + Log.d("Inventory Success", String.format(Locale.US, "on service success: %s", status)); + } + + public void onServiceFailure(ResultStatus status) { + Log.w("Inventory Error", String.format(Locale.US, "on service failure: %s", status)); + } + + public void onServiceConnectionFailure() { + Log.w("Inventory Connect Error", String.format(Locale.US, "on service connect failure")); + } +} diff --git a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java index 52a36eb..615a24b 100644 --- a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java +++ b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java @@ -102,6 +102,11 @@ public void getMerchant(final Promise promise) { new BridgeServiceConnector().getMerchantConnector(mContext).getMerchant(new MerchantCallbackTask(promise)); } + @ReactMethod + public void getInventoryItems(final Promise promise) { + new BridgeServiceConnector().getInventoryConnector(mContext).getItems(new InventoryItemsCallbackTask(promise)); + } + @ReactMethod public void authenticate(final boolean forceValidateToken, final int timeout, final Promise promise) { Thread authThread = new Thread(new Runnable() { diff --git a/index.d.ts b/index.d.ts index 6072b70..7d61ee5 100644 --- a/index.d.ts +++ b/index.d.ts @@ -29,6 +29,23 @@ interface MerchantResult extends Result { merchant: Merchant; } +interface InventoryResult extends Result { + statusMessage?: String; + inventory: Inventory; +} + +interface Inventory extends ObjectRef { + name: String; + quantity: Number; + price: Number; + sku: String; + barcode: String; + category: String; + taxRate: Number; + taxName: String; + taxable: Boolean; +} + interface Merchant extends ObjectRef { name: String; email: String; @@ -64,7 +81,7 @@ interface Refund extends Transaction { payment: ObjectRef; } -interface Credit extends Transaction { +interface Credit extends Transaction { order: ObjectRef; tender: Tender; } @@ -94,15 +111,15 @@ interface VoidReason { DEVELOPER_PAY_TIP_ADJUST_FAILED: String; FAILED: String; GIFTCARD_LOAD_FAILED: String; - NOT_APPROVED: String; - REJECT_DUPLICATE: String; - REJECT_OFFLINE: String; + NOT_APPROVED: String; + REJECT_DUPLICATE: String; + REJECT_OFFLINE: String; REJECT_PARTIAL_AUTH: String; REJECT_SIGNATURE: String; - TRANSPORT_ERROR: String; - USER_CANCEL: String; - USER_CUSTOMER_CANCEL: String; - USER_GIFTCARD_LOAD_CANCEL: String; + TRANSPORT_ERROR: String; + USER_CANCEL: String; + USER_CUSTOMER_CANCEL: String; + USER_GIFTCARD_LOAD_CANCEL: String; } interface TipMode { @@ -224,6 +241,7 @@ declare const _default: { * @returns {Promise} A promise that resolves to a MerchantResult. */ getMerchant: () => Promise; + getInventoryItems: () => Promise; enableCustomerMode: () => Void; disableCustomerMode: () => Void; print: (imagePath: String) => Promise; @@ -245,7 +263,7 @@ declare const _default: { // Payment Methods /////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////// /** - * Readies the Clover Bridge for sending payment requests to Clover device. Must be called before calling any payment method and should be + * Readies the Clover Bridge for sending payment requests to Clover device. Must be called before calling any payment method and should be * called as soon as possible. * @param {String} raid Remote Application Id. Obtained from Clover App dashboard. */ @@ -295,4 +313,4 @@ declare const _default: { EVENT: BridgeEvent } -export default _default; \ No newline at end of file +export default _default; diff --git a/index.js b/index.js index 77c201f..24163a6 100644 --- a/index.js +++ b/index.js @@ -8,6 +8,7 @@ export default { authenticate: (force = false, timeout = 10000) => RNCloverBridge.authenticate(force, timeout), getMerchant: () => RNCloverBridge.getMerchant(), + getInventoryItems: () => RNCloverBridge.getInventoryItems(), isFlex: () => RNCloverBridge.isFlex, isMini: () => RNCloverBridge.isMini, getSpaVersion: () => RNCloverBridge.getSpaVersion, From 058b391f5c7b18008facc43b430470e4ef243226 Mon Sep 17 00:00:00 2001 From: ernestasgobionis Date: Tue, 28 Feb 2023 12:32:25 +0100 Subject: [PATCH 3/8] Remove inventory connector --- .../clover/bridge/BridgeServiceConnector.java | 12 --------- .../bridge/InventoryItemsCallbackTask.java | 27 ------------------- .../clover/bridge/RNCloverBridgeModule.java | 5 ---- 3 files changed, 44 deletions(-) delete mode 100644 android/src/main/java/com/infuse/clover/bridge/InventoryItemsCallbackTask.java diff --git a/android/src/main/java/com/infuse/clover/bridge/BridgeServiceConnector.java b/android/src/main/java/com/infuse/clover/bridge/BridgeServiceConnector.java index e4ff202..07feee5 100644 --- a/android/src/main/java/com/infuse/clover/bridge/BridgeServiceConnector.java +++ b/android/src/main/java/com/infuse/clover/bridge/BridgeServiceConnector.java @@ -8,7 +8,6 @@ import com.clover.sdk.v1.ServiceConnector; import com.clover.sdk.v1.merchant.MerchantConnector; import com.clover.sdk.v3.order.OrderConnector; -import com.clover.sdk.v3.inventory.InventoryConnector; public class BridgeServiceConnector implements ServiceConnector.OnServiceConnectedListener { private MerchantConnector merchantConnector; @@ -40,17 +39,6 @@ public MerchantConnector getMerchantConnector(Context context) { return merchantConnector; } - public InventoryConnector getInventoryConnector(Context context) { - Account account = getAccount(context); - if (inventoryConnector != null) { - inventoryConnector.disconnect(); - inventoryConnector = null; - } - inventoryConnector = new InventoryConector(context, account, this); - inventoryConnector.connect(); - return inventoryConnector; - } - @Override public void onServiceConnected(ServiceConnector connector) { Log.i(RNCloverBridgeModule.TAG, "service connected: " + connector); diff --git a/android/src/main/java/com/infuse/clover/bridge/InventoryItemsCallbackTask.java b/android/src/main/java/com/infuse/clover/bridge/InventoryItemsCallbackTask.java deleted file mode 100644 index 7c97e2c..0000000 --- a/android/src/main/java/com/infuse/clover/bridge/InventoryItemsCallbackTask.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.infuse.clover.bridge; - -import android.util.Log; - -import com.clover.sdk.v1.ResultStatus; -import com.clover.sdk.v3.inventory.Item; -import com.clover.sdk.v3.inventory.InventoryConnector; -import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.WritableMap; - - -public class InventoryItemsCallbackTask { - private Promise promise; - - public void onServiceSuccess(Item result, ResultStatus status) { - Log.d("Inventory Success", String.format(Locale.US, "on service success: %s", status)); - } - - public void onServiceFailure(ResultStatus status) { - Log.w("Inventory Error", String.format(Locale.US, "on service failure: %s", status)); - } - - public void onServiceConnectionFailure() { - Log.w("Inventory Connect Error", String.format(Locale.US, "on service connect failure")); - } -} diff --git a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java index 615a24b..52a36eb 100644 --- a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java +++ b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java @@ -102,11 +102,6 @@ public void getMerchant(final Promise promise) { new BridgeServiceConnector().getMerchantConnector(mContext).getMerchant(new MerchantCallbackTask(promise)); } - @ReactMethod - public void getInventoryItems(final Promise promise) { - new BridgeServiceConnector().getInventoryConnector(mContext).getItems(new InventoryItemsCallbackTask(promise)); - } - @ReactMethod public void authenticate(final boolean forceValidateToken, final int timeout, final Promise promise) { Thread authThread = new Thread(new Runnable() { From 72fb7d8f3f4eedbbf8a3145c6a09bf6ec6b17503 Mon Sep 17 00:00:00 2001 From: ernestasgobionis Date: Tue, 14 Mar 2023 15:20:51 +0100 Subject: [PATCH 4/8] Order fetch added --- .../infuse/clover/bridge/RNCloverBridgeModule.java | 14 ++++++++++++++ index.js | 1 + 2 files changed, 15 insertions(+) diff --git a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java index 52a36eb..80d3847 100644 --- a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java +++ b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java @@ -196,6 +196,20 @@ public void voidPaymentRefund(ReadableMap options, Promise promise) { bridgePaymentConnector.voidPaymentRefund(options, promise); } + @ReactMethod + public void getOrder(final String orderId) { + try { + OrderConnector orderConnector = new BridgeServiceConnector().getOrderConnector(mContext); + Order order = orderConnector.getOrder(orderId); + + return order; + } catch (RemoteException | ClientException | ServiceException | BindingException e) { + Log.e(TAG, "", e); + } catch (NoSuchKeyException | UnexpectedNativeTypeException e) { + Log.e(TAG, "RN", e); + } + } + @ReactMethod public void printPayment(ReadableMap options) { try { diff --git a/index.js b/index.js index 24163a6..7277c5d 100644 --- a/index.js +++ b/index.js @@ -8,6 +8,7 @@ export default { authenticate: (force = false, timeout = 10000) => RNCloverBridge.authenticate(force, timeout), getMerchant: () => RNCloverBridge.getMerchant(), + getOrder: (orderId) => RNCloverBridge.getOrder(orderId), getInventoryItems: () => RNCloverBridge.getInventoryItems(), isFlex: () => RNCloverBridge.isFlex, isMini: () => RNCloverBridge.isMini, From cf02078224fe46ac75c804065493a41c3063060b Mon Sep 17 00:00:00 2001 From: ernestasgobionis Date: Tue, 14 Mar 2023 15:51:01 +0100 Subject: [PATCH 5/8] getOrder functionality update --- .../com/infuse/clover/bridge/RNCloverBridgeModule.java | 7 +++++-- index.d.ts | 6 ++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java index 80d3847..b19f6b7 100644 --- a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java +++ b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java @@ -15,6 +15,7 @@ import android.os.RemoteException; import android.util.DisplayMetrics; import android.util.Log; +import java.util.Optional; import android.view.WindowManager; import com.clover.sdk.util.CloverAccount; @@ -197,16 +198,18 @@ public void voidPaymentRefund(ReadableMap options, Promise promise) { } @ReactMethod - public void getOrder(final String orderId) { + public void getOrder(final String orderId, final Promise promise) { try { OrderConnector orderConnector = new BridgeServiceConnector().getOrderConnector(mContext); Order order = orderConnector.getOrder(orderId); - return order; + promise.resolve(order); } catch (RemoteException | ClientException | ServiceException | BindingException e) { Log.e(TAG, "", e); + promise.reject("order_error", e.getMessage()); } catch (NoSuchKeyException | UnexpectedNativeTypeException e) { Log.e(TAG, "RN", e); + promise.reject("order_error", e.getMessage()); } } diff --git a/index.d.ts b/index.d.ts index 7d61ee5..6ad8ad8 100644 --- a/index.d.ts +++ b/index.d.ts @@ -29,6 +29,11 @@ interface MerchantResult extends Result { merchant: Merchant; } +interface OrderResult extends Result { + statusMessage?: String; + order: {}; +} + interface InventoryResult extends Result { statusMessage?: String; inventory: Inventory; @@ -241,6 +246,7 @@ declare const _default: { * @returns {Promise} A promise that resolves to a MerchantResult. */ getMerchant: () => Promise; + getOrder: () => Promise; getInventoryItems: () => Promise; enableCustomerMode: () => Void; disableCustomerMode: () => Void; From a99955796bfbc4868b20bfa70bba2d68594891b6 Mon Sep 17 00:00:00 2001 From: ernestasgobionis Date: Thu, 16 Mar 2023 01:48:03 +0100 Subject: [PATCH 6/8] RN bridge for getOrder updates --- .../infuse/clover/bridge/RNCloverBridgeModule.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java index b19f6b7..1f16e54 100644 --- a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java +++ b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java @@ -203,7 +203,17 @@ public void getOrder(final String orderId, final Promise promise) { OrderConnector orderConnector = new BridgeServiceConnector().getOrderConnector(mContext); Order order = orderConnector.getOrder(orderId); - promise.resolve(order); + WritableMap orderMap = Arguments.createMap(); + orderMap.putString("id", order.getId()); + orderMap.putString("currency", order.getCurrency()); + orderMap.putLong("total", order.getTotal()); + + WritableMap map = Arguments.createMap(); + map.putBoolean("success", result.errorMessage == null); + map.putMap("order", orderMap); + map.putString("message", result.errorMessage); + + promise.resolve(map); } catch (RemoteException | ClientException | ServiceException | BindingException e) { Log.e(TAG, "", e); promise.reject("order_error", e.getMessage()); From bda50c09afabd83140acee1b31b0004720161e67 Mon Sep 17 00:00:00 2001 From: ernestasgobionis Date: Thu, 16 Mar 2023 14:15:34 +0100 Subject: [PATCH 7/8] Updates to order response, typings --- .../clover/bridge/RNCloverBridgeModule.java | 24 ++++++++++++------- index.d.ts | 16 ++++++++++--- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java index 1f16e54..e537e08 100644 --- a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java +++ b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java @@ -28,6 +28,7 @@ import com.clover.sdk.v1.printer.job.StaticReceiptPrintJob; import com.clover.sdk.v3.order.Order; import com.clover.sdk.v3.order.OrderConnector; +import com.clover.sdk.v3.order.OrderType; import com.clover.sdk.v3.payments.Payment; import com.clover.sdk.v3.scanner.BarcodeResult; import com.facebook.react.bridge.ActivityEventListener; @@ -203,17 +204,24 @@ public void getOrder(final String orderId, final Promise promise) { OrderConnector orderConnector = new BridgeServiceConnector().getOrderConnector(mContext); Order order = orderConnector.getOrder(orderId); + WritableMap responseMap = Arguments.createMap(); WritableMap orderMap = Arguments.createMap(); - orderMap.putString("id", order.getId()); - orderMap.putString("currency", order.getCurrency()); - orderMap.putLong("total", order.getTotal()); + WritableMap orderTypeMap = Arguments.createMap(); + OrderType orderType = order.getOrderType(); - WritableMap map = Arguments.createMap(); - map.putBoolean("success", result.errorMessage == null); - map.putMap("order", orderMap); - map.putString("message", result.errorMessage); + orderTypeMap.putString("id", orderType.getId()); + orderTypeMap.putString("label", orderType.getLabel()); - promise.resolve(map); + orderMap.putString("id", order.getId()); + orderMap.putString("currency", order.getCurrency()); + orderMap.putDouble("total", order.getTotal()); + orderMap.putString("state", order.getState()); + orderMap.putString("testMode", order.getTestMode()); + orderMap.putMap("type", orderTypeMap); + + responseMap.putBoolean("success", true); + responseMap.putMap("order", orderMap); + promise.resolve(responseMap); } catch (RemoteException | ClientException | ServiceException | BindingException e) { Log.e(TAG, "", e); promise.reject("order_error", e.getMessage()); diff --git a/index.d.ts b/index.d.ts index 6ad8ad8..1b930ff 100644 --- a/index.d.ts +++ b/index.d.ts @@ -30,8 +30,7 @@ interface MerchantResult extends Result { } interface OrderResult extends Result { - statusMessage?: String; - order: {}; + order: Order; } interface InventoryResult extends Result { @@ -57,6 +56,17 @@ interface Merchant extends ObjectRef { location: MerchantLocation; } +interface Order extends ObjectRef { + currency: String; + total: Number; + state: String; + testMode: String; + type: { + id: String; + label: String; + } +} + interface MerchantLocation { country: String; city: String; @@ -246,7 +256,7 @@ declare const _default: { * @returns {Promise} A promise that resolves to a MerchantResult. */ getMerchant: () => Promise; - getOrder: () => Promise; + getOrder: (orderId: string) => Promise; getInventoryItems: () => Promise; enableCustomerMode: () => Void; disableCustomerMode: () => Void; From c783c01913534b996d6d0ab525e1996b745a19e4 Mon Sep 17 00:00:00 2001 From: ernestasgobionis Date: Tue, 21 Mar 2023 00:03:19 +0100 Subject: [PATCH 8/8] Get order data formatting fixes --- .../infuse/clover/bridge/RNCloverBridgeModule.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java index e537e08..1a20e09 100644 --- a/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java +++ b/android/src/main/java/com/infuse/clover/bridge/RNCloverBridgeModule.java @@ -209,15 +209,16 @@ public void getOrder(final String orderId, final Promise promise) { WritableMap orderTypeMap = Arguments.createMap(); OrderType orderType = order.getOrderType(); - orderTypeMap.putString("id", orderType.getId()); - orderTypeMap.putString("label", orderType.getLabel()); - orderMap.putString("id", order.getId()); orderMap.putString("currency", order.getCurrency()); orderMap.putDouble("total", order.getTotal()); orderMap.putString("state", order.getState()); - orderMap.putString("testMode", order.getTestMode()); - orderMap.putMap("type", orderTypeMap); + orderMap.putBoolean("testMode", order.getTestMode()); + if (orderType != null) { + orderTypeMap.putString("id", orderType.getId()); + orderTypeMap.putString("label", orderType.getLabel()); + orderMap.putMap("type", orderTypeMap); + } responseMap.putBoolean("success", true); responseMap.putMap("order", orderMap);