📄 checkouthelper.java
字号:
String gcAmt = (String) params.get("giftCardAmount");
double gcAmount = -1;
boolean gcFieldsOkay = true;
if (gcNum == null || gcNum.length() == 0) {
errMsg = UtilProperties.getMessage(resource,"checkhelper.enter_gift_card_number", (cart != null ? cart.getLocale() : Locale.getDefault()));
errorMessages.add(errMsg);
gcFieldsOkay = false;
}
if (gcPin == null || gcPin.length() == 0) {
errMsg = UtilProperties.getMessage(resource,"checkhelper.enter_gift_card_pin_number", (cart != null ? cart.getLocale() : Locale.getDefault()));
errorMessages.add(errMsg);
gcFieldsOkay = false;
}
if (selectedPaymentMethods != null && selectedPaymentMethods.size() > 0) {
if (gcAmt == null || gcAmt.length() == 0) {
errMsg = UtilProperties.getMessage(resource,"checkhelper.enter_amount_to_place_on_gift_card", (cart != null ? cart.getLocale() : Locale.getDefault()));
errorMessages.add(errMsg);
gcFieldsOkay = false;
}
}
if (gcAmt != null && gcAmt.length() > 0) {
try {
gcAmount = Double.parseDouble(gcAmt);
} catch (NumberFormatException e) {
Debug.logError(e, module);
errMsg = UtilProperties.getMessage(resource,"checkhelper.invalid_amount_for_gift_card", (cart != null ? cart.getLocale() : Locale.getDefault()));
errorMessages.add(errMsg);
gcFieldsOkay = false;
}
}
if (gcFieldsOkay) {
// store the gift card
Map gcCtx = new HashMap();
gcCtx.put("partyId", params.get("partyId"));
gcCtx.put("cardNumber", gcNum);
gcCtx.put("pinNumber", gcPin);
gcCtx.put("userLogin", cart.getUserLogin());
Map gcResult = null;
try {
gcResult = dispatcher.runSync("createGiftCard", gcCtx);
} catch (GenericServiceException e) {
Debug.logError(e, module);
errorMessages.add(e.getMessage());
}
if (gcResult != null) {
this.addErrors(errorMessages, errorMaps, gcResult);
if (errorMessages.size() == 0 && errorMaps.size() == 0) {
// set the GC payment method
Double giftCardAmount = null;
if (gcAmount > 0) {
giftCardAmount = new Double(gcAmount);
}
String gcPaymentMethodId = (String) gcResult.get("paymentMethodId");
result = ServiceUtil.returnSuccess();
result.put("paymentMethodId", gcPaymentMethodId);
result.put("amount", giftCardAmount);
}
} else {
errMsg = UtilProperties.getMessage(resource,"checkhelper.problem_with_gift_card_information", (cart != null ? cart.getLocale() : Locale.getDefault()));
errorMessages.add(errMsg);
}
}
} else {
result = ServiceUtil.returnSuccess();
}
// see whether we need to return an error or not
if (errorMessages.size() > 0) {
result.put(ModelService.ERROR_MESSAGE_LIST, errorMessages);
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_ERROR);
}
if (errorMaps.size() > 0) {
result.put(ModelService.ERROR_MESSAGE_MAP, errorMaps);
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_ERROR);
}
return result;
}
// Create order event - uses createOrder service for processing
public Map createOrder(GenericValue userLogin, String distributorId, String affiliateId,
List trackingCodeOrders, boolean areOrderItemsExploded, String visitId, String webSiteId) {
String errMsg = null;
if (this.cart == null) {
return null;
}
String orderId = this.cart.getOrderId();
Map result;
// format the grandTotal
String currencyFormat = UtilProperties.getPropertyValue("general.properties", "currency.decimal.format", "##0.00");
DecimalFormat formatter = new DecimalFormat(currencyFormat);
double cartTotal = this.cart.getGrandTotal();
String grandTotalString = formatter.format(cartTotal);
Double grandTotal = null;
try {
grandTotal = new Double(formatter.parse(grandTotalString).doubleValue());
} catch (ParseException e) {
Debug.logError(e, "Problem getting parsed currency amount from DecimalFormat", module);
errMsg = UtilProperties.getMessage(resource,"checkhelper.could_not_create_order_parsing_totals", (cart != null ? cart.getLocale() : Locale.getDefault()));
result = ServiceUtil.returnError(errMsg);
return result;
}
// store the order - build the context
Map context = this.cart.makeCartMap(this.dispatcher, areOrderItemsExploded);
//get the TrackingCodeOrder List
context.put("trackingCodeOrders", trackingCodeOrders);
if (distributorId != null) context.put("distributorId", distributorId);
if (affiliateId != null) context.put("affiliateId", affiliateId);
// need the partyId; don't use userLogin in case of an order via order mgr
String partyId = this.cart.getPartyId();
String productStoreId = cart.getProductStoreId();
context.put("grandTotal", grandTotal);
context.put("userLogin", userLogin);
context.put("partyId", partyId);
context.put("productStoreId", productStoreId);
context.put("visitId", visitId);
context.put("webSiteId", webSiteId);
// store the order - invoke the service
Map storeResult = null;
try {
storeResult = dispatcher.runSync("storeOrder", context);
orderId = (String) storeResult.get("orderId");
if (orderId != null && orderId.length() > 0) {
this.cart.setOrderId(orderId);
if (this.cart.getFirstAttemptOrderId() == null) {
this.cart.setFirstAttemptOrderId(orderId);
}
}
} catch (GenericServiceException e) {
String service = e.getMessage();
Map messageMap = UtilMisc.toMap("service", service);
errMsg = UtilProperties.getMessage(resource,"checkhelper.could_not_create_order_invoking_service", messageMap, (cart != null ? cart.getLocale() : Locale.getDefault()));
result = ServiceUtil.returnError(errMsg);
Debug.logError(e, module);
return result;
}
// check for error message(s)
if (ModelService.RESPOND_ERROR.equals(storeResult.get(ModelService.RESPONSE_MESSAGE)) ||
storeResult.containsKey(ModelService.ERROR_MESSAGE) ||
storeResult.containsKey(ModelService.ERROR_MESSAGE)) {
errMsg = UtilProperties.getMessage(resource,"checkhelper.did_not_complete_order_following_occurred", (cart != null ? cart.getLocale() : Locale.getDefault()));
result = ServiceUtil.returnError(errMsg);
return result;
}
// set the orderId for use by chained events
result = ServiceUtil.returnSuccess();
result.put("order_id", orderId);
result.put("orderId", orderId);
result.put("orderAdditionalEmails", this.cart.getOrderAdditionalEmails());
// save the emails to the order
List toBeStored = new LinkedList();
GenericValue party = null;
try {
party = this.delegator.findByPrimaryKey("Party", UtilMisc.toMap("partyId", partyId));
} catch (GenericEntityException e) {
Debug.logWarning(e, "Problems getting Party record", module);
party = null;
}
// create order contact mechs for the email address(s)
if (party != null) {
Iterator emailIter = UtilMisc.toIterator(ContactHelper.getContactMechByType(party, "EMAIL_ADDRESS", false));
while (emailIter != null && emailIter.hasNext()) {
GenericValue email = (GenericValue) emailIter.next();
GenericValue orderContactMech = this.delegator.makeValue("OrderContactMech",
UtilMisc.toMap("orderId", orderId, "contactMechId", email.getString("contactMechId"), "contactMechPurposeTypeId", "ORDER_EMAIL"));
toBeStored.add(orderContactMech);
}
}
// create dummy contact mechs and order contact mechs for the additional emails
String additionalEmails = this.cart.getOrderAdditionalEmails();
List emailList = StringUtil.split(additionalEmails, ",");
if (emailList == null) emailList = new ArrayList();
Iterator eli = emailList.iterator();
while (eli.hasNext()) {
String email = (String) eli.next();
String contactMechId = this.delegator.getNextSeqId("ContactMech").toString();
GenericValue contactMech = this.delegator.makeValue("ContactMech",
UtilMisc.toMap("contactMechId", contactMechId, "contactMechTypeId", "EMAIL_ADDRESS", "infoString", email));
GenericValue orderContactMech = this.delegator.makeValue("OrderContactMech",
UtilMisc.toMap("orderId", orderId, "contactMechId", contactMechId, "contactMechPurposeTypeId", "ORDER_EMAIL"));
toBeStored.add(contactMech);
toBeStored.add(orderContactMech);
}
if (toBeStored.size() > 0) {
try {
if (Debug.verboseOn()) Debug.logVerbose("To Be Stored: " + toBeStored, module);
this.delegator.storeAll(toBeStored);
/* Why is this here?
try {
Thread.sleep(2000);
} catch (Exception e) {}
*/
} catch (GenericEntityException e) {
// not a fatal error; so just print a message
Debug.logWarning(e, "Problems storing order email contact information", module);
}
}
return result;
}
public void calcAndAddTax() throws GeneralException {
if (!"SALES_ORDER".equals(cart.getOrderType())) {
return;
}
List items = this.cart.makeOrderItems();
List adjs = this.cart.makeAllAdjustments();
GenericValue shipAddress = this.cart.getShippingAddress();
String productStoreId = cart.getProductStoreId();
if (shipAddress == null) {
throw new GeneralException("Shipping address is not set in the shopping cart.");
}
// remove old tax adjustments
this.cart.removeAdjustmentByType("SALES_TAX");
// get the tax adjustments
List taxReturn = getTaxAdjustments(dispatcher, "calcTax", productStoreId, items, adjs, shipAddress);
if (Debug.verboseOn()) Debug.logVerbose("ReturnList: " + taxReturn, module);
List orderAdj = (List) taxReturn.get(0);
List itemAdj = (List) taxReturn.get(1);
// pass the order adjustments back
if (orderAdj != null && orderAdj.size() > 0) {
Iterator oai = orderAdj.iterator();
while (oai.hasNext())
this.cart.addAdjustment((GenericValue) oai.next());
}
// return the order item adjustments
if (itemAdj != null && itemAdj.size() > 0) {
List cartItems = this.cart.items();
for (int i = 0; i < cartItems.size(); i++) {
ShoppingCartItem item = (ShoppingCartItem) cartItems.get(i);
List itemAdjustments = (List) itemAdj.get(i);
Iterator ida = itemAdjustments.iterator();
while (ida.hasNext())
item.addAdjustment((GenericValue) ida.next());
}
}
}
// Calc the tax adjustments.
private List getTaxAdjustments(LocalDispatcher dispatcher, String taxService, String productStoreId,
List orderItems, List allAdjustments, GenericValue shipAddress) throws GeneralException {
List products = new ArrayList(orderItems.size());
List amounts = new ArrayList(orderItems.size());
List shipAmts = new ArrayList(orderItems.size());
double orderSubTotal = OrderReadHelper.getOrderItemsSubTotal(orderItems, allAdjustments);
List orderHeaderAdjustments = OrderReadHelper.getOrderHeaderAdjustments(allAdjustments);
Double cartShipping = new Double(OrderReadHelper.calcOrderAdjustments(orderHeaderAdjustments, orderSubTotal, false, false, true));
// build up the list of tax calc service parameters
for (int i = 0; i < orderItems.size(); i++) {
GenericValue orderItem = (GenericValue) orderItems.get(i);
try {
products.add(i, orderItem.getRelatedOne("Product")); // get the product entity
amounts.add(i, new Double(OrderReadHelper.getOrderItemSubTotal(orderItem, allAdjustments, true, false))); // get the item amount
shipAmts.add(i, new Double(OrderReadHelper.getOrderItemAdjustmentsTotal(orderItem, allAdjustments, false, false, true))); // get the shipping amount
} catch (GenericEntityException e) {
Debug.logError(e, "Cannot read order item entity (" + e.getMessage() + ")", module);
throw new GeneralException("Cannot read the order item entity", e);
}
}
Map serviceContext = UtilMisc.toMap("productStoreId", productStoreId, "itemProductList", products, "itemAmountList", amounts,
"itemShippingList", shipAmts, "orderShippingAmount", cartShipping, "shippingAddress", shipAddress);
Map serviceResult = null;
try {
serviceResult = dispatcher.runSync(taxService, serviceContext);
} catch (GenericServiceException e) {
Debug.logError(e, module);
throw new GeneralException("Problem occurred in tax service (" + e.getMessage() + ")", e);
}
if (ServiceUtil.isError(serviceResult)) {
throw new GeneralException(ServiceUtil.getErrorMessage(serviceResult));
}
// the adjustments (returned in order) from taxware.
List orderAdj = (List) serviceResult.get("orderAdjustments");
List itemAdj = (List) serviceResult.get("itemAdjustments");
return UtilMisc.toList(orderAdj, itemAdj);
}
public Map processPayment(GenericValue productStore, GenericValue userLogin) throws GeneralException {
// Get some payment related strings
String DECLINE_MESSAGE = productStore.getString("authDeclinedMessage");
String ERROR_MESSAGE = productStore.getString("authErrorMessage");
String RETRY_ON_ERROR = productStore.getString("retryFailedAuths");
if (RETRY_ON_ERROR == null) {
RETRY_ON_ERROR = "Y";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -