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().getName());
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 if (Validator.isNull(billingStateSel)) {
228 billingState = ParamUtil.getString(actionRequest, "billingState");
229 }
230
231 String billingZip = ParamUtil.getString(actionRequest, "billingZip");
232 String billingCountry = ParamUtil.getString(
233 actionRequest, "billingCountry");
234 String billingPhone = ParamUtil.getString(
235 actionRequest, "billingPhone");
236
237 boolean shipToBilling = ParamUtil.getBoolean(
238 actionRequest, "shipToBilling");
239 String shippingFirstName = ParamUtil.getString(
240 actionRequest, "shippingFirstName");
241 String shippingLastName = ParamUtil.getString(
242 actionRequest, "shippingLastName");
243 String shippingEmailAddress = ParamUtil.getString(
244 actionRequest, "shippingEmailAddress");
245 String shippingCompany = ParamUtil.getString(
246 actionRequest, "shippingCompany");
247 String shippingStreet = ParamUtil.getString(
248 actionRequest, "shippingStreet");
249 String shippingCity = ParamUtil.getString(
250 actionRequest, "shippingCity");
251
252 String shippingStateSel = ParamUtil.getString(
253 actionRequest, "shippingStateSel");
254 String shippingState = shippingStateSel;
255 if (Validator.isNull(shippingStateSel)) {
256 shippingState = ParamUtil.getString(actionRequest, "shippingState");
257 }
258
259 String shippingZip = ParamUtil.getString(actionRequest, "shippingZip");
260 String shippingCountry = ParamUtil.getString(
261 actionRequest, "shippingCountry");
262 String shippingPhone = ParamUtil.getString(
263 actionRequest, "shippingPhone");
264
265 String ccName = ParamUtil.getString(actionRequest, "ccName");
266 String ccType = ParamUtil.getString(actionRequest, "ccType");
267 String ccNumber = ParamUtil.getString(actionRequest, "ccNumber");
268 int ccExpMonth = ParamUtil.getInteger(actionRequest, "ccExpMonth");
269 int ccExpYear = ParamUtil.getInteger(actionRequest, "ccExpYear");
270 String ccVerNumber = ParamUtil.getString(actionRequest, "ccVerNumber");
271
272 String comments = ParamUtil.getString(actionRequest, "comments");
273
274 ShoppingOrder order = ShoppingOrderLocalServiceUtil.updateLatestOrder(
275 themeDisplay.getUserId(), themeDisplay.getScopeGroupId(),
276 billingFirstName, billingLastName, billingEmailAddress,
277 billingCompany, billingStreet, billingCity, billingState,
278 billingZip, billingCountry, billingPhone, shipToBilling,
279 shippingFirstName, shippingLastName, shippingEmailAddress,
280 shippingCompany, shippingStreet, shippingCity, shippingState,
281 shippingZip, shippingCountry, shippingPhone, ccName, ccType,
282 ccNumber, ccExpMonth, ccExpYear, ccVerNumber, comments);
283
284 actionRequest.setAttribute(WebKeys.SHOPPING_ORDER, order);
285 }
286
287 private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false;
288
289 }