You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by mo...@apache.org on 2011/07/15 21:15:40 UTC

svn commit: r1147285 - /ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppinglist/ShoppingListEvents.java

Author: mor
Date: Fri Jul 15 19:15:39 2011
New Revision: 1147285

URL: http://svn.apache.org/viewvc?rev=1147285&view=rev
Log:
Some mods to shopping list events to support anonymous users.

Modified:
    ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppinglist/ShoppingListEvents.java

Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppinglist/ShoppingListEvents.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppinglist/ShoppingListEvents.java?rev=1147285&r1=1147284&r2=1147285&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppinglist/ShoppingListEvents.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppinglist/ShoppingListEvents.java Fri Jul 15 19:15:39 2011
@@ -249,6 +249,8 @@ public class ShoppingListEvents {
         // check if we are to clear the cart first
         if (!append) {
             cart.clear();
+            // Prevent the system from creating a new shopping list every time the cart is restored for anonymous user.
+            cart.setAutoSaveListId(shoppingListId);
         }
 
         // get the survey info for all the items
@@ -279,7 +281,7 @@ public class ShoppingListEvents {
                 }
 
                 // check if we have existing survey responses to append
-                if (shoppingListSurveyInfo.containsKey(listId + "." + itemId)) {
+                if (shoppingListSurveyInfo.containsKey(listId + "." + itemId) && UtilValidate.isNotEmpty(shoppingListSurveyInfo.get(listId + "." + itemId))) {
                     attributes.put("surveyResponses", shoppingListSurveyInfo.get(listId + "." + itemId));
                 }
 
@@ -368,18 +370,19 @@ public class ShoppingListEvents {
         }
 
         String autoSaveListId = null;
+        GenericValue list = null;
         // TODO: add sorting, just in case there are multiple...
+        if (partyId != null) {
         Map<String, Object> findMap = UtilMisc.<String, Object>toMap("partyId", partyId, "productStoreId", productStoreId, "shoppingListTypeId", "SLT_SPEC_PURP", "listName", PERSISTANT_LIST_NAME);
         List<GenericValue> existingLists = delegator.findByAnd("ShoppingList", findMap);
         Debug.logInfo("Finding existing auto-save shopping list with:  \nfindMap: " + findMap + "\nlists: " + existingLists, module);
 
-        GenericValue list = null;
         if (existingLists != null && !existingLists.isEmpty()) {
             list = EntityUtil.getFirst(existingLists);
             autoSaveListId = list.getString("shoppingListId");
         }
-
-        if (list == null && dispatcher != null && userLogin != null) {
+        }
+        if (list == null && dispatcher != null) {
             Map<String, Object> listFields = UtilMisc.<String, Object>toMap("userLogin", userLogin, "productStoreId", productStoreId, "shoppingListTypeId", "SLT_SPEC_PURP", "listName", PERSISTANT_LIST_NAME);
             Map<String, Object> newListResult = dispatcher.runSync("createShoppingList", listFields);
 
@@ -397,9 +400,12 @@ public class ShoppingListEvents {
     public static void fillAutoSaveList(ShoppingCart cart, LocalDispatcher dispatcher) throws GeneralException {
         if (cart != null && dispatcher != null) {
             GenericValue userLogin = ShoppingListEvents.getCartUserLogin(cart);
-            if (userLogin == null) return; //only save carts when a user is logged in....
             Delegator delegator = cart.getDelegator();
-            String autoSaveListId = getAutoSaveListId(delegator, dispatcher, null, userLogin, cart.getProductStoreId());
+            String autoSaveListId = cart.getAutoSaveListId();
+            if (autoSaveListId == null) {
+                autoSaveListId = getAutoSaveListId(delegator, dispatcher, null, userLogin, cart.getProductStoreId());
+                cart.setAutoSaveListId(autoSaveListId);
+            }
 
             try {
                 String[] itemsArray = makeCartItemsArray(cart);
@@ -455,11 +461,6 @@ public class ShoppingListEvents {
             userLogin = (GenericValue) session.getAttribute("autoUserLogin");
         }
 
-        if (userLogin == null) {
-            // not logged in; cannot identify the user
-            return "success";
-        }
-
         // find the list ID
         String autoSaveListId = cart.getAutoSaveListId();
         if (autoSaveListId == null) {
@@ -469,6 +470,25 @@ public class ShoppingListEvents {
                 Debug.logError(e, module);
             }
             cart.setAutoSaveListId(autoSaveListId);
+        } else if (userLogin != null) {
+            String existingAutoSaveListId = null;
+            try {
+                existingAutoSaveListId = getAutoSaveListId(delegator, dispatcher, null, userLogin, cart.getProductStoreId());
+            } catch (GeneralException e) {
+                Debug.logError(e, module);
+            }
+            if (existingAutoSaveListId != null) {
+                if (!existingAutoSaveListId.equals(autoSaveListId)) {
+                    // Replace with existing shopping list
+                    cart.setAutoSaveListId(existingAutoSaveListId);
+                    autoSaveListId = existingAutoSaveListId;
+                    cart.setLastListRestore(null);
+                } else {
+                    // CASE: User first login and logout and then re-login again. This condition does not require a restore at all
+                    // because at this point items in the cart and the items in the shopping list are same so just return.
+                    return "success";
+                }
+            }
         }
 
         // check to see if we are okay to load this list
@@ -498,7 +518,7 @@ public class ShoppingListEvents {
         if (okayToLoad) {
             String prodCatalogId = CatalogWorker.getCurrentCatalogId(request);
             try {
-                addListToCart(delegator, dispatcher, cart, prodCatalogId, autoSaveListId, false, false, false);
+                addListToCart(delegator, dispatcher, cart, prodCatalogId, autoSaveListId, false, false, userLogin != null ? true : false);
                 cart.setLastListRestore(UtilDateTime.nowTimestamp());
             } catch (IllegalArgumentException e) {
                 Debug.logError(e, module);