001
014
015 package com.liferay.portlet.shopping.action;
016
017 import com.liferay.portal.kernel.servlet.SessionErrors;
018 import com.liferay.portal.kernel.util.Constants;
019 import com.liferay.portal.kernel.util.ParamUtil;
020 import com.liferay.portal.kernel.util.Validator;
021 import com.liferay.portal.security.auth.PrincipalException;
022 import com.liferay.portal.theme.ThemeDisplay;
023 import com.liferay.portal.util.WebKeys;
024 import com.liferay.portlet.ActionResponseImpl;
025 import com.liferay.portlet.shopping.BillingCityException;
026 import com.liferay.portlet.shopping.BillingCountryException;
027 import com.liferay.portlet.shopping.BillingEmailAddressException;
028 import com.liferay.portlet.shopping.BillingFirstNameException;
029 import com.liferay.portlet.shopping.BillingLastNameException;
030 import com.liferay.portlet.shopping.BillingPhoneException;
031 import com.liferay.portlet.shopping.BillingStateException;
032 import com.liferay.portlet.shopping.BillingStreetException;
033 import com.liferay.portlet.shopping.BillingZipException;
034 import com.liferay.portlet.shopping.CCExpirationException;
035 import com.liferay.portlet.shopping.CCNameException;
036 import com.liferay.portlet.shopping.CCNumberException;
037 import com.liferay.portlet.shopping.CCTypeException;
038 import com.liferay.portlet.shopping.ShippingCityException;
039 import com.liferay.portlet.shopping.ShippingCountryException;
040 import com.liferay.portlet.shopping.ShippingEmailAddressException;
041 import com.liferay.portlet.shopping.ShippingFirstNameException;
042 import com.liferay.portlet.shopping.ShippingLastNameException;
043 import com.liferay.portlet.shopping.ShippingPhoneException;
044 import com.liferay.portlet.shopping.ShippingStateException;
045 import com.liferay.portlet.shopping.ShippingStreetException;
046 import com.liferay.portlet.shopping.ShippingZipException;
047 import com.liferay.portlet.shopping.model.ShoppingCart;
048 import com.liferay.portlet.shopping.model.ShoppingOrder;
049 import com.liferay.portlet.shopping.service.ShoppingOrderLocalServiceUtil;
050 import com.liferay.portlet.shopping.util.ShoppingPreferences;
051 import com.liferay.portlet.shopping.util.ShoppingUtil;
052
053 import javax.portlet.ActionRequest;
054 import javax.portlet.ActionResponse;
055 import javax.portlet.PortletConfig;
056
057 import org.apache.struts.action.ActionForm;
058 import org.apache.struts.action.ActionMapping;
059
060
063 public class CheckoutAction extends CartAction {
064
065 @Override
066 public void processAction(
067 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
068 ActionRequest actionRequest, ActionResponse actionResponse)
069 throws Exception {
070
071 if (redirectToLogin(actionRequest, actionResponse)) {
072 return;
073 }
074
075 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
076
077 getLatestOrder(actionRequest);
078
079 if (cmd.equals(Constants.SAVE)) {
080 updateCart(actionRequest, actionResponse);
081 updateLatestOrder(actionRequest);
082 saveLatestOrder(actionRequest);
083 forwardCheckout(actionRequest, actionResponse);
084 }
085 else if (cmd.equals(Constants.UPDATE)) {
086 try {
087 updateLatestOrder(actionRequest);
088
089 setForward(actionRequest, "portlet.shopping.checkout_second");
090 }
091 catch (Exception e) {
092 if (e instanceof BillingCityException ||
093 e instanceof BillingCountryException ||
094 e instanceof BillingEmailAddressException ||
095 e instanceof BillingFirstNameException ||
096 e instanceof BillingLastNameException ||
097 e instanceof BillingPhoneException ||
098 e instanceof BillingStateException ||
099 e instanceof BillingStreetException ||
100 e instanceof BillingZipException ||
101 e instanceof CCExpirationException ||
102 e instanceof CCNameException ||
103 e instanceof CCNumberException ||
104 e instanceof CCTypeException ||
105 e instanceof ShippingCityException ||
106 e instanceof ShippingCountryException ||
107 e instanceof ShippingEmailAddressException ||
108 e instanceof ShippingFirstNameException ||
109 e instanceof ShippingLastNameException ||
110 e instanceof ShippingPhoneException ||
111 e instanceof ShippingStateException ||
112 e instanceof ShippingStreetException ||
113 e instanceof ShippingZipException) {
114
115 SessionErrors.add(actionRequest, e.getClass().getName());
116
117 setForward(
118 actionRequest, "portlet.shopping.checkout_first");
119 }
120 else if (e instanceof PrincipalException) {
121 setForward(actionRequest, "portlet.shopping.error");
122 }
123 else {
124 throw e;
125 }
126 }
127 }
128 else if (cmd.equals(Constants.VIEW)) {
129 setForward(actionRequest, "portlet.shopping.checkout_third");
130 }
131 else {
132 setForward(actionRequest, "portlet.shopping.checkout_first");
133 }
134 }
135
136 protected void forwardCheckout(
137 ActionRequest actionRequest, ActionResponse actionResponse)
138 throws Exception {
139
140 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
141 WebKeys.THEME_DISPLAY);
142
143 ShoppingCart cart = ShoppingUtil.getCart(actionRequest);
144
145 ShoppingOrder order = (ShoppingOrder)actionRequest.getAttribute(
146 WebKeys.SHOPPING_ORDER);
147
148 ShoppingPreferences preferences = ShoppingPreferences.getInstance(
149 themeDisplay.getCompanyId(), themeDisplay.getScopeGroupId());
150
151 String returnURL = ShoppingUtil.getPayPalReturnURL(
152 ((ActionResponseImpl)actionResponse).createActionURL(), order);
153 String notifyURL = ShoppingUtil.getPayPalNotifyURL(themeDisplay);
154
155 if (preferences.usePayPal()) {
156 double total = ShoppingUtil.calculateTotal(
157 cart.getItems(), order.getBillingState(), cart.getCoupon(),
158 cart.getAltShipping(), cart.isInsure());
159
160 String redirectURL = ShoppingUtil.getPayPalRedirectURL(
161 preferences, order, total, returnURL, notifyURL);
162
163 actionResponse.sendRedirect(redirectURL);
164 }
165 else {
166 ShoppingOrderLocalServiceUtil.sendEmail(order, "confirmation");
167
168 actionResponse.sendRedirect(returnURL);
169 }
170 }
171
172 protected void getLatestOrder(ActionRequest actionRequest)
173 throws Exception {
174
175 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
176 WebKeys.THEME_DISPLAY);
177
178 ShoppingOrder order = ShoppingOrderLocalServiceUtil.getLatestOrder(
179 themeDisplay.getUserId(), themeDisplay.getScopeGroupId());
180
181 actionRequest.setAttribute(WebKeys.SHOPPING_ORDER, order);
182 }
183
184 @Override
185 protected boolean isCheckMethodOnProcessAction() {
186 return _CHECK_METHOD_ON_PROCESS_ACTION;
187 }
188
189 protected void saveLatestOrder(ActionRequest actionRequest)
190 throws Exception {
191
192 ShoppingCart cart = ShoppingUtil.getCart(actionRequest);
193
194 ShoppingOrder order =
195 ShoppingOrderLocalServiceUtil.saveLatestOrder(cart);
196
197 actionRequest.setAttribute(WebKeys.SHOPPING_ORDER, order);
198 }
199
200 protected void updateLatestOrder(ActionRequest actionRequest)
201 throws Exception {
202
203 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
204 WebKeys.THEME_DISPLAY);
205
206 String billingFirstName = ParamUtil.getString(
207 actionRequest, "billingFirstName");
208 String billingLastName = ParamUtil.getString(
209 actionRequest, "billingLastName");
210 String billingEmailAddress = ParamUtil.getString(
211 actionRequest, "billingEmailAddress");
212 String billingCompany = ParamUtil.getString(
213 actionRequest, "billingCompany");
214 String billingStreet = ParamUtil.getString(
215 actionRequest, "billingStreet");
216 String billingCity = ParamUtil.getString(actionRequest, "billingCity");
217
218 String billingStateSel = ParamUtil.getString(
219 actionRequest, "billingStateSel");
220 String billingState = billingStateSel;
221 if (Validator.isNull(billingStateSel)) {
222 billingState = ParamUtil.getString(actionRequest, "billingState");
223 }
224
225 String billingZip = ParamUtil.getString(actionRequest, "billingZip");
226 String billingCountry = ParamUtil.getString(
227 actionRequest, "billingCountry");
228 String billingPhone = ParamUtil.getString(
229 actionRequest, "billingPhone");
230
231 boolean shipToBilling = ParamUtil.getBoolean(
232 actionRequest, "shipToBilling");
233 String shippingFirstName = ParamUtil.getString(
234 actionRequest, "shippingFirstName");
235 String shippingLastName = ParamUtil.getString(
236 actionRequest, "shippingLastName");
237 String shippingEmailAddress = ParamUtil.getString(
238 actionRequest, "shippingEmailAddress");
239 String shippingCompany = ParamUtil.getString(
240 actionRequest, "shippingCompany");
241 String shippingStreet = ParamUtil.getString(
242 actionRequest, "shippingStreet");
243 String shippingCity = ParamUtil.getString(
244 actionRequest, "shippingCity");
245
246 String shippingStateSel = ParamUtil.getString(
247 actionRequest, "shippingStateSel");
248 String shippingState = shippingStateSel;
249 if (Validator.isNull(shippingStateSel)) {
250 shippingState = ParamUtil.getString(actionRequest, "shippingState");
251 }
252
253 String shippingZip = ParamUtil.getString(actionRequest, "shippingZip");
254 String shippingCountry = ParamUtil.getString(
255 actionRequest, "shippingCountry");
256 String shippingPhone = ParamUtil.getString(
257 actionRequest, "shippingPhone");
258
259 String ccName = ParamUtil.getString(actionRequest, "ccName");
260 String ccType = ParamUtil.getString(actionRequest, "ccType");
261 String ccNumber = ParamUtil.getString(actionRequest, "ccNumber");
262 int ccExpMonth = ParamUtil.getInteger(actionRequest, "ccExpMonth");
263 int ccExpYear = ParamUtil.getInteger(actionRequest, "ccExpYear");
264 String ccVerNumber = ParamUtil.getString(actionRequest, "ccVerNumber");
265
266 String comments = ParamUtil.getString(actionRequest, "comments");
267
268 ShoppingOrder order = ShoppingOrderLocalServiceUtil.updateLatestOrder(
269 themeDisplay.getUserId(), themeDisplay.getScopeGroupId(),
270 billingFirstName, billingLastName, billingEmailAddress,
271 billingCompany, billingStreet, billingCity, billingState,
272 billingZip, billingCountry, billingPhone, shipToBilling,
273 shippingFirstName, shippingLastName, shippingEmailAddress,
274 shippingCompany, shippingStreet, shippingCity, shippingState,
275 shippingZip, shippingCountry, shippingPhone, ccName, ccType,
276 ccNumber, ccExpMonth, ccExpYear, ccVerNumber, comments);
277
278 actionRequest.setAttribute(WebKeys.SHOPPING_ORDER, order);
279 }
280
281 private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false;
282
283 }