KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > ofbiz > order > shoppingcart > ShoppingCartEvents


1 /*
2  * $Id: ShoppingCartEvents.java 7145 2006-03-31 05:54:20Z jacopo $
3  *
4  * Copyright (c) 2001, 2002 The Open For Business Project - www.ofbiz.org
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included
14  * in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
21  * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
22  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  */

24 package org.ofbiz.order.shoppingcart;
25
26 import java.text.NumberFormat JavaDoc;
27 import java.util.Iterator JavaDoc;
28 import java.util.LinkedList JavaDoc;
29 import java.util.List JavaDoc;
30 import java.util.Locale JavaDoc;
31 import java.util.Map JavaDoc;
32 import javax.servlet.http.HttpServletRequest JavaDoc;
33 import javax.servlet.http.HttpServletResponse JavaDoc;
34 import javax.servlet.http.HttpSession JavaDoc;
35
36 import org.ofbiz.base.util.Debug;
37 import org.ofbiz.base.util.UtilDateTime;
38 import org.ofbiz.base.util.UtilFormatOut;
39 import org.ofbiz.base.util.UtilHttp;
40 import org.ofbiz.base.util.UtilMisc;
41 import org.ofbiz.base.util.UtilProperties;
42 import org.ofbiz.base.util.UtilValidate;
43 import org.ofbiz.entity.GenericDelegator;
44 import org.ofbiz.entity.GenericEntityException;
45 import org.ofbiz.entity.GenericPK;
46 import org.ofbiz.entity.GenericValue;
47 import org.ofbiz.entity.util.EntityUtil;
48 import org.ofbiz.order.shoppingcart.product.ProductPromoWorker;
49 import org.ofbiz.product.catalog.CatalogWorker;
50 import org.ofbiz.product.config.ProductConfigWorker;
51 import org.ofbiz.product.config.ProductConfigWrapper;
52 import org.ofbiz.product.product.ProductWorker;
53 import org.ofbiz.product.store.ProductStoreSurveyWrapper;
54 import org.ofbiz.product.store.ProductStoreWorker;
55 import org.ofbiz.security.Security;
56 import org.ofbiz.service.GenericServiceException;
57 import org.ofbiz.service.LocalDispatcher;
58 import org.ofbiz.service.ModelService;
59 import org.ofbiz.service.ServiceUtil;
60 import org.ofbiz.webapp.control.RequestHandler;
61
62 /**
63  * Shopping cart events.
64  *
65  * @author <a HREF="mailto:jaz@ofbiz.org">Andy Zeneski</a>
66  * @author <a HREF="mailto:tristana@twibble.org">Tristan Austin</a>
67  * @version $Rev: 7145 $
68  * @since 2.0
69  */

