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