1
19
20 package com.liferay.portlet.shopping.action;
21
22 import com.liferay.portal.kernel.servlet.SessionErrors;
23 import com.liferay.portal.kernel.upload.UploadPortletRequest;
24 import com.liferay.portal.kernel.util.Constants;
25 import com.liferay.portal.kernel.util.ParamUtil;
26 import com.liferay.portal.kernel.util.Validator;
27 import com.liferay.portal.security.auth.PrincipalException;
28 import com.liferay.portal.struts.PortletAction;
29 import com.liferay.portal.util.PortalUtil;
30 import com.liferay.portlet.shopping.DuplicateItemSKUException;
31 import com.liferay.portlet.shopping.ItemLargeImageNameException;
32 import com.liferay.portlet.shopping.ItemLargeImageSizeException;
33 import com.liferay.portlet.shopping.ItemMediumImageNameException;
34 import com.liferay.portlet.shopping.ItemMediumImageSizeException;
35 import com.liferay.portlet.shopping.ItemNameException;
36 import com.liferay.portlet.shopping.ItemSKUException;
37 import com.liferay.portlet.shopping.ItemSmallImageNameException;
38 import com.liferay.portlet.shopping.ItemSmallImageSizeException;
39 import com.liferay.portlet.shopping.NoSuchCategoryException;
40 import com.liferay.portlet.shopping.NoSuchItemException;
41 import com.liferay.portlet.shopping.model.ShoppingItemField;
42 import com.liferay.portlet.shopping.model.ShoppingItemPrice;
43 import com.liferay.portlet.shopping.model.impl.ShoppingItemPriceImpl;
44 import com.liferay.portlet.shopping.service.ShoppingItemServiceUtil;
45 import com.liferay.portlet.shopping.service.persistence.ShoppingItemFieldUtil;
46 import com.liferay.portlet.shopping.service.persistence.ShoppingItemPriceUtil;
47
48 import java.io.File;
49
50 import java.util.ArrayList;
51 import java.util.List;
52
53 import javax.portlet.ActionRequest;
54 import javax.portlet.ActionResponse;
55 import javax.portlet.PortletConfig;
56 import javax.portlet.RenderRequest;
57 import javax.portlet.RenderResponse;
58
59 import org.apache.struts.action.ActionForm;
60 import org.apache.struts.action.ActionForward;
61 import org.apache.struts.action.ActionMapping;
62
63
69 public class EditItemAction extends PortletAction {
70
71 public void processAction(
72 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
73 ActionRequest actionRequest, ActionResponse actionResponse)
74 throws Exception {
75
76 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
77
78 try {
79 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
80 updateItem(actionRequest);
81 }
82 else if (cmd.equals(Constants.DELETE)) {
83 deleteItem(actionRequest);
84 }
85
86 if (Validator.isNotNull(cmd)) {
87 sendRedirect(actionRequest, actionResponse);
88 }
89 }
90 catch (Exception e) {
91 if (e instanceof NoSuchCategoryException ||
92 e instanceof NoSuchItemException ||
93 e instanceof PrincipalException) {
94
95 SessionErrors.add(actionRequest, e.getClass().getName());
96
97 setForward(actionRequest, "portlet.shopping.error");
98 }
99 else if (e instanceof DuplicateItemSKUException ||
100 e instanceof ItemLargeImageNameException ||
101 e instanceof ItemLargeImageSizeException ||
102 e instanceof ItemMediumImageNameException ||
103 e instanceof ItemMediumImageSizeException ||
104 e instanceof ItemNameException ||
105 e instanceof ItemSKUException ||
106 e instanceof ItemSmallImageNameException ||
107 e instanceof ItemSmallImageSizeException) {
108
109 SessionErrors.add(actionRequest, e.getClass().getName());
110 }
111 else {
112 throw e;
113 }
114 }
115 }
116
117 public ActionForward render(
118 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
119 RenderRequest renderRequest, RenderResponse renderResponse)
120 throws Exception {
121
122 try {
123 ActionUtil.getItem(renderRequest);
124 }
125 catch (Exception e) {
126 if (e instanceof NoSuchItemException ||
127 e instanceof PrincipalException) {
128
129 SessionErrors.add(renderRequest, e.getClass().getName());
130
131 return mapping.findForward("portlet.shopping.error");
132 }
133 else {
134 throw e;
135 }
136 }
137
138 return mapping.findForward(
139 getForward(renderRequest, "portlet.shopping.edit_item"));
140 }
141
142 protected void deleteItem(ActionRequest actionRequest) throws Exception {
143 long itemId = ParamUtil.getLong(actionRequest, "itemId");
144
145 ShoppingItemServiceUtil.deleteItem(itemId);
146 }
147
148 protected void updateItem(ActionRequest actionRequest) throws Exception {
149 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
150 actionRequest);
151
152 long itemId = ParamUtil.getLong(uploadRequest, "itemId");
153
154 long categoryId = ParamUtil.getLong(uploadRequest, "categoryId");
155 String sku = ParamUtil.getString(uploadRequest, "sku");
156 String name = ParamUtil.getString(uploadRequest, "name");
157 String description = ParamUtil.getString(uploadRequest, "description");
158 String properties = ParamUtil.getString(uploadRequest, "properties");
159
160 int fieldsCount = ParamUtil.getInteger(uploadRequest, "fieldsCount", 1);
161
162 List<ShoppingItemField> itemFields = new ArrayList<ShoppingItemField>();
163
164 for (int i = 0; i < fieldsCount; i ++) {
165 String fieldName = ParamUtil.getString(
166 uploadRequest, "fieldName" + i);
167 String fieldValues = ParamUtil.getString(
168 uploadRequest, "fieldValues" + i);
169 String fieldDescription = ParamUtil.getString(
170 uploadRequest, "fieldDescription" + i);
171
172 ShoppingItemField itemField = ShoppingItemFieldUtil.create(0);
173
174 itemField.setName(fieldName);
175 itemField.setValues(fieldValues);
176 itemField.setDescription(fieldDescription);
177
178 itemFields.add(itemField);
179 }
180
181 String fieldsQuantities = ParamUtil.getString(
182 uploadRequest, "fieldsQuantities");
183
184 int pricesCount = ParamUtil.getInteger(uploadRequest, "pricesCount", 1);
185
186 List<ShoppingItemPrice> itemPrices = new ArrayList<ShoppingItemPrice>();
187
188 for (int i = 0; i < pricesCount; i ++) {
189 int minQuantity = ParamUtil.getInteger(
190 uploadRequest, "minQuantity" + i);
191 int maxQuantity = ParamUtil.getInteger(
192 uploadRequest, "maxQuantity" + i);
193 double price = ParamUtil.getDouble(uploadRequest, "price" + i);
194 double discount = ParamUtil.getDouble(
195 uploadRequest, "discount" + i) / 100;
196 boolean taxable = ParamUtil.getBoolean(
197 uploadRequest, "taxable" + i);
198 double shipping = ParamUtil.getDouble(
199 uploadRequest, "shipping" + i);
200 boolean useShippingFormula = ParamUtil.getBoolean(
201 uploadRequest, "useShippingFormula" + i);
202 boolean active = ParamUtil.getBoolean(uploadRequest, "active" + i);
203 int defaultPrice = ParamUtil.getInteger(
204 uploadRequest, "defaultPrice");
205
206 int status = ShoppingItemPriceImpl.STATUS_ACTIVE_DEFAULT;
207
208 if ((defaultPrice != i) && active) {
209 status = ShoppingItemPriceImpl.STATUS_ACTIVE;
210 }
211 else if ((defaultPrice != i) && !active) {
212 status = ShoppingItemPriceImpl.STATUS_INACTIVE;
213 }
214
215 ShoppingItemPrice itemPrice = ShoppingItemPriceUtil.create(0);
216
217 itemPrice.setMinQuantity(minQuantity);
218 itemPrice.setMaxQuantity(maxQuantity);
219 itemPrice.setPrice(price);
220 itemPrice.setDiscount(discount);
221 itemPrice.setTaxable(taxable);
222 itemPrice.setShipping(shipping);
223 itemPrice.setUseShippingFormula(useShippingFormula);
224 itemPrice.setStatus(status);
225
226 itemPrices.add(itemPrice);
227 }
228
229 boolean requiresShipping = ParamUtil.getBoolean(
230 uploadRequest, "requiresShipping");
231 int stockQuantity = ParamUtil.getInteger(
232 uploadRequest, "stockQuantity");
233
234 boolean featured = ParamUtil.getBoolean(uploadRequest, "featured");
235 Boolean sale = null;
236
237 boolean smallImage = ParamUtil.getBoolean(uploadRequest, "smallImage");
238 String smallImageURL = ParamUtil.getString(
239 uploadRequest, "smallImageURL");
240 File smallFile = uploadRequest.getFile("smallFile");
241
242 boolean mediumImage = ParamUtil.getBoolean(
243 uploadRequest, "mediumImage");
244 String mediumImageURL = ParamUtil.getString(
245 uploadRequest, "mediumImageURL");
246 File mediumFile = uploadRequest.getFile("mediumFile");
247
248 boolean largeImage = ParamUtil.getBoolean(uploadRequest, "largeImage");
249 String largeImageURL = ParamUtil.getString(
250 uploadRequest, "largeImageURL");
251 File largeFile = uploadRequest.getFile("largeFile");
252
253 String[] communityPermissions = actionRequest.getParameterValues(
254 "communityPermissions");
255 String[] guestPermissions = actionRequest.getParameterValues(
256 "guestPermissions");
257
258 if (itemId <= 0) {
259
260
262 ShoppingItemServiceUtil.addItem(
263 categoryId, sku, name, description, properties,
264 fieldsQuantities, requiresShipping, stockQuantity, featured,
265 sale, smallImage, smallImageURL, smallFile, mediumImage,
266 mediumImageURL, mediumFile, largeImage, largeImageURL,
267 largeFile, itemFields, itemPrices, communityPermissions,
268 guestPermissions);
269 }
270 else {
271
272
274 ShoppingItemServiceUtil.updateItem(
275 itemId, categoryId, sku, name, description, properties,
276 fieldsQuantities, requiresShipping, stockQuantity, featured,
277 sale, smallImage, smallImageURL, smallFile, mediumImage,
278 mediumImageURL, mediumFile, largeImage, largeImageURL,
279 largeFile, itemFields, itemPrices);
280 }
281 }
282
283 }