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.StringUtil;
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.struts.PortletAction;
025 import com.liferay.portal.theme.ThemeDisplay;
026 import com.liferay.portal.util.WebKeys;
027 import com.liferay.portlet.shopping.CouponCodeException;
028 import com.liferay.portlet.shopping.CouponDateException;
029 import com.liferay.portlet.shopping.CouponDescriptionException;
030 import com.liferay.portlet.shopping.CouponDiscountException;
031 import com.liferay.portlet.shopping.CouponEndDateException;
032 import com.liferay.portlet.shopping.CouponLimitCategoriesException;
033 import com.liferay.portlet.shopping.CouponLimitSKUsException;
034 import com.liferay.portlet.shopping.CouponMinimumOrderException;
035 import com.liferay.portlet.shopping.CouponNameException;
036 import com.liferay.portlet.shopping.CouponStartDateException;
037 import com.liferay.portlet.shopping.DuplicateCouponCodeException;
038 import com.liferay.portlet.shopping.NoSuchCouponException;
039 import com.liferay.portlet.shopping.model.ShoppingCoupon;
040 import com.liferay.portlet.shopping.service.ShoppingCouponServiceUtil;
041
042 import java.util.Calendar;
043
044 import javax.portlet.ActionRequest;
045 import javax.portlet.ActionResponse;
046 import javax.portlet.PortletConfig;
047 import javax.portlet.RenderRequest;
048 import javax.portlet.RenderResponse;
049
050 import org.apache.struts.action.ActionForm;
051 import org.apache.struts.action.ActionForward;
052 import org.apache.struts.action.ActionMapping;
053
054
058 public class EditCouponAction extends PortletAction {
059
060 @Override
061 public void processAction(
062 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
063 ActionRequest actionRequest, ActionResponse actionResponse)
064 throws Exception {
065
066 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
067
068 try {
069 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
070 updateCoupon(actionRequest);
071 }
072 else if (cmd.equals(Constants.DELETE)) {
073 deleteCoupons(actionRequest);
074 }
075
076 sendRedirect(actionRequest, actionResponse);
077 }
078 catch (Exception e) {
079 if (e instanceof NoSuchCouponException ||
080 e instanceof PrincipalException) {
081
082 SessionErrors.add(actionRequest, e.getClass().getName());
083
084 setForward(actionRequest, "portlet.shopping.error");
085 }
086 else if (e instanceof CouponCodeException ||
087 e instanceof CouponDateException ||
088 e instanceof CouponDescriptionException ||
089 e instanceof CouponDiscountException ||
090 e instanceof CouponEndDateException ||
091 e instanceof CouponLimitCategoriesException ||
092 e instanceof CouponLimitSKUsException ||
093 e instanceof CouponMinimumOrderException ||
094 e instanceof CouponNameException ||
095 e instanceof CouponStartDateException ||
096 e instanceof DuplicateCouponCodeException) {
097
098 if (e instanceof CouponLimitCategoriesException) {
099 CouponLimitCategoriesException clce =
100 (CouponLimitCategoriesException)e;
101
102 SessionErrors.add(
103 actionRequest, e.getClass().getName(),
104 clce.getCategoryIds());
105 }
106 else if (e instanceof CouponLimitSKUsException) {
107 CouponLimitSKUsException clskue =
108 (CouponLimitSKUsException)e;
109
110 SessionErrors.add(
111 actionRequest, e.getClass().getName(),
112 clskue.getSkus());
113 }
114 else {
115 SessionErrors.add(actionRequest, e.getClass().getName());
116 }
117 }
118 else {
119 throw e;
120 }
121 }
122 }
123
124 @Override
125 public ActionForward render(
126 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
127 RenderRequest renderRequest, RenderResponse renderResponse)
128 throws Exception {
129
130 try {
131 ActionUtil.getCoupon(renderRequest);
132 }
133 catch (Exception e) {
134 if (e instanceof NoSuchCouponException ||
135 e instanceof PrincipalException) {
136
137 SessionErrors.add(renderRequest, e.getClass().getName());
138
139 return mapping.findForward("portlet.shopping.error");
140 }
141 else {
142 throw e;
143 }
144 }
145
146 return mapping.findForward(
147 getForward(renderRequest, "portlet.shopping.edit_coupon"));
148 }
149
150 protected void deleteCoupons(ActionRequest actionRequest) throws Exception {
151 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
152 WebKeys.THEME_DISPLAY);
153
154 long[] deleteCouponIds = StringUtil.split(
155 ParamUtil.getString(actionRequest, "deleteCouponIds"), 0L);
156
157 for (int i = 0; i < deleteCouponIds.length; i++) {
158 ShoppingCouponServiceUtil.deleteCoupon(
159 themeDisplay.getScopeGroupId(), deleteCouponIds[i]);
160 }
161 }
162
163 protected void updateCoupon(ActionRequest actionRequest) throws Exception {
164 long couponId = ParamUtil.getLong(actionRequest, "couponId");
165
166 String code = ParamUtil.getString(actionRequest, "code");
167 boolean autoCode = ParamUtil.getBoolean(actionRequest, "autoCode");
168
169 String name = ParamUtil.getString(actionRequest, "name");
170 String description = ParamUtil.getString(actionRequest, "description");
171
172 int startDateMonth = ParamUtil.getInteger(
173 actionRequest, "startDateMonth");
174 int startDateDay = ParamUtil.getInteger(actionRequest, "startDateDay");
175 int startDateYear = ParamUtil.getInteger(
176 actionRequest, "startDateYear");
177 int startDateHour = ParamUtil.getInteger(
178 actionRequest, "startDateHour");
179 int startDateMinute = ParamUtil.getInteger(
180 actionRequest, "startDateMinute");
181 int startDateAmPm = ParamUtil.getInteger(
182 actionRequest, "startDateAmPm");
183
184 if (startDateAmPm == Calendar.PM) {
185 startDateHour += 12;
186 }
187
188 int endDateMonth = ParamUtil.getInteger(actionRequest, "endDateMonth");
189 int endDateDay = ParamUtil.getInteger(actionRequest, "endDateDay");
190 int endDateYear = ParamUtil.getInteger(actionRequest, "endDateYear");
191 int endDateHour = ParamUtil.getInteger(actionRequest, "endDateHour");
192 int endDateMinute = ParamUtil.getInteger(
193 actionRequest, "endDateMinute");
194 int endDateAmPm = ParamUtil.getInteger(actionRequest, "endDateAmPm");
195 boolean neverExpire = ParamUtil.getBoolean(
196 actionRequest, "neverExpire");
197
198 if (endDateAmPm == Calendar.PM) {
199 endDateHour += 12;
200 }
201
202 boolean active = ParamUtil.getBoolean(actionRequest, "active");
203 String limitCategories = ParamUtil.getString(
204 actionRequest, "limitCategories");
205 String limitSkus = ParamUtil.getString(actionRequest, "limitSkus");
206 double minOrder = ParamUtil.getDouble(actionRequest, "minOrder", -1.0);
207 double discount = ParamUtil.getDouble(actionRequest, "discount", -1.0);
208 String discountType = ParamUtil.getString(
209 actionRequest, "discountType");
210
211 ServiceContext serviceContext = ServiceContextFactory.getInstance(
212 ShoppingCoupon.class.getName(), actionRequest);
213
214 if (couponId <= 0) {
215
216
217
218 ShoppingCouponServiceUtil.addCoupon(
219 code, autoCode, name, description, startDateMonth, startDateDay,
220 startDateYear, startDateHour, startDateMinute, endDateMonth,
221 endDateDay, endDateYear, endDateHour, endDateMinute,
222 neverExpire, active, limitCategories, limitSkus, minOrder,
223 discount, discountType, serviceContext);
224 }
225 else {
226
227
228
229 ShoppingCouponServiceUtil.updateCoupon(
230 couponId, name, description, startDateMonth, startDateDay,
231 startDateYear, startDateHour, startDateMinute, endDateMonth,
232 endDateDay, endDateYear, endDateHour, endDateMinute,
233 neverExpire, active, limitCategories, limitSkus, minOrder,
234 discount, discountType, serviceContext);
235 }
236 }
237
238 }