70 public class ShoppingCartEvents {
71
72     public static String JavaDoc module = ShoppingCartEvents.class.getName();
73     public static final String JavaDoc resource = "OrderUiLabels";
74     public static final String JavaDoc resource_error = "OrderErrorUiLabels";
75
76     private static final String JavaDoc NO_ERROR = "noerror";
77     private static final String JavaDoc NON_CRITICAL_ERROR = "noncritical";
78     private static final String JavaDoc ERROR = "error";
79
80     public static String JavaDoc addProductPromoCode(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
81         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
82         ShoppingCart cart = getCartObject(request);
83         String JavaDoc productPromoCodeId = request.getParameter("productPromoCodeId");
84         if (UtilValidate.isNotEmpty(productPromoCodeId)) {
85             String JavaDoc checkResult = cart.addProductPromoCode(productPromoCodeId, dispatcher);
86             if (UtilValidate.isNotEmpty(checkResult)) {
87                 request.setAttribute("_ERROR_MESSAGE_", checkResult);
88                 return "error";
89             }
90         }
91         return "success";
92     }
93
94     /** Event to add an item to the shopping cart. */
95     public static String JavaDoc addToCart(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
96         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
97         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
98         ShoppingCart cart = getCartObject(request);
99         ShoppingCartHelper cartHelper = new ShoppingCartHelper(delegator, dispatcher, cart);
100         String JavaDoc controlDirective = null;
101         Map JavaDoc result = null;
102         String JavaDoc productId = null;
103         String JavaDoc itemType = null;
104         String JavaDoc itemDescription = null;
105         String JavaDoc productCategoryId = null;
106         String JavaDoc priceStr = null;
107         double price = 0.00;
108         String JavaDoc quantityStr = null;
109         double quantity = 0;
110         String JavaDoc reservStartStr = null;
111         String JavaDoc reservEndStr = null;
112         java.sql.Timestamp JavaDoc reservStart = null;
113         java.sql.Timestamp JavaDoc reservEnd = null;
114         String JavaDoc reservLengthStr = null;
115         double reservLength = 0;
116         String JavaDoc reservPersonsStr = null;
117         double reservPersons = 0;
118         String JavaDoc shipBeforeStr = null;
119         String JavaDoc shipBeforeDateStr = null;
120         String JavaDoc shipAfterDateStr = null;
121         java.sql.Timestamp JavaDoc shipBeforeDate = null;
122         java.sql.Timestamp JavaDoc shipAfterDate = null;
123
124         // not used right now: Map attributes = null;
125
String JavaDoc catalogId = CatalogWorker.getCurrentCatalogId(request);
126         Locale JavaDoc locale = UtilHttp.getLocale(request);
127         NumberFormat JavaDoc nf = NumberFormat.getNumberInstance(locale);
128
129         // Get the parameters as a MAP, remove the productId and quantity params.
130
Map JavaDoc paramMap = UtilHttp.getParameterMap(request);
131
132         // Get shoppingList info if passed
133
String JavaDoc shoppingListId = request.getParameter("shoppingListId");
134         String JavaDoc shoppingListItemSeqId = request.getParameter("shoppingListItemSeqId");
135         if (paramMap.containsKey("ADD_PRODUCT_ID")) {
136             productId = (String JavaDoc) paramMap.remove("ADD_PRODUCT_ID");
137         } else if (paramMap.containsKey("add_product_id")) {
138             productId = (String JavaDoc) paramMap.remove("add_product_id");
139         }
140
141         if (paramMap.containsKey("ADD_CATEGORY_ID")) {
142             productCategoryId = (String JavaDoc) paramMap.remove("ADD_CATEGORY_ID");
143         } else if (paramMap.containsKey("add_category_id")) {
144             productCategoryId = (String JavaDoc) paramMap.remove("add_category_id");
145         }
146         if (productCategoryId != null && productCategoryId.length() == 0) {
147             productCategoryId = null;
148         }
149
150         if (productId == null) {
151             // before returning error; check make sure we aren't adding a special item type
152
if (paramMap.containsKey("ADD_ITEM_TYPE")) {
153                 itemType = (String JavaDoc) paramMap.remove("ADD_ITEM_TYPE");
154             } else if (paramMap.containsKey("add_item_type")) {
155                 itemType = (String JavaDoc) paramMap.remove("add_item_type");
156             } else {
157                 request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource, "cart.addToCart.noProductInfoPassed", locale));
158                 return "success"; // not critical return to same page
159
}
160         } else {
161             try {
162                 String JavaDoc pId = ProductWorker.findProductId(delegator, productId);
163                 if (pId != null) {
164                     productId = pId;
165                 }
166             } catch (Throwable JavaDoc e) {
167                 Debug.logWarning(e, module);
168             }
169         }
170
171         // check for an itemDescription
172
if (paramMap.containsKey("ADD_ITEM_DESCRIPTION")) {
173             itemDescription = (String JavaDoc) paramMap.remove("ADD_ITEM_DESCRIPTION");
174         } else if (paramMap.containsKey("add_item_description")) {
175             itemDescription = (String JavaDoc) paramMap.remove("add_item_description");
176         }
177         if (itemDescription != null && itemDescription.length() == 0) {
178             itemDescription = null;
179         }
180
181         // Get the ProductConfigWrapper (it's not null only for configurable items)
182
ProductConfigWrapper configWrapper = null;
183         configWrapper = ProductConfigWorker.getProductConfigWrapper(productId, cart.getCurrency(), request);
184
185         if (configWrapper != null) {
186             // The choices selected by the user are taken from request and set in the wrapper
187
ProductConfigWorker.fillProductConfigWrapper(configWrapper, request);
188             if (!configWrapper.isCompleted()) {
189                 // The configuration is not valid
190
request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource, "cart.addToCart.productConfigurationIsNotValid", locale));
191                 return "error";
192             }
193         }
194
195         // get the override price
196
if (paramMap.containsKey("PRICE")) {
197             priceStr = (String JavaDoc) paramMap.remove("PRICE");
198         } else if (paramMap.containsKey("price")) {
199             priceStr = (String JavaDoc) paramMap.remove("price");
200         }
201         if (priceStr == null) {
202             priceStr = "0"; // default price is 0
203
}
204
205         // get the renting data
206
if (paramMap.containsKey("reservStart")) {
207             reservStartStr = (String JavaDoc) paramMap.remove("reservStart");
208             if (reservStartStr.length() == 10) // only date provided, no time string?
209
reservStartStr += " 00:00:00.000000000"; // should have format: yyyy-mm-dd hh:mm:ss.fffffffff
210
if (reservStartStr.length() >0) {
211                 try {
212                     reservStart = java.sql.Timestamp.valueOf((String JavaDoc) reservStartStr);
213                 } catch (Exception JavaDoc e) {
214                     Debug.logWarning(e,"Problems parsing Reservation start string: "
215                                 + reservStartStr, module);
216                     reservStart = null;
217                     request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource,"cart.addToCart.rental.startDate", locale));
218                     return "error";
219                 }
220             }
221             else reservStart = null;
222
223             if (paramMap.containsKey("reservEnd")) {
224                 reservEndStr = (String JavaDoc) paramMap.remove("reservEnd");
225                 if (reservEndStr.length() == 10) // only date provided, no time string?
226
reservEndStr += " 00:00:00.000000000"; // should have format: yyyy-mm-dd hh:mm:ss.fffffffff
227
if (reservEndStr.length() > 0) {
228                     try {
229                         reservEnd = java.sql.Timestamp.valueOf((String JavaDoc) reservEndStr);
230                     } catch (Exception JavaDoc e) {
231                         Debug.logWarning(e,"Problems parsing Reservation end string: " + reservEndStr, module);
232                         reservEnd = null;
233                         request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource,"cart.addToCart.rental.endDate", locale));
234                         return "error";
235                     }
236                 }
237                 else reservEnd = null;
238             }
239
240             if (reservStart != null && reservEnd != null) {
241                 reservLength = UtilDateTime.getInterval(reservStart,reservEnd)/86400000;
242             }
243
244
245
246             if (reservStart != null && paramMap.containsKey("reservLength")) {
247                 reservLengthStr = (String JavaDoc) paramMap.remove("reservLength");
248                 // parse the reservation Length
249
try {
250                     reservLength = nf.parse(reservLengthStr).doubleValue();
251                 } catch (Exception JavaDoc e) {
252                     Debug.logWarning(e,"Problems parsing reservation length string: "
253                                     + reservLengthStr, module);
254                     reservLength = 1;
255                     request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderReservationLengthShouldBeAPositiveNumber", locale));
256                     return "error";
257                 }
258             }
259
260             if (reservStart != null && paramMap.containsKey("reservPersons")) {
261                 reservPersonsStr = (String JavaDoc) paramMap.remove("reservPersons");
262                 // parse the number of persons
263
try {
264                     reservPersons = nf.parse(reservPersonsStr).doubleValue();
265                 } catch (Exception JavaDoc e) {
266                     Debug.logWarning(e,"Problems parsing reservation number of persons string: " + reservPersonsStr, module);
267                     reservPersons = 1;
268                     request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderNumberOfPersonsShouldBeOneOrLarger", locale));
269                     return "error";
270                 }
271             }
272         }
273
274         // get the quantity
275
if (paramMap.containsKey("QUANTITY")) {
276             quantityStr = (String JavaDoc) paramMap.remove("QUANTITY");
277         } else if (paramMap.containsKey("quantity")) {
278             quantityStr = (String JavaDoc) paramMap.remove("quantity");
279         }
280         if (quantityStr == null) {
281             quantityStr = "1"; // default quantity is 1
282
}
283
284         // parse the price
285
try {
286             price = nf.parse(priceStr).doubleValue();
287         } catch (Exception JavaDoc e) {
288             Debug.logWarning(e, "Problems parsing price string: " + priceStr, module);
289             price = 0.00;
290         }
291
292         // parse the quantity
293
try {
294             quantity = nf.parse(quantityStr).doubleValue();
295         } catch (Exception JavaDoc e) {
296             Debug.logWarning(e, "Problems parsing quantity string: " + quantityStr, module);
297             quantity = 1;
298         }
299
300         // get the selected amount
301
String JavaDoc selectedAmountStr = "0.00";
302         if (paramMap.containsKey("ADD_AMOUNT")) {
303             selectedAmountStr = (String JavaDoc) paramMap.remove("ADD_AMOUNT");
304         } else if (paramMap.containsKey("add_amount")) {
305             selectedAmountStr = (String JavaDoc) paramMap.remove("add_amount");
306         }
307
308         // parse the amount
309
double amount = 0.00;
310         if (selectedAmountStr != null && selectedAmountStr.length() > 0) {
311             try {
312                 amount = nf.parse(selectedAmountStr).doubleValue();
313             } catch (Exception JavaDoc e) {
314                 Debug.logWarning(e, "Problem parsing amount string: " + selectedAmountStr, module);
315                 amount = 0.00;
316             }
317         }
318
319         // get the ship before date (handles both yyyy-mm-dd input and full timestamp)
320
shipBeforeDateStr = (String JavaDoc) paramMap.remove("shipBeforeDate");
321         if (shipBeforeDateStr != null && shipBeforeDateStr.length() > 0) {
322             if (shipBeforeDateStr.length() == 10) shipBeforeDateStr += " 00:00:00.000";
323             try {
324                 shipBeforeDate = java.sql.Timestamp.valueOf(shipBeforeDateStr);
325             } catch (IllegalArgumentException JavaDoc e) {
326                 Debug.logWarning(e, "Bad shipBeforeDate input: " + e.getMessage(), module);
327                 shipBeforeDate = null;
328             }
329         }
330
331         // get the ship after date (handles both yyyy-mm-dd input and full timestamp)
332
shipAfterDateStr = (String JavaDoc) paramMap.remove("shipAfterDate");
333         if (shipAfterDateStr != null && shipAfterDateStr.length() > 0) {
334             if (shipAfterDateStr.length() == 10) shipAfterDateStr += " 00:00:00.000";
335             try {
336                 shipAfterDate = java.sql.Timestamp.valueOf(shipAfterDateStr);
337             } catch (IllegalArgumentException JavaDoc e) {
338                 Debug.logWarning(e, "Bad shipAfterDate input: " + e.getMessage(), module);
339                 shipAfterDate = null;
340             }
341         }
342
343         // check for an add-to cart survey
344
List JavaDoc surveyResponses = null;
345         if (productId != null) {
346             String JavaDoc productStoreId = ProductStoreWorker.getProductStoreId(request);
347             List JavaDoc productSurvey = ProductStoreWorker.getProductSurveys(delegator, productStoreId, productId, "CART_ADD");
348             if (productSurvey != null && productSurvey.size() > 0) {
349                 // TODO: implement multiple survey per product
350
GenericValue survey = EntityUtil.getFirst(productSurvey);
351                 String JavaDoc surveyResponseId = (String JavaDoc) request.getAttribute("surveyResponseId");
352                 if (surveyResponseId != null) {
353                     surveyResponses = UtilMisc.toList(surveyResponseId);
354                 } else {
355                     Map JavaDoc surveyContext = UtilHttp.getParameterMap(request);
356                     GenericValue userLogin = cart.getUserLogin();
357                     String JavaDoc partyId = null;
358                     if (userLogin != null) {
359                         partyId = userLogin.getString("partyId");
360                     }
361                     String JavaDoc formAction = "/additemsurvey";
362                     String JavaDoc nextPage = RequestHandler.getNextPageUri(request.getPathInfo());
363                     if (nextPage != null) {
364                         formAction = formAction + "/" + nextPage;
365                     }
366                     ProductStoreSurveyWrapper wrapper = new ProductStoreSurveyWrapper(survey, partyId, surveyContext);
367                     request.setAttribute("surveyWrapper", wrapper);
368                     request.setAttribute("surveyAction", formAction); // will be used as the form action of the survey
369
return "survey";
370                 }
371             }
372         }
373         if (surveyResponses != null) {
374             paramMap.put("surveyResponses", surveyResponses);
375         }
376
377         // Translate the parameters and add to the cart
378
result = cartHelper.addToCart(catalogId, shoppingListId, shoppingListItemSeqId, productId, productCategoryId,
379                 itemType, itemDescription, price, amount, quantity, reservStart, reservLength, reservPersons, shipBeforeDate, shipAfterDate, configWrapper, paramMap);
380             controlDirective = processResult(result, request);
381
382         // Determine where to send the browser
383
if (controlDirective.equals(ERROR)) {
384             return "error";
385         } else {
386             if (cart.viewCartOnAdd()) {
387                 return "viewcart";
388             } else {
389                 return "success";
390             }
391         }
392     }
393
394     public static String JavaDoc addToCartFromOrder(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
395         String JavaDoc orderId = request.getParameter("orderId");
396         String JavaDoc[] itemIds = request.getParameterValues("item_id");
397         // not used yet: Locale locale = UtilHttp.getLocale(request);
398

399         ShoppingCart cart = getCartObject(request);
400         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
401         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
402         ShoppingCartHelper cartHelper = new ShoppingCartHelper(delegator, dispatcher, cart);
403         String JavaDoc catalogId = CatalogWorker.getCurrentCatalogId(request);
404         Map JavaDoc result;
405         String JavaDoc controlDirective;
406
407         boolean addAll = ("true".equals(request.getParameter("add_all")));
408         result = cartHelper.addToCartFromOrder(catalogId, orderId, itemIds, addAll);
409         controlDirective = processResult(result, request);
410
411         //Determine where to send the browser
412
if (controlDirective.equals(ERROR)) {
413             return "error";
414         } else {
415             return "success";
416         }
417     }
418
419     /** Adds all products in a category according to quantity request parameter
420      * for each; if no parameter for a certain product in the category, or if
421      * quantity is 0, do not add
422      */

