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