1   /**
2    * Copyright (c) 2000-2008 Liferay, Inc. All rights reserved.
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  
23  package com.liferay.portlet.shopping.action;
24  
25  import com.liferay.portal.kernel.servlet.SessionErrors;
26  import com.liferay.portal.kernel.util.Constants;
27  import com.liferay.portal.kernel.util.ParamUtil;
28  import com.liferay.portal.kernel.util.StringUtil;
29  import com.liferay.portal.model.Layout;
30  import com.liferay.portal.security.auth.PrincipalException;
31  import com.liferay.portal.struts.PortletAction;
32  import com.liferay.portal.util.WebKeys;
33  import com.liferay.portlet.shopping.CouponCodeException;
34  import com.liferay.portlet.shopping.CouponDateException;
35  import com.liferay.portlet.shopping.CouponDescriptionException;
36  import com.liferay.portlet.shopping.CouponEndDateException;
37  import com.liferay.portlet.shopping.CouponLimitCategoriesException;
38  import com.liferay.portlet.shopping.CouponLimitSKUsException;
39  import com.liferay.portlet.shopping.CouponNameException;
40  import com.liferay.portlet.shopping.CouponStartDateException;
41  import com.liferay.portlet.shopping.DuplicateCouponCodeException;
42  import com.liferay.portlet.shopping.NoSuchCouponException;
43  import com.liferay.portlet.shopping.service.ShoppingCouponServiceUtil;
44  
45  import java.util.Calendar;
46  
47  import javax.portlet.ActionRequest;
48  import javax.portlet.ActionResponse;
49  import javax.portlet.PortletConfig;
50  import javax.portlet.RenderRequest;
51  import javax.portlet.RenderResponse;
52  
53  import org.apache.struts.action.ActionForm;
54  import org.apache.struts.action.ActionForward;
55  import org.apache.struts.action.ActionMapping;
56  
57  /**
58   * <a href="EditCouponAction.java.html"><b><i>View Source</i></b></a>
59   *
60   * @author Brian Wing Shun Chan
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 CouponEndDateException ||
94                       e instanceof CouponLimitCategoriesException ||
95                       e instanceof CouponLimitSKUsException ||
96                       e instanceof CouponNameException ||
97                       e instanceof CouponStartDateException ||
98                       e instanceof DuplicateCouponCodeException) {
99  
100                 if (e instanceof CouponLimitCategoriesException) {
101                     CouponLimitCategoriesException clce =
102                         (CouponLimitCategoriesException)e;
103 
104                     SessionErrors.add(
105                         actionRequest, e.getClass().getName(),
106                         clce.getCategoryIds());
107                 }
108                 else if (e instanceof CouponLimitSKUsException) {
109                     CouponLimitSKUsException clskue =
110                         (CouponLimitSKUsException)e;
111 
112                     SessionErrors.add(
113                         actionRequest, e.getClass().getName(),
114                         clskue.getSkus());
115                 }
116                 else {
117                     SessionErrors.add(actionRequest, e.getClass().getName());
118                 }
119             }
120             else {
121                 throw e;
122             }
123         }
124     }
125 
126     public ActionForward render(
127             ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
128             RenderRequest renderRequest, RenderResponse renderResponse)
129         throws Exception {
130 
131         try {
132             ActionUtil.getCoupon(renderRequest);
133         }
134         catch (Exception e) {
135             if (e instanceof NoSuchCouponException ||
136                 e instanceof PrincipalException) {
137 
138                 SessionErrors.add(renderRequest, e.getClass().getName());
139 
140                 return mapping.findForward("portlet.shopping.error");
141             }
142             else {
143                 throw e;
144             }
145         }
146 
147         return mapping.findForward(
148             getForward(renderRequest, "portlet.shopping.edit_coupon"));
149     }
150 
151     protected void deleteCoupons(ActionRequest actionRequest) throws Exception {
152         Layout layout = (Layout)actionRequest.getAttribute(WebKeys.LAYOUT);
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                 layout.getPlid(), deleteCouponIds[i]);
160         }
161     }
162 
163     protected void updateCoupon(ActionRequest actionRequest) throws Exception {
164         Layout layout = (Layout)actionRequest.getAttribute(WebKeys.LAYOUT);
165 
166         long couponId = ParamUtil.getLong(actionRequest, "couponId");
167 
168         String code = ParamUtil.getString(actionRequest, "code");
169         boolean autoCode = ParamUtil.getBoolean(actionRequest, "autoCode");
170 
171         String name = ParamUtil.getString(actionRequest, "name");
172         String description = ParamUtil.getString(actionRequest, "description");
173 
174         int startDateMonth = ParamUtil.getInteger(
175             actionRequest, "startDateMonth");
176         int startDateDay = ParamUtil.getInteger(actionRequest, "startDateDay");
177         int startDateYear = ParamUtil.getInteger(
178             actionRequest, "startDateYear");
179         int startDateHour = ParamUtil.getInteger(
180             actionRequest, "startDateHour");
181         int startDateMinute = ParamUtil.getInteger(
182             actionRequest, "startDateMinute");
183         int startDateAmPm = ParamUtil.getInteger(
184             actionRequest, "startDateAmPm");
185 
186         if (startDateAmPm == Calendar.PM) {
187             startDateHour += 12;
188         }
189 
190         int endDateMonth = ParamUtil.getInteger(actionRequest, "endDateMonth");
191         int endDateDay = ParamUtil.getInteger(actionRequest, "endDateDay");
192         int endDateYear = ParamUtil.getInteger(actionRequest, "endDateYear");
193         int endDateHour = ParamUtil.getInteger(actionRequest, "endDateHour");
194         int endDateMinute = ParamUtil.getInteger(
195             actionRequest, "endDateMinute");
196         int endDateAmPm = ParamUtil.getInteger(actionRequest, "endDateAmPm");
197         boolean neverExpire = ParamUtil.getBoolean(
198             actionRequest, "neverExpire");
199 
200         if (endDateAmPm == Calendar.PM) {
201             endDateHour += 12;
202         }
203 
204         boolean active = ParamUtil.getBoolean(actionRequest, "active");
205         String limitCategories = ParamUtil.getString(
206             actionRequest, "limitCategories");
207         String limitSkus = ParamUtil.getString(actionRequest, "limitSkus");
208         double minOrder = ParamUtil.getDouble(actionRequest, "minOrder");
209         double discount = ParamUtil.getDouble(actionRequest, "discount");
210         String discountType = ParamUtil.getString(
211             actionRequest, "discountType");
212 
213         if (couponId <= 0) {
214 
215             // Add coupon
216 
217             ShoppingCouponServiceUtil.addCoupon(
218                 layout.getPlid(), code, autoCode, name, description,
219                 startDateMonth, startDateDay, startDateYear, startDateHour,
220                 startDateMinute, endDateMonth, endDateDay, endDateYear,
221                 endDateHour, endDateMinute, neverExpire, active,
222                 limitCategories, limitSkus, minOrder, discount, discountType);
223         }
224         else {
225 
226             // Update coupon
227 
228             ShoppingCouponServiceUtil.updateCoupon(
229                 layout.getPlid(), couponId, name, description, startDateMonth,
230                 startDateDay, startDateYear, startDateHour, startDateMinute,
231                 endDateMonth, endDateDay, endDateYear, endDateHour,
232                 endDateMinute, neverExpire, active, limitCategories, limitSkus,
233                 minOrder, discount, discountType);
234         }
235     }
236 
237 }