423     public static String JavaDoc addToCartBulk(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
424         String JavaDoc categoryId = request.getParameter("category_id");
425         ShoppingCart cart = getCartObject(request);
426         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
427         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
428         ShoppingCartHelper cartHelper = new ShoppingCartHelper(delegator, dispatcher, cart);
429         String JavaDoc controlDirective;
430         Map JavaDoc result;
431         // not used yet: Locale locale = UtilHttp.getLocale(request);
432

433         //Convert the params to a map to pass in
434
Map JavaDoc paramMap = UtilHttp.getParameterMap(request);
435         String JavaDoc catalogId = CatalogWorker.getCurrentCatalogId(request);
436         result = cartHelper.addToCartBulk(catalogId, categoryId, paramMap);
437         controlDirective = processResult(result, request);
438
439         //Determine where to send the browser
440
if (controlDirective.equals(ERROR)) {
441             return "error";
442         } else {
443             return "success";
444         }
445     }
446
447     /** Adds a set of requirements to the cart
448      */

449     public static String JavaDoc addToCartBulkRequirements(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
450         ShoppingCart cart = getCartObject(request);
451         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
452         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
453         ShoppingCartHelper cartHelper = new ShoppingCartHelper(delegator, dispatcher, cart);
454         String JavaDoc controlDirective;
455         Map JavaDoc result;
456         // not used yet: Locale locale = UtilHttp.getLocale(request);
457

458         //Convert the params to a map to pass in
459
Map JavaDoc paramMap = UtilHttp.getParameterMap(request);
460         String JavaDoc catalogId = CatalogWorker.getCurrentCatalogId(request);
461         result = cartHelper.addToCartBulkRequirements(catalogId, paramMap);
462         controlDirective = processResult(result, request);
463
464         //Determine where to send the browser
465
if (controlDirective.equals(ERROR)) {
466             return "error";
467         } else {
468             return "success";
469         }
470     }
471
472     /** Adds all products in a category according to default quantity on ProductCategoryMember
473      * for each; if no default for a certain product in the category, or if
474      * quantity is 0, do not add
475      */

