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