1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   * 
13   */
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.StringUtil;
21  import com.liferay.portal.model.Layout;
22  import com.liferay.portal.security.auth.PrincipalException;
23  import com.liferay.portal.struts.PortletAction;
24  import com.liferay.portal.util.WebKeys;
25  import com.liferay.portlet.shopping.CouponCodeException;
26  import com.liferay.portlet.shopping.CouponDateException;
27  import com.liferay.portlet.shopping.CouponDescriptionException;
28  import com.liferay.portlet.shopping.CouponDiscountException;
29  import com.liferay.portlet.shopping.CouponEndDateException;
30  import com.liferay.portlet.shopping.CouponLimitCategoriesException;
31  import com.liferay.portlet.shopping.CouponLimitSKUsException;
32  import com.liferay.portlet.shopping.CouponMinimumOrderException;
33  import com.liferay.portlet.shopping.CouponNameException;
34  import com.liferay.portlet.shopping.CouponStartDateException;
35  import com.liferay.portlet.shopping.DuplicateCouponCodeException;
36  import com.liferay.portlet.shopping.NoSuchCouponException;
37  import com.liferay.portlet.shopping.service.ShoppingCouponServiceUtil;
38  
39  import java.util.Calendar;
40  
41  import javax.portlet.ActionRequest;
42  import javax.portlet.ActionResponse;
43  import javax.portlet.PortletConfig;
44  import javax.portlet.RenderRequest;
45  import javax.portlet.RenderResponse;
46  
47  import org.apache.struts.action.ActionForm;
48  import org.apache.struts.action.ActionForward;
49  import org.apache.struts.action.ActionMapping;
50  
51  /**
52   * <a href="EditCouponAction.java.html"><b><i>View Source</i></b></a>
53   *
54   * @author Brian Wing Shun Chan
55   * @author Huang Jie
56   */
57  public class EditCouponAction extends PortletAction {
58  
59      public void processAction(
60              ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
61              ActionRequest actionRequest, ActionResponse actionResponse)
62          throws Exception {
63  
64          String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
65  
66          try {
67              if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
68                  updateCoupon(actionRequest);
69              }
70              else if (cmd.equals(Constants.DELETE)) {
71                  deleteCoupons(actionRequest);
72              }
73  
74              sendRedirect(actionRequest, actionResponse);
75          }
76          catch (Exception e) {
77              if (e instanceof NoSuchCouponException ||
78                  e instanceof PrincipalException) {
79  
80                  SessionErrors.add(actionRequest, e.getClass().getName());
81  
82                  setForward(actionRequest, "portlet.shopping.error");
83              }
84              else if (e instanceof CouponCodeException ||
85                       e instanceof CouponDateException ||
86                       e instanceof CouponDescriptionException ||
87                       e instanceof CouponDiscountException ||
88                       e instanceof CouponEndDateException ||
89                       e instanceof CouponLimitCategoriesException ||
90                       e instanceof CouponLimitSKUsException ||
91                       e instanceof CouponMinimumOrderException ||
92                       e instanceof CouponNameException ||
93                       e instanceof CouponStartDateException ||
94                       e instanceof DuplicateCouponCodeException) {
95  
96                  if (e instanceof CouponLimitCategoriesException) {
97                      CouponLimitCategoriesException clce =
98                          (CouponLimitCategoriesException)e;
99  
100                     SessionErrors.add(
101                         actionRequest, e.getClass().getName(),
102                         clce.getCategoryIds());
103                 }
104                 else if (e instanceof CouponLimitSKUsException) {
105                     CouponLimitSKUsException clskue =
106                         (CouponLimitSKUsException)e;
107 
108                     SessionErrors.add(
109                         actionRequest, e.getClass().getName(),
110                         clskue.getSkus());
111                 }
112                 else {
113                     SessionErrors.add(actionRequest, e.getClass().getName());
114                 }
115             }
116             else {
117                 throw e;
118             }
119         }
120     }
121 
122     public ActionForward render(
123             ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
124             RenderRequest renderRequest, RenderResponse renderResponse)
125         throws Exception {
126 
127         try {
128             ActionUtil.getCoupon(renderRequest);
129         }
130         catch (Exception e) {
131             if (e instanceof NoSuchCouponException ||
132                 e instanceof PrincipalException) {
133 
134                 SessionErrors.add(renderRequest, e.getClass().getName());
135 
136                 return mapping.findForward("portlet.shopping.error");
137             }
138             else {
139                 throw e;
140             }
141         }
142 
143         return mapping.findForward(
144             getForward(renderRequest, "portlet.shopping.edit_coupon"));
145     }
146 
147     protected void deleteCoupons(ActionRequest actionRequest) throws Exception {
148         Layout layout = (Layout)actionRequest.getAttribute(WebKeys.LAYOUT);
149 
150         long[] deleteCouponIds = StringUtil.split(
151             ParamUtil.getString(actionRequest, "deleteCouponIds"), 0L);
152 
153         for (int i = 0; i < deleteCouponIds.length; i++) {
154             ShoppingCouponServiceUtil.deleteCoupon(
155                 layout.getPlid(), deleteCouponIds[i]);
156         }
157     }
158 
159     protected void updateCoupon(ActionRequest actionRequest) throws Exception {
160         Layout layout = (Layout)actionRequest.getAttribute(WebKeys.LAYOUT);
161 
162         long couponId = ParamUtil.getLong(actionRequest, "couponId");
163 
164         String code = ParamUtil.getString(actionRequest, "code");
165         boolean autoCode = ParamUtil.getBoolean(actionRequest, "autoCode");
166 
167         String name = ParamUtil.getString(actionRequest, "name");
168         String description = ParamUtil.getString(actionRequest, "description");
169 
170         int startDateMonth = ParamUtil.getInteger(
171             actionRequest, "startDateMonth");
172         int startDateDay = ParamUtil.getInteger(actionRequest, "startDateDay");
173         int startDateYear = ParamUtil.getInteger(
174             actionRequest, "startDateYear");
175         int startDateHour = ParamUtil.getInteger(
176             actionRequest, "startDateHour");
177         int startDateMinute = ParamUtil.getInteger(
178             actionRequest, "startDateMinute");
179         int startDateAmPm = ParamUtil.getInteger(
180             actionRequest, "startDateAmPm");
181 
182         if (startDateAmPm == Calendar.PM) {
183             startDateHour += 12;
184         }
185 
186         int endDateMonth = ParamUtil.getInteger(actionRequest, "endDateMonth");
187         int endDateDay = ParamUtil.getInteger(actionRequest, "endDateDay");
188         int endDateYear = ParamUtil.getInteger(actionRequest, "endDateYear");
189         int endDateHour = ParamUtil.getInteger(actionRequest, "endDateHour");
190         int endDateMinute = ParamUtil.getInteger(
191             actionRequest, "endDateMinute");
192         int endDateAmPm = ParamUtil.getInteger(actionRequest, "endDateAmPm");
193         boolean neverExpire = ParamUtil.getBoolean(
194             actionRequest, "neverExpire");
195 
196         if (endDateAmPm == Calendar.PM) {
197             endDateHour += 12;
198         }
199 
200         boolean active = ParamUtil.getBoolean(actionRequest, "active");
201         String limitCategories = ParamUtil.getString(
202             actionRequest, "limitCategories");
203         String limitSkus = ParamUtil.getString(actionRequest, "limitSkus");
204         double minOrder = ParamUtil.getDouble(actionRequest, "minOrder", -1.0);
205         double discount = ParamUtil.getDouble(actionRequest, "discount", -1.0);
206         String discountType = ParamUtil.getString(
207             actionRequest, "discountType");
208 
209         if (couponId <= 0) {
210 
211             // Add coupon
212 
213             ShoppingCouponServiceUtil.addCoupon(
214                 layout.getPlid(), code, autoCode, name, description,
215                 startDateMonth, startDateDay, startDateYear, startDateHour,
216                 startDateMinute, endDateMonth, endDateDay, endDateYear,
217                 endDateHour, endDateMinute, neverExpire, active,
218                 limitCategories, limitSkus, minOrder, discount, discountType);
219         }
220         else {
221 
222             // Update coupon
223 
224             ShoppingCouponServiceUtil.updateCoupon(
225                 layout.getPlid(), couponId, name, description, startDateMonth,
226                 startDateDay, startDateYear, startDateHour, startDateMinute,
227                 endDateMonth, endDateDay, endDateYear, endDateHour,
228                 endDateMinute, neverExpire, active, limitCategories, limitSkus,
229                 minOrder, discount, discountType);
230         }
231     }
232 
233 }