in applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/CheckOutEvents.java [1010:1137]
public static String determineNextFinalizeStep(HttpServletRequest request, HttpServletResponse response) {
GenericValue userLogin = (GenericValue) request.getSession().getAttribute("userLogin");
ShoppingCart cart = (ShoppingCart) request.getSession().getAttribute("shoppingCart");
// flag anoymous checkout to bypass additional party settings
boolean isAnonymousCheckout = false;
if (userLogin != null && "anonymous".equals(userLogin.getString("userLoginId"))) {
isAnonymousCheckout = true;
}
// determine where to direct the browser
// these are the default values
boolean requireCustomer = true;
boolean requireNewShippingAddress = false;
boolean requireShipping = true;
boolean requireOptions = true;
boolean requireShipGroups = false;
boolean requirePayment = !"PURCHASE_ORDER".equals(cart.getOrderType());
boolean requireTerm = true;
boolean requireAdditionalParty = isAnonymousCheckout;
boolean isSingleUsePayment = true;
// these options are not available to anonymous shoppers (security)
if (userLogin != null && !"anonymous".equals(userLogin.getString("userLoginId"))) {
String requireCustomerStr = request.getParameter("finalizeReqCustInfo");
String requireNewShippingAddressStr = request.getParameter("finalizeReqNewShipAddress");
String requireShippingStr = request.getParameter("finalizeReqShipInfo");
String requireOptionsStr = request.getParameter("finalizeReqOptions");
String requirePaymentStr = request.getParameter("finalizeReqPayInfo");
String requireTermStr = request.getParameter("finalizeReqTermInfo");
String requireAdditionalPartyStr = request.getParameter("finalizeReqAdditionalParty");
String requireShipGroupsStr = request.getParameter("finalizeReqShipGroups");
String singleUsePaymentStr = request.getParameter("singleUsePayment");
requireCustomer = requireCustomerStr == null || "true".equalsIgnoreCase(requireCustomerStr);
requireNewShippingAddress = requireNewShippingAddressStr != null && "true".equalsIgnoreCase(requireNewShippingAddressStr);
requireShipping = requireShippingStr == null || "true".equalsIgnoreCase(requireShippingStr);
requireOptions = requireOptionsStr == null || "true".equalsIgnoreCase(requireOptionsStr);
requireShipGroups = requireShipGroupsStr != null && "true".equalsIgnoreCase(requireShipGroupsStr);
if (requirePayment) {
requirePayment = requirePaymentStr == null || "true".equalsIgnoreCase(requirePaymentStr);
}
if (requireTerm) {
requireTerm = requireTermStr == null || "true".equalsIgnoreCase(requireTermStr);
}
requireAdditionalParty = requireAdditionalPartyStr == null || "true".equalsIgnoreCase(requireAdditionalPartyStr);
isSingleUsePayment = singleUsePaymentStr != null && "Y".equalsIgnoreCase(singleUsePaymentStr) ? true : false;
}
boolean shippingAddressSet = true;
boolean shippingOptionsSet = true;
for (int shipGroupIndex = 0; shipGroupIndex < cart.getShipGroupSize(); shipGroupIndex++) {
String shipContactMechId = cart.getShippingContactMechId(shipGroupIndex);
if (shipContactMechId == null) {
shippingAddressSet = false;
}
String shipmentMethodTypeId = cart.getShipmentMethodTypeId(shipGroupIndex);
if (shipmentMethodTypeId == null) {
shippingOptionsSet = false;
}
}
String customerPartyId = cart.getPartyId();
String[] processOrder = {"customer", "shipping", "shipGroups", "options", "term", "payment",
"addparty", "paysplit"};
if ("PURCHASE_ORDER".equals(cart.getOrderType())) {
// Force checks for the following
requireCustomer = true;
requireShipping = true;
requireOptions = true;
processOrder = new String[]{"customer", "term", "shipping", "shipGroups", "options", "payment",
"addparty", "paysplit"};
}
for (String currProcess : processOrder) {
if ("customer".equals(currProcess)) {
if (requireCustomer && (customerPartyId == null || "_NA_".equals(customerPartyId))) {
return "customer";
}
} else if ("shipping".equals(currProcess)) {
if (requireShipping) {
if (requireNewShippingAddress) {
return "shippingAddress";
} else if (!shippingAddressSet) {
return "shipping";
}
}
} else if ("shipGroups".equals(currProcess)) {
if (requireShipGroups) {
return "shipGroups";
}
} else if ("options".equals(currProcess)) {
if (requireOptions && !shippingOptionsSet) {
return "options";
}
} else if ("term".equals(currProcess)) {
if (requireTerm && !cart.isOrderTermSet()) {
return "term";
}
} else if ("payment".equals(currProcess)) {
List<String> paymentMethodIds = cart.getPaymentMethodIds();
List<String> paymentMethodTypeIds = cart.getPaymentMethodTypeIds();
if (requirePayment && UtilValidate.isEmpty(paymentMethodIds) && UtilValidate.isEmpty(paymentMethodTypeIds)) {
return "payment";
}
} else if ("addparty".equals(currProcess)) {
if (requireAdditionalParty && cart.getAttribute("addpty") == null) {
return "addparty";
}
} else if ("paysplit".equals(currProcess)) {
if (isSingleUsePayment) {
return "paysplit";
}
}
}
// Finally, if all checks go through, finalize the order.
// 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...
String checkoutGoTo = request.getParameter("checkoutGoTo");
if (UtilValidate.isNotEmpty(checkoutGoTo)) {
return checkoutGoTo;
}
if ("SALES_ORDER".equals(cart.getOrderType())) {
return "sales";
}
return "po";
}