KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2  * $Id: CheckOutEvents.java 7288 2006-04-13 22:57:27Z sichen $
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.DecimalFormat JavaDoc;
27 import java.text.ParseException JavaDoc;
28 import java.util.ArrayList JavaDoc;
29 import java.util.HashMap JavaDoc;
30 import java.util.List JavaDoc;
31 import java.util.Locale JavaDoc;
32 import java.util.Map JavaDoc;
33
34 import javax.servlet.http.HttpServletRequest JavaDoc;
35 import javax.servlet.http.HttpServletResponse JavaDoc;
36 import javax.servlet.http.HttpSession JavaDoc;
37
38 import org.ofbiz.base.util.Debug;
39 import org.ofbiz.base.util.GeneralException;
40 import org.ofbiz.base.util.GeneralRuntimeException;
41 import org.ofbiz.base.util.UtilHttp;
42 import org.ofbiz.base.util.UtilMisc;
43 import org.ofbiz.base.util.UtilProperties;
44 import org.ofbiz.base.util.UtilValidate;
45 import org.ofbiz.webapp.stats.VisitHandler;
46 import org.ofbiz.entity.GenericDelegator;
47 import org.ofbiz.entity.GenericEntityException;
48 import org.ofbiz.entity.GenericValue;
49 import org.ofbiz.marketing.tracking.TrackingCodeEvents;
50 import org.ofbiz.product.catalog.CatalogWorker;
51 import org.ofbiz.product.store.ProductStoreWorker;
52 import org.ofbiz.service.GenericServiceException;
53 import org.ofbiz.service.LocalDispatcher;
54 import org.ofbiz.service.ModelService;
55 import org.ofbiz.service.ServiceUtil;
56
57 /**
58  * Events used for processing checkout and orders.
59  *
60  * @author <a HREF="mailto:jaz@ofbiz.org">Andy Zeneski</a>
61  * @author <a HREF="mailto:cnelson@einnovation.com">Chris Nelson</a>
62  * @author <a HREF="mailto:jonesde@ofbiz.org">David E. Jones</a>
63  * @author <a HREF="mailto:tristana@twibble.org">Tristan Austin</a>
64  * @version $Rev: 7288 $
65  * @since 2.0
66  */

