1   /**
2    * Copyright (c) 2000-2009 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   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
12   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
15   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
16   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
17   * SOFTWARE.
18   */
19  
20  package com.liferay.portlet.shopping.action;
21  
22  import com.liferay.portal.kernel.servlet.SessionErrors;
23  import com.liferay.portal.kernel.util.Constants;
24  import com.liferay.portal.kernel.util.ParamUtil;
25  import com.liferay.portal.kernel.util.StringUtil;
26  import com.liferay.portal.model.Layout;
27  import com.liferay.portal.security.auth.PrincipalException;
28  import com.liferay.portal.struts.PortletAction;
29  import com.liferay.portal.util.WebKeys;
30  import com.liferay.portlet.shopping.CouponCodeException;
31  import com.liferay.portlet.shopping.CouponDateException;
32  import com.liferay.portlet.shopping.CouponDescriptionException;
33  import com.liferay.portlet.shopping.CouponDiscountException;
34  import com.liferay.portlet.shopping.CouponEndDateException;
35  import com.liferay.portlet.shopping.CouponLimitCategoriesException;
36  import com.liferay.portlet.shopping.CouponLimitSKUsException;
37  import com.liferay.portlet.shopping.CouponMinimumOrderException;
38  import com.liferay.portlet.shopping.CouponNameException;
39  import com.liferay.portlet.shopping.CouponStartDateException;
40  import com.liferay.portlet.shopping.DuplicateCouponCodeException;
41  import com.liferay.portlet.shopping.NoSuchCouponException;
42  import com.liferay.portlet.shopping.service.ShoppingCouponServiceUtil;
43  
44  import java.util.Calendar;
45  
46  import javax.portlet.ActionRequest;
47  import javax.portlet.ActionResponse;
48  import javax.portlet.PortletConfig;
49  import javax.portlet.RenderRequest;
50  import javax.portlet.RenderResponse;
51  
52  import org.apache.struts.action.ActionForm;
53  import org.apache.struts.action.ActionForward;
54  import org.apache.struts.action.ActionMapping;
55  
56  /**
57   * <a href="EditCouponAction.java.html"><b><i>View Source</i></b></a>
58   *
59   * @author Brian Wing Shun Chan
60   * @author Huang Jie
61   *
62   */
63  public class EditCouponAction extends PortletAction {
64  
65      public void processAction(
66              ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
67              ActionRequest actionRequest, ActionResponse actionResponse)
68          throws Exception {
69  
70          String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
71  
72          try {
73              if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
74                  updateCoupon(actionRequest);
75              }
76              else if (cmd.equals(Constants.DELETE)) {
77                  deleteCoupons(actionRequest);
78              }
79  
80              sendRedirect(actionRequest, actionResponse);
81          }
82          catch (Exception e) {
83              if (e instanceof NoSuchCouponException ||
84                  e instanceof PrincipalException) {
85  
86                  SessionErrors.add(actionRequest, e.getClass().getName());
87  
88                  setForward(actionRequest, "portlet.shopping.error");
89              }
90              else if (e instanceof CouponCodeException ||
91                       e instanceof CouponDateException ||
92                       e instanceof CouponDescriptionException ||
93                       e instanceof CouponDiscountException ||
94                       e instanceof CouponEndDateException ||
95                       e instanceof CouponLimitCategoriesException ||
96                       e instanceof CouponLimitSKUsException ||
97                       e instanceof CouponMinimumOrderException ||
98                       e instanceof CouponNameException ||
99                       e instanceof CouponStartDateException ||
100                      e instanceof DuplicateCouponCodeException) {
101 
102                 if (e instanceof CouponLimitCategoriesException) {
103                     CouponLimitCategoriesException clce =
104                         (CouponLimitCategoriesException)e;
105 
106                     SessionErrors.add(
107                         actionRequest, e.getClass().getName(),
108                         clce.getCategoryIds());
109                 }
110                 else if (e instanceof CouponLimitSKUsException) {
111                     CouponLimitSKUsException clskue =
112                         (CouponLimitSKUsException)e;
113 
114                     SessionErrors.add(
115                         actionRequest, e.getClass().getName(),
116                         clskue.getSkus());
117                 }
118                 else {
119                     SessionErrors.add(actionRequest, e.getClass().getName());
120                 }
121             }
122             else {
123                 throw e;
124             }
125         }
126     }
127 
128     public ActionForward render(
129             ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
130             RenderRequest renderRequest, RenderResponse renderResponse)
131         throws Exception {
132 
133         try {
134             ActionUtil.getCoupon(renderRequest);
135         }
136         catch (Exception e) {
137             if (e instanceof NoSuchCouponException ||
138                 e instanceof PrincipalException) {
139 
140                 SessionErrors.add(renderRequest, e.getClass().getName());
141 
142                 return mapping.findForward("portlet.shopping.error");
143             }
144             else {
145                 throw e;
146             }
147         }
148 
149         return mapping.findForward(
150             getForward(renderRequest, "portlet.shopping.edit_coupon"));
151     }
152 
153     protected void deleteCoupons(ActionRequest actionRequest) throws Exception {
154         Layout layout = (Layout)actionRequest.getAttribute(WebKeys.LAYOUT);
155 
156         long[] deleteCouponIds = StringUtil.split(
157             ParamUtil.getString(actionRequest, "deleteCouponIds"), 0L);
158 
159         for (int i = 0; i < deleteCouponIds.length; i++) {
160             ShoppingCouponServiceUtil.deleteCoupon(
161                 layout.getPlid(), deleteCouponIds[i]);
162         }
163     }
164 
165     protected void updateCoupon(ActionRequest actionRequest) throws Exception {
166         Layout layout = (Layout)actionRequest.getAttribute(WebKeys.LAYOUT);
167 
168         long couponId = ParamUtil.getLong(actionRequest, "couponId");
169 
170         String code = ParamUtil.getString(actionRequest, "code");
171         boolean autoCode = ParamUtil.getBoolean(actionRequest, "autoCode");
172 
173         String name = ParamUtil.getString(actionRequest, "name");
174         String description = ParamUtil.getString(actionRequest, "description");
175 
176         int startDateMonth = ParamUtil.getInteger(
177             actionRequest, "startDateMonth");
178         int startDateDay = ParamUtil.getInteger(actionRequest, "startDateDay");
179         int startDateYear = ParamUtil.getInteger(
180             actionRequest, "startDateYear");
181         int startDateHour = ParamUtil.getInteger(
182             actionRequest, "startDateHour");
183         int startDateMinute = ParamUtil.getInteger(
184             actionRequest, "startDateMinute");
185         int startDateAmPm = ParamUtil.getInteger(
186             actionRequest, "startDateAmPm");
187 
188         if (startDateAmPm == Calendar.PM) {
189             startDateHour += 12;
190         }
191 
192         int endDateMonth = ParamUtil.getInteger(actionRequest, "endDateMonth");
193         int endDateDay = ParamUtil.getInteger(actionRequest, "endDateDay");
194         int endDateYear = ParamUtil.getInteger(actionRequest, "endDateYear");
195         int endDateHour = ParamUtil.getInteger(actionRequest, "endDateHour");
196         int endDateMinute = ParamUtil.getInteger(
197             actionRequest, "endDateMinute");
198         int endDateAmPm = ParamUtil.getInteger(actionRequest, "endDateAmPm");
199         boolean neverExpire = ParamUtil.getBoolean(
200             actionRequest, "neverExpire");
201 
202         if (endDateAmPm == Calendar.PM) {
203             endDateHour += 12;
204         }
205 
206         boolean active = ParamUtil.getBoolean(actionRequest, "active");
207         String limitCategories = ParamUtil.getString(
208             actionRequest, "limitCategories");
209         String limitSkus = ParamUtil.getString(actionRequest, "limitSkus");
210         double minOrder = ParamUtil.getDouble(actionRequest, "minOrder", -1.0);
211         double discount = ParamUtil.getDouble(actionRequest, "discount", -1.0);
212         String discountType = ParamUtil.getString(
213             actionRequest, "discountType");
214 
215         if (couponId <= 0) {
216 
217             // Add coupon
218 
219             ShoppingCouponServiceUtil.addCoupon(
220                 layout.getPlid(), code, autoCode, name, description,
221                 startDateMonth, startDateDay, startDateYear, startDateHour,
222                 startDateMinute, endDateMonth, endDateDay, endDateYear,
223                 endDateHour, endDateMinute, neverExpire, active,
224                 limitCategories, limitSkus, minOrder, discount, discountType);
225         }
226         else {
227 
228             // Update coupon
229 
230             ShoppingCouponServiceUtil.updateCoupon(
231                 layout.getPlid(), couponId, name, description, startDateMonth,
232                 startDateDay, startDateYear, startDateHour, startDateMinute,
233                 endDateMonth, endDateDay, endDateYear, endDateHour,
234                 endDateMinute, neverExpire, active, limitCategories, limitSkus,
235                 minOrder, discount, discountType);
236         }
237     }
238 
239 }