476     public static String JavaDoc addCategoryDefaults(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
477         String JavaDoc categoryId = request.getParameter("category_id");
478         String JavaDoc catalogId = CatalogWorker.getCurrentCatalogId(request);
479         ShoppingCart cart = getCartObject(request);
480         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
481         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
482         ShoppingCartHelper cartHelper = new ShoppingCartHelper(delegator, dispatcher, cart);
483         String JavaDoc controlDirective;
484         Map JavaDoc result;
485         Double JavaDoc totalQuantity;
486         Locale JavaDoc locale = UtilHttp.getLocale(request);
487
488         result = cartHelper.addCategoryDefaults(catalogId, categoryId);
489         controlDirective = processResult(result, request);
490
491         //Determine where to send the browser
492
if (controlDirective.equals(ERROR)) {
493             return "error";
494         } else {
495             totalQuantity = (Double JavaDoc)result.get("totalQuantity");
496             Map JavaDoc messageMap = UtilMisc.toMap("totalQuantity", UtilFormatOut.formatQuantity(totalQuantity) );
497
498             request.setAttribute("_EVENT_MESSAGE_",
499                                   UtilProperties.getMessage(resource, "cart.add_category_defaults",
500                                           messageMap, locale ));
501
502             return "success";
503         }
504     }
505
506     /** Delete an item from the shopping cart. */
507     public static String JavaDoc deleteFromCart(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
508         ShoppingCart cart = getCartObject(request);
509         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
510         ShoppingCartHelper cartHelper = new ShoppingCartHelper(null, dispatcher, cart);
511         String JavaDoc controlDirective;
512         Map JavaDoc result;
513         Map JavaDoc paramMap = UtilHttp.getParameterMap(request);
514         // not used yet: Locale locale = UtilHttp.getLocale(request);
515

516         //Delegate the cart helper
517
result = cartHelper.deleteFromCart(paramMap);
518         controlDirective = processResult(result, request);
519
520         //Determine where to send the browser
521
if (controlDirective.equals(ERROR)) {
522             return "error";
523         } else {
524             return "success";
525         }
526     }
527
528     /** Update the items in the shopping cart. */
529     public static String JavaDoc modifyCart(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
530         HttpSession JavaDoc session = request.getSession();
531         ShoppingCart cart = getCartObject(request);
532         Locale JavaDoc locale = UtilHttp.getLocale(request);
533         GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
534         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
535         Security security = (Security) request.getAttribute("security");
536         ShoppingCartHelper cartHelper = new ShoppingCartHelper(null, dispatcher, cart);
537         String JavaDoc controlDirective;
538         Map JavaDoc result;
539         // not used yet: Locale locale = UtilHttp.getLocale(request);
540

541         Map JavaDoc paramMap = UtilHttp.getParameterMap(request);
542
543         String JavaDoc removeSelectedFlag = request.getParameter("removeSelected");
544         String JavaDoc selectedItems[] = request.getParameterValues("selectedItem");
545         boolean removeSelected = ("true".equals(removeSelectedFlag) && selectedItems != null && selectedItems.length > 0);
546         result = cartHelper.modifyCart(security, userLogin, paramMap, removeSelected, selectedItems, locale);
547         controlDirective = processResult(result, request);
548
549         //Determine where to send the browser
550
if (controlDirective.equals(ERROR)) {
551             return "error";
552         } else {
553             return "success";
554         }
555     }
556
557     /** Empty the shopping cart. */
558     public static String JavaDoc clearCart(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
559         ShoppingCart cart = getCartObject(request);
560         cart.clear();
561
562         // if this was an anonymous checkout process, go ahead and clear the session and such now that the order is placed; we don't want this to mess up additional orders and such
563
HttpSession JavaDoc session = request.getSession();
564         GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
565         if ((userLogin != null) && ("anonymous".equals(userLogin.get("userLoginId")))) {
566             // here we want to do a full logout, but not using the normal logout stuff because it saves things in the UserLogin record that we don't want changed for the anonymous user
567
session.invalidate();
568             session = request.getSession(true);
569             
570             // to allow the display of the order confirmation page put the userLogin in the request, but leave it out of the session
571
request.setAttribute("temporaryAnonymousUserLogin", userLogin);
572             
573             Debug.logInfo("Doing clearCart for anonymous user, so logging out but put anonymous userLogin in userLogin request attribute", module);
574         }
575         
576         return "success";
577     }
578
579     /** Totally wipe out the cart, removes all stored info. */
580     public static String JavaDoc destroyCart(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
581         HttpSession JavaDoc session = request.getSession();
582         clearCart(request, response);
583         session.removeAttribute("shoppingCart");
584         session.removeAttribute("orderPartyId");
585         session.removeAttribute("orderMode");
586         session.removeAttribute("productStoreId");
587         session.removeAttribute("CURRENT_CATALOG_ID");
588         return "success";
589     }
590
591     /** Gets or creates the shopping cart object */
592     public static ShoppingCart getCartObject(HttpServletRequest JavaDoc request, Locale JavaDoc locale, String JavaDoc currencyUom) {
593         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
594         ShoppingCart cart = (ShoppingCart) request.getAttribute("shoppingCart");
595         HttpSession JavaDoc session = request.getSession(true);
596         if (cart == null) {
597             cart = (ShoppingCart) session.getAttribute("shoppingCart");
598         } else {
599             session.setAttribute("shoppingCart", cart);
600         }
601
602         if (cart == null) {
603             if (locale == null) {
604                 locale = UtilHttp.getLocale(request);
605             }
606             if (currencyUom == null) {
607                 currencyUom = UtilHttp.getCurrencyUom(request);
608             }
609             cart = new WebShoppingCart(request, locale, currencyUom);
610             session.setAttribute("shoppingCart", cart);
611         } else {
612             if (locale != null && !locale.equals(cart.getLocale())) {
613                 cart.setLocale(locale);
614             }
615             if (currencyUom != null && !currencyUom.equals(cart.getCurrency())) {
616                 try {
617                     cart.setCurrency(dispatcher, currencyUom);
618                 } catch (CartItemModifyException e) {
619                     Debug.logError(e, "Unable to modify currency in cart", module);
620                 }
621             }
622         }
623         return cart;
624     }
625
626     /** Main get cart method; uses the locale & currency from the session */
627     public static ShoppingCart getCartObject(HttpServletRequest JavaDoc request) {
628         return getCartObject(request, null, null);
629     }
630
631     /** Update the cart's UserLogin object if it isn't already set. */
632     public static String JavaDoc keepCartUpdated(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
633         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
634         HttpSession JavaDoc session = request.getSession();
635         ShoppingCart cart = getCartObject(request);
636
637         // if we just logged in set the UL
638
if (cart.getUserLogin() == null) {
639             GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
640             if (userLogin != null) {
641                 try {
642                     cart.setUserLogin(userLogin, dispatcher);
643                 } catch (CartItemModifyException e) {
644                     Debug.logWarning(e, module);
645                 }
646             }
647         }
648
649         // same for autoUserLogin
650
if (cart.getAutoUserLogin() == null) {
651             GenericValue autoUserLogin = (GenericValue) session.getAttribute("autoUserLogin");
652             if (autoUserLogin != null) {
653                 if (cart.getUserLogin() == null) {
654                     try {
655                         cart.setAutoUserLogin(autoUserLogin, dispatcher);
656                     } catch (CartItemModifyException e) {
657                         Debug.logWarning(e, module);
658                     }
659                 } else {
660                     cart.setAutoUserLogin(autoUserLogin);
661                 }
662             }
663         }
664
665         // update the locale
666
Locale JavaDoc locale = UtilHttp.getLocale(request);
667         if (cart.getLocale() == null || !locale.equals(cart.getLocale())) {
668             cart.setLocale(locale);
669         }
670
671         return "success";
672     }
673
674     /** For GWP Promotions with multiple alternatives, selects an alternative to the current GWP */
675     public static String JavaDoc setDesiredAlternateGwpProductId(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
676         ShoppingCart cart = getCartObject(request);
677         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
678         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
679         String JavaDoc alternateGwpProductId = request.getParameter("alternateGwpProductId");
680         String JavaDoc alternateGwpLineStr = request.getParameter("alternateGwpLine");
681         Locale JavaDoc locale = UtilHttp.getLocale(request);
682
683         if (UtilValidate.isEmpty(alternateGwpProductId)) {
684             request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderCouldNotSelectAlternateGiftNoAlternateGwpProductIdPassed", locale));
685             return "error";
686         }
687         if (UtilValidate.isEmpty(alternateGwpLineStr)) {
688             request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderCouldNotSelectAlternateGiftNoAlternateGwpLinePassed", locale));
689             return "error";
690         }
691
692         int alternateGwpLine = 0;
693         try {
694             alternateGwpLine = Integer.parseInt(alternateGwpLineStr);
695         } catch (Exception JavaDoc e) {
696             request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderCouldNotSelectAlternateGiftAlternateGwpLineIsNotAValidNumber", locale));
697             return "error";
698         }
699
700         ShoppingCartItem cartLine = cart.findCartItem(alternateGwpLine);
701         if (cartLine == null) {
702             request.setAttribute("_ERROR_MESSAGE_", "Could not select alternate gift, no cart line item found for #" + alternateGwpLine + ".");
703             return "error";
704         }
705
706         if (cartLine.getIsPromo()) {
707             // note that there should just be one promo adjustment, the reversal of the GWP, so use that to get the promo action key
708
Iterator JavaDoc checkOrderAdjustments = UtilMisc.toIterator(cartLine.getAdjustments());
709             while (checkOrderAdjustments != null && checkOrderAdjustments.hasNext()) {
710                 GenericValue checkOrderAdjustment = (GenericValue) checkOrderAdjustments.next();
711                 if (UtilValidate.isNotEmpty(checkOrderAdjustment.getString("productPromoId")) &&
712                         UtilValidate.isNotEmpty(checkOrderAdjustment.getString("productPromoRuleId")) &&
713                         UtilValidate.isNotEmpty(checkOrderAdjustment.getString("productPromoActionSeqId"))) {
714                     GenericPK productPromoActionPk = delegator.makeValidValue("ProductPromoAction", checkOrderAdjustment).getPrimaryKey();
715                     cart.setDesiredAlternateGiftByAction(productPromoActionPk, alternateGwpProductId);
716                     if (cart.getOrderType().equals("SALES_ORDER")) {
717                         org.ofbiz.order.shoppingcart.product.ProductPromoWorker.doPromotions(cart, dispatcher);
718                     }
719                     return "success";
720                 }
721             }
722         }
723
724         request.setAttribute("_ERROR_MESSAGE_", "Could not select alternate gift, cart line item found for #" + alternateGwpLine + " does not appear to be a valid promotional gift.");
725         return "error";
726     }
727
728     /** Associates a party to order */
729     public static String JavaDoc addAdditionalParty(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
730         ShoppingCart cart = getCartObject(request);
731         String JavaDoc partyId = request.getParameter("additionalPartyId");
732         String JavaDoc roleTypeId[] = request.getParameterValues("additionalRoleTypeId");
733         List JavaDoc eventList = new LinkedList JavaDoc();
734         Locale JavaDoc locale = UtilHttp.getLocale(request);
735         int i;
736
737         if (UtilValidate.isEmpty(partyId) || roleTypeId.length < 1) {
738             request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderPartyIdAndOrRoleTypeIdNotDefined", locale));
739             return "error";
740         }
741
742         if (request.getAttribute("_EVENT_MESSAGE_LIST_") != null) {
743             eventList.addAll((List JavaDoc) request.getAttribute("_EVENT_MESSAGE_LIST_"));
744         }
745
746         for (i = 0; i < roleTypeId.length; i++) {
747             try {
748                 cart.addAdditionalPartyRole(partyId, roleTypeId[i]);
749             } catch (Exception JavaDoc e) {
750                 eventList.add(e.getLocalizedMessage());
751             }
752         }
753
754         request.removeAttribute("_EVENT_MESSAGE_LIST_");
755         request.setAttribute("_EVENT_MESSAGE_LIST_", eventList);
756         return "success";
757     }
758
759     /** Removes a previously associated party to order */
760     public static String JavaDoc removeAdditionalParty(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
761         ShoppingCart cart = getCartObject(request);
762         String JavaDoc partyId = request.getParameter("additionalPartyId");
763         String JavaDoc roleTypeId[] = request.getParameterValues("additionalRoleTypeId");
764         List JavaDoc eventList = new LinkedList JavaDoc();
765         Locale JavaDoc locale = UtilHttp.getLocale(request);
766         int i;
767
768         if (UtilValidate.isEmpty(partyId) || roleTypeId.length < 1) {
769             request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderPartyIdAndOrRoleTypeIdNotDefined", locale));
770             return "error";
771         }
772
773         if (request.getAttribute("_EVENT_MESSAGE_LIST_") != null) {
774             eventList.addAll((List JavaDoc) request.getAttribute("_EVENT_MESSAGE_LIST_"));
775         }
776
777         for (i = 0; i < roleTypeId.length; i++) {
778             try {
779                 cart.removeAdditionalPartyRole(partyId, roleTypeId[i]);
780             } catch (Exception JavaDoc e) {
781                 Debug.logInfo(e.getLocalizedMessage(), module);
782                 eventList.add(e.getLocalizedMessage());
783             }
784         }
785
786         request.removeAttribute("_EVENT_MESSAGE_LIST_");
787         request.setAttribute("_EVENT_MESSAGE_LIST_", eventList);
788         return "success";
789     }
790
791     /**
792      * This should be called to translate the error messages of the
793      * <code>ShoppingCartHelper</code> to an appropriately formatted
794      * <code>String</code> in the request object and indicate whether
795      * the result was an error or not and whether the errors were
796      * critical or not
797      *
798      * @param result The result returned from the
799      * <code>ShoppingCartHelper</code>
800      * @param request The servlet request instance to set the error messages
801      * in
802      * @return one of NON_CRITICAL_ERROR, ERROR or NO_ERROR.
803      */

