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