67 public class CheckOutEvents {
68
69     public static final String JavaDoc module = CheckOutEvents.class.getName();
70     public static final String JavaDoc resource = "OrderUiLabels";
71     public static final String JavaDoc resource_error = "OrderErrorUiLabels";
72
73     public static String JavaDoc cartNotEmpty(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
74         ShoppingCart cart = (ShoppingCart) request.getSession().getAttribute("shoppingCart");
75         //Locale locale = UtilHttp.getLocale(request);
76
String JavaDoc errMsg = null;
77
78         if (cart != null && cart.size() > 0) {
79             return "success";
80         } else {
81             errMsg = UtilProperties.getMessage(resource, "checkevents.cart_empty", (cart != null ? cart.getLocale() : Locale.getDefault()));
82             request.setAttribute("_ERROR_MESSAGE_", errMsg);
83             return "error";
84         }
85     }
86
87     public static String JavaDoc cancelOrderItem(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
88         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
89         GenericValue userLogin = (GenericValue) request.getSession().getAttribute("userLogin");
90         String JavaDoc orderId = request.getParameter("orderId");
91         String JavaDoc itemSeqId = request.getParameter("item_seq");
92         String JavaDoc groupSeqId = request.getParameter("group_seq");
93         Locale JavaDoc locale = UtilHttp.getLocale(request);
94
95         Map JavaDoc fields = UtilMisc.toMap("orderId", orderId, "orderItemSeqId", itemSeqId, "shipGroupSeqId", groupSeqId, "userLogin", userLogin);
96         Map JavaDoc result = null;
97         String JavaDoc errMsg = null;
98
99         try {
100             result = dispatcher.runSync("cancelOrderItem", fields);
101         } catch (GenericServiceException e) {
102             Debug.logError(e, module);
103             errMsg = UtilProperties.getMessage(resource, "checkevents.cannot_cancel_item", locale);
104             request.setAttribute("_ERROR_MESSAGE_", errMsg);
105             return "error";
106         }
107         if (result.containsKey(ModelService.ERROR_MESSAGE)) {
108             request.setAttribute("_ERROR_MESSAGE_", result.get(ModelService.ERROR_MESSAGE));
109             return "error";
110         }
111  
112         try {
113             result = dispatcher.runSync("recreateOrderAdjustments", UtilMisc.toMap("userLogin", userLogin, "orderId", orderId));
114         } catch (GenericServiceException e) {
115             Debug.logError(e, module);
116             errMsg = UtilProperties.getMessage(resource, "checkevents.cannot_recalc_adjustments", locale);
117             request.setAttribute("_ERROR_MESSAGE_", errMsg);
118             return "error";
119         }
120         if (result.containsKey(ModelService.ERROR_MESSAGE)) {
121             request.setAttribute("_ERROR_MESSAGE_", result.get(ModelService.ERROR_MESSAGE));
122             return "error";
123         }
124
125         return "success";
126     }
127
128     public static String JavaDoc setCheckOutPages(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
129         if ("error".equals(CheckOutEvents.cartNotEmpty(request, response)) == true) {
130             return "error";
131         }
132         
133         HttpSession JavaDoc session = request.getSession();
134
135         //Locale locale = UtilHttp.getLocale(request);
136
String JavaDoc curPage = request.getParameter("checkoutpage");
137         Debug.logInfo("CheckoutPage: " + curPage, module);
138
139         ShoppingCart cart = (ShoppingCart) session.getAttribute("shoppingCart");
140         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
141         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
142         CheckOutHelper checkOutHelper = new CheckOutHelper(dispatcher, delegator, cart);
143         GenericValue userLogin = cart.getUserLogin();
144         if (userLogin == null) userLogin = (GenericValue) session.getAttribute("userLogin");
145
146         if ("shippingaddress".equals(curPage) == true) {
147             // Set the shipping address options
148
String JavaDoc shippingContactMechId = request.getParameter("shipping_contact_mech_id");
149
150             String JavaDoc taxAuthPartyGeoIds = request.getParameter("taxAuthPartyGeoIds");
151             String JavaDoc partyTaxId = request.getParameter("partyTaxId");
152             String JavaDoc isExempt = request.getParameter("isExempt");
153             
154             // if taxAuthPartyGeoIds is not empty drop that into the database
155
if (UtilValidate.isNotEmpty(taxAuthPartyGeoIds)) {
156                 try {
157                     Map JavaDoc createCustomerTaxAuthInfoResult = dispatcher.runSync("createCustomerTaxAuthInfo",
158                             UtilMisc.toMap("partyId", cart.getPartyId(), "taxAuthPartyGeoIds", taxAuthPartyGeoIds, "partyTaxId", partyTaxId, "isExempt", isExempt, "userLogin", userLogin));
159                     ServiceUtil.getMessages(request, createCustomerTaxAuthInfoResult, null);
160                     if (ServiceUtil.isError(createCustomerTaxAuthInfoResult)) {
161                         return "error";
162                     }
163                 } catch (GenericServiceException e) {
164                     String JavaDoc errMsg = "Error setting customer tax info: " + e.toString();
165                     request.setAttribute("_ERROR_MESSAGE_", errMsg);
166                     return "error";
167                 }
168             }
169             
170             Map JavaDoc callResult = checkOutHelper.setCheckOutShippingAddress(shippingContactMechId);
171             ServiceUtil.getMessages(request, callResult, null);
172
173             if (!(ServiceUtil.isError(callResult))) {
174                 // No errors so push the user onto the next page
175
curPage = "shippingoptions";
176             }
177         } else if ("shippingoptions".equals(curPage) == true) {
178             // Set the general shipping options
179
String JavaDoc shippingMethod = request.getParameter("shipping_method");
180             String JavaDoc correspondingPoId = request.getParameter("corresponding_po_id");
181             String JavaDoc shippingInstructions = request.getParameter("shipping_instructions");
182             String JavaDoc orderAdditionalEmails = request.getParameter("order_additional_emails");
183             String JavaDoc maySplit = request.getParameter("may_split");
184             String JavaDoc giftMessage = request.getParameter("gift_message");
185             String JavaDoc isGift = request.getParameter("is_gift");
186             String JavaDoc internalCode = request.getParameter("internalCode");
187             String JavaDoc shipBeforeDate = request.getParameter("shipBeforeDate");
188             String JavaDoc shipAfterDate = request.getParameter("shipAfterDate");
189             Map JavaDoc callResult = checkOutHelper.setCheckOutShippingOptions(shippingMethod, correspondingPoId,
190                     shippingInstructions, orderAdditionalEmails, maySplit, giftMessage, isGift, internalCode, shipBeforeDate, shipAfterDate);
191
192             ServiceUtil.getMessages(request, callResult, null);
193
194             if (!(callResult.get(ModelService.RESPONSE_MESSAGE).equals(ModelService.RESPOND_ERROR))) {
195                 // No errors so push the user onto the next page
196
curPage = "payment";
197             }
198         } else if ("payment".equals(curPage) == true) {
199             // get the currency format
200
String JavaDoc currencyFormat = UtilProperties.getPropertyValue("general.properties", "currency.decimal.format", "##0.00");
201             DecimalFormat JavaDoc formatter = new DecimalFormat JavaDoc(currencyFormat);
202
203             // Set the payment options
204
Map JavaDoc selectedPaymentMethods = getSelectedPaymentMethods(request);
205             if (selectedPaymentMethods == null) {
206                 return "error";
207             }
208
209             String JavaDoc billingAccountId = request.getParameter("billingAccountId");
210             String JavaDoc billingAcctAmtStr = request.getParameter("amount_" + billingAccountId);
211             Double JavaDoc billingAccountAmt = null;
212             // parse the amount to a decimal
213
if (billingAcctAmtStr != null) {
214                 try {
215                     billingAccountAmt = new Double JavaDoc(formatter.parse(billingAcctAmtStr).doubleValue());
216                 } catch (ParseException JavaDoc e) {
217                     Debug.logError(e, module);
218                     Map JavaDoc messageMap = UtilMisc.toMap("billingAccountId", billingAccountId);
219                     String JavaDoc errMsg = UtilProperties.getMessage(resource, "checkevents.invalid_amount_set_for_billing_account", messageMap, (cart != null ? cart.getLocale() : Locale.getDefault()));
220                     request.setAttribute("_ERROR_MESSAGE_", errMsg);
221                     return "error";
222                 }
223             }
224
225             List JavaDoc singleUsePayments = new ArrayList JavaDoc();
226
227             // check for gift card not on file
228
Map JavaDoc params = UtilHttp.getParameterMap(request);
229             Map JavaDoc gcResult = checkOutHelper.checkGiftCard(params, selectedPaymentMethods);
230             ServiceUtil.getMessages(request, gcResult, null);
231             if (gcResult.get(ModelService.RESPONSE_MESSAGE).equals(ModelService.RESPOND_ERROR)) {
232                 return "error";
233             } else {
234                 String JavaDoc gcPaymentMethodId = (String JavaDoc) gcResult.get("paymentMethodId");
235                 Double JavaDoc gcAmount = (Double JavaDoc) gcResult.get("amount");
236                 if (gcPaymentMethodId != null) {
237                     selectedPaymentMethods.put(gcPaymentMethodId, gcAmount);
238                     if ("Y".equalsIgnoreCase(request.getParameter("singleUseGiftCard"))) {
239                         singleUsePayments.add(gcPaymentMethodId);
240                     }
241                 }
242             }
243
244             Map JavaDoc callResult = checkOutHelper.setCheckOutPayment(selectedPaymentMethods, singleUsePayments, billingAccountId, billingAccountAmt);
245             ServiceUtil.getMessages(request, callResult, null);
246
247             if (!(callResult.get(ModelService.RESPONSE_MESSAGE).equals(ModelService.RESPOND_ERROR))) {
248                 // No errors so push the user onto the next page
249
curPage = "confirm";
250             }
251         } else {
252             curPage = determineInitialCheckOutPage(cart);
253         }
254
255         return curPage;
256     }
257
258     private static final String JavaDoc DEFAULT_INIT_CHECKOUT_PAGE = "shippingaddress";
259
260     /**
261      * Method to determine the initial checkout page based on requirements. This will also set
262      * any cart variables necessary to satisfy the requirements, such as setting the
263      * shipment method according to the type of items in the cart.
264      */

265     public static String JavaDoc determineInitialCheckOutPage(ShoppingCart cart) {
266         String JavaDoc page = DEFAULT_INIT_CHECKOUT_PAGE;
267         if (cart == null) return page;
268
269         // if no shipping applies, set the no shipment method and skip to payment
270
if (!cart.shippingApplies()) {
271             cart.setShipmentMethodTypeId("NO_SHIPPING");
272             cart.setCarrierPartyId("_NA_");
273             page = "payment";
274         }
275
276         return page;
277     }
278
279     public static String JavaDoc setCheckOutError(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
280         String JavaDoc currentPage = request.getParameter("checkoutpage");
281         if (currentPage == null || currentPage.length() == 0) {
282             return "error";
283         } else {
284             return currentPage;
285         }
286     }
287
288     public static String JavaDoc setPartialCheckOutOptions(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
289         String JavaDoc resp = setCheckOutOptions(request, response);
290         request.setAttribute("_ERROR_MESSAGE_", null);
291         return "success";
292     }
293
294     public static String JavaDoc checkPaymentMethods(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
295         ShoppingCart cart = (ShoppingCart) request.getSession().getAttribute("shoppingCart");
296         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
297         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
298         CheckOutHelper checkOutHelper = new CheckOutHelper(dispatcher, delegator, cart);
299         Map JavaDoc resp = checkOutHelper.validatePaymentMethods();
300         if (ServiceUtil.isError(resp)) {
301             request.setAttribute("_ERROR_MESSAGE_", ServiceUtil.getErrorMessage(resp));
302             return "error";
303         }
304         return "success";
305     }
306
307     public static Map JavaDoc getSelectedPaymentMethods(HttpServletRequest JavaDoc request) {
308         ShoppingCart cart = (ShoppingCart) request.getSession().getAttribute("shoppingCart");
309         //Locale locale = UtilHttp.getLocale(request);
310
String JavaDoc currencyFormat = UtilProperties.getPropertyValue("general.properties", "currency.decimal.format", "##0.00");
311         DecimalFormat JavaDoc formatter = new DecimalFormat JavaDoc(currencyFormat);
312         Map JavaDoc selectedPaymentMethods = new HashMap JavaDoc();
313         String JavaDoc[] paymentMethods = request.getParameterValues("checkOutPaymentId");
314         String JavaDoc errMsg = null;
315
316         if (paymentMethods != null) {
317             for (int i = 0; i < paymentMethods.length; i++) {
318                 String JavaDoc amountStr = request.getParameter("amount_" + paymentMethods[i]);
319                 Double JavaDoc amount = null;
320                 if (amountStr != null && amountStr.length() > 0 && !"REMAINING".equals(amountStr)) {
321                     try {
322                         amount = new Double JavaDoc(formatter.parse(amountStr).doubleValue());
323                     } catch (ParseException JavaDoc e) {
324                         Debug.logError(e, module);
325                         errMsg = UtilProperties.getMessage(resource, "checkevents.invalid_amount_set_for_payment_method", (cart != null ? cart.getLocale() : Locale.getDefault()));
326                         request.setAttribute("_ERROR_MESSAGE_", errMsg);
327                         return null;
328                     }
329                 }
330                 selectedPaymentMethods.put(paymentMethods[i], amount);
331             }
332         }
333         Debug.logInfo("Selected Payment Methods : " + selectedPaymentMethods, module);
334         return selectedPaymentMethods;
335     }
336
337     public static String JavaDoc setCheckOutOptions(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
338         ShoppingCart cart = (ShoppingCart) request.getSession().getAttribute("shoppingCart");
339         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
340         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
341
342         // get the currency format
343
String JavaDoc currencyFormat = UtilProperties.getPropertyValue("general.properties", "currency.decimal.format", "##0.00");
344         DecimalFormat JavaDoc formatter = new DecimalFormat JavaDoc(currencyFormat);
345
346         // Set the payment options
347
Map JavaDoc selectedPaymentMethods = getSelectedPaymentMethods(request);
348         if (selectedPaymentMethods == null) {
349             return "error";
350         }
351
352         String JavaDoc shippingMethod = request.getParameter("shipping_method");
353         String JavaDoc shippingContactMechId = request.getParameter("shipping_contact_mech_id");
354         
355         String JavaDoc taxAuthPartyGeoIds = request.getParameter("taxAuthPartyGeoIds");
356         String JavaDoc partyTaxId = request.getParameter("partyTaxId");
357         String JavaDoc isExempt = request.getParameter("isExempt");
358         
359         String JavaDoc correspondingPoId = request.getParameter("corresponding_po_id");
360         String JavaDoc shippingInstructions = request.getParameter("shipping_instructions");
361         String JavaDoc orderAdditionalEmails = request.getParameter("order_additional_emails");
362         String JavaDoc maySplit = request.getParameter("may_split");
363         String JavaDoc giftMessage = request.getParameter("gift_message");
364         String JavaDoc isGift = request.getParameter("is_gift");
365         String JavaDoc internalCode = request.getParameter("internalCode");
366         String JavaDoc shipBeforeDate = request.getParameter("shipBeforeDate");
367         String JavaDoc shipAfterDate = request.getParameter("shipAfterDate");
368         List JavaDoc singleUsePayments = new ArrayList JavaDoc();
369
370         // if taxAuthPartyGeoIds is not empty drop that into the database
371
if (UtilValidate.isNotEmpty(taxAuthPartyGeoIds)) {
372             try {
373                 Map JavaDoc createCustomerTaxAuthInfoResult = dispatcher.runSync("createCustomerTaxAuthInfo",
374                         UtilMisc.toMap("partyId", cart.getPartyId(), "taxAuthPartyGeoIds", taxAuthPartyGeoIds, "partyTaxId", partyTaxId, "isExempt", isExempt));
375                 ServiceUtil.getMessages(request, createCustomerTaxAuthInfoResult, null);
376                 if (ServiceUtil.isError(createCustomerTaxAuthInfoResult)) {
377                     return "error";
378                 }
379             } catch (GenericServiceException e) {
380                 String JavaDoc errMsg = "Error setting customer tax info: " + e.toString();
381                 request.setAttribute("_ERROR_MESSAGE_", errMsg);
382                 return "error";
383             }
384         }
385         
386         // get the billing account and amount
387
String JavaDoc billingAccountId = request.getParameter("billingAccountId");
388         String JavaDoc billingAcctAmtStr = request.getParameter("amount_" + billingAccountId);
389         Double JavaDoc billingAccountAmt = null;
390         // parse the amount to a decimal
391
if (billingAcctAmtStr != null) {
392             try {
393                 billingAccountAmt = new Double JavaDoc(formatter.parse(billingAcctAmtStr).doubleValue());
394             } catch (ParseException JavaDoc e) {
395                 Debug.logError(e, module);
396                 Map JavaDoc messageMap = UtilMisc.toMap("billingAccountId", billingAccountId);
397                 String JavaDoc errMsg = UtilProperties.getMessage(resource, "checkevents.invalid_amount_set_for_billing_account", messageMap, (cart != null ? cart.getLocale() : Locale.getDefault()));
398                 request.setAttribute("_ERROR_MESSAGE_", errMsg);
399                 return "error";
400             }
401         }
402
403         // get a request map of parameters
404
Map JavaDoc params = UtilHttp.getParameterMap(request);
405         CheckOutHelper checkOutHelper = new CheckOutHelper(dispatcher, delegator, cart);
406
407         // check for gift card not on file
408
Map JavaDoc gcResult = checkOutHelper.checkGiftCard(params, selectedPaymentMethods);
409         ServiceUtil.getMessages(request, gcResult, null);
410         if (ServiceUtil.isError(gcResult)) {
411             return "error";
412         }
413
414         String JavaDoc gcPaymentMethodId = (String JavaDoc) gcResult.get("paymentMethodId");
415         Double JavaDoc gcAmount = (Double JavaDoc) gcResult.get("amount");
416         if (gcPaymentMethodId != null) {
417             selectedPaymentMethods.put(gcPaymentMethodId, gcAmount);
418             if ("Y".equalsIgnoreCase(request.getParameter("singleUseGiftCard"))) {
419                 singleUsePayments.add(gcPaymentMethodId);
420             }
421         }
422
423         Map JavaDoc optResult = checkOutHelper.setCheckOutOptions(shippingMethod, shippingContactMechId, selectedPaymentMethods,
424                 singleUsePayments, billingAccountId, billingAccountAmt, correspondingPoId, shippingInstructions,
425                 orderAdditionalEmails, maySplit, giftMessage, isGift, internalCode, shipBeforeDate, shipAfterDate);
426
427         ServiceUtil.getMessages(request, optResult, null);
428         if (ServiceUtil.isError(optResult)) {
429             return "error";
430         }
431
432         return "success";
433     }
434
435     // Create order event - uses createOrder service for processing
436
public static String JavaDoc createOrder(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
437         HttpSession JavaDoc session = request.getSession();
438         ShoppingCart cart = ShoppingCartEvents.getCartObject(request);
439         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
440         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
441         GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
442         CheckOutHelper checkOutHelper = new CheckOutHelper(dispatcher, delegator, cart);
443         Map JavaDoc callResult;
444
445         // remove this whenever creating an order so quick reorder cache will refresh/recalc
446
session.removeAttribute("_QUICK_REORDER_PRODUCTS_");
447
448         boolean areOrderItemsExploded = explodeOrderItems(delegator, cart);
449
450         //get the TrackingCodeOrder List
451
List JavaDoc trackingCodeOrders = TrackingCodeEvents.makeTrackingCodeOrders(request);
452         String JavaDoc distributorId = (String JavaDoc) session.getAttribute("_DISTRIBUTOR_ID_");
453         String JavaDoc affiliateId = (String JavaDoc) session.getAttribute("_AFFILIATE_ID_");
454         String JavaDoc visitId = VisitHandler.getVisitId(session);
455         String JavaDoc webSiteId = CatalogWorker.getWebSiteId(request);
456
457         callResult = checkOutHelper.createOrder(userLogin, distributorId, affiliateId, trackingCodeOrders, areOrderItemsExploded, visitId, webSiteId);
458         if (callResult != null) {
459             ServiceUtil.getMessages(request, callResult, null);
460             if (ServiceUtil.isError(callResult)) {
461                 // messages already setup with the getMessages call, just return the error response code
462
return "error";
463             }
464             if (callResult.get(ModelService.RESPONSE_MESSAGE).equals(ModelService.RESPOND_SUCCESS)) {
465                 // set the orderId for use by chained events
466
String JavaDoc orderId = cart.getOrderId();
467                 request.setAttribute("orderId", orderId);
468                 request.setAttribute("orderAdditionalEmails", cart.getOrderAdditionalEmails());
469             }
470         }
471
472         return cart.getOrderType().toLowerCase();
473     }
474
475     // Event wrapper for the tax calc.
476
public static String JavaDoc calcTax(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
477         try {
478             calcTax(request);
479         } catch (GeneralException e) {
480             request.setAttribute("_ERROR_MESSAGE_", e.getMessage());
481             return "error";
482         }
483         return "success";
484     }
485
486     // Invoke the taxCalc
487
private static void calcTax(HttpServletRequest JavaDoc request) throws GeneralException {
488         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
489         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
490         ShoppingCart cart = (ShoppingCart) request.getSession().getAttribute("shoppingCart");
491         CheckOutHelper checkOutHelper = new CheckOutHelper(dispatcher, delegator, cart);
492
493         //Calculate and add the tax adjustments
494
checkOutHelper.calcAndAddTax();
495     }
496
497     public static boolean explodeOrderItems(GenericDelegator delegator, ShoppingCart cart) {
498         if (cart == null) return false;
499         GenericValue productStore = ProductStoreWorker.getProductStore(cart.getProductStoreId(), delegator);
500         if (productStore == null || productStore.get("explodeOrderItems") == null) {
501             return false;
502         }
503         return productStore.getBoolean("explodeOrderItems").booleanValue();
504     }
505
506     // Event wrapper for processPayment.
507
public static String JavaDoc processPayment(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
508         // run the process payment process + approve order when complete; may also run sync fulfillments
509
int failureCode = 0;
510         try {
511             if (!processPayment(request)) {
512                 failureCode = 1;
513             }
514         } catch (GeneralException e) {
515             Debug.logError(e, module);
516             ServiceUtil.setMessages(request, e.getMessage(), null, null);
517             failureCode = 2;
518         } catch (GeneralRuntimeException e) {
519             Debug.logError(e, module);
520             ServiceUtil.setMessages(request, e.getMessage(), null, null);
521         }
522
523         // event return based on failureCode
524
switch (failureCode) {
525             case 0:
526                 return "success";
527             case 1:
528                 return "fail";
529             default:
530                 return "error";
531         }
532     }
533
534     private static boolean processPayment(HttpServletRequest JavaDoc request) throws GeneralException {
535         HttpSession JavaDoc session = request.getSession();
536         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
537         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
538         ShoppingCart cart = (ShoppingCart) request.getSession().getAttribute("shoppingCart");
539         GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
540         CheckOutHelper checkOutHelper = new CheckOutHelper(dispatcher, delegator, cart);
541
542         // check if the order is to be held (processing)
543
boolean holdOrder = cart.getHoldOrder();
544
545         // load the ProductStore settings
546
GenericValue productStore = ProductStoreWorker.getProductStore(cart.getProductStoreId(), delegator);
547         Map JavaDoc callResult = checkOutHelper.processPayment(productStore, userLogin, false, holdOrder);
548
549         // generate any messages required
550
ServiceUtil.getMessages(request, callResult, null);
551
552         // check for customer message(s)
553
List JavaDoc messages = (List JavaDoc) callResult.get("authResultMsgs");
554         if (messages != null && messages.size() > 0) {
555             request.setAttribute("_EVENT_MESSAGE_LIST_", messages);
556         }
557
558         // determine whether it was a success or failure
559
return (callResult.get(ModelService.RESPONSE_MESSAGE).equals(ModelService.RESPOND_SUCCESS));
560     }
561
562     public static String JavaDoc checkOrderBlacklist(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
563         HttpSession JavaDoc session = request.getSession();
564         ShoppingCart cart = (ShoppingCart) session.getAttribute("shoppingCart");
565         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
566         GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
567         CheckOutHelper checkOutHelper = new CheckOutHelper(null, delegator, cart);
568         String JavaDoc result;
569
570         Map JavaDoc callResult = checkOutHelper.checkOrderBlacklist(userLogin);
571         if (callResult.get(ModelService.RESPONSE_MESSAGE).equals(ModelService.RESPOND_ERROR)) {
572             result = (String JavaDoc) callResult.get(ModelService.ERROR_MESSAGE);
573         } else {
574             result = (String JavaDoc) callResult.get(ModelService.SUCCESS_MESSAGE);
575         }
576
577         return result;
578     }
579
580     public static String JavaDoc failedBlacklistCheck(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
581         HttpSession JavaDoc session = request.getSession();
582         ShoppingCart cart = (ShoppingCart) session.getAttribute("shoppingCart");
583         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
584         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
585         GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
586         String JavaDoc result;
587
588         // Load the properties store
589
GenericValue productStore = ProductStoreWorker.getProductStore(cart.getProductStoreId(), delegator);
590         CheckOutHelper checkOutHelper = new CheckOutHelper(dispatcher, delegator, cart);
591         Map JavaDoc callResult = checkOutHelper.failedBlacklistCheck(userLogin, productStore);
592
593         //Generate any messages required
594
ServiceUtil.getMessages(request, callResult, null);
595
596         // wipe the session
597
session.invalidate();
598
599         //Determine whether it was a success or not
600
if (callResult.get(ModelService.RESPONSE_MESSAGE).equals(ModelService.RESPOND_ERROR)) {
601             result = (String JavaDoc) callResult.get(ModelService.ERROR_MESSAGE);
602             request.setAttribute("_ERROR_MESSAGE_", result);
603             result = "error";
604         } else {
605             result = (String JavaDoc) callResult.get(ModelService.ERROR_MESSAGE);
606             request.setAttribute("_ERROR_MESSAGE_", result);
607             result = "success";
608         }
609         return result;
610     }
611
612     public static String JavaDoc checkExternalPayment(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
613         // warning there can only be ONE payment preference for this to work
614
// you cannot accept multiple payment type when using an external gateway
615
GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
616         String JavaDoc result;
617
618         String JavaDoc orderId = (String JavaDoc) request.getAttribute("orderId");
619         CheckOutHelper checkOutHelper = new CheckOutHelper(null, delegator, null);
620         Map JavaDoc callResult = checkOutHelper.checkExternalPayment(orderId);
621
622         //Generate any messages required
623
ServiceUtil.getMessages(request, callResult, null);
624
625         // any error messages have prepared for display, return the type ('error' if failed)
626
result = (String JavaDoc) callResult.get("type");
627         return result;
628     }
629
630     public static String JavaDoc finalizeOrderEntry(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
631         ShoppingCart cart = (ShoppingCart) request.getSession().getAttribute("shoppingCart");
632         GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
633         LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
634
635         Map JavaDoc paramMap = UtilHttp.getParameterMap(request);
636         Boolean JavaDoc offlinePayments;
637         String JavaDoc shippingContactMechId = null;
638         String JavaDoc shippingMethod = null;
639         String JavaDoc shippingInstructions = null;
640         String JavaDoc maySplit = null;
641         String JavaDoc giftMessage = null;
642         String JavaDoc isGift = null;
643         String JavaDoc internalCode = null;
644         String JavaDoc methodType = null;
645         String JavaDoc checkOutPaymentId = null;
646         String JavaDoc singleUsePayment = null;
647         String JavaDoc appendPayment = null;
648         String JavaDoc shipBeforeDate = null;
649         String JavaDoc shipAfterDate = null;
650
651         String JavaDoc mode = request.getParameter("finalizeMode");
652         Debug.logInfo("FinalizeMode: " + mode, module);
653         // necessary to avoid infinite looping when in a funny state, and will go right back to beginning
654
if (mode == null) {
655             return "customer";
656         }
657
658         // check the userLogin object
659
GenericValue userLogin = (GenericValue) request.getSession().getAttribute("userLogin");
660
661         // if null then we must be an anonymous shopper
662
if (userLogin == null) {
663             // remove auto-login fields
664
request.getSession().removeAttribute("autoUserLogin");
665             request.getSession().removeAttribute("autoName");
666             // clear out the login fields from the cart
667
try {
668                 cart.setAutoUserLogin(null, dispatcher);
669             } catch (CartItemModifyException e) {
670                 Debug.logError(e, module);
671             }
672         }
673
674         // set the customer info
675
if (mode != null && mode.equals("default")) {
676             cart.setDefaultCheckoutOptions(dispatcher);
677         }
678
679         // set the customer info
680
if (mode != null && mode.equals("cust")) {
681             String JavaDoc partyId = (String JavaDoc) request.getAttribute("partyId");
682             if (partyId != null) {
683                 cart.setOrderPartyId(partyId);
684                 // no userLogin means we are an anonymous shopper; fake the UL for service calls
685
if (userLogin == null) {
686                     try {
687                         userLogin = delegator.findByPrimaryKey("UserLogin", UtilMisc.toMap("userLoginId", "anonymous"));
688                     } catch (GenericEntityException e) {
689                         Debug.logError(e, module);
690                     }
691                     if (userLogin != null) {
692                         userLogin.set("partyId", partyId);
693                     }
694                     request.getSession().setAttribute("userLogin", userLogin);
695                     try {
696                         cart.setUserLogin(userLogin, dispatcher);
697                     } catch (CartItemModifyException e) {
698                         Debug.logError(e, module);
699                     }
700                     Debug.logInfo("Anonymous user-login has been activated", module);
701                 }
702             }
703         }
704
705         if (mode != null && mode.equals("addpty")) {
706             cart.setAttribute("addpty", "Y");
707         }
708
709         if (mode != null && mode.equals("term")) {
710            cart.setOrderTermSet(true);
711         }
712
713         // flag anoymous checkout to bypass additional party settings
714
boolean isAnonymousCheckout = false;
715         if (userLogin != null && "anonymous".equals(userLogin.getString("userLoginId"))) {
716             isAnonymousCheckout = true;
717         }
718
719         // get the shipping method
720
shippingContactMechId = request.getParameter("shipping_contact_mech_id");
721         if (shippingContactMechId == null) {
722             shippingContactMechId = (String JavaDoc) request.getAttribute("contactMechId");
723         }
724
725         // get the options
726
shippingMethod = request.getParameter("shipping_method");
727         shippingInstructions = request.getParameter("shipping_instructions");
728         maySplit = request.getParameter("may_split");
729         giftMessage = request.getParameter("gift_message");
730         isGift = request.getParameter("is_gift");
731         internalCode = request.getParameter("internalCode");
732         shipBeforeDate = request.getParameter("shipBeforeDate");
733         shipAfterDate = request.getParameter("shipAfterDate");
734         Locale JavaDoc locale = UtilHttp.getLocale(request);
735
736         // payment option; if offline we skip the payment screen
737
methodType = request.getParameter("paymentMethodType");
738
739         // get the payment
740
checkOutPaymentId = request.getParameter("checkOutPaymentId");
741         if (checkOutPaymentId == null) {
742             checkOutPaymentId = (String JavaDoc) request.getAttribute("paymentMethodId");
743         }
744
745         // check for offline payment type
746
if ("offline".equals(methodType)) {
747             Debug.log("Changing mode from->to: " + mode + "->payment", module);
748             checkOutPaymentId = "EXT_OFFLINE";
749             mode = "payment";
750         }
751         singleUsePayment = request.getParameter("singleUsePayment");
752         appendPayment = request.getParameter("appendPayment");
753         boolean isSingleUsePayment = singleUsePayment != null && "Y".equalsIgnoreCase(singleUsePayment) ? true : false;
754         boolean doAppendPayment = appendPayment != null && "Y".equalsIgnoreCase(appendPayment) ? true : false;
755
756         CheckOutHelper checkOutHelper = new CheckOutHelper(dispatcher, delegator, cart);
757
758         // get the currency format
759
String JavaDoc currencyFormat = UtilProperties.getPropertyValue("general.properties", "currency.decimal.format", "##0.00");
760         DecimalFormat JavaDoc formatter = new DecimalFormat JavaDoc(currencyFormat);
761
762         // Set the payment options
763
Map JavaDoc selectedPaymentMethods = getSelectedPaymentMethods(request);
764         if (selectedPaymentMethods == null) {
765             return "error";
766         }
767
768         String JavaDoc billingAccountId = request.getParameter("billingAccountId");
769         String JavaDoc billingAcctAmtStr = request.getParameter("amount_" + billingAccountId);
770         Double JavaDoc billingAccountAmt = null;
771
772         // parse the amount to a decimal
773
if (billingAcctAmtStr != null) {
774             try {
775                 billingAccountAmt = new Double JavaDoc(formatter.parse(billingAcctAmtStr).doubleValue());
776             } catch (ParseException JavaDoc e) {
777                 Debug.logError(e, module);
778                 request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage(resource_error,"OrderInvalidAmountSetForBillingAccount", UtilMisc.toMap("billingAccountId",billingAccountId), locale));
779                 return "error";
780             }
781         }
782
783         if (mode != null && mode.equals("payment")) {
784             checkOutHelper.setCheckOutPayment(selectedPaymentMethods, null, billingAccountId, billingAccountAmt);
785         }
786
787         Map JavaDoc callResult = checkOutHelper.finalizeOrderEntry(mode, shippingContactMechId, shippingMethod, shippingInstructions,
788                 maySplit, giftMessage, isGift, methodType, checkOutPaymentId, isSingleUsePayment, doAppendPayment, paramMap,
789                 internalCode, shipBeforeDate, shipAfterDate);
790
791         // generate any messages required
792
ServiceUtil.getMessages(request, callResult, null);
793
794         // determine whether it was a success or not
795
if (callResult.get(ModelService.RESPONSE_MESSAGE).equals(ModelService.RESPOND_ERROR)) {
796             return "error";
797         }
798         
799         // determine where to direct the browser
800
// these are the default values
801
boolean requireCustomer = true;
802         boolean requireShipping = true;
803         boolean requireOptions = true;
804         boolean requirePayment = !cart.getOrderType().equals("PURCHASE_ORDER");
805         boolean requireTerm = cart.getOrderType().equals("PURCHASE_ORDER");
806         boolean requireAdditionalParty = isAnonymousCheckout;
807
808         // these options are not available to anonymous shoppers (security)
809
if (userLogin != null && !"anonymous".equals(userLogin.getString("userLoginId"))) {
810             String JavaDoc requireCustomerStr = request.getParameter("finalizeReqCustInfo");
811             String JavaDoc requireShippingStr = request.getParameter("finalizeReqShipInfo");
812             String JavaDoc requireOptionsStr = request.getParameter("finalizeReqOptions");
813             String JavaDoc requirePaymentStr = request.getParameter("finalizeReqPayInfo");
814             String JavaDoc requireTermStr = request.getParameter("finalizeReqTermInfo");
815             String JavaDoc requireAdditionalPartyStr = request.getParameter("finalizeReqAdditionalParty");
816             requireCustomer = requireCustomerStr == null || requireCustomerStr.equalsIgnoreCase("true");
817             requireShipping = requireShippingStr == null || requireShippingStr.equalsIgnoreCase("true");
818             requireOptions = requireOptionsStr == null || requireOptionsStr.equalsIgnoreCase("true");
819             if (requirePayment) {
820                 requirePayment = requirePaymentStr == null || requirePaymentStr.equalsIgnoreCase("true");
821             }
822             if (requireTerm) {
823                 requireTerm = requireTermStr == null || requireTermStr.equalsIgnoreCase("true");
824             }
825             requireAdditionalParty = requireAdditionalPartyStr == null || requireAdditionalPartyStr.equalsIgnoreCase("true");
826         }
827
828         String JavaDoc shipContactMechId = cart.getShippingContactMechId();
829         String JavaDoc customerPartyId = cart.getPartyId();
830         String JavaDoc shipmentMethodTypeId = cart.getShipmentMethodTypeId();
831         List JavaDoc paymentMethodIds = cart.getPaymentMethodIds();
832         List JavaDoc paymentMethodTypeIds = cart.getPaymentMethodTypeIds();
833
834         if (requireCustomer && (customerPartyId == null || customerPartyId.equals("_NA_"))) {
835             return "customer";
836         }
837
838         if (requireShipping && shipContactMechId == null) {
839             return "shipping";
840         }
841
842         if (requireOptions && shipmentMethodTypeId == null) {
843             return "options";
844         }
845         
846         if (requireTerm && !cart.isOrderTermSet()) {
847             return "term";
848         }
849         if (requirePayment && (paymentMethodIds == null || paymentMethodIds.size() == 0) && (paymentMethodTypeIds == null || paymentMethodTypeIds.size() == 0)) {
850             return "payment";
851         }
852
853         if (requireAdditionalParty && cart.getAttribute("addpty") == null) {
854             return "addparty";
855         }
856
857         if (isSingleUsePayment) {
858             return "paysplit";
859         }
860
861         // this is used to go back to a previous page in checkout after processing all of the changes, just to make sure we get everything...
862
String JavaDoc checkoutGoTo = request.getParameter("checkoutGoTo");
863         if (UtilValidate.isNotEmpty(checkoutGoTo)) {
864             return checkoutGoTo;
865         }
866
867         if ("SALES_ORDER".equals(cart.getOrderType())) {
868             return "sales";
869         } else {
870             return "po";
871         }
872     }
873
874     public static String JavaDoc finalizeOrderEntryError(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
875         String JavaDoc finalizePage = request.getParameter("finalizeMode");
876         if (finalizePage == null || finalizePage.length() == 0) {
877             return "error";
878         } else {
879             return finalizePage;
880         }
881     }
882 }
883
Popular Tags