804     private static String JavaDoc processResult(Map JavaDoc result, HttpServletRequest JavaDoc request) {
805         //Check for errors
806
StringBuffer JavaDoc errMsg = new StringBuffer JavaDoc();
807         if (result.containsKey(ModelService.ERROR_MESSAGE_LIST)) {
808             List JavaDoc errorMsgs = (List JavaDoc)result.get(ModelService.ERROR_MESSAGE_LIST);
809             Iterator JavaDoc iterator = errorMsgs.iterator();
810             errMsg.append("<ul>");
811             while (iterator.hasNext()) {
812                 errMsg.append("<li>");
813                 errMsg.append(iterator.next());
814                 errMsg.append("</li>");
815             }
816             errMsg.append("</ul>");
817         } else if (result.containsKey(ModelService.ERROR_MESSAGE)) {
818             errMsg.append(result.get(ModelService.ERROR_MESSAGE));
819             request.setAttribute("_ERROR_MESSAGE_", errMsg.toString());
820         }
821
822         //See whether there was an error
823
if (errMsg.length() > 0) {
824             request.setAttribute("_ERROR_MESSAGE_", errMsg.toString());
825             if (result.get(ModelService.RESPONSE_MESSAGE).equals(ModelService.RESPOND_SUCCESS)) {
826                 return NON_CRITICAL_ERROR;
827             } else {
828                 return ERROR;
829             }
830         } else {
831             return NO_ERROR;
832         }
833     }
834
835     /** Assign agreement **/
836     public static String JavaDoc selectAgreement(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
837         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
838         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
839         ShoppingCart cart = getCartObject(request);
840         ShoppingCartHelper cartHelper = new ShoppingCartHelper(delegator, dispatcher, cart);
841         String JavaDoc agreementId = request.getParameter("agreementId");
842         Map JavaDoc result = cartHelper.selectAgreement(agreementId);
843         if (ServiceUtil.isError(result)) {
844            request.setAttribute("_ERROR_MESSAGE_", ServiceUtil.getErrorMessage(result));
845            return "error";
846         }
847         return "success";
848     }
849
850     /** Assign currency **/
851     public static String JavaDoc setCurrency(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
852         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
853         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
854         ShoppingCart cart = getCartObject(request);
855         ShoppingCartHelper cartHelper = new ShoppingCartHelper(delegator, dispatcher, cart);
856         String JavaDoc currencyUomId = request.getParameter("currencyUomId");
857         Map JavaDoc result = cartHelper.setCurrency(currencyUomId);
858         if (ServiceUtil.isError(result)) {
859            request.setAttribute("_ERROR_MESSAGE_", ServiceUtil.getErrorMessage(result));
860            return "error";
861         }
862         return "success";
863     }
864
865     /** Add order term **/
866     public static String JavaDoc addOrderTerm(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
867         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
868         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
869         ShoppingCart cart = getCartObject(request);
870         ShoppingCartHelper cartHelper = new ShoppingCartHelper(delegator, dispatcher, cart);
871         String JavaDoc termTypeId = request.getParameter("termTypeId");
872         String JavaDoc termValue = request.getParameter("termValue");
873         String JavaDoc termDays = request.getParameter("termDays");
874         String JavaDoc termIndex = request.getParameter("termIndex");
875         Locale JavaDoc locale = UtilHttp.getLocale(request);
876
877         Double JavaDoc dTermValue = null;
878         Long JavaDoc lTermDays = null;
879
880         if (termValue.trim().equals("")) {
881             termValue = null;
882         }
883         if (termDays.trim().equals("")) {
884             termDays = null;
885         }
886         if (UtilValidate.isEmpty(termTypeId)) {
887             request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderOrderTermTypeIsRequired", locale));
888             return "error";
889         }
890         if (!UtilValidate.isSignedDouble(termValue)) {
891             request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderOrderTermValue", UtilMisc.toMap("orderTermValue",UtilValidate.isSignedFloatMsg), locale));
892             return "error";
893         }
894         if (termValue != null) {
895             dTermValue =new Double JavaDoc(termValue);
896         }
897         if (!UtilValidate.isInteger(termDays)) {
898             request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderOrderTermDays", UtilMisc.toMap("orderTermDays",UtilValidate.isLongMsg), locale));
899             return "error";
900         }
901         if (termDays != null) {
902             lTermDays = new Long JavaDoc(termDays);
903         }
904         if ((termIndex != null) && (termIndex != "-1") && (UtilValidate.isInteger(termIndex))) {
905             cartHelper.removeOrderTerm(Integer.parseInt(termIndex));
906         }
907
908         Map JavaDoc result = cartHelper.addOrderTerm(termTypeId, dTermValue, lTermDays);
909         if (ServiceUtil.isError(result)) {
910             request.setAttribute("_ERROR_MESSAGE_", ServiceUtil.getErrorMessage(result));
911             return "error";
912         }
913         return "success";
914     }
915
916    /** Add order term **/
917    public static String JavaDoc removeOrderTerm(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
918        GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
919        LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
920        ShoppingCart cart = getCartObject(request);
921        ShoppingCartHelper cartHelper = new ShoppingCartHelper(delegator, dispatcher, cart);
922        String JavaDoc index = request.getParameter("termIndex");
923        Map JavaDoc result = cartHelper.removeOrderTerm(Integer.parseInt(index));
924        if (ServiceUtil.isError(result)) {
925            request.setAttribute("_ERROR_MESSAGE_", ServiceUtil.getErrorMessage(result));
926            return "error";
927        }
928        return "success";
929    }
930
931     /** Initialize order entry from a shopping list **/
932     public static String JavaDoc loadCartFromShoppingList(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
933         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
934         HttpSession JavaDoc session = request.getSession();
935         GenericValue userLogin = (GenericValue)session.getAttribute("userLogin");
936         Locale JavaDoc locale = UtilHttp.getLocale(request);
937
938         String JavaDoc shoppingListId = request.getParameter("shoppingListId");
939
940         ShoppingCart cart = null;
941         try {
942             Map JavaDoc outMap = dispatcher.runSync("loadCartFromShoppingList",
943                     UtilMisc.toMap("shoppingListId", shoppingListId,
944                     "userLogin", userLogin));
945             cart = (ShoppingCart)outMap.get("shoppingCart");
946         } catch(GenericServiceException exc) {
947             request.setAttribute("_ERROR_MESSAGE_", exc.getMessage());
948             return "error";
949         }
950
951         session.setAttribute("shoppingCart", cart);
952         session.setAttribute("productStoreId", cart.getProductStoreId());
953         session.setAttribute("orderMode", cart.getOrderType());
954         session.setAttribute("orderPartyId", cart.getOrderPartyId());
955
956         return "success";
957     }
958
959     /** Initialize order entry from a quote **/
960     public static String JavaDoc loadCartFromQuote(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
961         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
962         HttpSession JavaDoc session = request.getSession();
963         GenericValue userLogin = (GenericValue)session.getAttribute("userLogin");
964         Locale JavaDoc locale = UtilHttp.getLocale(request);
965
966         String JavaDoc quoteId = request.getParameter("quoteId");
967
968         ShoppingCart cart = null;
969         try {
970             Map JavaDoc outMap = dispatcher.runSync("loadCartFromQuote",
971                     UtilMisc.toMap("quoteId", quoteId,
972                             "applyQuoteAdjustments", "true",
973                             "userLogin", userLogin));
974             cart = (ShoppingCart) outMap.get("shoppingCart");
975         } catch (GenericServiceException exc) {
976             request.setAttribute("_ERROR_MESSAGE_", exc.getMessage());
977             return "error";
978         }
979
980         // Set the cart's default checkout options for a quick checkout
981
cart.setDefaultCheckoutOptions(dispatcher);
982         // Make the cart read-only
983
cart.setReadOnlyCart(true);
984
985         session.setAttribute("shoppingCart", cart);
986         session.setAttribute("productStoreId", cart.getProductStoreId());
987         session.setAttribute("orderMode", cart.getOrderType());
988         session.setAttribute("orderPartyId", cart.getOrderPartyId());
989
990         return "success";
991     }
992
993     public static String JavaDoc createQuoteFromCart(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
994         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
995         HttpSession JavaDoc session = request.getSession();
996         GenericValue userLogin = (GenericValue)session.getAttribute("userLogin");
997         String JavaDoc destroyCart = request.getParameter("destroyCart");
998
999         ShoppingCart cart = getCartObject(request);
1000        Map JavaDoc result = null;
1001        String JavaDoc quoteId = null;
1002        try {
1003            result = dispatcher.runSync("createQuoteFromCart",
1004                    UtilMisc.toMap("cart", cart,
1005                            "userLogin", userLogin));
1006            quoteId = (String JavaDoc) result.get("quoteId");
1007        } catch (GenericServiceException exc) {
1008            request.setAttribute("_ERROR_MESSAGE_", exc.getMessage());
1009            return "error";
1010        }
1011        if (ServiceUtil.isError(result)) {
1012           request.setAttribute("_ERROR_MESSAGE_", ServiceUtil.getErrorMessage(result));
1013           return "error";
1014        }
1015        request.setAttribute("quoteId", quoteId);
1016        if (destroyCart != null && destroyCart.equals("Y")) {
1017            ShoppingCartEvents.destroyCart(request, response);
1018        }
1019
1020        return "success";
1021    }
1022
1023    public static String JavaDoc createCustRequestFromCart(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
1024        LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
1025        HttpSession JavaDoc session = request.getSession();
1026        GenericValue userLogin = (GenericValue)session.getAttribute("userLogin");
1027        String JavaDoc destroyCart = request.getParameter("destroyCart");
1028
1029        ShoppingCart cart = getCartObject(request);
1030        Map JavaDoc result = null;
1031        String JavaDoc custRequestId = null;
1032        try {
1033            result = dispatcher.runSync("createCustRequestFromCart",
1034                    UtilMisc.toMap("cart", cart,
1035                            "userLogin", userLogin));
1036            custRequestId = (String JavaDoc) result.get("custRequestId");
1037        } catch (GenericServiceException exc) {
1038            request.setAttribute("_ERROR_MESSAGE_", exc.getMessage());
1039            return "error";
1040        }
1041        if (ServiceUtil.isError(result)) {
1042           request.setAttribute("_ERROR_MESSAGE_", ServiceUtil.getErrorMessage(result));
1043           return "error";
1044        }
1045        request.setAttribute("custRequestId", custRequestId);
1046        if (destroyCart != null && destroyCart.equals("Y")) {
1047            ShoppingCartEvents.destroyCart(request, response);
1048        }
1049
1050        return "success";
1051    }
1052
1053    /** Initialize order entry **/
1054    public static String JavaDoc initializeOrderEntry(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
1055        GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
1056        HttpSession JavaDoc session = request.getSession();
1057        Security security = (Security) request.getAttribute("security");
1058        GenericValue userLogin = (GenericValue)session.getAttribute("userLogin");
1059        String JavaDoc finalizeMode = (String JavaDoc)session.getAttribute("finalizeMode");
1060        Locale JavaDoc locale = UtilHttp.getLocale(request);
1061
1062        String JavaDoc productStoreId = request.getParameter("productStoreId");
1063
1064        if (UtilValidate.isNotEmpty(productStoreId)) {
1065            session.setAttribute("productStoreId", productStoreId);
1066        }
1067        ShoppingCart cart = getCartObject(request);
1068
1069        // TODO: re-factor and move this inside the ShoppingCart constructor
1070
String JavaDoc orderMode = request.getParameter("orderMode");
1071        if (orderMode != null) {
1072            cart.setOrderType(orderMode);
1073            session.setAttribute("orderMode", orderMode);
1074        } else {
1075            request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderPleaseSelectEitherSaleOrPurchaseOrder", locale));
1076            return "error";
1077        }
1078
1079        // check the selected product store
1080
GenericValue productStore = null;
1081        if (UtilValidate.isNotEmpty(productStoreId)) {
1082            productStore = ProductStoreWorker.getProductStore(productStoreId, delegator);
1083            if (productStore != null) {
1084
1085                // check permission for taking the order
1086
boolean hasPermission = false;
1087                if ((cart.getOrderType().equals("PURCHASE_ORDER")) && (security.hasEntityPermission("ORDERMGR", "_PURCHASE_CREATE", session))) {
1088                    hasPermission = true;
1089                } else if (cart.getOrderType().equals("SALES_ORDER")) {
1090                    if (security.hasEntityPermission("ORDERMGR", "_SALES_CREATE", session)) {
1091                        hasPermission = true;
1092                    } else {
1093                        // if the user is a rep of the store, then he also has permission
1094
List JavaDoc storeReps = null;
1095                        try {
1096                            storeReps = delegator.findByAnd("ProductStoreRole", UtilMisc.toMap("productStoreId", productStore.getString("productStoreId"),
1097                                                            "partyId", userLogin.getString("partyId"), "roleTypeId", "SALES_REP"));
1098                        } catch(GenericEntityException gee) {
1099                            //
1100
}
1101                        storeReps = EntityUtil.filterByDate(storeReps);
1102                        if (storeReps != null && storeReps.size() > 0) {
1103                            hasPermission = true;
1104                        }
1105                    }
1106                }
1107
1108                if (hasPermission) {
1109                    cart = ShoppingCartEvents.getCartObject(request, null, productStore.getString("defaultCurrencyUomId"));
1110                } else {
1111                    request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderYouDoNotHavePermissionToTakeOrdersForThisStore", locale));
1112                    cart.clear();
1113                    session.removeAttribute("orderMode");
1114                    return "error";
1115                }
1116                cart.setProductStoreId(productStoreId);
1117            } else {
1118                cart.setProductStoreId(null);
1119            }
1120        }
1121
1122        if ("SALES_ORDER".equals(cart.getOrderType()) && UtilValidate.isEmpty(cart.getProductStoreId())) {
1123            request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderAProductStoreMustBeSelectedForASalesOrder", locale));
1124            cart.clear();
1125            session.removeAttribute("orderMode");
1126            return "error";
1127        }
1128
1129        String JavaDoc salesChannelEnumId = request.getParameter("salesChannelEnumId");
1130        if (UtilValidate.isNotEmpty(salesChannelEnumId)) {
1131            cart.setChannelType(salesChannelEnumId);
1132        }
1133
1134        // set party info
1135
String JavaDoc partyId = request.getParameter("supplierPartyId");
1136        if (!UtilValidate.isEmpty(request.getParameter("partyId"))) {
1137            partyId = request.getParameter("partyId");
1138        }
1139        String JavaDoc userLoginId = request.getParameter("userLoginId");
1140        if (partyId != null || userLoginId != null) {
1141            if ((partyId == null || partyId.length() == 0) && userLoginId != null && userLoginId.length() > 0) {
1142                GenericValue thisUserLogin = null;
1143                try {
1144                    thisUserLogin = delegator.findByPrimaryKey("UserLogin", UtilMisc.toMap("userLoginId", userLoginId));
1145                } catch(GenericEntityException gee) {
1146                    //
1147
}
1148                if (thisUserLogin != null) {
1149                    partyId = thisUserLogin.getString("partyId");
1150                } else {
1151                    partyId = userLoginId;
1152                }
1153            }
1154            if (partyId != null && partyId.length() > 0) {
1155                GenericValue thisParty = null;
1156                try{
1157                    thisParty = delegator.findByPrimaryKey("Party", UtilMisc.toMap("partyId", partyId));
1158                } catch(GenericEntityException gee) {
1159                    //
1160
}
1161                if (thisParty == null) {
1162                    request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderCouldNotLocateTheSelectedParty", locale));
1163                    return "error";
1164                } else {
1165                    cart.setOrderPartyId(partyId);
1166                }
1167            } else if (partyId != null && partyId.length() == 0) {
1168                cart.setOrderPartyId("_NA_");
1169                partyId = null;
1170            }
1171        } else {
1172            partyId = cart.getPartyId();
1173            if (partyId != null && partyId.equals("_NA_")) partyId = null;
1174        }
1175
1176        return "success";
1177    }
1178
1179    /** Route order entry **/
1180    public static String JavaDoc routeOrderEntry(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
1181        HttpSession JavaDoc session = request.getSession();
1182
1183        // if the order mode is not set in the attributes, then order entry has not been initialized
1184
if (session.getAttribute("orderMode") == null) {
1185            return "init";
1186        }
1187
1188        // if the request is coming from the init page, then orderMode will be in the request parameters
1189
if (request.getParameter("orderMode") != null) {
1190            return "agreements"; // next page after init is always agreements
1191
}
1192
1193        // orderMode is set and there is an order in progress, so go straight to the cart
1194
return "cart";
1195    }
1196
1197    public static String JavaDoc doManualPromotions(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
1198        LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
1199        GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
1200        ShoppingCart cart = getCartObject(request);
1201        List JavaDoc manualPromotions = new LinkedList JavaDoc();
1202
1203        // iterate through the context and find all keys that start with "productPromoId_"
1204
Map JavaDoc context = UtilHttp.getParameterMap(request);
1205        String JavaDoc keyPrefix = "productPromoId_";
1206        for (int i = 1; i <= 50; i++) {
1207            String JavaDoc productPromoId = (String JavaDoc)context.get(keyPrefix + i);
1208            if (UtilValidate.isNotEmpty(productPromoId)) {
1209                try {
1210                    GenericValue promo = delegator.findByPrimaryKey("ProductPromo", UtilMisc.toMap("productPromoId", productPromoId));
1211                    if (promo != null) {
1212                        manualPromotions.add(promo);
1213                    }
1214                } catch(GenericEntityException gee) {
1215                    request.setAttribute("_ERROR_MESSAGE_", gee.getMessage());
1216                    return "error";
1217                }
1218            } else {
1219                break;
1220            }
1221        }
1222        ProductPromoWorker.doPromotions(cart, manualPromotions, dispatcher);
1223        return "success";
1224    }
1225
1226
1227    public static String JavaDoc bulkAddProducts(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
1228        GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
1229        LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
1230        ShoppingCart cart = ShoppingCartEvents.getCartObject(request);
1231        ShoppingCartHelper cartHelper = new ShoppingCartHelper(delegator, dispatcher, cart);
1232        String JavaDoc controlDirective = null;
1233        Map JavaDoc result = null;
1234        String JavaDoc productId = null;
1235        String JavaDoc productCategoryId = null;
1236        String JavaDoc quantityStr = null;
1237        String JavaDoc itemDesiredDeliveryDateStr = null;
1238        double quantity = 0;
1239        String JavaDoc catalogId = CatalogWorker.getCurrentCatalogId(request);
1240
1241        String JavaDoc rowCountField = null;
1242        int rowCount = 0; // number of rows of products to add
1243
String JavaDoc DELIMITER = "_o_"; // delimiter, separating field from row number
1244

1245        // Get the parameters as a MAP, remove the productId and quantity params.
1246
Map JavaDoc paramMap = UtilHttp.getParameterMap(request);
1247
1248        // Get shoppingList info if passed. I think there can only be one shoppingList per request
1249
String JavaDoc shoppingListId = request.getParameter("shoppingListId");
1250        String JavaDoc shoppingListItemSeqId = request.getParameter("shoppingListItemSeqId");
1251
1252        // try to get the rowCount information passed in from request
1253
if (paramMap.containsKey("_rowCount")) {
1254            rowCountField = (String JavaDoc) paramMap.remove("_rowCount");
1255        } else {
1256            Debug.logWarning("No _rowCount was passed in", ShoppingCartEvents.module);
1257        }
1258        try {
1259            rowCount = Integer.parseInt(rowCountField);
1260        } catch (NumberFormatException JavaDoc e) {
1261            Debug.logWarning("Invalid value for rowCount =" + rowCountField, module);
1262        }
1263
1264        if (rowCount < 1) {
1265            Debug.logWarning("No rows to process, as rowCount = " + rowCount, module);
1266        } else {
1267            for (int i = 0; i < rowCount; i++) {
1268                controlDirective = null; // re-initialize each time
1269
String JavaDoc thisSuffix = DELIMITER + i; // current suffix after each field id
1270

1271                // get the productId
1272
if (paramMap.containsKey("productId" + thisSuffix)) {
1273                    productId = (String JavaDoc) paramMap.remove("productId" + thisSuffix);
1274                }
1275
1276                if (paramMap.containsKey("quantity" + thisSuffix)) {
1277                    quantityStr = (String JavaDoc) paramMap.remove("quantity" + thisSuffix);
1278                }
1279                if ((quantityStr == null) || (quantityStr.equals(""))){ // otherwise, every empty value causes an exception and makes the log ugly
1280
quantityStr = "0"; // default quantity is 0, so without a quantity input, this field will not be added
1281
}
1282
1283                // parse the quantity
1284
try {
1285                    quantity = NumberFormat.getNumberInstance().parse(quantityStr).doubleValue();
1286                } catch (Exception JavaDoc e) {
1287                    Debug.logWarning(e, "Problems parsing quantity string: " + quantityStr, module);
1288                    quantity = 0;
1289                }
1290
1291                // get the selected amount
1292
String JavaDoc selectedAmountStr = "0.00";
1293                if (paramMap.containsKey("amount" + thisSuffix)) {
1294                    selectedAmountStr = (String JavaDoc) paramMap.remove("amount" + thisSuffix);
1295                }
1296
1297                // parse the amount
1298
double amount = 0.00;
1299                if (selectedAmountStr != null && selectedAmountStr.length() > 0) {
1300                    try {
1301                        amount = NumberFormat.getNumberInstance().parse(selectedAmountStr).doubleValue();
1302                    } catch (Exception JavaDoc e) {
1303                        Debug.logWarning(e, "Problem parsing amount string: " + selectedAmountStr, module);
1304                        amount = 0.00;
1305                    }
1306                }
1307
1308                if (paramMap.containsKey("itemDesiredDeliveryDate" + thisSuffix)) {
1309                    itemDesiredDeliveryDateStr = (String JavaDoc) paramMap.remove("itemDesiredDeliveryDate" + thisSuffix);
1310                }
1311
1312                Map JavaDoc itemAttributes = UtilMisc.toMap("itemDesiredDeliveryDate", itemDesiredDeliveryDateStr);
1313
1314                if (quantity > 0) {
1315                    Debug.logInfo("Attempting to add to cart with productId = " + productId + ", categoryId = " + productCategoryId +
1316                            " and quantity = " + quantity, module);
1317                    result = cartHelper.addToCart(catalogId, shoppingListId, shoppingListItemSeqId, productId, productCategoryId,
1318                            "", "", 0.00, amount, quantity, null, 0.00, 0.00, null, null, null, itemAttributes);
1319                    // no values for itemType, itemDescription, price, and paramMap (a context for adding attributes)
1320
controlDirective = processResult(result, request);
1321                    if (controlDirective.equals(ERROR)){ // if the add to cart failed, then get out of this loop right away
1322
return "error";
1323                    }
1324                }
1325            }
1326        }
1327
1328        // Determine where to send the browser
1329
return cart.viewCartOnAdd() ? "viewcart" : "success";
1330    }
1331
1332    // request method for setting the currency, agreement and shipment dates at once
1333
public static String JavaDoc setOrderCurrencyAgreementShipDates(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
1334        LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
1335        GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
1336        ShoppingCart cart = getCartObject(request);
1337        ShoppingCartHelper cartHelper = new ShoppingCartHelper(delegator, dispatcher, cart);
1338
1339        String JavaDoc agreementId = (String JavaDoc) request.getParameter("agreementId");
1340        String JavaDoc currencyUomId = (String JavaDoc) request.getParameter("currencyUomId");
1341        String JavaDoc shipBeforeDateStr = (String JavaDoc) request.getParameter("shipBeforeDate");
1342        String JavaDoc shipAfterDateStr = (String JavaDoc) request.getParameter("shipAfterDate");
1343        Map JavaDoc result = null;
1344
1345        // set the agreement if specified otherwise set the currency
1346
if (agreementId != null && agreementId.length() > 0) {
1347            result = cartHelper.selectAgreement(agreementId);
1348        } else {
1349            result = cartHelper.setCurrency(currencyUomId);
1350        }
1351        if (ServiceUtil.isError(result)) {
1352            request.setAttribute("_ERROR_MESSAGE_", ServiceUtil.getErrorMessage(result));
1353            return "error";
1354        }
1355
1356        // set the default ship before and after dates if supplied
1357
try {
1358            if (UtilValidate.isNotEmpty(shipBeforeDateStr)) {
1359                if (shipBeforeDateStr.length() == 10) shipBeforeDateStr += " 00:00:00.000";
1360                cart.setDefaultShipBeforeDate(java.sql.Timestamp.valueOf(shipBeforeDateStr));
1361            }
1362            if (UtilValidate.isNotEmpty(shipAfterDateStr)) {
1363                if (shipAfterDateStr.length() == 10) shipAfterDateStr += " 00:00:00.000";
1364                cart.setDefaultShipAfterDate(java.sql.Timestamp.valueOf(shipAfterDateStr));
1365            }
1366        } catch (IllegalArgumentException JavaDoc e) {
1367            request.setAttribute("_ERROR_MESSAGE_", e.getMessage());
1368            return "error";
1369        }
1370        return "success";
1371    }
1372}
1373
Popular Tags