diff --git a/iterableapi/src/main/java/com/iterable/iterableapi/IterableConstants.java b/iterableapi/src/main/java/com/iterable/iterableapi/IterableConstants.java index 850193c4e..3e17bf42d 100644 --- a/iterableapi/src/main/java/com/iterable/iterableapi/IterableConstants.java +++ b/iterableapi/src/main/java/com/iterable/iterableapi/IterableConstants.java @@ -119,7 +119,7 @@ public final class IterableConstants { public static final String SHARED_PREFS_SESSION_NO = "number_of_sessions"; public static final String SHARED_PREFS_LAST_SESSION = "last_session"; public static final String SHARED_PREFS_FIRST_SESSION = "first_session"; - public static final String SHARED_PREFS_EVENT_TYPE = "eventType"; + public static final String SHARED_PREFS_EVENT_TYPE = "dataType"; public static final String SHARED_PREFS_CRITERIA = "criteria"; public static final String SHARED_PREFS_CRITERIA_LIST = "criteriaList"; public static final String SHARED_PREFS_CRITERIA_TYPE = "dataType"; diff --git a/iterableapi/src/main/java/com/iterable/iterableapi/util/CriteriaCompletionChecker.java b/iterableapi/src/main/java/com/iterable/iterableapi/util/CriteriaCompletionChecker.java index 1abdb9c3c..f5e714fd3 100644 --- a/iterableapi/src/main/java/com/iterable/iterableapi/util/CriteriaCompletionChecker.java +++ b/iterableapi/src/main/java/com/iterable/iterableapi/util/CriteriaCompletionChecker.java @@ -30,9 +30,8 @@ public Integer getMatchedCriteria(String criteriaData, JSONArray localStoredEven JSONObject searchQuery = criteria.getJSONObject("searchQuery"); int currentCriteriaId = criteria.getInt("criteriaId"); - JSONArray eventsToProcess = getPurchaseEventsToProcess(); - - JSONArray nonPurchaseEvents = getNonPurchaseEvents(); + JSONArray eventsToProcess = getEventsWithCartItems(); + JSONArray nonPurchaseEvents = getNonCartEvents(); for (int j = 0; j < nonPurchaseEvents.length(); j++) { eventsToProcess.put(nonPurchaseEvents.getJSONObject(j)); } @@ -51,7 +50,7 @@ public Integer getMatchedCriteria(String criteriaData, JSONArray localStoredEven return criteriaId; } - private JSONArray getPurchaseEventsToProcess() { + private JSONArray getEventsWithCartItems() { JSONArray processedEvents = new JSONArray(); try { for (int i = 0; i < localStoredEventList.length(); i++) { @@ -59,21 +58,39 @@ private JSONArray getPurchaseEventsToProcess() { if (localEventData.has(IterableConstants.SHARED_PREFS_EVENT_TYPE) && ( localEventData.get(IterableConstants.SHARED_PREFS_EVENT_TYPE).equals(IterableConstants.TRACK_PURCHASE) || (localEventData.get(IterableConstants.SHARED_PREFS_EVENT_TYPE).equals(IterableConstants.TRACK_UPDATE_CART)))) { + + JSONObject updatedItem = new JSONObject(); if (localEventData.has(IterableConstants.KEY_ITEMS)) { JSONArray items = new JSONArray(localEventData.getString(IterableConstants.KEY_ITEMS)); for (int j = 0; j < items.length(); j++) { - JSONObject updatedItem = items.getJSONObject(j); - Iterator keys = localEventData.keys(); - while (keys.hasNext()) { - String key = keys.next(); - if (!key.equals(IterableConstants.KEY_ITEMS)) { - updatedItem.put(key, localEventData.get(key)); - } + JSONObject item = items.getJSONObject(j); + Iterator itemKeys = item.keys(); + + while (itemKeys.hasNext()) { + String key = itemKeys.next(); + updatedItem.put("shoppingCartItems." + key, item.get(key)); } - processedEvents.put(updatedItem); } } + + if (localEventData.has("dataFields")) { + JSONObject dataFields = localEventData.getJSONObject("dataFields"); + Iterator fieldKeys = dataFields.keys(); + while (fieldKeys.hasNext()) { + String key = fieldKeys.next(); + updatedItem.put(key, dataFields.get(key)); + } + } + + Iterator keys = localEventData.keys(); + while (keys.hasNext()) { + String key = keys.next(); + if (!key.equals(IterableConstants.KEY_ITEMS) && !key.equals("dataFields")) { + updatedItem.put(key, localEventData.get(key)); + } + } + processedEvents.put(updatedItem); } } } catch (JSONException e) { @@ -82,7 +99,7 @@ private JSONArray getPurchaseEventsToProcess() { return processedEvents; } - private JSONArray getNonPurchaseEvents() { + private JSONArray getNonCartEvents() { JSONArray nonPurchaseEvents = new JSONArray(); try { for (int i = 0; i < localStoredEventList.length(); i++) { @@ -155,7 +172,7 @@ private boolean evaluateFieldLogic(JSONObject node, JSONArray localEventData) th ArrayList localDataKeys = extractKeys(eventData); for (String key : localDataKeys) { - if (field.endsWith(key)) { + if (field.equals(key)) { Object matchedCountObj = eventData.get(key); if (evaluateComparison(comparatorType, matchedCountObj, node.getString("value"))) { return true;