1
14
15 package com.liferay.portlet.shopping.action;
16
17 import com.liferay.portal.kernel.servlet.SessionErrors;
18 import com.liferay.portal.kernel.util.Constants;
19 import com.liferay.portal.kernel.util.ParamUtil;
20 import com.liferay.portal.kernel.util.Validator;
21 import com.liferay.portal.security.auth.PrincipalException;
22 import com.liferay.portal.theme.ThemeDisplay;
23 import com.liferay.portal.util.WebKeys;
24 import com.liferay.portlet.ActionResponseImpl;
25 import com.liferay.portlet.shopping.BillingCityException;
26 import com.liferay.portlet.shopping.BillingCountryException;
27 import com.liferay.portlet.shopping.BillingEmailAddressException;
28 import com.liferay.portlet.shopping.BillingFirstNameException;
29 import com.liferay.portlet.shopping.BillingLastNameException;
30 import com.liferay.portlet.shopping.BillingPhoneException;
31 import com.liferay.portlet.shopping.BillingStateException;
32 import com.liferay.portlet.shopping.BillingStreetException;
33 import com.liferay.portlet.shopping.BillingZipException;
34 import com.liferay.portlet.shopping.CCExpirationException;
35 import com.liferay.portlet.shopping.CCNameException;
36 import com.liferay.portlet.shopping.CCNumberException;
37 import com.liferay.portlet.shopping.CCTypeException;
38 import com.liferay.portlet.shopping.ShippingCityException;
39 import com.liferay.portlet.shopping.ShippingCountryException;
40 import com.liferay.portlet.shopping.ShippingEmailAddressException;
41 import com.liferay.portlet.shopping.ShippingFirstNameException;
42 import com.liferay.portlet.shopping.ShippingLastNameException;
43 import com.liferay.portlet.shopping.ShippingPhoneException;
44 import com.liferay.portlet.shopping.ShippingStateException;
45 import com.liferay.portlet.shopping.ShippingStreetException;
46 import com.liferay.portlet.shopping.ShippingZipException;
47 import com.liferay.portlet.shopping.model.ShoppingCart;
48 import com.liferay.portlet.shopping.model.ShoppingOrder;
49 import com.liferay.portlet.shopping.service.ShoppingOrderLocalServiceUtil;
50 import com.liferay.portlet.shopping.util.ShoppingPreferences;
51 import com.liferay.portlet.shopping.util.ShoppingUtil;
52
53 import javax.portlet.ActionRequest;
54 import javax.portlet.ActionResponse;
55 import javax.portlet.PortletConfig;
56
57 import org.apache.struts.action.ActionForm;
58 import org.apache.struts.action.ActionMapping;
59
60
65 public class CheckoutAction extends CartAction {
66
67 public void processAction(
68 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
69 ActionRequest actionRequest, ActionResponse actionResponse)
70 throws Exception {
71
72 if (redirectToLogin(actionRequest, actionResponse)) {
73 return;
74 }
75
76 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
77
78 getLatestOrder(actionRequest);
79
80 if (cmd.equals(Constants.SAVE)) {
81 updateCart(actionRequest, actionResponse);
82 updateLatestOrder(actionRequest);
83 saveLatestOrder(actionRequest);
84 forwardCheckout(actionRequest, actionResponse);
85 }
86 else if (cmd.equals(Constants.UPDATE)) {
87 try {
88 updateLatestOrder(actionRequest);
89
90 setForward(actionRequest, "portlet.shopping.checkout_second");
91 }
92 catch (Exception e) {
93 if (e instanceof BillingCityException ||
94 e instanceof BillingCountryException ||
95 e instanceof BillingEmailAddressException ||
96 e instanceof BillingFirstNameException ||
97 e instanceof BillingLastNameException ||
98 e instanceof BillingPhoneException ||
99 e instanceof BillingStateException ||
100 e instanceof BillingStreetException ||
101 e instanceof BillingZipException ||
102 e instanceof CCExpirationException ||
103 e instanceof CCNameException ||
104 e instanceof CCNumberException ||
105 e instanceof CCTypeException ||
106 e instanceof ShippingCityException ||
107 e instanceof ShippingCountryException ||
108 e instanceof ShippingEmailAddressException ||
109 e instanceof ShippingFirstNameException ||
110 e instanceof ShippingLastNameException ||
111 e instanceof ShippingPhoneException ||
112 e instanceof ShippingStateException ||
113 e instanceof ShippingStreetException ||
114 e instanceof ShippingZipException) {
115
116 SessionErrors.add(actionRequest, e.getClass().getName());
117
118 setForward(
119 actionRequest, "portlet.shopping.checkout_first");
120 }
121 else if (e instanceof PrincipalException) {
122 setForward(actionRequest, "portlet.shopping.error");
123 }
124 else {
125 throw e;
126 }
127 }
128 }
129 else if (cmd.equals(Constants.VIEW)) {
130 setForward(actionRequest, "portlet.shopping.checkout_third");
131 }
132 else {
133 setForward(actionRequest, "portlet.shopping.checkout_first");
134 }
135 }
136
137 protected void forwardCheckout(
138 ActionRequest actionRequest, ActionResponse actionResponse)
139 throws Exception {
140
141 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
142 WebKeys.THEME_DISPLAY);
143
144 ShoppingCart cart = ShoppingUtil.getCart(actionRequest);
145
146 ShoppingOrder order = (ShoppingOrder)actionRequest.getAttribute(
147 WebKeys.SHOPPING_ORDER);
148
149 ShoppingPreferences preferences = ShoppingPreferences.getInstance(
150 themeDisplay.getCompanyId(), themeDisplay.getScopeGroupId());
151
152 String returnURL = ShoppingUtil.getPayPalReturnURL(
153 ((ActionResponseImpl)actionResponse).createActionURL(), order);
154 String notifyURL = ShoppingUtil.getPayPalNotifyURL(themeDisplay);
155
156 if (preferences.usePayPal()) {
157 double total = ShoppingUtil.calculateTotal(
158 cart.getItems(), order.getBillingState(), cart.getCoupon(),
159 cart.getAltShipping(), cart.isInsure());
160
161 String redirectURL = ShoppingUtil.getPayPalRedirectURL(
162 preferences, order, total, returnURL, notifyURL);
163
164 actionResponse.sendRedirect(redirectURL);
165 }
166 else {
167 ShoppingOrderLocalServiceUtil.sendEmail(order, "confirmation");
168
169 actionResponse.sendRedirect(returnURL);
170 }
171 }
172
173 protected void getLatestOrder(ActionRequest actionRequest)
174 throws Exception {
175
176 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
177 WebKeys.THEME_DISPLAY);
178
179 ShoppingOrder order = ShoppingOrderLocalServiceUtil.getLatestOrder(
180 themeDisplay.getUserId(), themeDisplay.getScopeGroupId());
181
182 actionRequest.setAttribute(WebKeys.SHOPPING_ORDER, order);
183 }
184
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 }